fuel-library/deployment/puppet/rsync/manifests/put.pp

77 lines
1.8 KiB
Puppet

# Definition: rsync::put
#
# put files via rsync
#
# Parameters:
# $source - source to copy from
# $path - path to copy to, defaults to $name
# $user - username on remote system
# $purge - if set, rsync will use '--delete'
# $exlude - string to be excluded
# $keyfile - path to ssh key used to connect to remote host, defaults to /home/${user}/.ssh/id_rsa
# $timeout - timeout in seconds, defaults to 900
#
# Actions:
# put files via rsync
#
# Requires:
# $source must be set
#
# Sample Usage:
#
# rsync::put { '${rsyncDestHost}:/repo/foo':
# user => 'user',
# source => "/repo/foo/",
# } # rsync
#
define rsync::put (
$source,
$path = undef,
$user = undef,
$purge = undef,
$exclude = undef,
$keyfile = undef,
$timeout = '900'
) {
if $keyfile {
$Mykeyfile = $keyfile
} else {
$Mykeyfile = "/home/${user}/.ssh/id_rsa"
}
if $user {
$MyUserOpt = "-e 'ssh -i ${Mykeyfile} -l ${user}' "
$MyUser = "${user}@"
}
if $purge {
$MyPurge = '--delete'
}
if $exclude {
$MyExclude = "--exclude=${exclude}"
}
if $path {
$MyPath = $path
} else {
$MyPath = $name
}
$rsync_options = "-a ${MyPurge} ${MyExclude} ${MyUserOpt}${source} ${MyUser}${MyPath}"
exec { "rsync ${name}":
command => "rsync -q ${rsync_options}",
path => [ '/bin', '/usr/bin' ],
# perform a dry-run to determine if anything needs to be updated
# this ensures that we only actually create a Puppet event if something needs to
# be updated
# TODO - it may make senes to do an actual run here (instead of a dry run)
# and relace the command with an echo statement or something to ensure
# that we only actually run rsync once
onlyif => "test `rsync --dry-run --itemize-changes ${rsync_options} | wc -l` -gt 0",
timeout => $timeout,
}
}