É verdade que não existe um tipo de recurso nativo git
no Puppet, mas eu não chamaria isso de "tarefa incomum".
Há uma variedade de soluções para implementar você mesmo usando define
. Estamos usando uma classe git
que define um tipo de recurso git::repository
da seguinte forma:
class git {
define repository (
$url,
$workdir=undef,
$branch=undef,
$recursive=undef,
$pull=true
) {
if $workdir {
$r_workdir = $workdir
} else {
$r_workdir = $name
}
if $branch {
$branch_arg = "--branch $branch"
}
if $recursive {
$recursive_arg = '--recursive'
}
exec { "clone-gitrepo-$name":
creates => "$r_workdir",
command => "/usr/bin/git clone $branch_arg $recursive_arg $url $r_workdir",
}
# This is here so other things can depend on
# File[/path/to/working/directory].
file { $r_workdir:
ensure => directory,
require => Exec["clone-gitrepo-$name"],
}
if $pull {
exec { "update-gitrepo-$name":
require => Exec["clone-gitrepo-$name"],
cwd => "$r_workdir",
command => '/usr/bin/git pull',
}
}
}
}
Nós o usamos, por exemplo, assim:
class openstack::controller::novnc {
include git
git::repository { '/opt/noVNC':
url => 'git://github.com/cloudbuilders/noVNC.git',
}
}
Executa uma operação git pull
toda vez que o Puppet é executado, a menos que você defina pull
para false
.
Note que não estou fazendo nenhuma reivindicação quanto à correção ou robustez desta solução; é o que estamos usando e funciona para nós, mas pode haver soluções mais completas por aí.
Você pode encontrar nosso código on-line aqui .