treydock
2012-Dec-10 20:35 UTC
[Puppet Users] YAML as File resource template Error , "can''t convert Hash to String"
Using exported resources I''m trying to have a host export a File
resource
generated from a yaml template, to another host. The host that gets the
exported resource is throwing errors like this
err: Failed to apply catalog: Parameter content failed: Munging failed for
value
{"parameters"=>{"macaddress_p2p1"=>"00:15:17:80:5A:3E",
"macaddress_p2p2"=>"00:15:17:80:5A:3F",
"macaddress_eth0"=>"00:1E:C9:55:12:C7",
"macaddress_eth1"=>"00:1E:C9:55:12:C9",
"operatingsystem"=>"CentOS",
"serialnumber"=>"",
"interfaces"=>"eth0,eth1,lo,p2p1,p2p2",
"fqdn"=>"<snip>",
"ipaddress_p2p1"=>"",
"ipaddress_p2p2"=>"", "uuid"=>"",
"ipaddress_eth0"=>"",
"ipaddress_eth1"=>"<snip>",
"productname"=>"",
"operatingsystemrelease"=>"6.3"},
"name"=>"<snip>"} in class content: can''t
convert Hash into String
Here is the parts of the module...
class racktables::export (
$site,
$yamls_dir = ''UNSET''
) inherits racktables::params {
$yamls_dir_REAL = $yamls_dir ? {
''UNSET'' => "${conf_dir}/${site}/yamls",
default => $yamls_dir,
}
@@file { "racktables_host_${::hostname}.yaml":
content => template(''racktables/host.yaml.erb''),
path => "${yamls_dir_REAL}/${::hostname}.yaml",
tag => "host_yaml_for_${site}",
}
}
define racktables::instance (
...
) {
<snip>
File <<| tag == "host_yaml_for_${name}" |>> {
require => File[$yaml_exports_REAL],
}
<snip>
}
Template...
# cat templates/host.yaml.erb
---
name: "<%= scope.lookupvar(''::hostname'') %>"
parameters:
interfaces: "<%= scope.lookupvar(''::interfaces'')
%>"
fqdn: "<%= scope.lookupvar(''::fqdn'') %>"
operatingsystemrelease: "<%=
scope.lookupvar(''::operatingsystemrelease'')
%>"
operatingsystem: "<%=
scope.lookupvar(''::operatingsystem'') %>"
productname: ""
uuid: ""
serialnumber: ""
<%
scope.lookupvar(''::interfaces'').split('','').each
do |interface| -%>
<% unless interface.eql? "lo" -%>
ipaddress_<%= interface %>: "<%=
scope.lookupvar("::ipaddress_#{interface}") %>"
macaddress_<%= interface %>: "<%=
scope.lookupvar("::macaddress_#{interface}") %>"
<% end -%>
<% end -%>
Is there some catch to using a YAML file for the template content? Would
it be better to use Ruby DSL for the racktables::export class and generate
a hash -> sort -> to_yaml and have that be set as the content?
Thanks
- Trey
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/puppet-users/-/qsY2Ixye7BsJ.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to
puppet-users+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.