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,124 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-10-18.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/file_serving/indirection_hooks'
|
9
|
+
|
10
|
+
describe Puppet::FileServing::IndirectionHooks do
|
11
|
+
before do
|
12
|
+
@object = Object.new
|
13
|
+
@object.extend(Puppet::FileServing::IndirectionHooks)
|
14
|
+
|
15
|
+
@request = stub 'request', :key => "http://myhost/blah", :options => {:node => "whatever"}
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "when being used to select termini" do
|
19
|
+
it "should escape the key before parsing" do
|
20
|
+
uri = stub 'uri', :scheme => "puppet", :host => "blah", :path => "/something"
|
21
|
+
URI.expects(:escape).with("http://myhost/blah").returns("escaped_blah")
|
22
|
+
URI.expects(:parse).with("escaped_blah").returns(uri)
|
23
|
+
@object.select_terminus(@request)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should use the URI class to parse the key" do
|
27
|
+
uri = stub 'uri', :scheme => "puppet", :host => "blah", :path => "/something"
|
28
|
+
URI.expects(:parse).with("http://myhost/blah").returns(uri)
|
29
|
+
@object.select_terminus @request
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should choose :rest when the protocol is 'puppet'" do
|
33
|
+
@request.stubs(:key).returns "puppet://host/module/file"
|
34
|
+
@object.select_terminus(@request).should == :rest
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should choose :file_server when the protocol is 'puppetmounts' and the mount name is not 'modules'" do
|
38
|
+
modules = mock 'modules'
|
39
|
+
@object.stubs(:terminus).with(:modules).returns(modules)
|
40
|
+
modules.stubs(:find_module).returns(nil)
|
41
|
+
|
42
|
+
@request.stubs(:key).returns "puppetmounts://host/notmodules/file"
|
43
|
+
|
44
|
+
@object.select_terminus(@request).should == :file_server
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should choose :file_server when no server name is provided, the process name is 'puppet', and the mount name is not 'modules'" do
|
48
|
+
modules = mock 'modules'
|
49
|
+
@object.stubs(:terminus).with(:modules).returns(modules)
|
50
|
+
modules.stubs(:find_module).returns(nil)
|
51
|
+
|
52
|
+
Puppet.settings.expects(:value).with(:name).returns("puppet")
|
53
|
+
@request.stubs(:key).returns "puppet:///notmodules/file"
|
54
|
+
@object.select_terminus(@request).should == :file_server
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should choose :modules if it would normally choose :file_server but the mount name is 'modules'" do
|
58
|
+
@request.stubs(:key).returns "puppetmounts://host/modules/mymod/file"
|
59
|
+
@object.select_terminus(@request).should == :modules
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should choose :modules if it would normally choose :file_server but a module exists with the mount name" do
|
63
|
+
modules = mock 'modules'
|
64
|
+
|
65
|
+
@object.expects(:terminus).with(:modules).returns(modules)
|
66
|
+
modules.expects(:find_module).with("mymod", @request.options[:node]).returns(:thing)
|
67
|
+
|
68
|
+
@request.stubs(:key).returns "puppetmounts://host/mymod/file"
|
69
|
+
@object.select_terminus(@request).should == :modules
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should choose :rest when no server name is provided and the process name is not 'puppet'" do
|
73
|
+
Puppet.settings.expects(:value).with(:name).returns("puppetd")
|
74
|
+
@request.stubs(:key).returns "puppet:///module/file"
|
75
|
+
@object.select_terminus(@request).should == :rest
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should choose :file when the protocol is 'file'" do
|
79
|
+
@request.stubs(:key).returns "file://host/module/file"
|
80
|
+
@object.select_terminus(@request).should == :file
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should choose :file when the URI is a normal path name" do
|
84
|
+
@request.stubs(:key).returns "/module/file"
|
85
|
+
@object.select_terminus(@request).should == :file
|
86
|
+
end
|
87
|
+
|
88
|
+
# This is so that we only choose modules over mounts, not file
|
89
|
+
it "should choose :file when the protocol is 'file' and the fully qualified path starts with '/modules'" do
|
90
|
+
@request.stubs(:key).returns "/module/file"
|
91
|
+
@object.select_terminus(@request).should == :file
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should fail when a protocol other than :puppet, :file, or :puppetmounts is used" do
|
95
|
+
@request.stubs(:key).returns "http:///module/file"
|
96
|
+
proc { @object.select_terminus(@request) }.should raise_error(ArgumentError)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "when looking for a module whose name matches the mount name" do
|
101
|
+
before do
|
102
|
+
@modules = mock 'modules'
|
103
|
+
@object.stubs(:terminus).with(:modules).returns(@modules)
|
104
|
+
|
105
|
+
@request.stubs(:key).returns "puppetmounts://host/mymod/file"
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should use the modules terminus to look up the module" do
|
109
|
+
@modules.expects(:find_module).with("mymod", @request.options[:node])
|
110
|
+
@object.select_terminus @request
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should pass the node name to the modules terminus" do
|
114
|
+
@modules.expects(:find_module).with("mymod", @request.options[:node])
|
115
|
+
@object.select_terminus @request
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should log a deprecation warning if a module is found" do
|
119
|
+
@modules.expects(:find_module).with("mymod", @request.options[:node]).returns(:something)
|
120
|
+
Puppet.expects(:warning)
|
121
|
+
@object.select_terminus @request
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/file_serving/metadata'
|
6
|
+
|
7
|
+
describe Puppet::FileServing::Metadata do
|
8
|
+
it "should should be a subclass of FileBase" do
|
9
|
+
Puppet::FileServing::Metadata.superclass.should equal(Puppet::FileServing::FileBase)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should indirect file_metadata" do
|
13
|
+
Puppet::FileServing::Metadata.indirection.name.should == :file_metadata
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should should include the IndirectionHooks module in its indirection" do
|
17
|
+
Puppet::FileServing::Metadata.indirection.metaclass.included_modules.should include(Puppet::FileServing::IndirectionHooks)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe Puppet::FileServing::Metadata, " when finding the file to use for setting attributes" do
|
22
|
+
before do
|
23
|
+
@metadata = Puppet::FileServing::Metadata.new("my/path")
|
24
|
+
|
25
|
+
@full = "/base/path/my/path"
|
26
|
+
|
27
|
+
@metadata.path = @full
|
28
|
+
|
29
|
+
# Use a link because it's easier to test -- no checksumming
|
30
|
+
@stat = stub "stat", :uid => 10, :gid => 20, :mode => 0755, :ftype => "link"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should accept a base path path to which the file should be relative" do
|
34
|
+
File.expects(:lstat).with(@full).returns @stat
|
35
|
+
File.expects(:readlink).with(@full).returns "/what/ever"
|
36
|
+
@metadata.collect_attributes
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should use the set base path if one is not provided" do
|
40
|
+
File.expects(:lstat).with(@full).returns @stat
|
41
|
+
File.expects(:readlink).with(@full).returns "/what/ever"
|
42
|
+
@metadata.collect_attributes()
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should fail if a base path is neither set nor provided" do
|
46
|
+
proc { @metadata.collect_attributes() }.should raise_error(Errno::ENOENT)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should raise an exception if the file does not exist" do
|
50
|
+
File.expects(:lstat).with(@full).raises(Errno::ENOENT)
|
51
|
+
proc { @metadata.collect_attributes()}.should raise_error(Errno::ENOENT)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe Puppet::FileServing::Metadata, " when collecting attributes" do
|
56
|
+
before do
|
57
|
+
@path = "/my/file"
|
58
|
+
# Use a real file mode, so we can validate the masking is done.
|
59
|
+
@stat = stub 'stat', :uid => 10, :gid => 20, :mode => 33261, :ftype => "file"
|
60
|
+
File.stubs(:lstat).returns(@stat)
|
61
|
+
@checksum = Digest::MD5.hexdigest("some content\n")
|
62
|
+
@metadata = Puppet::FileServing::Metadata.new("file", :path => "/my/file")
|
63
|
+
@metadata.stubs(:md5_file).returns(@checksum)
|
64
|
+
@metadata.collect_attributes
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should be able to produce xmlrpc-style attribute information" do
|
68
|
+
@metadata.should respond_to(:attributes_with_tabs)
|
69
|
+
end
|
70
|
+
|
71
|
+
# LAK:FIXME This should actually change at some point
|
72
|
+
it "should set the owner by id" do
|
73
|
+
@metadata.owner.should be_instance_of(Fixnum)
|
74
|
+
end
|
75
|
+
|
76
|
+
# LAK:FIXME This should actually change at some point
|
77
|
+
it "should set the group by id" do
|
78
|
+
@metadata.group.should be_instance_of(Fixnum)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should set the owner to the file's current owner" do
|
82
|
+
@metadata.owner.should == 10
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should set the group to the file's current group" do
|
86
|
+
@metadata.group.should == 20
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should set the mode to the file's masked mode" do
|
90
|
+
@metadata.mode.should == 0755
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should set the checksum to the file's current checksum" do
|
94
|
+
@metadata.checksum.should == "{md5}" + @checksum
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "when managing files" do
|
98
|
+
it "should default to a checksum of type MD5" do
|
99
|
+
@metadata.checksum.should == "{md5}" + @checksum
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should give a mtime checksum when checksum_type is set" do
|
103
|
+
time = Time.now
|
104
|
+
@metadata.checksum_type = "mtime"
|
105
|
+
@metadata.expects(:mtime_file).returns(@time)
|
106
|
+
@metadata.collect_attributes
|
107
|
+
@metadata.checksum.should == "{mtime}" + @time.to_s
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should produce tab-separated mode, type, owner, group, and checksum for xmlrpc" do
|
111
|
+
@metadata.attributes_with_tabs.should == "#{0755.to_s}\tfile\t10\t20\t{md5}#{@checksum}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "when managing directories" do
|
116
|
+
before do
|
117
|
+
@stat.stubs(:ftype).returns("directory")
|
118
|
+
@time = Time.now
|
119
|
+
@metadata.expects(:ctime_file).returns(@time)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should only use checksums of type 'ctime' for directories" do
|
123
|
+
@metadata.collect_attributes
|
124
|
+
@metadata.checksum.should == "{ctime}" + @time.to_s
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should only use checksums of type 'ctime' for directories even if checksum_type set" do
|
128
|
+
@metadata.checksum_type = "mtime"
|
129
|
+
@metadata.expects(:mtime_file).never
|
130
|
+
@metadata.collect_attributes
|
131
|
+
@metadata.checksum.should == "{ctime}" + @time.to_s
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should produce tab-separated mode, type, owner, group, and checksum for xmlrpc" do
|
135
|
+
@metadata.collect_attributes
|
136
|
+
@metadata.attributes_with_tabs.should == "#{0755.to_s}\tdirectory\t10\t20\t{ctime}#{@time.to_s}"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "when managing links" do
|
141
|
+
before do
|
142
|
+
@stat.stubs(:ftype).returns("link")
|
143
|
+
File.expects(:readlink).with("/my/file").returns("/path/to/link")
|
144
|
+
@metadata.collect_attributes
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should read links instead of returning their checksums" do
|
148
|
+
@metadata.destination.should == "/path/to/link"
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should produce tab-separated mode, type, owner, group, and destination for xmlrpc" do
|
152
|
+
@metadata.attributes_with_tabs.should == "#{0755.to_s}\tlink\t10\t20\t/path/to/link"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
describe Puppet::FileServing::Metadata, " when pointing to a link" do
|
158
|
+
it "should store the destination of the link in :destination if links are :manage" do
|
159
|
+
file = Puppet::FileServing::Metadata.new("mykey", :links => :manage, :path => "/base/path/my/file")
|
160
|
+
|
161
|
+
File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755)
|
162
|
+
File.expects(:readlink).with("/base/path/my/file").returns "/some/other/path"
|
163
|
+
|
164
|
+
file.collect_attributes
|
165
|
+
file.destination.should == "/some/other/path"
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should not collect the checksum" do
|
169
|
+
file = Puppet::FileServing::Metadata.new("my/file", :links => :manage, :path => "/base/path/my/file")
|
170
|
+
|
171
|
+
File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755)
|
172
|
+
File.expects(:readlink).with("/base/path/my/file").returns "/some/other/path"
|
173
|
+
|
174
|
+
file.collect_attributes
|
175
|
+
file.checksum.should be_nil
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe Puppet::FileServing::Metadata, " when converting from yaml" do
|
180
|
+
# LAK:FIXME This isn't in the right place, but we need some kind of
|
181
|
+
# control somewhere that requires that all REST connections only pull
|
182
|
+
# from the file-server, thus guaranteeing they go through our authorization
|
183
|
+
# hook.
|
184
|
+
it "should set the URI scheme to 'puppetmounts'" do
|
185
|
+
pending "We need to figure out where this should be"
|
186
|
+
end
|
187
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
4
|
+
require 'puppet/file_serving/mount'
|
5
|
+
|
6
|
+
module FileServingMountTesting
|
7
|
+
def stub_facter(hostname)
|
8
|
+
Facter.stubs(:value).with("hostname").returns(hostname.sub(/\..+/, ''))
|
9
|
+
Facter.stubs(:value).with("domain").returns(hostname.sub(/^[^.]+\./, ''))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Puppet::FileServing::Mount do
|
14
|
+
it "should provide a method for clearing its cached host information" do
|
15
|
+
Puppet::FileServing::Mount.new("whatever").send(:localmap)
|
16
|
+
Puppet::FileServing::Mount.clear_cache
|
17
|
+
Puppet::FileServing::Mount.send(:class_variable_get, "@@localmap").should be_nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe Puppet::FileServing::Mount, " when initializing" do
|
22
|
+
it "should fail on non-alphanumeric name" do
|
23
|
+
proc { Puppet::FileServing::Mount.new("non alpha") }.should raise_error(ArgumentError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should allow dashes in its name" do
|
27
|
+
Puppet::FileServing::Mount.new("non-alpha").name.should == "non-alpha"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should allow an optional path" do
|
31
|
+
Puppet::FileServing::Mount.new("name", "/").path.should == "/"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe Puppet::FileServing::Mount, " when setting the path" do
|
36
|
+
before do
|
37
|
+
@mount = Puppet::FileServing::Mount.new("test")
|
38
|
+
@dir = "/this/path/does/not/exist"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should fail if the path is not a directory" do
|
42
|
+
FileTest.expects(:directory?).returns(false)
|
43
|
+
proc { @mount.path = @dir }.should raise_error(ArgumentError)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should fail if the path is not readable" do
|
47
|
+
FileTest.expects(:directory?).returns(true)
|
48
|
+
FileTest.expects(:readable?).returns(false)
|
49
|
+
proc { @mount.path = @dir }.should raise_error(ArgumentError)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe Puppet::FileServing::Mount, " when finding files" do
|
54
|
+
include FileServingMountTesting
|
55
|
+
|
56
|
+
before do
|
57
|
+
FileTest.stubs(:directory?).returns(true)
|
58
|
+
FileTest.stubs(:readable?).returns(true)
|
59
|
+
@mount = Puppet::FileServing::Mount.new("test")
|
60
|
+
@host = "host.domain.com"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should fail if the mount path has not been set" do
|
64
|
+
proc { @mount.file_path("/blah") }.should raise_error(ArgumentError)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should replace incidences of %h in the path with the client's short name" do
|
68
|
+
@mount.path = "/dir/%h/yay"
|
69
|
+
@mount.path(@host).should == "/dir/host/yay"
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should replace incidences of %H in the path with the client's fully qualified name" do
|
73
|
+
@mount.path = "/dir/%H/yay"
|
74
|
+
@mount.path(@host).should == "/dir/host.domain.com/yay"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should replace incidences of %d in the path with the client's domain name" do
|
78
|
+
@mount.path = "/dir/%d/yay"
|
79
|
+
@mount.path(@host).should == "/dir/domain.com/yay"
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should perform all necessary replacements" do
|
83
|
+
@mount.path = "/%h/%d/%H"
|
84
|
+
@mount.path(@host).should == "/host/domain.com/host.domain.com"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should perform replacements on the base path" do
|
88
|
+
@mount.path = "/blah/%h"
|
89
|
+
@mount.file_path("/my/stuff", @host).should == "/blah/host/my/stuff"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should not perform replacements on the per-file path" do
|
93
|
+
@mount.path = "/blah"
|
94
|
+
@mount.file_path("/%h/stuff", @host).should == "/blah/%h/stuff"
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should look for files relative to its base directory" do
|
98
|
+
@mount.path = "/blah"
|
99
|
+
@mount.file_path("/my/stuff", @host).should == "/blah/my/stuff"
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should use local host information if no client data is provided" do
|
103
|
+
stub_facter("myhost.mydomain.com")
|
104
|
+
@mount.path = "/%h/%d/%H"
|
105
|
+
@mount.path().should == "/myhost/mydomain.com/myhost.mydomain.com"
|
106
|
+
end
|
107
|
+
|
108
|
+
after do
|
109
|
+
Puppet::FileServing::Mount.clear_cache
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe Puppet::FileServing::Mount, " when providing file paths" do
|
114
|
+
include FileServingMountTesting
|
115
|
+
|
116
|
+
before do
|
117
|
+
FileTest.stubs(:exists?).returns(true)
|
118
|
+
FileTest.stubs(:directory?).returns(true)
|
119
|
+
FileTest.stubs(:readable?).returns(true)
|
120
|
+
@mount = Puppet::FileServing::Mount.new("test", "/mount/%h")
|
121
|
+
stub_facter("myhost.mydomain.com")
|
122
|
+
@host = "host.domain.com"
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should return nil if the file is absent" do
|
126
|
+
FileTest.stubs(:exists?).returns(false)
|
127
|
+
@mount.file("/my/path").should be_nil
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should return the file path if the file is absent" do
|
131
|
+
FileTest.stubs(:exists?).with("/my/path").returns(true)
|
132
|
+
@mount.file("/my/path").should == "/mount/myhost/my/path"
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should treat a nil file name as the path to the mount itself" do
|
136
|
+
FileTest.stubs(:exists?).returns(true)
|
137
|
+
@mount.file(nil).should == "/mount/myhost"
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should use the client host name if provided in the options" do
|
141
|
+
@mount.file("/my/path", :node => @host).should == "/mount/host/my/path"
|
142
|
+
end
|
143
|
+
end
|