[Puppet Users] hash to_yaml in erb template not giving valid yaml

2012-07-05 Thread Martin Willemsma
Hi,

I want to use a file resource to write a facts.yaml file for
Mcollective. For some reason it won't provide a valid yaml format if I
dump my scope to hash and convert to_yaml.

file {
/etc/mcollective/facts.yaml :
owner = root,
group = root,
mode = 400,
loglevel = debug,
#content = inline_template(%= scope.to_hash.reject { 
|k,v| !(
k.is_a?(String)  v.is_a?(String) ) }.to_yaml %),

#content = inline_template(%= { \a\ = 1, \b\= 
2}.to_yaml %),
content =
inline_template(%= facts = {}; 
scope.to_hash.each_pair {|k,v|
facts[k.to_s] = v.to_s unless k.to_s =~
/pkg_|_hours|_seconds|memoryfree|plugin_|config|_timestamp/ };
facts.to_yaml.sort %),
}

After a run the content is indented with 2 spaces and some facts give
me garbage values.  If I verify this on e.g. http://yamllint.com/ I
have a syntax error with the 2 leading spaces.

Snippet from '/etc/mcollective/facts.yaml'

[root~]# cat /etc/mcollective/facts.yaml
  architecture: id001 x86_64
  hardwareisa: x86_64
  hardwaremodel: *id001
  kernelrelease: 2.6.18-274.17.1.el5xen
  clientversion: *id002
  kernelversion: 2.6.18
  lsbdistcodename: Final
  lsbdistdescription: CentOS release 5.8 (Final)
  lsbdistid: CentOS
  lsbdistrelease: 5.8
  lsbmajdistrelease: 5


I did some debugging on the IRB. On the commandline I do get the
expected format. To me it seems the to_yaml is not working for me in
combination with inline template. What is causing the extra leading
spaces?

irb

irb(main):001:0 h = { a = 1 , b = 2 }
= {b=2, a=1}
irb(main):002:0 require yaml
= true
irb(main):003:0 h.to_yaml
= --- \nb: 2\na: 1\n
irb(main):004:0

I see several snippets on the internets to write a facts.yaml file to
be used with Mcollective. None of them work for me.

Puppet version: 2.7.12
OS: Ubuntu 10.04

Any hints on how to fix this issue?

---
kind regards,

Martin Willemsma

-- 
You received this message because you are subscribed to the Google Groups 
Puppet Users group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.



Re: [Puppet Users] hash to_yaml in erb template not giving valid yaml

2012-07-05 Thread Stefan Schulte
On Thu, Jul 05, 2012 at 05:43:10PM +0200, Martin Willemsma wrote:
 Hi,
 
 I want to use a file resource to write a facts.yaml file for
 Mcollective. For some reason it won't provide a valid yaml format if I
 dump my scope to hash and convert to_yaml.
 
   file {
   /etc/mcollective/facts.yaml :
   owner = root,
   group = root,
   mode = 400,
   loglevel = debug,
   #content = inline_template(%= scope.to_hash.reject { 
 |k,v| !(
 k.is_a?(String)  v.is_a?(String) ) }.to_yaml %),
 
   #content = inline_template(%= { \a\ = 1, \b\= 
 2}.to_yaml %),
   content =
   inline_template(%= facts = {}; 
 scope.to_hash.each_pair {|k,v|
 facts[k.to_s] = v.to_s unless k.to_s =~
 /pkg_|_hours|_seconds|memoryfree|plugin_|config|_timestamp/ };
 facts.to_yaml.sort %),
   }
 


The to_yaml output should start with a ---\n line, but if you sort
your list  (BTW: I get an error on ruby 1.9 when I call sort on a
string) you may produce an invalid yaml file if the --- is not on top
anymore.

-Stefan

-- 
You received this message because you are subscribed to the Google Groups 
Puppet Users group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.