[Puppet Users] Re: Issue with puppet file serving api not parsing yaml content correctly
Unfortunately, it does not work. That was the first thing I had tried to try and reproduce the problem in ruby outside a puppet run. Also, here are the ruby util modules for puppet in 0.25.4: /opt/ruby-1.8.6-p287/lib/ruby/site_ruby/1.8/puppet/util autoload autoload.rb backups.rb cacher.rb checksums.rb classgen.rb config_store.rb constant_inflector.rb diff.rb docs.rb errors.rb execution.rb feature.rb file_locking.rb fileparsing.rb filetype.rb graph.rb inifile.rb instance_loader.rb ldap ldap.rb loadedfile.rb logging.rb log_paths.rb log.rb metaid.rb methodhelper.rb metric.rb monkey_patches.rb nagios_maker.rb package.rb pidlock.rb posix.rb provider_features.rb pson.rb queue queue.rb rails rdoc rdoc.rb reference.rb resource_template.rb selinux.rb settings settings.rb storage.rb subclass_loader.rb suidmanager.rb tagging.rb user_attr.rb warnings.rb Also, I did not see anything in the monkey_patches.rb file pertaining to a yaml like patch only rdoc.: module RDoc def self.caller(skip=nil) in_gem_wrapper = false Kernel.caller.reject { |call| in_gem_wrapper ||= call =~ /#{Regexp.escape $0}:\d+:in `load'/ } end end I think at this point we will probably upgrade puppet anyways so I will just add require puppet/util/yaml once we have upgraded. -- Derek On Jul 11, 4:51 pm, Nigel Kersten ni...@puppetlabs.com wrote: On Mon, Jul 11, 2011 at 4:17 PM, Derek Tamsen dtam...@gmail.com wrote: Thanks. Unfortunately, it seems I will need to wait until we upgrade puppet as version 0.25.4 does not seem to have 'puppet/util/zaml'. Then I'm more confused :) does require 'puppet' require 'yaml' just do the right thing? If not, I'd post to the puppet-dev list and see if the more developer-focused crowd can give you a better answer for 0.25.4. -- Derek On Jul 11, 2:56 pm, Nigel Kersten ni...@puppetlabs.com wrote: On Mon, Jul 11, 2011 at 11:36 AM, Derek dtam...@gmail.com wrote: Thanks for everyone's help. I figured out what the issue was over the weekend. It appears that when the ruby script is run in a puppet run, puppet loads the yaml dictionaries specific to puppet. However, when I was testing the script in ruby I was not loading the yaml dictionaries for puppet. This was causing my script to get a generic loaded yaml of #YAML::Object:0x2ada01f7cf00 instead of the correctly loaded yaml #Puppet::FileServing::Metadata:0x2ac7987b9c08. When the dictionaries are loaded for puppet it no longer has an ivars hash with content or metadata. I just needed to do YAML.load(apitruthtag(content)).content instead of YAML.load(apitruthtag(content)).ivars[content]. However, because I am still not loading the dictionary outside of the puppet run my script will not function correctly if just executed in ruby. Does anybody know how to properly load the puppet yaml dictionary outside of a puppet run? You should be able to load it as require 'puppet/util/zaml' and use ZAML instead of YAML. That's the version of YAML we're vendoring to fix a whole list of bugs we ran into. There's more complication going on in: lib/puppet/util/monkey_patches.rb showing how we monkey patch the various yaml methods on objects to actually talk ZAML instead. FYI: The raw yaml data from puppet is: --- !ruby/object:Puppet::FileServing::Content content: | --- role: - base env: - dev expiration: 2011-07-11 18:57:08.413941 +00:00 links: :manage path: /etc/puppet/modules/truth/files/private/domain.inter/server01/ truth_tags.yml stat_method: :lstat -- Derek On Jul 9, 3:03 pm, Ken Barber k...@puppetlabs.com wrote: So ... servermd5 = YAML.load(apitruthtag(metadata)).ivars[checksum] # When executed from a puppet run I tells me that ivars is undefined. What does the output of apitruthtag(metadata) show you between each run in facter, irb and puppet? Can you output each to a file and analyze the difference? irb, ruby, or facter: yaml parsed http response = #YAML::Object:0x2ada01f7cf00 puppet run: yaml parsed http response = #Puppet::FileServing::Metadata: 0x2ac7987b9c08 with error: undefined method `ivars' for #Puppet::FileServing::Metadata: 0x2ac7987152c0 #NoMethodError: undefined method `ivars' for #Puppet::FileServing::Metadata:0x2ac7987152c0 So when you run it with all the Puppet libraries the YAML object is being serialized back into a Ruby object Puppet::FileServing::Metadata ... I'm really curious what the raw YAML output looks like. This should only happen I think if the YAML output has meta information that matches that class type for example: --- !ruby/object:Puppet::FileServing::Metadata {} I get the feeling the YAML you are getting back isn't what you were expecting and
[Puppet Users] Re: Issue with puppet file serving api not parsing yaml content correctly
Thanks for everyone's help. I figured out what the issue was over the weekend. It appears that when the ruby script is run in a puppet run, puppet loads the yaml dictionaries specific to puppet. However, when I was testing the script in ruby I was not loading the yaml dictionaries for puppet. This was causing my script to get a generic loaded yaml of #YAML::Object:0x2ada01f7cf00 instead of the correctly loaded yaml #Puppet::FileServing::Metadata:0x2ac7987b9c08. When the dictionaries are loaded for puppet it no longer has an ivars hash with content or metadata. I just needed to do YAML.load(apitruthtag(content)).content instead of YAML.load(apitruthtag(content)).ivars[content]. However, because I am still not loading the dictionary outside of the puppet run my script will not function correctly if just executed in ruby. Does anybody know how to properly load the puppet yaml dictionary outside of a puppet run? FYI: The raw yaml data from puppet is: --- !ruby/object:Puppet::FileServing::Content content: | --- role: - base env: - dev expiration: 2011-07-11 18:57:08.413941 +00:00 links: :manage path: /etc/puppet/modules/truth/files/private/domain.inter/server01/ truth_tags.yml stat_method: :lstat -- Derek On Jul 9, 3:03 pm, Ken Barber k...@puppetlabs.com wrote: So ... servermd5 = YAML.load(apitruthtag(metadata)).ivars[checksum] # When executed from a puppet run I tells me that ivars is undefined. What does the output of apitruthtag(metadata) show you between each run in facter, irb and puppet? Can you output each to a file and analyze the difference? irb, ruby, or facter: yaml parsed http response = #YAML::Object:0x2ada01f7cf00 puppet run: yaml parsed http response = #Puppet::FileServing::Metadata: 0x2ac7987b9c08 with error: undefined method `ivars' for #Puppet::FileServing::Metadata: 0x2ac7987152c0 #NoMethodError: undefined method `ivars' for #Puppet::FileServing::Metadata:0x2ac7987152c0 So when you run it with all the Puppet libraries the YAML object is being serialized back into a Ruby object Puppet::FileServing::Metadata ... I'm really curious what the raw YAML output looks like. This should only happen I think if the YAML output has meta information that matches that class type for example: --- !ruby/object:Puppet::FileServing::Metadata {} I get the feeling the YAML you are getting back isn't what you were expecting and looking at the contents of the raw output might give a better clue as to why. ken. -- Join us for PuppetConf, September 22nd and 23rd in Portland, OR:http://bit.ly/puppetconfsig; -- 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] Re: Issue with puppet file serving api not parsing yaml content correctly
On Mon, Jul 11, 2011 at 11:36 AM, Derek dtam...@gmail.com wrote: Thanks for everyone's help. I figured out what the issue was over the weekend. It appears that when the ruby script is run in a puppet run, puppet loads the yaml dictionaries specific to puppet. However, when I was testing the script in ruby I was not loading the yaml dictionaries for puppet. This was causing my script to get a generic loaded yaml of #YAML::Object:0x2ada01f7cf00 instead of the correctly loaded yaml #Puppet::FileServing::Metadata:0x2ac7987b9c08. When the dictionaries are loaded for puppet it no longer has an ivars hash with content or metadata. I just needed to do YAML.load(apitruthtag(content)).content instead of YAML.load(apitruthtag(content)).ivars[content]. However, because I am still not loading the dictionary outside of the puppet run my script will not function correctly if just executed in ruby. Does anybody know how to properly load the puppet yaml dictionary outside of a puppet run? You should be able to load it as require 'puppet/util/zaml' and use ZAML instead of YAML. That's the version of YAML we're vendoring to fix a whole list of bugs we ran into. There's more complication going on in: lib/puppet/util/monkey_patches.rb showing how we monkey patch the various yaml methods on objects to actually talk ZAML instead. FYI: The raw yaml data from puppet is: --- !ruby/object:Puppet::FileServing::Content content: | --- role: - base env: - dev expiration: 2011-07-11 18:57:08.413941 +00:00 links: :manage path: /etc/puppet/modules/truth/files/private/domain.inter/server01/ truth_tags.yml stat_method: :lstat -- Derek On Jul 9, 3:03 pm, Ken Barber k...@puppetlabs.com wrote: So ... servermd5 = YAML.load(apitruthtag(metadata)).ivars[checksum] # When executed from a puppet run I tells me that ivars is undefined. What does the output of apitruthtag(metadata) show you between each run in facter, irb and puppet? Can you output each to a file and analyze the difference? irb, ruby, or facter: yaml parsed http response = #YAML::Object:0x2ada01f7cf00 puppet run: yaml parsed http response = #Puppet::FileServing::Metadata: 0x2ac7987b9c08 with error: undefined method `ivars' for #Puppet::FileServing::Metadata: 0x2ac7987152c0 #NoMethodError: undefined method `ivars' for #Puppet::FileServing::Metadata:0x2ac7987152c0 So when you run it with all the Puppet libraries the YAML object is being serialized back into a Ruby object Puppet::FileServing::Metadata ... I'm really curious what the raw YAML output looks like. This should only happen I think if the YAML output has meta information that matches that class type for example: --- !ruby/object:Puppet::FileServing::Metadata {} I get the feeling the YAML you are getting back isn't what you were expecting and looking at the contents of the raw output might give a better clue as to why. ken. -- Join us for PuppetConf, September 22nd and 23rd in Portland, OR: http://bit.ly/puppetconfsig; -- 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. -- Nigel Kersten Product Manager, Puppet Labs Twitter: @nigelkersten *Join us for **PuppetConf *http://www.bit.ly/puppetconfsig September 22nd and 23rd in Portland, Oregon, USA. * * -- 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.
[Puppet Users] Re: Issue with puppet file serving api not parsing yaml content correctly
Thanks. Unfortunately, it seems I will need to wait until we upgrade puppet as version 0.25.4 does not seem to have 'puppet/util/zaml'. -- Derek On Jul 11, 2:56 pm, Nigel Kersten ni...@puppetlabs.com wrote: On Mon, Jul 11, 2011 at 11:36 AM, Derek dtam...@gmail.com wrote: Thanks for everyone's help. I figured out what the issue was over the weekend. It appears that when the ruby script is run in a puppet run, puppet loads the yaml dictionaries specific to puppet. However, when I was testing the script in ruby I was not loading the yaml dictionaries for puppet. This was causing my script to get a generic loaded yaml of #YAML::Object:0x2ada01f7cf00 instead of the correctly loaded yaml #Puppet::FileServing::Metadata:0x2ac7987b9c08. When the dictionaries are loaded for puppet it no longer has an ivars hash with content or metadata. I just needed to do YAML.load(apitruthtag(content)).content instead of YAML.load(apitruthtag(content)).ivars[content]. However, because I am still not loading the dictionary outside of the puppet run my script will not function correctly if just executed in ruby. Does anybody know how to properly load the puppet yaml dictionary outside of a puppet run? You should be able to load it as require 'puppet/util/zaml' and use ZAML instead of YAML. That's the version of YAML we're vendoring to fix a whole list of bugs we ran into. There's more complication going on in: lib/puppet/util/monkey_patches.rb showing how we monkey patch the various yaml methods on objects to actually talk ZAML instead. FYI: The raw yaml data from puppet is: --- !ruby/object:Puppet::FileServing::Content content: | --- role: - base env: - dev expiration: 2011-07-11 18:57:08.413941 +00:00 links: :manage path: /etc/puppet/modules/truth/files/private/domain.inter/server01/ truth_tags.yml stat_method: :lstat -- Derek On Jul 9, 3:03 pm, Ken Barber k...@puppetlabs.com wrote: So ... servermd5 = YAML.load(apitruthtag(metadata)).ivars[checksum] # When executed from a puppet run I tells me that ivars is undefined. What does the output of apitruthtag(metadata) show you between each run in facter, irb and puppet? Can you output each to a file and analyze the difference? irb, ruby, or facter: yaml parsed http response = #YAML::Object:0x2ada01f7cf00 puppet run: yaml parsed http response = #Puppet::FileServing::Metadata: 0x2ac7987b9c08 with error: undefined method `ivars' for #Puppet::FileServing::Metadata: 0x2ac7987152c0 #NoMethodError: undefined method `ivars' for #Puppet::FileServing::Metadata:0x2ac7987152c0 So when you run it with all the Puppet libraries the YAML object is being serialized back into a Ruby object Puppet::FileServing::Metadata ... I'm really curious what the raw YAML output looks like. This should only happen I think if the YAML output has meta information that matches that class type for example: --- !ruby/object:Puppet::FileServing::Metadata {} I get the feeling the YAML you are getting back isn't what you were expecting and looking at the contents of the raw output might give a better clue as to why. ken. -- Join us for PuppetConf, September 22nd and 23rd in Portland, OR: http://bit.ly/puppetconfsig; -- 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. -- Nigel Kersten Product Manager, Puppet Labs Twitter: @nigelkersten *Join us for **PuppetConf *http://www.bit.ly/puppetconfsig September 22nd and 23rd in Portland, Oregon, USA. * * -- 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] Re: Issue with puppet file serving api not parsing yaml content correctly
On Mon, Jul 11, 2011 at 4:17 PM, Derek Tamsen dtam...@gmail.com wrote: Thanks. Unfortunately, it seems I will need to wait until we upgrade puppet as version 0.25.4 does not seem to have 'puppet/util/zaml'. Then I'm more confused :) does require 'puppet' require 'yaml' just do the right thing? If not, I'd post to the puppet-dev list and see if the more developer-focused crowd can give you a better answer for 0.25.4. -- Derek On Jul 11, 2:56 pm, Nigel Kersten ni...@puppetlabs.com wrote: On Mon, Jul 11, 2011 at 11:36 AM, Derek dtam...@gmail.com wrote: Thanks for everyone's help. I figured out what the issue was over the weekend. It appears that when the ruby script is run in a puppet run, puppet loads the yaml dictionaries specific to puppet. However, when I was testing the script in ruby I was not loading the yaml dictionaries for puppet. This was causing my script to get a generic loaded yaml of #YAML::Object:0x2ada01f7cf00 instead of the correctly loaded yaml #Puppet::FileServing::Metadata:0x2ac7987b9c08. When the dictionaries are loaded for puppet it no longer has an ivars hash with content or metadata. I just needed to do YAML.load(apitruthtag(content)).content instead of YAML.load(apitruthtag(content)).ivars[content]. However, because I am still not loading the dictionary outside of the puppet run my script will not function correctly if just executed in ruby. Does anybody know how to properly load the puppet yaml dictionary outside of a puppet run? You should be able to load it as require 'puppet/util/zaml' and use ZAML instead of YAML. That's the version of YAML we're vendoring to fix a whole list of bugs we ran into. There's more complication going on in: lib/puppet/util/monkey_patches.rb showing how we monkey patch the various yaml methods on objects to actually talk ZAML instead. FYI: The raw yaml data from puppet is: --- !ruby/object:Puppet::FileServing::Content content: | --- role: - base env: - dev expiration: 2011-07-11 18:57:08.413941 +00:00 links: :manage path: /etc/puppet/modules/truth/files/private/domain.inter/server01/ truth_tags.yml stat_method: :lstat -- Derek On Jul 9, 3:03 pm, Ken Barber k...@puppetlabs.com wrote: So ... servermd5 = YAML.load(apitruthtag(metadata)).ivars[checksum] # When executed from a puppet run I tells me that ivars is undefined. What does the output of apitruthtag(metadata) show you between each run in facter, irb and puppet? Can you output each to a file and analyze the difference? irb, ruby, or facter: yaml parsed http response = #YAML::Object:0x2ada01f7cf00 puppet run: yaml parsed http response = #Puppet::FileServing::Metadata: 0x2ac7987b9c08 with error: undefined method `ivars' for #Puppet::FileServing::Metadata: 0x2ac7987152c0 #NoMethodError: undefined method `ivars' for #Puppet::FileServing::Metadata:0x2ac7987152c0 So when you run it with all the Puppet libraries the YAML object is being serialized back into a Ruby object Puppet::FileServing::Metadata ... I'm really curious what the raw YAML output looks like. This should only happen I think if the YAML output has meta information that matches that class type for example: --- !ruby/object:Puppet::FileServing::Metadata {} I get the feeling the YAML you are getting back isn't what you were expecting and looking at the contents of the raw output might give a better clue as to why. ken. -- Join us for PuppetConf, September 22nd and 23rd in Portland, OR: http://bit.ly/puppetconfsig; -- 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. -- Nigel Kersten Product Manager, Puppet Labs Twitter: @nigelkersten *Join us for **PuppetConf *http://www.bit.ly/puppetconfsig September 22nd and 23rd in Portland, Oregon, USA. * * -- 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. -- Nigel Kersten Product Manager, Puppet Labs Twitter: @nigelkersten *Join us for **PuppetConf *http://www.bit.ly/puppetconfsig September 22nd and 23rd in Portland, Oregon, USA. * * -- You received this message because you are subscribed to the Google Groups Puppet Users group. To