20e0e07090
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": }
33 lines
927 B
Ruby
33 lines
927 B
Ruby
# 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
|
|
|
|
if resource = findresource(reference.to_s)
|
|
return resource[param] if resource[param]
|
|
end
|
|
|
|
return ''
|
|
end
|