PuppetCamp SEA 1 - Version Control with Puppet

Post on 19-Jun-2015

288 views 6 download

Tags:

description

Choon Ming Goh, System Administrator at OnApp Malaysia, gave a presentation on how OnApp implements version control. Since they have quite a few repositories, this is all puppetised and that is quite a nice way of doing version control.

transcript

Version Control with Puppet

Choon Ming Goh CDN Division

Choonming.goh@onapp.com

About

System Administrator Backend Developer Puppet user Cloud industry Builds CDN software

Why version control?

Versioning

Coordination

Centralised repository

Accountability

Experimentation

What do I use?

Git and Subversion

How do I do that?

Defined Types

define subversion::create($user = false, $group = false) { include subversion::aflexi $user_real = $user ? { false => 0, default => $user } $group_real = $group ? { false => 0, default => $group } Exec { path => "/usr/bin:/bin:/opt/local/bin:/usr/local/bin", } exec { "svnadmin-create-$name": command => "/usr/bin/svnadmin create $name", creates => "$name/db", user => $user_real, group => $group_real, environment => "HOME=''", } }

define git::workdir($repository, $local_container, $local_name = false, $post_checkout_script = undef, $post_update_script = undef, $runas_user = "root", $runas_group = "root", $branch = "master") { $owner_real = $owner ? { false => 0, default => $owner } $group_real = $group ? { false => 0, default => $group } $local_name_real = $local_name ? { false => $name, default => $local_name } exec { "git-clone-$name": command => "git clone --branch '$branch' '$repository' '$local_name_real'", cwd => $local_container, require => [ File["$local_container"], Package["git-core"]], creates => "$local_container/$local_name_real/.git", } exec { "git-pull-$name": command => "git pull", cwd => "$local_container/$local_name_real", require => Exec["git-clone-$name"], } }

What's next?

subversion::create { "/var/lib/svn/$svnrepo": user => "www-data", group => "www-data", }

git::workdir { "mygitrepo": repository => $portal_src, local_container => "/etc/puppet/", local_name => "mygitrepo", branch => $portal_branch, }

Why do I want to puppetize it?

Quick setup for another puppetmaster

Almost not necessary to change manifests manually ever!

Fix what you break policy

Questions?

Contact

Choonming.goh@onapp.com Twitter - @choonming IRC – Freenode #puppet, #myoss, #debian choonming Skype – gchoonming (please identify yourself) Gtalk – choonming2002 (please identify yourself)