Skip to content

Instantly share code, notes, and snippets.

@acidprime
Last active August 29, 2015 14:19
Show Gist options
  • Save acidprime/1d6d0f23c1d52fcc2c35 to your computer and use it in GitHub Desktop.
Save acidprime/1d6d0f23c1d52fcc2c35 to your computer and use it in GitHub Desktop.
Use resource_type to retrieve native ruby objects you can use with to_yaml
#!/opt/puppet/bin/ruby
require 'puppet/face'
require 'yaml'
Puppet.parse_config
resources = Puppet::Face[:resource_type, '0.0.1'].search('.*',{:extra => { 'environment' => 'production' }})
output = Hash.new
resources.each do |resource|
resource.arguments.each do |k,v|
case v.class.to_s
when "Puppet::Parser::AST::String"
result = v.evaluate('subscope')
when "Puppet::Parser::AST::Undef"
# "We don't support undef values..."
next
when "Puppet::Parser::AST::Variable"
result = "%{#{v.to_s[1..-1]}}"
when "Puppet::Parser::AST::ASTHash"
result = v.evaluate('subscope')
break if result.empty?
when "Puppet::Parser::AST::ASTArray"
result = v.evaluate('subscope')
when "Puppet::Parser::AST::Boolean"
result = v.evaluate('subscope')
else
# "We don't support raw puppet code..."
next
end
output["#{resource.name}::#{k.to_s}"] = result
end
end
puts output.to_yaml
@acidprime
Copy link
Author

$foo = generate_hiera_bindings()
file { '/etc/puppetlabs/puppet/hieradata/global.yaml':
  content => inline_template("<%= @foo.to_yaml %>"),
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment