[Puppet Users] Re: Issue with puppet file serving api not parsing yaml content correctly

2011-07-12 Thread Derek Tamsen
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

[Puppet Users] Re: Issue with puppet file serving api not parsing yaml content correctly

2011-07-11 Thread Derek Tamsen
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.