Add getparam function to get defined resource parameters
As far as i know there's no other puppet-dsl-like way to get parameter of
defined resource, so that's why i implemented getparam function, which takes
resource reference and parameter name and returns parameter value.
Here's another example why this function is really useful:
define config($path, $config_param1, $config_param2) { }
define example_resource($config) {
$path = getparam($config, "path")
notice("Path is $path")
}
define example_resource2($example_resource, $config = getparam($example_resource, "config")) {
$config_param1 = getparam($config, "config_param1")
notice("Config parameter is $config_param1")
}
define example_resource3($example_resource, $config = getparam($example_resource, "config")) {
$config_param2 = getparam($config, "config_param2")
notice("Config parameter is $config_param2")
}
class test_getparam {
config { "config_instance":
path => "/some/config/path",
config_param1 => "someconfigtext1",
config_param2 => "someconfigtext2",
}
example_resource { "example_resource_instance":
config => Config["config_instance"]
}
example_resource2 { "example_resource_instance":
example_resource => Example_resource["example_resource_instance"]
}
example_resource3 { "example_resource_instance":
example_resource => Example_resource2["example_resource_instance"]
}
}
class { "test_getparam": }
2013-01-02 13:10:43 +01:00
|
|
|
# Test whether a given class or definition is defined
|
|
|
|
require 'puppet/parser/functions'
|
|
|
|
|
|
|
|
Puppet::Parser::Functions.newfunction(:getparam,
|
|
|
|
:type => :rvalue,
|
|
|
|
:doc => <<-'ENDOFDOC'
|
|
|
|
Takes a resource reference and name of the parameter and
|
|
|
|
returns value of resource's parameter.
|
|
|
|
|
|
|
|
*Examples:*
|
|
|
|
|
|
|
|
define example_resource($param) {
|
|
|
|
}
|
|
|
|
|
|
|
|
example_resource { "example_resource_instance":
|
|
|
|
param => "param_value"
|
|
|
|
}
|
|
|
|
|
|
|
|
getparam(Example_resource["example_resource_instance"], "param")
|
|
|
|
|
|
|
|
Would return: param_value
|
|
|
|
ENDOFDOC
|
|
|
|
) do |vals|
|
|
|
|
reference, param = vals
|
|
|
|
raise(ArgumentError, 'Must specify a reference') unless reference
|
|
|
|
raise(ArgumentError, 'Must specify name of a parameter') unless param and param.instance_of? String
|
|
|
|
|
2013-01-15 03:37:16 +01:00
|
|
|
return '' if param.empty?
|
|
|
|
|
Add getparam function to get defined resource parameters
As far as i know there's no other puppet-dsl-like way to get parameter of
defined resource, so that's why i implemented getparam function, which takes
resource reference and parameter name and returns parameter value.
Here's another example why this function is really useful:
define config($path, $config_param1, $config_param2) { }
define example_resource($config) {
$path = getparam($config, "path")
notice("Path is $path")
}
define example_resource2($example_resource, $config = getparam($example_resource, "config")) {
$config_param1 = getparam($config, "config_param1")
notice("Config parameter is $config_param1")
}
define example_resource3($example_resource, $config = getparam($example_resource, "config")) {
$config_param2 = getparam($config, "config_param2")
notice("Config parameter is $config_param2")
}
class test_getparam {
config { "config_instance":
path => "/some/config/path",
config_param1 => "someconfigtext1",
config_param2 => "someconfigtext2",
}
example_resource { "example_resource_instance":
config => Config["config_instance"]
}
example_resource2 { "example_resource_instance":
example_resource => Example_resource["example_resource_instance"]
}
example_resource3 { "example_resource_instance":
example_resource => Example_resource2["example_resource_instance"]
}
}
class { "test_getparam": }
2013-01-02 13:10:43 +01:00
|
|
|
if resource = findresource(reference.to_s)
|
|
|
|
return resource[param] if resource[param]
|
|
|
|
end
|
|
|
|
|
|
|
|
return ''
|
|
|
|
end
|