On 10/9/2012 6:40 AM, Adrian Webb wrote:
Unfortunately what I need is a little more abstract because I have
rolled my definition into a module that is used by other modules. Below
is my definition (that does not work as intended) right now
define git::repo (
$repo_name = $name,
$user = $git::params::user,
$group = $git::params::group,
$home = $git::params::home,
$source = $git::params::source,
$revision = $git::params::revision,
$base = $git::params::base,
$post_update_commands = $git::params::post_update_commands,
$post_update_template = $git::params::post_update_template,
$update_notify = undef,
) {
$repo_dir = $home ? {
'' => $repo_name,
default => "${home}/${repo_name}",
}
$repo_git_dir = $base ? {
'true' => $repo_dir,
default => "${repo_dir}/.git"
}
$test_diff_cmd = "diff ${repo_git_dir}/_NEW_REVISION
${repo_git_dir}/_LAST_REVISION"
include git
#--
Exec {
path => [ '/bin', '/usr/bin', '/usr/local/bin' ],
cwd => $repo_dir,
user => $user,
}
#-----------------------------------------------------------------------------
if $source and $revision {
$revision_real = $revision
}
else {
$revision_real = undef
}
vcsrepo { $repo_dir:
ensure => $base ? {
'true' => 'base',
default => $source ? {
'' => 'present',
default => 'latest',
},
},
provider => 'git',
owner => $user,
group => $group,
force => true,
source => $source ? {
'' => undef,
default => $source,
},
revision => $revision_real,
require => Class['git'],
}
#---
exec { "${repo_dir}-new-revision":
command => "git rev-parse HEAD > ${repo_git_dir}/_NEW_REVISION",
returns => [ 0, 128 ],
require => Class['git'],
subscribe => Vcsrepo[$repo_dir],
}
exec { "${repo_dir}-update-notify":
command => 'test true',
onlyif => $test_diff_cmd,
notify => $update_notify,
require => Exec["${repo_dir}-new-revision"],
}
exec { "${repo_dir}-last-revision":
command => "git rev-parse HEAD > ${repo_git_dir}/_LAST_REVISION",
returns => [ 0, 128 ],
subscribe => Exec["${repo_dir}-update-notify"],
}
#-----------------------------------------------------------------------------
if $home and $base == 'false' {
exec { "${repo_dir}-receive-deny-current-branch":
command => "git config receive.denyCurrentBranch 'ignore'",
refreshonly => true,
subscribe => Vcsrepo[$repo_dir],
}
}
file { "${repo_dir}-post-update":
path => "${repo_git_dir}/hooks/post-update",
owner => $user,
group => $group,
mode => '0755',
content => template($post_update_template),
subscribe => Vcsrepo[$repo_dir],
}
}
As you can see I use the vcsrepo module to update my repo and then
desire to send a notify up to the caller through the parameters. So my
real problem is how to trigger the conditional exec notify after the
vcsrepo resource pulls in updates. It is very important that this stay
abstract because this is used in multiple modules and in each triggers
different build operations.
Thanks,
Adrian
The vcsrepo module should know when it updates code like a normal
provider. Something like this should work for you.
vcsrepo { '/home/someuser/mycode':
ensure => $mycode::data::ensure,
revision => $mycode::data::version,
source => 'g...@github.com:mycode/mycode.git',
notify => Exec['api bundle install'],
}
exec { 'api bundle install':
command => 'cd ~/mycode ; bundle install\'',
logoutput => on_failure,
notify => Class['apache::service'],
refreshonly => true,
}
Might get ugly with chains of refreshonly Exec statements.
Ramin
--
You received this message because you are subscribed to the Google Groups "Puppet
Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.