The 'ldap' node terminus supports a 'search' method that you can use  
to do something like this already, and I'd prefer any new  
functionality just get added there.

Here's a query that will find all nodes in a give class:

Puppet::Node.search("foo", :class => "puppetserver").each { |node|  
puts node.name }

And here's one that finds all nodes that are Puppet clients:

Puppet::Node.search("foo").each { |node| puts node.name }

The "foo" is currently a stupidity of the search method's API.  I  
expect we'll have to change that, but at this point it requires a key,  
yet keys don't actually make sense for all search methods.

On Sep 19, 2008, at 4:16 PM, Andrew Shafer wrote:

>
> Pulled some puppetrun logic into another class
>
> Not totally happy, but baby step towards putting everything into  
> testable classes
>
> Signed-off-by: Andrew Shafer <[EMAIL PROTECTED]>
> ---
> bin/puppetrun                        |   16 ++++++----------
> lib/puppet/executables/ldap_hosts.rb |   21 +++++++++++++++++++++
> spec/unit/executables/ldap_hosts.rb  |   26 ++++++++++++++++++++++++++
> 3 files changed, 53 insertions(+), 10 deletions(-)
> create mode 100644 lib/puppet/executables/ldap_hosts.rb
> create mode 100644 spec/unit/executables/ldap_hosts.rb
>
> diff --git a/bin/puppetrun b/bin/puppetrun
> index 28f72d9..f101ec5 100755
> --- a/bin/puppetrun
> +++ b/bin/puppetrun
> @@ -245,18 +245,14 @@ end
> # Now parse the config
> Puppet.parse_config
>
> -if Puppet[:node_terminus] == "ldap" and (options[:all] or classes)
> +if Puppet[:node_terminus] == "ldap"
> +    require 'puppet/executables/ldap_nodes'
>     if options[:all]
> -        hosts = Puppet::Node.search("whatever").collect { |node|  
> node.name }
> -        puts "all: %s" % hosts.join(", ")
> +        hosts = Puppet::Executables::LDAPNodes.get_all_hosts
> +    elsif ! classes.empty?
> +        hosts =  
> Puppet::Executables::LDAPNodes.get_hosts_for_classes(classes)
>     else
> -        hosts = []
> -        classes.each do |klass|
> -            list = Puppet::Node.search("whatever", :class =>  
> klass).collect { |node| node.name }
> -            puts "%s: %s" % [klass, list.join(", ")]
> -
> -            hosts += list
> -        end
> +        $stderr.puts "puppetrun with ldap nodes without all or  
> classes"
>     end
> elsif ! classes.empty?
>     $stderr.puts "You must be using LDAP to specify host classes"
> diff --git a/lib/puppet/executables/ldap_hosts.rb b/lib/puppet/ 
> executables/ldap_hosts.rb
> new file mode 100644
> index 0000000..6389c06
> --- /dev/null
> +++ b/lib/puppet/executables/ldap_hosts.rb
> @@ -0,0 +1,21 @@
> +module Puppet
> +    module Executables
> +        class LDAPHosts
> +            def self.get_all_hosts
> +                hosts = Puppet::Node.search("whatever").collect { | 
> node| node.name }
> +                puts "all: %s" % hosts.join(", ")
> +                hosts
> +            end
> +
> +            def self.get_hosts_for_classes(classes)
> +                hosts = []
> +                classes.each do |klass|
> +                    list = Puppet::Node.search("whatever", :class  
> => klass).collect { |node| node.name }
> +                    puts "%s: %s" % [klass, list.join(", ")]
> +                    hosts += list
> +                end
> +                hosts
> +            end
> +        end
> +    end
> +end
> diff --git a/spec/unit/executables/ldap_hosts.rb b/spec/unit/ 
> executables/ldap_hosts.rb
> new file mode 100644
> index 0000000..e125b12
> --- /dev/null
> +++ b/spec/unit/executables/ldap_hosts.rb
> @@ -0,0 +1,26 @@
> +#!/usr/bin/env ruby
> +
> +Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist? 
> (f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/ 
> spec_helper.rb") }
> +
> +require 'puppet/executables/ldap_hosts'
> +
> +
> +ldap_hosts = Puppet::Executables::LDAPHosts
> +
> +classes = ["a", "b", "c"]
> +
> +describe ldap_hosts do
> +    describe "when gettin hosts using LDAP" do
> +            it "get_all_hosts should call  
> Puppet.Node.search(whatever)" do
> +                 
> Puppet::Node.expects(:search).with("whatever").returns([])
> +                ldap_hosts.get_all_hosts
> +            end
> +
> +            it "get_hosts_for_classes should call  
> Puppet::Node.search with a hash for each class" do
> +                classes.each do |klass|
> +                    
> Puppet::Node.expects(:search).with("whatever", :class =>  
> klass).returns([])
> +                end
> +                ldap_hosts.get_hosts_for_classes(classes)
> +            end
> +    end
> +end
> -- 
> 1.5.3.7
>
>
> >


-- 
If a dog jumps onto your lap it is because he is fond of you; but if a
cat does the same thing it is because your lap is warmer.
     -- Alfred North Whitehead
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to