Hi all,
I am trying to understand how self.instances is supposed to work.
I have implemented it as below (which I tried to construct based on examples
I found in puppet's source) :
def self.instances
rabbitmqctl('list_users').split(/\n/)[1..-2].collect do |line|
if line =~ /^(\S+)\s+(\S+)$/
new(:name => $1, :admin => $2)
else
raise Puppet::Error, "Cannot parse invalid user line: #{line}"
end
end
end
By making a single call, I can retrieve all namevars and their properties
(which I return as an array of Provider instances)
When running:
puppet resource rabbitmq_user
I get the following error:
/vagrant/modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb:41:in
`admin': undefined method `[]' for nil:NilClass (NoMethodError)
from
/vagrant/modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb:40:in
`each'
from
/vagrant/modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb:40:in
`admin'
from /vagrant/puppet/lib/puppet/property.rb:246:in `send'
from /vagrant/puppet/lib/puppet/property.rb:246:in `retrieve'
from /vagrant/puppet/lib/puppet/type.rb:710:in `retrieve'
from /vagrant/puppet/lib/puppet/type.rb:704:in `each'
from /vagrant/puppet/lib/puppet/type.rb:704:in `retrieve'
from /vagrant/puppet/lib/puppet/type.rb:718:in `retrieve_resource'
from /vagrant/puppet/lib/puppet/type.rb:1893:in `to_trans'
from /vagrant/puppet/lib/puppet/type.rb:1918:in `to_resource'
from /vagrant/puppet/lib/puppet/indirector/resource/ral.rb:16:in
`search'
from /vagrant/puppet/lib/puppet/indirector/resource/ral.rb:14:in `map'
from /vagrant/puppet/lib/puppet/indirector/resource/ral.rb:14:in
`search'
from /vagrant/puppet/lib/puppet/indirector/indirection.rb:248:in
`search'
from /vagrant/puppet/lib/puppet/application/resource.rb:186:in `main'
from /vagrant/puppet/lib/puppet/application.rb:315:in `run_command'
from /vagrant/puppet/lib/puppet/application.rb:307:in `run'
from /vagrant/puppet/lib/puppet/application.rb:411:in `hook'
from /vagrant/puppet/lib/puppet/application.rb:307:in `run'
from /vagrant/puppet/lib/puppet/application.rb:402:in `exit_on_fail'
from /vagrant/puppet/lib/puppet/application.rb:307:in `run'
from /vagrant/puppet/lib/puppet/util/command_line.rb:62:in `execute'
from /vagrant/puppet/bin/puppet:4
The error is because retrieve is being called on the type (which causes
retrieve to be called for the admin property)
This causes the following code to be invoked:
def admin
#puts resource.inspect
rabbitmqctl('list_users').split(/\n/)[1..-2].each do |line|
return line.match(/^#{resource[:name]}\s+(\S+)$/)[1].to_sym
end
raise 'Admin field is only supported on version 2.4.1'
end
which fails b/c resource is not set
my questions follow:
1. Am I doing something blatantly wrong?
2. Is self.instances just supposed to set parameters and then rely on
calling type.retrieve to fill in its properties?
if this is the case, how am I supposed to set the :name param (or any
other params it may need)
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en.