[Puppet Users] Re: Conditional copy of file

jcbollinger
2012-02-02T14:14:02Z

On Feb 1, 8:21 am, kashif <kashif.a...@gmail.com>
wrote:
> Hi
> It may have been answered earlier but I could not find anywhere. My
> requirement is that I want to copy a file from server to agent in few
> conditions but don''t want to touch file in rest of the condition
>
> class example {
>               case $hostname {
>                         node1 : {$conf_file = ''file1''}
>                         node2:  {$conf_file = ''file2''}
>                         }
>                  file { ''/etc/network/test'':
>                          ensure  => file,
>                          source => "puppet:///modules/example/
> $conf_file",
>                        }
>               }
>
> It is working but I want that  in case none of the above condition is
> true then ''test'' file should not be touched.
> But what is happening here that, if hostname is different from node1
> or 2 then puppet creates a empty test directory in /etc/network/
> folder.
> Any suggestion ?

class example {
  case $hostname {
    node1 : {$conf_file = ''file1''}
    node2:  {$conf_file = ''file2''}
    default: {$conf_file = ''''}
  }

  if $conf_file != '''' {
    file { ''/etc/network/test'':
      ensure  => file,
      source => "puppet:///modules/example/$conf_file",
    }
  }
}

Note that this leaves File[''/etc/network/test''] *unmanaged*
for nodes
other than node1 and node2, which is quite a different thing from
ensuring it absent or empty.  You might want to consider those options
too.

Note also that the above will ensure at every Puppet run that the
contents of /etc/network/test are exactly what the same as those of
the master''s specified file.  If you don''t want to keep the
file
contents synchronized with the master after the file is initially
copied (or created some other way) then add "replace => false" to
the
File resource''s parameters.


John