Puppet: conditional file source

puppet

I would like to use a different squid.conf file depending on a condition. Something like:

    file { '/etc/squid/squid.conf':
    ensure => file,
    if condition = true then
        source => 'puppet:///modules/1/squid.conf_1',
    else
        source => 'puppet:///modules/1/squid.conf_2',
    fi
    }

Is there a way to do this?

Best Answer

You need a selector, which will let you have a conditional inside the resource - or set a variable up outside of it.

Here's the selector:

file { '/etc/squid/squid.conf':
  ensure => file,
  source => $fact ? {
    "foo"   => 'puppet:///modules/1/squid.conf_1',
    "bar"   => 'puppet:///modules/1/squid.conf_2',
    default => 'puppet:///modules/1/squid.conf_default',
  },
}

Or set a variable and use that instead:

if $fact == "foo" {
  $squidconf = 'puppet:///modules/1/squid.conf_1'
} else {
  $squidconf = 'puppet:///modules/1/squid.conf_2'
}

file { '/etc/squid/squid.conf':
  ensure => file,
  source => $squidconf,
}

There are other variations of course, have a look at the language guide linked above and the Learning Puppet tutorial section on variables.