puppet 0.24.6 → 0.24.7
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +115 -0
- data/Rakefile +43 -14
- data/bin/puppetca +6 -5
- data/bin/puppetdoc +109 -15
- data/bin/ralsh +3 -1
- data/conf/redhat/puppet.spec +74 -48
- data/examples/mcx_dock_absent.pp +4 -0
- data/examples/mcx_dock_default.pp +118 -0
- data/examples/mcx_dock_full.pp +125 -0
- data/examples/mcx_dock_invalid.pp +9 -0
- data/examples/mcx_nogroup.pp +118 -0
- data/examples/mcx_notexists_absent.pp +4 -0
- data/ext/emacs/puppet-mode.el +1 -1
- data/lib/puppet.rb +1 -1
- data/lib/puppet/external/nagios/base.rb +114 -71
- data/lib/puppet/feature/base.rb +6 -0
- data/lib/puppet/indirector/yaml.rb +12 -3
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/network/client/master.rb +1 -1
- data/lib/puppet/network/xmlrpc/client.rb +3 -1
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast.rb +15 -0
- data/lib/puppet/parser/ast/astarray.rb +1 -2
- data/lib/puppet/parser/ast/casestatement.rb +2 -0
- data/lib/puppet/parser/ast/collection.rb +2 -0
- data/lib/puppet/parser/ast/comparison_operator.rb +4 -0
- data/lib/puppet/parser/ast/definition.rb +2 -0
- data/lib/puppet/parser/ast/else.rb +3 -0
- data/lib/puppet/parser/ast/function.rb +19 -12
- data/lib/puppet/parser/ast/hostclass.rb +9 -1
- data/lib/puppet/parser/ast/ifstatement.rb +3 -0
- data/lib/puppet/parser/ast/node.rb +3 -0
- data/lib/puppet/parser/ast/resource.rb +3 -0
- data/lib/puppet/parser/ast/resource_defaults.rb +2 -0
- data/lib/puppet/parser/ast/resource_override.rb +3 -0
- data/lib/puppet/parser/ast/vardef.rb +3 -0
- data/lib/puppet/parser/functions.rb +14 -0
- data/lib/puppet/parser/functions/inline_template.rb +21 -0
- data/lib/puppet/parser/functions/template.rb +3 -2
- data/lib/puppet/parser/lexer.rb +56 -7
- data/lib/puppet/parser/parser.rb +114 -98
- data/lib/puppet/parser/parser_support.rb +24 -4
- data/lib/puppet/parser/resource/reference.rb +4 -3
- data/lib/puppet/parser/templatewrapper.rb +30 -22
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/list.rb +7 -2
- data/lib/puppet/property/ordered_list.rb +22 -0
- data/lib/puppet/provider/augeas/augeas.rb +189 -0
- data/lib/puppet/provider/computer/computer.rb +22 -0
- data/lib/puppet/provider/confine.rb +4 -1
- data/lib/puppet/provider/confine/variable.rb +13 -2
- data/lib/puppet/provider/confine_collection.rb +4 -1
- data/lib/puppet/provider/confiner.rb +1 -1
- data/lib/puppet/provider/group/directoryservice.rb +6 -3
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- data/lib/puppet/provider/group/ldap.rb +11 -9
- data/lib/puppet/provider/group/netinfo.rb +8 -4
- data/lib/puppet/provider/group/pw.rb +5 -1
- data/lib/puppet/provider/host/netinfo.rb +5 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +315 -0
- data/lib/puppet/provider/mcx/mcxcontent.rb +201 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +210 -107
- data/lib/puppet/provider/nameservice/netinfo.rb +7 -2
- data/lib/puppet/provider/package/appdmg.rb +0 -3
- data/lib/puppet/provider/package/apt.rb +6 -0
- data/lib/puppet/provider/package/rpm.rb +2 -0
- data/lib/puppet/provider/package/yum.rb +5 -1
- data/lib/puppet/provider/package/yumhelper.py +9 -0
- data/lib/puppet/provider/service/base.rb +9 -6
- data/lib/puppet/provider/service/daemontools.rb +25 -15
- data/lib/puppet/provider/service/debian.rb +6 -2
- data/lib/puppet/provider/service/freebsd.rb +5 -2
- data/lib/puppet/provider/service/gentoo.rb +6 -3
- data/lib/puppet/provider/service/init.rb +31 -21
- data/lib/puppet/provider/service/launchd.rb +195 -0
- data/lib/puppet/provider/service/redhat.rb +5 -2
- data/lib/puppet/provider/service/runit.rb +30 -20
- data/lib/puppet/provider/service/smf.rb +7 -4
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +21 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/netinfo.rb +9 -3
- data/lib/puppet/provider/user/user_role_add.rb +43 -6
- data/lib/puppet/provider/zfs/solaris.rb +45 -0
- data/lib/puppet/provider/zone/solaris.rb +8 -4
- data/lib/puppet/provider/zpool/solaris.rb +116 -0
- data/lib/puppet/rails/database/003_add_environment_to_host.rb +9 -0
- data/lib/puppet/rails/database/schema.rb +1 -0
- data/lib/puppet/rails/host.rb +4 -0
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reports/tagmail.rb +15 -6
- data/lib/puppet/transaction/change.rb +3 -5
- data/lib/puppet/transportable.rb +1 -0
- data/lib/puppet/type/augeas.rb +155 -0
- data/lib/puppet/type/computer.rb +62 -0
- data/lib/puppet/type/exec.rb +2 -1
- data/lib/puppet/type/file.rb +1 -1
- data/lib/puppet/type/file/ensure.rb +8 -5
- data/lib/puppet/type/file/mode.rb +0 -14
- data/lib/puppet/type/file/owner.rb +32 -64
- data/lib/puppet/type/file/selcontext.rb +3 -8
- data/lib/puppet/type/group.rb +27 -45
- data/lib/puppet/type/k5login.rb +1 -1
- data/lib/puppet/type/macauthorization.rb +141 -0
- data/lib/puppet/type/mcx.rb +115 -0
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/nagios_hostdependency.rb +3 -0
- data/lib/puppet/type/ssh_authorized_key.rb +16 -0
- data/lib/puppet/type/tidy.rb +43 -14
- data/lib/puppet/type/user.rb +25 -1
- data/lib/puppet/type/zfs.rb +51 -0
- data/lib/puppet/type/zone.rb +8 -0
- data/lib/puppet/type/zpool.rb +93 -0
- data/lib/puppet/util.rb +17 -38
- data/lib/puppet/util/file_locking.rb +44 -0
- data/lib/puppet/util/filetype.rb +3 -3
- data/lib/puppet/util/log.rb +1 -16
- data/lib/puppet/util/metric.rb +0 -5
- data/lib/puppet/util/rdoc.rb +85 -0
- data/lib/puppet/util/rdoc/code_objects.rb +219 -0
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +829 -0
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1051 -0
- data/lib/puppet/util/rdoc/parser.rb +437 -0
- data/lib/puppet/util/selinux.rb +135 -63
- data/lib/puppet/util/settings.rb +136 -126
- data/lib/puppet/util/storage.rb +4 -2
- data/spec/Rakefile +91 -0
- data/spec/integration/checksum.rb +47 -0
- data/spec/integration/defaults.rb +47 -0
- data/spec/integration/file_serving/configuration.rb +43 -0
- data/spec/integration/file_serving/content.rb +18 -0
- data/spec/integration/file_serving/metadata.rb +18 -0
- data/spec/integration/indirector/direct_file_server.rb +80 -0
- data/spec/integration/indirector/file_content/file_server.rb +18 -0
- data/spec/integration/indirector/file_metadata/file_server.rb +18 -0
- data/spec/integration/indirector/module_files.rb +57 -0
- data/spec/integration/indirector/node/ldap.rb +15 -0
- data/spec/integration/indirector/rest.rb +464 -0
- data/spec/integration/network/server/mongrel.rb +48 -0
- data/spec/integration/network/server/webrick.rb +48 -0
- data/spec/integration/node.rb +93 -0
- data/spec/integration/node/catalog.rb +54 -0
- data/spec/integration/node/facts.rb +45 -0
- data/spec/integration/provider/package.rb +26 -0
- data/spec/integration/provider/service/init.rb +32 -0
- data/spec/integration/reference/providers.rb +17 -0
- data/spec/integration/reports.rb +14 -0
- data/spec/integration/transaction/report.rb +26 -0
- data/spec/integration/type/package.rb +22 -0
- data/spec/integration/util/file_locking.rb +36 -0
- data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +46 -0
- data/spec/monkey_patches/alias_should_to_must.rb +5 -0
- data/spec/shared_behaviours/file_server_terminus.rb +42 -0
- data/spec/shared_behaviours/file_serving.rb +64 -0
- data/spec/shared_behaviours/memory_terminus.rb +32 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +36 -0
- data/spec/unit/executables/client/certhandler.rb +122 -0
- data/spec/unit/file_serving/configuration.rb +224 -0
- data/spec/unit/file_serving/configuration/parser.rb +135 -0
- data/spec/unit/file_serving/content.rb +71 -0
- data/spec/unit/file_serving/file_base.rb +124 -0
- data/spec/unit/file_serving/fileset.rb +239 -0
- data/spec/unit/file_serving/indirection_hooks.rb +124 -0
- data/spec/unit/file_serving/metadata.rb +187 -0
- data/spec/unit/file_serving/mount.rb +143 -0
- data/spec/unit/file_serving/terminus_helper.rb +76 -0
- data/spec/unit/indirector.rb +152 -0
- data/spec/unit/indirector/catalog/compiler.rb +156 -0
- data/spec/unit/indirector/catalog/yaml.rb +25 -0
- data/spec/unit/indirector/checksum/file.rb +139 -0
- data/spec/unit/indirector/code.rb +33 -0
- data/spec/unit/indirector/direct_file_server.rb +89 -0
- data/spec/unit/indirector/envelope.rb +47 -0
- data/spec/unit/indirector/exec.rb +51 -0
- data/spec/unit/indirector/facts/facter.rb +76 -0
- data/spec/unit/indirector/facts/yaml.rb +26 -0
- data/spec/unit/indirector/file.rb +154 -0
- data/spec/unit/indirector/file_content/file.rb +18 -0
- data/spec/unit/indirector/file_content/file_server.rb +18 -0
- data/spec/unit/indirector/file_content/modules.rb +18 -0
- data/spec/unit/indirector/file_content/rest.rb +11 -0
- data/spec/unit/indirector/file_metadata/file.rb +52 -0
- data/spec/unit/indirector/file_metadata/file_server.rb +18 -0
- data/spec/unit/indirector/file_metadata/modules.rb +42 -0
- data/spec/unit/indirector/file_metadata/rest.rb +9 -0
- data/spec/unit/indirector/file_server.rb +184 -0
- data/spec/unit/indirector/indirection.rb +731 -0
- data/spec/unit/indirector/ldap.rb +143 -0
- data/spec/unit/indirector/memory.rb +29 -0
- data/spec/unit/indirector/module_files.rb +259 -0
- data/spec/unit/indirector/node/exec.rb +69 -0
- data/spec/unit/indirector/node/ldap.rb +424 -0
- data/spec/unit/indirector/node/memory.rb +19 -0
- data/spec/unit/indirector/node/plain.rb +19 -0
- data/spec/unit/indirector/node/rest.rb +13 -0
- data/spec/unit/indirector/node/yaml.rb +25 -0
- data/spec/unit/indirector/plain.rb +29 -0
- data/spec/unit/indirector/report/processor.rb +81 -0
- data/spec/unit/indirector/request.rb +87 -0
- data/spec/unit/indirector/rest.rb +372 -0
- data/spec/unit/indirector/ssl_rsa/file.rb +116 -0
- data/spec/unit/indirector/terminus.rb +245 -0
- data/spec/unit/indirector/yaml.rb +145 -0
- data/spec/unit/module.rb +247 -0
- data/spec/unit/network/client.rb +45 -0
- data/spec/unit/network/client/master.rb +442 -0
- data/spec/unit/network/handler/fileserver.rb +179 -0
- data/spec/unit/network/http.rb +35 -0
- data/spec/unit/network/http/mongrel.rb +117 -0
- data/spec/unit/network/http/mongrel/rest.rb +377 -0
- data/spec/unit/network/http/mongrel/xmlrpc.rb +0 -0
- data/spec/unit/network/http/webrick.rb +127 -0
- data/spec/unit/network/http/webrick/rest.rb +323 -0
- data/spec/unit/network/http/webrick/xmlrpc.rb +0 -0
- data/spec/unit/network/http_pool.rb +238 -0
- data/spec/unit/network/server.rb +316 -0
- data/spec/unit/network/xmlrpc/client.rb +13 -0
- data/spec/unit/node.rb +167 -0
- data/spec/unit/node/catalog.rb +864 -0
- data/spec/unit/node/environment.rb +37 -0
- data/spec/unit/node/facts.rb +44 -0
- data/spec/unit/other/checksum.rb +92 -0
- data/spec/unit/other/pgraph.rb +210 -0
- data/spec/unit/other/transaction.rb +33 -0
- data/spec/unit/other/transbucket.rb +172 -0
- data/spec/unit/other/transobject.rb +92 -0
- data/spec/unit/parameter.rb +24 -0
- data/spec/unit/parser/ast.rb +37 -0
- data/spec/unit/parser/ast/arithmetic_operator.rb +73 -0
- data/spec/unit/parser/ast/astarray.rb +66 -0
- data/spec/unit/parser/ast/boolean_operator.rb +53 -0
- data/spec/unit/parser/ast/collexpr.rb +92 -0
- data/spec/unit/parser/ast/comparison_operator.rb +92 -0
- data/spec/unit/parser/ast/definition.rb +195 -0
- data/spec/unit/parser/ast/function.rb +77 -0
- data/spec/unit/parser/ast/hostclass.rb +148 -0
- data/spec/unit/parser/ast/minus.rb +36 -0
- data/spec/unit/parser/ast/node.rb +125 -0
- data/spec/unit/parser/ast/nop.rb +20 -0
- data/spec/unit/parser/ast/not.rb +30 -0
- data/spec/unit/parser/ast/resource_override.rb +51 -0
- data/spec/unit/parser/ast/resource_reference.rb +63 -0
- data/spec/unit/parser/ast/vardef.rb +47 -0
- data/spec/unit/parser/collector.rb +426 -0
- data/spec/unit/parser/compiler.rb +561 -0
- data/spec/unit/parser/functions.rb +83 -0
- data/spec/unit/parser/functions/inline_template.rb +59 -0
- data/spec/unit/parser/functions/template.rb +62 -0
- data/spec/unit/parser/interpreter.rb +138 -0
- data/spec/unit/parser/lexer.rb +646 -0
- data/spec/unit/parser/parser.rb +228 -0
- data/spec/unit/parser/resource.rb +336 -0
- data/spec/unit/parser/resource/reference.rb +95 -0
- data/spec/unit/parser/scope.rb +87 -0
- data/spec/unit/parser/templatewrapper.rb +129 -0
- data/spec/unit/property.rb +35 -0
- data/spec/unit/property/keyvalue.rb +168 -0
- data/spec/unit/property/list.rb +156 -0
- data/spec/unit/property/ordered_list.rb +64 -0
- data/spec/unit/provider/augeas/augeas.rb +238 -0
- data/spec/unit/provider/confine.rb +78 -0
- data/spec/unit/provider/confine/exists.rb +81 -0
- data/spec/unit/provider/confine/false.rb +53 -0
- data/spec/unit/provider/confine/feature.rb +60 -0
- data/spec/unit/provider/confine/true.rb +53 -0
- data/spec/unit/provider/confine/variable.rb +107 -0
- data/spec/unit/provider/confine_collection.rb +134 -0
- data/spec/unit/provider/confiner.rb +63 -0
- data/spec/unit/provider/group/groupadd.rb +31 -0
- data/spec/unit/provider/group/ldap.rb +105 -0
- data/spec/unit/provider/ldap.rb +248 -0
- data/spec/unit/provider/macauthorization.rb +147 -0
- data/spec/unit/provider/mcx/mcxcontent.rb +175 -0
- data/spec/unit/provider/mount.rb +130 -0
- data/spec/unit/provider/mount/parsed.rb +185 -0
- data/spec/unit/provider/package/apt.rb +138 -0
- data/spec/unit/provider/package/dpkg.rb +163 -0
- data/spec/unit/provider/package/gem.rb +87 -0
- data/spec/unit/provider/package/hpux.rb +52 -0
- data/spec/unit/provider/selboolean.rb +37 -0
- data/spec/unit/provider/selmodule-example.pp +0 -0
- data/spec/unit/provider/selmodule.rb +66 -0
- data/spec/unit/provider/service/daemontools.rb +124 -0
- data/spec/unit/provider/service/launchd.rb +134 -0
- data/spec/unit/provider/service/runit.rb +117 -0
- data/spec/unit/provider/ssh_authorized_key/parsed.rb +102 -0
- data/spec/unit/provider/user/hpux.rb +25 -0
- data/spec/unit/provider/user/ldap.rb +279 -0
- data/spec/unit/provider/user/user_role_add.rb +249 -0
- data/spec/unit/provider/user/useradd.rb +115 -0
- data/spec/unit/provider/zfs/solaris.rb +87 -0
- data/spec/unit/provider/zone/solaris.rb +42 -0
- data/spec/unit/provider/zpool/solaris.rb +179 -0
- data/spec/unit/rails.rb +125 -0
- data/spec/unit/relationship.rb +149 -0
- data/spec/unit/reports.rb +61 -0
- data/spec/unit/resource_reference.rb +73 -0
- data/spec/unit/simple_graph.rb +280 -0
- data/spec/unit/transaction/change.rb +187 -0
- data/spec/unit/transaction/event.rb +25 -0
- data/spec/unit/transaction/report.rb +40 -0
- data/spec/unit/type.rb +64 -0
- data/spec/unit/type/augeas.rb +113 -0
- data/spec/unit/type/computer.rb +82 -0
- data/spec/unit/type/exec.rb +91 -0
- data/spec/unit/type/file.rb +155 -0
- data/spec/unit/type/file/ensure.rb +21 -0
- data/spec/unit/type/file/group.rb +118 -0
- data/spec/unit/type/file/owner.rb +132 -0
- data/spec/unit/type/file/selinux.rb +82 -0
- data/spec/unit/type/group.rb +40 -0
- data/spec/unit/type/macauthorization.rb +78 -0
- data/spec/unit/type/mcx.rb +108 -0
- data/spec/unit/type/mount.rb +219 -0
- data/spec/unit/type/nagios.rb +63 -0
- data/spec/unit/type/noop_metaparam.rb +38 -0
- data/spec/unit/type/package.rb +246 -0
- data/spec/unit/type/resources.rb +27 -0
- data/spec/unit/type/schedule.rb +339 -0
- data/spec/unit/type/selboolean.rb +47 -0
- data/spec/unit/type/selmodule.rb +18 -0
- data/spec/unit/type/service.rb +254 -0
- data/spec/unit/type/ssh_authorized_key.rb +106 -0
- data/spec/unit/type/tidy.rb +68 -0
- data/spec/unit/type/user.rb +260 -0
- data/spec/unit/type/zfs.rb +45 -0
- data/spec/unit/type/zone.rb +20 -0
- data/spec/unit/type/zpool.rb +110 -0
- data/spec/unit/util/checksums.rb +99 -0
- data/spec/unit/util/constant_inflector.rb +70 -0
- data/spec/unit/util/file_locking.rb +115 -0
- data/spec/unit/util/ldap/connection.rb +169 -0
- data/spec/unit/util/ldap/generator.rb +54 -0
- data/spec/unit/util/ldap/manager.rb +654 -0
- data/spec/unit/util/loadedfile.rb +65 -0
- data/spec/unit/util/log.rb +107 -0
- data/spec/unit/util/metric.rb +95 -0
- data/spec/unit/util/nagios_maker.rb +128 -0
- data/spec/unit/util/posix.rb +256 -0
- data/spec/unit/util/resource_template.rb +58 -0
- data/spec/unit/util/selinux.rb +219 -0
- data/spec/unit/util/settings.rb +847 -0
- data/spec/unit/util/storage.rb +248 -0
- data/spec/unit/util/tagging.rb +92 -0
- data/spec/unit/util/uri_helper.rb +41 -0
- data/spec/unit/util/user_attr.rb +47 -0
- data/spec/unit/util/warnings.rb +35 -0
- data/test/certmgr/support.rb +0 -6
- data/test/data/providers/ssh_authorized_key/parsed/authorized_keys +1 -0
- data/test/data/snippets/multilinecomments.pp +6 -0
- data/test/data/snippets/multipleclass.pp +9 -0
- data/test/language/functions.rb +11 -1
- data/test/language/snippets.rb +16 -0
- data/test/lib/puppettest/runnable_test.rb +1 -1
- data/test/network/handler/fileserver.rb +5 -0
- data/test/other/report.rb +0 -4
- data/test/ral/type/resources.rb +2 -19
- data/test/util/settings.rb +4 -4
- data/test/util/storage.rb +0 -24
- data/test/util/utiltest.rb +0 -33
- metadata +319 -26
- data/conf/debian/README.source +0 -2
- data/conf/debian/TODO.Debian +0 -1
- data/conf/debian/changelog +0 -257
- data/conf/debian/compat +0 -1
- data/conf/debian/control +0 -45
- data/conf/debian/copyright +0 -17
- data/conf/debian/docs +0 -1
- data/conf/debian/fileserver.conf +0 -12
- data/conf/debian/puppet.NEWS +0 -63
- data/conf/debian/puppet.conf +0 -8
- data/conf/debian/puppet.dirs +0 -7
- data/conf/debian/puppet.files +0 -6
- data/conf/debian/puppet.init +0 -64
- data/conf/debian/puppet.logrotate +0 -11
- data/conf/debian/puppet.postinst +0 -9
- data/conf/debian/puppet.postrm +0 -21
- data/conf/debian/puppet.preinst +0 -25
- data/conf/debian/puppetmaster.files +0 -4
- data/conf/debian/puppetmaster.init +0 -58
- data/conf/debian/rules +0 -115
- data/conf/debian/watch +0 -2
- data/lib/puppet/type/nagios_hostgroupescalation.rb +0 -3
@@ -0,0 +1,424 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/indirector/node/ldap'
|
6
|
+
|
7
|
+
describe Puppet::Node::Ldap do
|
8
|
+
before do
|
9
|
+
Puppet::Node::Facts.stubs(:terminus_class).returns :yaml
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "when searching for a single node" do
|
13
|
+
before :each do
|
14
|
+
@searcher = Puppet::Node::Ldap.new
|
15
|
+
|
16
|
+
@name = "mynode.domain.com"
|
17
|
+
@node = stub 'node', :name => @name, :name= => nil
|
18
|
+
@node.stub_everything
|
19
|
+
|
20
|
+
Puppet::Node.stubs(:new).returns(@node)
|
21
|
+
|
22
|
+
@request = stub 'request', :key => @name
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should convert the hostname into a search filter" do
|
26
|
+
entry = stub 'entry', :dn => 'cn=mynode.domain.com,ou=hosts,dc=madstop,dc=com', :vals => %w{}, :to_hash => {}
|
27
|
+
@searcher.expects(:ldapsearch).with("(&(objectclass=puppetClient)(cn=#{@name}))").yields entry
|
28
|
+
@searcher.name2hash(@name)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should convert any found entry into a hash" do
|
32
|
+
entry = stub 'entry', :dn => 'cn=mynode.domain.com,ou=hosts,dc=madstop,dc=com', :vals => %w{}, :to_hash => {}
|
33
|
+
@searcher.expects(:ldapsearch).with("(&(objectclass=puppetClient)(cn=#{@name}))").yields entry
|
34
|
+
@searcher.expects(:entry2hash).with(entry).returns "myhash"
|
35
|
+
@searcher.name2hash(@name).should == "myhash"
|
36
|
+
end
|
37
|
+
|
38
|
+
# This heavily tests our entry2hash method, so we don't have to stub out the stupid entry information any more.
|
39
|
+
describe "when an ldap entry is found" do
|
40
|
+
before do
|
41
|
+
@entry = stub 'entry', :dn => 'cn=mynode.domain.com,ou=hosts,dc=madstop,dc=com', :vals => %w{}, :to_hash => {}
|
42
|
+
@searcher.stubs(:ldapsearch).yields @entry
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should convert the entry to a hash" do
|
46
|
+
@searcher.entry2hash(@entry).should be_instance_of(Hash)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should add the entry's common name to the hash" do
|
50
|
+
@searcher.entry2hash(@entry)[:name].should == "mynode.domain.com"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should add all of the entry's classes to the hash" do
|
54
|
+
@entry.stubs(:vals).with("puppetclass").returns %w{one two}
|
55
|
+
@searcher.entry2hash(@entry)[:classes].should == %w{one two}
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should deduplicate class values" do
|
59
|
+
@entry.stubs(:to_hash).returns({})
|
60
|
+
@searcher.stubs(:class_attributes).returns(%w{one two})
|
61
|
+
@entry.stubs(:vals).with("one").returns(%w{a b})
|
62
|
+
@entry.stubs(:vals).with("two").returns(%w{b c})
|
63
|
+
@searcher.entry2hash(@entry)[:classes].should == %w{a b c}
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should add the entry's environment to the hash" do
|
67
|
+
@entry.stubs(:to_hash).returns("environment" => %w{production})
|
68
|
+
@searcher.entry2hash(@entry)[:environment].should == "production"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should add all stacked parameters as parameters in the hash" do
|
72
|
+
@entry.stubs(:vals).with("puppetvar").returns(%w{one=two three=four})
|
73
|
+
result = @searcher.entry2hash(@entry)
|
74
|
+
result[:parameters]["one"].should == "two"
|
75
|
+
result[:parameters]["three"].should == "four"
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should not add the stacked parameter as a normal parameter" do
|
79
|
+
@entry.stubs(:vals).with("puppetvar").returns(%w{one=two three=four})
|
80
|
+
@entry.stubs(:to_hash).returns("puppetvar" => %w{one=two three=four})
|
81
|
+
@searcher.entry2hash(@entry)[:parameters]["puppetvar"].should be_nil
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should add all other attributes as parameters in the hash" do
|
85
|
+
@entry.stubs(:to_hash).returns("foo" => %w{one two})
|
86
|
+
@searcher.entry2hash(@entry)[:parameters]["foo"].should == %w{one two}
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should return single-value parameters as strings, not arrays" do
|
90
|
+
@entry.stubs(:to_hash).returns("foo" => %w{one})
|
91
|
+
@searcher.entry2hash(@entry)[:parameters]["foo"].should == "one"
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should add the parent's name if present" do
|
95
|
+
@entry.stubs(:vals).with("parentnode").returns(%w{foo})
|
96
|
+
@searcher.entry2hash(@entry)[:parent].should == "foo"
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should fail if more than one parent is specified" do
|
100
|
+
@entry.stubs(:vals).with("parentnode").returns(%w{foo})
|
101
|
+
@searcher.entry2hash(@entry)[:parent].should == "foo"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should search first for the provided key" do
|
106
|
+
@searcher.expects(:name2hash).with("mynode.domain.com").returns({})
|
107
|
+
@searcher.find(@request)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should search for the short version of the provided key if the key looks like a hostname and no results are found for the key itself" do
|
111
|
+
@searcher.expects(:name2hash).with("mynode.domain.com").returns(nil)
|
112
|
+
@searcher.expects(:name2hash).with("mynode").returns({})
|
113
|
+
@searcher.find(@request)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should search for default information if no information can be found for the key" do
|
117
|
+
@searcher.expects(:name2hash).with("mynode.domain.com").returns(nil)
|
118
|
+
@searcher.expects(:name2hash).with("mynode").returns(nil)
|
119
|
+
@searcher.expects(:name2hash).with("default").returns({})
|
120
|
+
@searcher.find(@request)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should return nil if no results are found in ldap" do
|
124
|
+
@searcher.stubs(:name2hash).returns nil
|
125
|
+
@searcher.find(@request).should be_nil
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should return a node object if results are found in ldap" do
|
129
|
+
@searcher.stubs(:name2hash).returns({})
|
130
|
+
@searcher.find(@request).should equal(@node)
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "and node information is found in LDAP" do
|
134
|
+
before do
|
135
|
+
@result = {}
|
136
|
+
@searcher.stubs(:name2hash).returns @result
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should create the node with the correct name, even if it was found by a different name" do
|
140
|
+
@searcher.expects(:name2hash).with("mynode.domain.com").returns nil
|
141
|
+
@searcher.expects(:name2hash).with("mynode").returns @result
|
142
|
+
|
143
|
+
Puppet::Node.expects(:new).with("mynode.domain.com").returns @node
|
144
|
+
@searcher.find(@request)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should add any classes from ldap" do
|
148
|
+
@result[:classes] = %w[a b c d]
|
149
|
+
@node.expects(:classes=).with(%w{a b c d})
|
150
|
+
@searcher.find(@request)
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should add all entry attributes as node parameters" do
|
154
|
+
@result[:parameters] = {"one" => "two", "three" => "four"}
|
155
|
+
@node.expects(:parameters=).with("one" => "two", "three" => "four")
|
156
|
+
@searcher.find(@request)
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should set the node's environment to the environment of the results" do
|
160
|
+
@result[:environment] = "test"
|
161
|
+
@node.expects(:environment=).with("test")
|
162
|
+
@searcher.find(@request)
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should retain false parameter values" do
|
166
|
+
@result[:parameters] = {}
|
167
|
+
@result[:parameters]["one"] = false
|
168
|
+
@node.expects(:parameters=).with("one" => false)
|
169
|
+
@searcher.find(@request)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should merge the node's facts after the parameters from ldap are assigned" do
|
173
|
+
# Make sure we've got data to start with, so the parameters are actually set.
|
174
|
+
@result[:parameters] = {}
|
175
|
+
@result[:parameters]["one"] = "yay"
|
176
|
+
|
177
|
+
# A hackish way to enforce order.
|
178
|
+
set = false
|
179
|
+
@node.expects(:parameters=).with { |*args| set = true }
|
180
|
+
@node.expects(:fact_merge).with { |*args| raise "Facts were merged before parameters were set" unless set; true }
|
181
|
+
|
182
|
+
@searcher.find(@request)
|
183
|
+
end
|
184
|
+
|
185
|
+
describe "and a parent node is specified" do
|
186
|
+
before do
|
187
|
+
@entry = {:classes => [], :parameters => {}}
|
188
|
+
@parent = {:classes => [], :parameters => {}}
|
189
|
+
@parent_parent = {:classes => [], :parameters => {}}
|
190
|
+
|
191
|
+
@searcher.stubs(:name2hash).with(@name).returns(@entry)
|
192
|
+
@searcher.stubs(:name2hash).with('parent').returns(@parent)
|
193
|
+
@searcher.stubs(:name2hash).with('parent_parent').returns(@parent_parent)
|
194
|
+
|
195
|
+
@searcher.stubs(:parent_attribute).returns(:parent)
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should search for the parent node" do
|
199
|
+
@entry[:parent] = "parent"
|
200
|
+
|
201
|
+
@searcher.expects(:name2hash).with(@name).returns @entry
|
202
|
+
@searcher.expects(:name2hash).with('parent').returns @parent
|
203
|
+
|
204
|
+
@searcher.find(@request)
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should fail if the parent cannot be found" do
|
208
|
+
@entry[:parent] = "parent"
|
209
|
+
|
210
|
+
@searcher.expects(:name2hash).with('parent').returns nil
|
211
|
+
|
212
|
+
proc { @searcher.find(@request) }.should raise_error(Puppet::Error)
|
213
|
+
end
|
214
|
+
|
215
|
+
it "should add any parent classes to the node's classes" do
|
216
|
+
@entry[:parent] = "parent"
|
217
|
+
@entry[:classes] = %w{a b}
|
218
|
+
|
219
|
+
@parent[:classes] = %w{c d}
|
220
|
+
|
221
|
+
@node.expects(:classes=).with(%w{a b c d})
|
222
|
+
@searcher.find(@request)
|
223
|
+
end
|
224
|
+
|
225
|
+
it "should add any parent parameters to the node's parameters" do
|
226
|
+
@entry[:parent] = "parent"
|
227
|
+
@entry[:parameters]["one"] = "two"
|
228
|
+
|
229
|
+
@parent[:parameters]["three"] = "four"
|
230
|
+
|
231
|
+
@node.expects(:parameters=).with("one" => "two", "three" => "four")
|
232
|
+
@searcher.find(@request)
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should prefer node parameters over parent parameters" do
|
236
|
+
@entry[:parent] = "parent"
|
237
|
+
@entry[:parameters]["one"] = "two"
|
238
|
+
|
239
|
+
@parent[:parameters]["one"] = "three"
|
240
|
+
|
241
|
+
@node.expects(:parameters=).with("one" => "two")
|
242
|
+
@searcher.find(@request)
|
243
|
+
end
|
244
|
+
|
245
|
+
it "should use the parent's environment if the node has none" do
|
246
|
+
@entry[:parent] = "parent"
|
247
|
+
|
248
|
+
@parent[:environment] = "parent"
|
249
|
+
|
250
|
+
@node.stubs(:parameters=)
|
251
|
+
@node.expects(:environment=).with("parent")
|
252
|
+
@searcher.find(@request)
|
253
|
+
end
|
254
|
+
|
255
|
+
it "should prefer the node's environment to the parent's" do
|
256
|
+
@entry[:parent] = "parent"
|
257
|
+
@entry[:environment] = "child"
|
258
|
+
|
259
|
+
@parent[:environment] = "parent"
|
260
|
+
|
261
|
+
@node.stubs(:parameters=)
|
262
|
+
@node.expects(:environment=).with("child")
|
263
|
+
@searcher.find(@request)
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should recursively look up parent information" do
|
267
|
+
@entry[:parent] = "parent"
|
268
|
+
@entry[:parameters]["one"] = "two"
|
269
|
+
|
270
|
+
@parent[:parent] = "parent_parent"
|
271
|
+
@parent[:parameters]["three"] = "four"
|
272
|
+
|
273
|
+
@parent_parent[:parameters]["five"] = "six"
|
274
|
+
|
275
|
+
@node.expects(:parameters=).with("one" => "two", "three" => "four", "five" => "six")
|
276
|
+
@searcher.find(@request)
|
277
|
+
end
|
278
|
+
|
279
|
+
it "should not allow loops in parent declarations" do
|
280
|
+
@entry[:parent] = "parent"
|
281
|
+
@parent[:parent] = @name
|
282
|
+
proc { @searcher.find(@request) }.should raise_error(ArgumentError)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
describe "when searching for multiple nodes" do
|
289
|
+
before :each do
|
290
|
+
@searcher = Puppet::Node::Ldap.new
|
291
|
+
@options = {}
|
292
|
+
@request = stub 'request', :key => "foo", :options => @options
|
293
|
+
|
294
|
+
Puppet::Node::Facts.stubs(:terminus_class).returns :yaml
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should find all nodes if no arguments are provided" do
|
298
|
+
@searcher.expects(:ldapsearch).with("(objectclass=puppetClient)")
|
299
|
+
# LAK:NOTE The search method requires an essentially bogus key. It's
|
300
|
+
# an API problem that I don't really know how to fix.
|
301
|
+
@searcher.search @request
|
302
|
+
end
|
303
|
+
|
304
|
+
describe "and a class is specified" do
|
305
|
+
it "should find all nodes that are members of that class" do
|
306
|
+
@searcher.expects(:ldapsearch).with("(&(objectclass=puppetClient)(puppetclass=one))")
|
307
|
+
|
308
|
+
@options[:class] = "one"
|
309
|
+
@searcher.search @request
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
describe "multiple classes are specified" do
|
314
|
+
it "should find all nodes that are members of all classes" do
|
315
|
+
@searcher.expects(:ldapsearch).with("(&(objectclass=puppetClient)(puppetclass=one)(puppetclass=two))")
|
316
|
+
@options[:class] = %w{one two}
|
317
|
+
@searcher.search @request
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
it "should process each found entry" do
|
322
|
+
# .yields can't be used to yield multiple values :/
|
323
|
+
@searcher.expects(:ldapsearch).yields("one")
|
324
|
+
@searcher.expects(:entry2hash).with("one").returns(:name => "foo")
|
325
|
+
@searcher.search @request
|
326
|
+
end
|
327
|
+
|
328
|
+
it "should return a node for each processed entry with the name from the entry" do
|
329
|
+
@searcher.expects(:ldapsearch).yields("whatever")
|
330
|
+
@searcher.expects(:entry2hash).with("whatever").returns(:name => "foo")
|
331
|
+
result = @searcher.search(@request)
|
332
|
+
result[0].should be_instance_of(Puppet::Node)
|
333
|
+
result[0].name.should == "foo"
|
334
|
+
end
|
335
|
+
|
336
|
+
it "should merge each node's facts" do
|
337
|
+
node = mock 'node'
|
338
|
+
Puppet::Node.expects(:new).with("foo").returns node
|
339
|
+
node.expects(:fact_merge)
|
340
|
+
@searcher.stubs(:ldapsearch).yields("one")
|
341
|
+
@searcher.stubs(:entry2hash).with("one").returns(:name => "foo")
|
342
|
+
@searcher.search(@request)
|
343
|
+
end
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
describe Puppet::Node::Ldap, " when developing the search query" do
|
348
|
+
before do
|
349
|
+
@searcher = Puppet::Node::Ldap.new
|
350
|
+
end
|
351
|
+
|
352
|
+
it "should return the value of the :ldapclassattrs split on commas as the class attributes" do
|
353
|
+
Puppet.stubs(:[]).with(:ldapclassattrs).returns("one,two")
|
354
|
+
@searcher.class_attributes.should == %w{one two}
|
355
|
+
end
|
356
|
+
|
357
|
+
it "should return nil as the parent attribute if the :ldapparentattr is set to an empty string" do
|
358
|
+
Puppet.stubs(:[]).with(:ldapparentattr).returns("")
|
359
|
+
@searcher.parent_attribute.should be_nil
|
360
|
+
end
|
361
|
+
|
362
|
+
it "should return the value of the :ldapparentattr as the parent attribute" do
|
363
|
+
Puppet.stubs(:[]).with(:ldapparentattr).returns("pere")
|
364
|
+
@searcher.parent_attribute.should == "pere"
|
365
|
+
end
|
366
|
+
|
367
|
+
it "should use the value of the :ldapstring as the search filter" do
|
368
|
+
Puppet.stubs(:[]).with(:ldapstring).returns("mystring")
|
369
|
+
@searcher.search_filter("testing").should == "mystring"
|
370
|
+
end
|
371
|
+
|
372
|
+
it "should replace '%s' with the node name in the search filter if it is present" do
|
373
|
+
Puppet.stubs(:[]).with(:ldapstring).returns("my%sstring")
|
374
|
+
@searcher.search_filter("testing").should == "mytestingstring"
|
375
|
+
end
|
376
|
+
|
377
|
+
it "should not modify the global :ldapstring when replacing '%s' in the search filter" do
|
378
|
+
filter = mock 'filter'
|
379
|
+
filter.expects(:include?).with("%s").returns(true)
|
380
|
+
filter.expects(:gsub).with("%s", "testing").returns("mynewstring")
|
381
|
+
Puppet.stubs(:[]).with(:ldapstring).returns(filter)
|
382
|
+
@searcher.search_filter("testing").should == "mynewstring"
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
describe Puppet::Node::Ldap, " when deciding attributes to search for" do
|
387
|
+
before do
|
388
|
+
@searcher = Puppet::Node::Ldap.new
|
389
|
+
end
|
390
|
+
|
391
|
+
it "should use 'nil' if the :ldapattrs setting is 'all'" do
|
392
|
+
Puppet.stubs(:[]).with(:ldapattrs).returns("all")
|
393
|
+
@searcher.search_attributes.should be_nil
|
394
|
+
end
|
395
|
+
|
396
|
+
it "should split the value of :ldapattrs on commas and use the result as the attribute list" do
|
397
|
+
Puppet.stubs(:[]).with(:ldapattrs).returns("one,two")
|
398
|
+
@searcher.stubs(:class_attributes).returns([])
|
399
|
+
@searcher.stubs(:parent_attribute).returns(nil)
|
400
|
+
@searcher.search_attributes.should == %w{one two}
|
401
|
+
end
|
402
|
+
|
403
|
+
it "should add the class attributes to the search attributes if not returning all attributes" do
|
404
|
+
Puppet.stubs(:[]).with(:ldapattrs).returns("one,two")
|
405
|
+
@searcher.stubs(:class_attributes).returns(%w{three four})
|
406
|
+
@searcher.stubs(:parent_attribute).returns(nil)
|
407
|
+
# Sort them so i don't have to care about return order
|
408
|
+
@searcher.search_attributes.sort.should == %w{one two three four}.sort
|
409
|
+
end
|
410
|
+
|
411
|
+
it "should add the parent attribute to the search attributes if not returning all attributes" do
|
412
|
+
Puppet.stubs(:[]).with(:ldapattrs).returns("one,two")
|
413
|
+
@searcher.stubs(:class_attributes).returns([])
|
414
|
+
@searcher.stubs(:parent_attribute).returns("parent")
|
415
|
+
@searcher.search_attributes.sort.should == %w{one two parent}.sort
|
416
|
+
end
|
417
|
+
|
418
|
+
it "should not add nil parent attributes to the search attributes" do
|
419
|
+
Puppet.stubs(:[]).with(:ldapattrs).returns("one,two")
|
420
|
+
@searcher.stubs(:class_attributes).returns([])
|
421
|
+
@searcher.stubs(:parent_attribute).returns(nil)
|
422
|
+
@searcher.search_attributes.should == %w{one two}
|
423
|
+
end
|
424
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/indirector/node/memory'
|
6
|
+
|
7
|
+
require 'shared_behaviours/memory_terminus'
|
8
|
+
|
9
|
+
describe Puppet::Node::Memory do
|
10
|
+
before do
|
11
|
+
@name = "me"
|
12
|
+
@searcher = Puppet::Node::Memory.new
|
13
|
+
@instance = stub 'instance', :name => @name
|
14
|
+
|
15
|
+
@request = stub 'request', :key => @name, :instance => @instance
|
16
|
+
end
|
17
|
+
|
18
|
+
it_should_behave_like "A Memory Terminus"
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/indirector/node/plain'
|
6
|
+
|
7
|
+
describe Puppet::Node::Plain do
|
8
|
+
before do
|
9
|
+
@searcher = Puppet::Node::Plain.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should call node_merge() on the returned node" do
|
13
|
+
node = mock 'node'
|
14
|
+
Puppet::Node.expects(:new).with("mynode").returns(node)
|
15
|
+
node.expects(:fact_merge)
|
16
|
+
request = stub 'request', :key => "mynode"
|
17
|
+
@searcher.find(request)
|
18
|
+
end
|
19
|
+
end
|