Puppet: Test if Resource is defined, or create it
Solution 1:
Do you mean "test if a resource is already defined"? If you define a resource (ie, file {}
, etc) Puppet will create what you're describing if doesn't already exist (assuming you pass ensure => present
, of course).
To check if a resource is already defined in the catalog or not:
mark-draytons-macbook:~ mark$ cat test.pp
file { "/tmp/foo": ensure => present }
if defined(File["/tmp/foo"]) {
alert("/tmp/foo is defined")
} else {
alert("/tmp/foo is not defined")
}
if defined(File["/tmp/bar"]) {
alert("/tmp/bar is defined")
} else {
alert("/tmp/bar is not defined")
}
mark-draytons-macbook:~ mark$ puppet test.pp
alert: Scope(Class[main]): /tmp/foo is defined
alert: Scope(Class[main]): /tmp/bar is not defined
notice: //File[/tmp/foo]/ensure: created
Note: defined()
is dependent on parse order.
Solution 2:
The better way of doing this is by making use of ensure_resource function from puppetlabs stdlib
It takes a resource type, title, and a list of attributes that describe a resource as parameters.
say you have test case to only create the resource if it does not already exist-
ensure_resource('package', 'test-pkg', {'ensure' => 'present'})
Solution 3:
Or....
unless File["${local_container}"] {
file{ "${local_container}":
ensure => directory,
}
}
And do keep an eye on those quotes and curly braces....