Kyle Decot
Kyle Decot

Reputation: 20815

Checking for custom file using puppet

Part of my puppet manifest checks for the existence of a custom sshd_config. If one is found, I use that. If it's not then I use my default. I'm just wondering if there is a more "puppet" way of doing this

if file("/etc/puppetlabs/puppet/files/${::fqdn}/etc/ssh/sshd_config", '/dev/null') != '' {
  $sshd_config_source = "puppet:///private/etc/ssh/sshd_config"
} else {
  $sshd_config_source = "puppet:///public/etc/ssh/sshd_config"
}

file { '/etc/ssh/sshd_config':
  ensure => 'present',
  mode   => '600',
  source => $sshd_config_source,
  notify => Service['sshd'],
}

This code works but it's a little odd as file I have to give it the full path on the puppet master but when assigning $sshd_config_source I have to use the puppet fileserver path (puppet:///private/etc...).

Is there a better way of doing this?

Upvotes: 0

Views: 65

Answers (1)

Felix Frank
Felix Frank

Reputation: 8223

It's a little known feature of the file type that you can supply multiple source values.

From the docs:

Multiple source values can be specified as an array, and Puppet will use the first source that exists. This can be used to serve different files to different system types:

file { "/etc/nfs.conf":
  source => [
    "puppet:///modules/nfs/conf.$host",
    "puppet:///modules/nfs/conf.$operatingsystem",
    "puppet:///modules/nfs/conf"
  ]
}

So you should just specify both the specific and the generic file URL, in that order, and Puppet will do the right thing for you.

Upvotes: 1

Related Questions