On Thu, Feb 26, 2015 at 11:36 AM, Greg Sarjeant <[email protected]> wrote:
> Hi, Nan. > > If you're using directory environments, then you can do this in a couple > of ways in PE 3.7. > > First, The Node Classifier API exposes this information. You can use the > puppetclassify <https://github.com/puppetlabs/puppet-classify> gem to > retrieve this information from the NC API. You can install the > puppetclassify gem on your PE master with the vendored gem executable: > > /opt/puppet/bin/gem install puppetclassify > > Once that's installed, you can do something like this to fetch all of the > classes in the development environment (replacing the dummy FQDN of the > puppet master, of course). > > #!/opt/puppet/bin/ruby > > require 'puppetclassify' > > rest_api_url = 'https://PUPPET.MASTER.FQDN:4433/classifier-api' > > cert_dir = '/opt/puppet/share/puppet-dashboard/certs' > cert_name = 'pe-internal-dashboard' > auth_info = { > 'ca_certificate_path' => "#{cert_dir}/ca_cert.pem", > 'certificate_path' => "#{cert_dir}/#{cert_name}.cert.pem", > 'private_key_path' => "#{cert_dir}/#{cert_name}.private_key.pem" > } > > puppetclassify = PuppetClassify.new(rest_api_url, auth_info) > > environment = 'development' > puts puppetclassify.classes.get_environment_classes(environment) > > > This would run on the PE Master, and use the internal console certs for > authentication. Here is the PE 3.7 NC REST API documentation > <https://docs.puppetlabs.com/pe/latest/nc_index.html> for reference. > > > If you would like to continue using your current approach, then the search > method of Puppet::Face[:resource_type, :current] will do a regular > expression match. The 'find' method will instead return the first resource > type with the specified name, which is why find('*') is returning no > results. The search method accepts an optional hash through which you can > specify the environment, and returns an array of Puppet::Resource::Type > objects, which you can render as PSON and then parse to return a hash that > you can work with. Here's a sample that does this in my PE 3.7.1 vagrant > environment (I've created a 'dev' directory environment and installed the > puppetlabs/ntp module there): > > #!/opt/puppet/bin/ruby > > require 'puppet/face' > require 'json' > > Puppet.parse_config > > resources = Puppet::Face[:resource_type, :current].search('ntp', {:extra > => { 'environment' => 'dev' }}) > > resources.each do |resource| > puts JSON.parse(resource.render('pson')) > end > > This works great. Diving a bit deeper, I'm curious what exactly process the :extra option, because it's not obvious looking at the indirector code or the puppet face for resource_type. Thanks for both solutions. Nan -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CACqVBqAn1t31%3DRHgE_Z0p98fai2MLE_5EerJy28WCsoXhchgrQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
