Puppet: System Administration Automated

Support

Manage a Subversion Working Copy

More details to come. For now, the recipe:

#
# Example usage: (https://reductivelabs.com/svn/vault into /var/svn/vault.cache)
#   svnworkdir { vault:
#       repository => "https://reductivelabs.com/svn/vault",
#       local_container => "/var/svn",
#       local_name => "vault.cache"
#       svn_username => "puppet",
#       svn_password => "mypassword"
#   }
#
# Note, make sure you manage file["$local_container"] somewhere else, as it's required.

define svnworkdir($repository, $local_container, $local_name = false, $svn_username = false, $svn_password = false)
{
  $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 { path => "/usr/bin:/bin:/opt/local/bin:/usr/local/bin" }
  $retrieve_command = $svn_username ? {
    false => "svn checkout --non-interactive '$repository' '$local_name_real'",
    default => "svn checkout --non-interactive --username='$svn_username' --password='$svn_password' '$repository' '$local_name_real'"
  }
  exec { "svn-co-$name":
    command => $retrieve_command,
    cwd => $local_container,
    require => File["$local_container"],
    creates => "$local_container/$local_name_real/.svn"
  }
  exec { "svn-up-$name":
    command => "svn update --non-interactive --username='$svn_username' --password='$svn_password' '$local_name_real'",
    cwd => $local_container,
    require => Exec["svn-co-$name"],
    onlyif => "svn status -u --non-interactive --username='$svn_username' --password='$svn_password' '$local_name_real' | grep '\*'"
  }
}