Defined Type: rsync::put

Defined in:
manifests/put.pp

Overview

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 (or array) to be excluded
$include       - string (or array) to be included
$exclude_first - if 'true' then first exclude and then include; the other way around if 'false'
$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

Parameters:

  • source (Any)
  • path (Any) (defaults to: undef)
  • user (Any) (defaults to: undef)
  • purge (Any) (defaults to: undef)
  • exclude (Any) (defaults to: undef)
  • include (Any) (defaults to: undef)
  • exclude_first (Any) (defaults to: true)
  • keyfile (Any) (defaults to: undef)
  • timeout (Any) (defaults to: '900')
  • options (Any) (defaults to: '-a')


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'manifests/put.pp', line 29

define rsync::put (
  $source,
  $path          = undef,
  $user          = undef,
  $purge         = undef,
  $exclude       = undef,
  $include       = undef,
  $exclude_first = true,
  $keyfile       = undef,
  $timeout       = '900',
  $options       = '-a'
) {

  if $keyfile {
    $mykeyfile = $keyfile
  } else {
    $mykeyfile = "/home/${user}/.ssh/id_rsa"
  }

  if $user {
    $myuseropt = "-e 'ssh -i ${mykeyfile} -l ${user}'"
    $myuser = "${user}@"
  } else {
    $myuseropt = undef
    $myuser = undef
  }

  if $purge {
    $mypurge = '--delete'
  } else {
    $mypurge = undef
  }

  if $exclude {
    $myexclude = join(prefix(flatten([$exclude]), '--exclude='), ' ')
  } else {
    $myexclude = undef
  }

  if $include {
    $myinclude = join(prefix(flatten([$include]), '--include='), ' ')
  } else {
    $myinclude = undef
  }

  if $include or $exclude {
    if $exclude_first {
      $excludeandinclude = join(delete_undef_values([$myexclude, $myinclude]), ' ')
    } else {
      $excludeandinclude = join(delete_undef_values([$myinclude, $myexclude]), ' ')
    }
  } else {
    $excludeandinclude = undef
  }

  if $path {
    $mypath = $path
  } else {
    $mypath = $name
  }

  $rsync_options = join(
    delete_undef_values([$options, $mypurge, $excludeandinclude, $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,
  }
}