puppet 7.9.0-x86-mingw32 → 7.12.1-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +12 -12
- data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
- data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
- data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
- data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
- data/{ext → examples}/nagios/check_puppet.rb +2 -2
- data/ext/README.md +13 -0
- data/lib/puppet/application/agent.rb +4 -0
- data/lib/puppet/application/apply.rb +20 -2
- data/lib/puppet/application/resource.rb +15 -13
- data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
- data/lib/puppet/configurer.rb +236 -58
- data/lib/puppet/confine/variable.rb +1 -1
- data/lib/puppet/defaults.rb +66 -29
- data/lib/puppet/environments.rb +66 -26
- data/lib/puppet/facter_impl.rb +96 -0
- data/lib/puppet/file_serving/configuration/parser.rb +2 -0
- data/lib/puppet/file_serving/configuration.rb +2 -0
- data/lib/puppet/file_serving/mount/file.rb +4 -4
- data/lib/puppet/file_serving/mount/scripts.rb +24 -0
- data/lib/puppet/file_system/file_impl.rb +3 -1
- data/lib/puppet/file_system.rb +2 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/find_template.rb +2 -2
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/redirector.rb +5 -0
- data/lib/puppet/http/service/compiler.rb +6 -1
- data/lib/puppet/indirector/catalog/compiler.rb +24 -6
- data/lib/puppet/indirector/catalog/rest.rb +1 -0
- data/lib/puppet/indirector/facts/facter.rb +6 -6
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/terminus.rb +4 -0
- data/lib/puppet/module/plan.rb +0 -1
- data/lib/puppet/module/task.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +8 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/node/environment.rb +10 -11
- data/lib/puppet/pal/pal_impl.rb +1 -1
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +8 -7
- data/lib/puppet/parser/templatewrapper.rb +1 -0
- data/lib/puppet/pops/evaluator/closure.rb +7 -5
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
- data/lib/puppet/pops/model/ast.rb +1 -0
- data/lib/puppet/pops/model/factory.rb +14 -13
- data/lib/puppet/pops/parser/egrammar.ra +2 -2
- data/lib/puppet/pops/parser/eparser.rb +752 -753
- data/lib/puppet/pops/parser/lexer2.rb +69 -68
- data/lib/puppet/pops/parser/slurp_support.rb +1 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
- data/lib/puppet/pops/types/type_formatter.rb +7 -6
- data/lib/puppet/pops/types/types.rb +1 -1
- data/lib/puppet/provider/aix_object.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- data/lib/puppet/provider/package/pkg.rb +19 -2
- data/lib/puppet/provider/package/puppet_gem.rb +1 -1
- data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/init.rb +5 -5
- data/lib/puppet/provider/service/launchd.rb +2 -2
- data/lib/puppet/provider/service/redhat.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +2 -2
- data/lib/puppet/provider/service/upstart.rb +5 -5
- data/lib/puppet/provider/user/aix.rb +44 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +72 -16
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/reference/providers.rb +2 -2
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +2 -1
- data/lib/puppet/resource.rb +38 -5
- data/lib/puppet/runtime.rb +11 -1
- data/lib/puppet/settings/file_setting.rb +3 -8
- data/lib/puppet/settings.rb +2 -2
- data/lib/puppet/test/test_helper.rb +4 -1
- data/lib/puppet/transaction/persistence.rb +11 -1
- data/lib/puppet/transaction/report.rb +15 -1
- data/lib/puppet/type/exec.rb +19 -2
- data/lib/puppet/type/file.rb +6 -6
- data/lib/puppet/type/filebucket.rb +2 -2
- data/lib/puppet/type/group.rb +0 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/service.rb +8 -3
- data/lib/puppet/type/user.rb +0 -1
- data/lib/puppet/type.rb +1 -1
- data/lib/puppet/util/autoload.rb +1 -1
- data/lib/puppet/util/command_line.rb +1 -1
- data/lib/puppet/util/filetype.rb +2 -2
- data/lib/puppet/util/json.rb +3 -0
- data/lib/puppet/util/log.rb +1 -2
- data/lib/puppet/util/logging.rb +1 -25
- data/lib/puppet/util/pidlock.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
- data/lib/puppet/util/suidmanager.rb +1 -2
- data/lib/puppet/util/tagging.rb +1 -0
- data/lib/puppet/util/windows/service.rb +0 -5
- data/lib/puppet/util/windows/user.rb +0 -1
- data/lib/puppet/util/windows.rb +3 -0
- data/lib/puppet/util.rb +4 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +2 -6
- data/locales/puppet.pot +265 -221
- data/man/man5/puppet.conf.5 +73 -25
- data/man/man8/puppet-agent.8 +4 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +3 -3
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +2 -1
- data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
- data/spec/integration/application/agent_spec.rb +146 -52
- data/spec/integration/application/filebucket_spec.rb +5 -0
- data/spec/integration/configurer_spec.rb +18 -2
- data/spec/integration/indirector/facts/facter_spec.rb +3 -3
- data/spec/integration/l10n/compiler_spec.rb +37 -0
- data/spec/integration/parser/pcore_resource_spec.rb +10 -0
- data/spec/integration/transaction/report_spec.rb +1 -1
- data/spec/integration/type/file_spec.rb +2 -2
- data/spec/integration/type/package_spec.rb +6 -6
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/windows/process_spec.rb +1 -9
- data/spec/lib/puppet_spec/modules.rb +13 -2
- data/spec/lib/puppet_spec/puppetserver.rb +15 -0
- data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
- data/spec/shared_contexts/l10n.rb +27 -0
- data/spec/spec_helper.rb +1 -10
- data/spec/unit/application/apply_spec.rb +76 -56
- data/spec/unit/application/resource_spec.rb +29 -0
- data/spec/unit/configurer_spec.rb +353 -57
- data/spec/unit/environments_spec.rb +150 -1
- data/spec/unit/facter_impl_spec.rb +31 -0
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
- data/spec/unit/file_serving/configuration_spec.rb +12 -4
- data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
- data/spec/unit/file_system_spec.rb +7 -0
- data/spec/unit/functions/logging_spec.rb +1 -0
- data/spec/unit/functions/lookup_spec.rb +64 -0
- data/spec/unit/http/client_spec.rb +58 -1
- data/spec/unit/http/service/compiler_spec.rb +8 -0
- data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
- data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
- data/spec/unit/indirector/indirection_spec.rb +10 -3
- data/spec/unit/interface/action_spec.rb +0 -9
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/installer_spec.rb +39 -12
- data/spec/unit/network/formats_spec.rb +6 -0
- data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
- data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
- data/spec/unit/provider/package/gem_spec.rb +1 -1
- data/spec/unit/provider/package/pip2_spec.rb +1 -1
- data/spec/unit/provider/package/pip3_spec.rb +1 -1
- data/spec/unit/provider/package/pip_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +34 -5
- data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
- data/spec/unit/provider/service/launchd_spec.rb +11 -0
- data/spec/unit/provider/service/systemd_spec.rb +1 -1
- data/spec/unit/provider/user/aix_spec.rb +100 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
- data/spec/unit/provider/user/useradd_spec.rb +43 -2
- data/spec/unit/provider_spec.rb +4 -4
- data/spec/unit/puppet_spec.rb +12 -4
- data/spec/unit/resource/catalog_spec.rb +14 -1
- data/spec/unit/resource_spec.rb +58 -2
- data/spec/unit/settings/file_setting_spec.rb +10 -7
- data/spec/unit/type/service_spec.rb +27 -0
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +25 -8
- data/spec/unit/util/logging_spec.rb +2 -0
- data/tasks/parallel.rake +3 -3
- metadata +37 -94
- data/ext/README.environment +0 -8
- data/ext/dbfix.sql +0 -132
- data/ext/debian/README.Debian +0 -8
- data/ext/debian/README.source +0 -2
- data/ext/debian/TODO.Debian +0 -1
- data/ext/debian/changelog.erb +0 -1122
- data/ext/debian/compat +0 -1
- data/ext/debian/control +0 -144
- data/ext/debian/copyright +0 -339
- data/ext/debian/docs +0 -1
- data/ext/debian/fileserver.conf +0 -41
- data/ext/debian/puppet-common.dirs +0 -13
- data/ext/debian/puppet-common.install +0 -3
- data/ext/debian/puppet-common.lintian-overrides +0 -5
- data/ext/debian/puppet-common.manpages +0 -28
- data/ext/debian/puppet-common.postinst +0 -35
- data/ext/debian/puppet-common.postrm +0 -33
- data/ext/debian/puppet-el.dirs +0 -1
- data/ext/debian/puppet-el.emacsen-install +0 -25
- data/ext/debian/puppet-el.emacsen-remove +0 -11
- data/ext/debian/puppet-el.emacsen-startup +0 -9
- data/ext/debian/puppet-el.install +0 -1
- data/ext/debian/puppet-testsuite.install +0 -2
- data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
- data/ext/debian/puppet.lintian-overrides +0 -3
- data/ext/debian/puppet.logrotate +0 -20
- data/ext/debian/puppet.postinst +0 -20
- data/ext/debian/puppet.postrm +0 -20
- data/ext/debian/puppet.preinst +0 -20
- data/ext/debian/puppetmaster-common.install +0 -2
- data/ext/debian/puppetmaster-common.manpages +0 -2
- data/ext/debian/puppetmaster-common.postinst +0 -6
- data/ext/debian/puppetmaster-passenger.dirs +0 -4
- data/ext/debian/puppetmaster-passenger.postinst +0 -162
- data/ext/debian/puppetmaster-passenger.postrm +0 -61
- data/ext/debian/puppetmaster.README.debian +0 -17
- data/ext/debian/puppetmaster.default +0 -14
- data/ext/debian/puppetmaster.init +0 -137
- data/ext/debian/puppetmaster.lintian-overrides +0 -3
- data/ext/debian/puppetmaster.postinst +0 -20
- data/ext/debian/puppetmaster.postrm +0 -5
- data/ext/debian/puppetmaster.preinst +0 -22
- data/ext/debian/rules +0 -132
- data/ext/debian/source/format +0 -1
- data/ext/debian/source/options +0 -1
- data/ext/debian/vim-puppet.README.Debian +0 -13
- data/ext/debian/vim-puppet.dirs +0 -5
- data/ext/debian/vim-puppet.yaml +0 -7
- data/ext/debian/watch +0 -2
- data/ext/freebsd/puppetd +0 -26
- data/ext/freebsd/puppetmasterd +0 -26
- data/ext/gentoo/conf.d/puppet +0 -5
- data/ext/gentoo/conf.d/puppetmaster +0 -12
- data/ext/gentoo/init.d/puppet +0 -38
- data/ext/gentoo/init.d/puppetmaster +0 -51
- data/ext/gentoo/puppet/fileserver.conf +0 -41
- data/ext/ips/puppet-agent +0 -44
- data/ext/ips/puppet-master +0 -44
- data/ext/ips/puppet.p5m.erb +0 -12
- data/ext/ips/puppetagent.xml +0 -42
- data/ext/ips/puppetmaster.xml +0 -42
- data/ext/ips/rules +0 -19
- data/ext/ips/transforms +0 -34
- data/ext/ldap/puppet.schema +0 -24
- data/ext/logcheck/puppet +0 -23
- data/ext/osx/file_mapping.yaml +0 -28
- data/ext/osx/postflight.erb +0 -109
- data/ext/osx/preflight.erb +0 -52
- data/ext/osx/prototype.plist.erb +0 -38
- data/ext/redhat/fileserver.conf +0 -41
- data/ext/redhat/logrotate +0 -21
- data/ext/redhat/puppet.spec.erb +0 -841
- data/ext/redhat/server.init +0 -128
- data/ext/redhat/server.sysconfig +0 -13
- data/ext/solaris/pkginfo +0 -6
- data/ext/solaris/smf/puppetd.xml +0 -77
- data/ext/solaris/smf/puppetmasterd.xml +0 -77
- data/ext/solaris/smf/svc-puppetd +0 -71
- data/ext/solaris/smf/svc-puppetmasterd +0 -67
- data/ext/suse/puppet.spec +0 -310
- data/ext/suse/server.init +0 -173
- data/ext/yaml_nodes.rb +0 -105
- data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -139,6 +139,14 @@ describe Puppet::Environments do
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
|
+
it "implements guard and unguard" do
|
143
|
+
loader_from(:filesystem => [directory_tree],
|
144
|
+
:directory => directory_tree.children.first) do |loader|
|
145
|
+
expect(loader.guard('env1')).to be_nil
|
146
|
+
expect(loader.unguard('env1')).to be_nil
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
142
150
|
context "with an environment.conf" do
|
143
151
|
let(:envdir) do
|
144
152
|
FS::MemoryFile.a_directory(File.expand_path("envdir"), [
|
@@ -631,7 +639,7 @@ config_version=$vardir/random/scripts
|
|
631
639
|
])
|
632
640
|
|
633
641
|
loader_from(:filesystem => [envdir], :directory => envdir) do |loader|
|
634
|
-
|
642
|
+
cached = Puppet::Environments::Cached.new(loader)
|
635
643
|
cached.get(:env1)
|
636
644
|
cached.get(:env2)
|
637
645
|
cached.get(:env3)
|
@@ -642,6 +650,51 @@ config_version=$vardir/random/scripts
|
|
642
650
|
end
|
643
651
|
end
|
644
652
|
|
653
|
+
it "normalizes environment name to symbol" do
|
654
|
+
env = Puppet::Node::Environment.create(:cached, [])
|
655
|
+
mocked_loader = double('loader')
|
656
|
+
|
657
|
+
expect(mocked_loader).not_to receive(:get).with('cached')
|
658
|
+
expect(mocked_loader).to receive(:get).with(:cached).and_return(env).once
|
659
|
+
expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).once
|
660
|
+
|
661
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
662
|
+
cached.get('cached')
|
663
|
+
cached.get(:cached)
|
664
|
+
end
|
665
|
+
|
666
|
+
it "caches environment name as symbol and only once" do
|
667
|
+
mocked_loader = double('loader')
|
668
|
+
|
669
|
+
env = Puppet::Node::Environment.create(:cached, [])
|
670
|
+
allow(mocked_loader).to receive(:get).with(:cached).and_return(env)
|
671
|
+
allow(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20))
|
672
|
+
|
673
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
674
|
+
cached.get(:cached)
|
675
|
+
cached.get('cached')
|
676
|
+
|
677
|
+
expect(cached.instance_variable_get(:@cache).keys).to eq([:cached])
|
678
|
+
end
|
679
|
+
|
680
|
+
it "is able to cache multiple environments" do
|
681
|
+
mocked_loader = double('loader')
|
682
|
+
|
683
|
+
env1 = Puppet::Node::Environment.create(:env1, [])
|
684
|
+
allow(mocked_loader).to receive(:get).with(:env1).and_return(env1)
|
685
|
+
allow(mocked_loader).to receive(:get_conf).with(:env1).and_return(Puppet::Settings::EnvironmentConf.static_for(env1, 20))
|
686
|
+
|
687
|
+
env2 = Puppet::Node::Environment.create(:env2, [])
|
688
|
+
allow(mocked_loader).to receive(:get).with(:env2).and_return(env2)
|
689
|
+
allow(mocked_loader).to receive(:get_conf).with(:env2).and_return(Puppet::Settings::EnvironmentConf.static_for(env2, 20))
|
690
|
+
|
691
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
692
|
+
cached.get('env1')
|
693
|
+
cached.get('env2')
|
694
|
+
|
695
|
+
expect(cached.instance_variable_get(:@cache).keys).to eq([:env1, :env2])
|
696
|
+
end
|
697
|
+
|
645
698
|
it "returns nil if env not found" do
|
646
699
|
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
647
700
|
expect(loader.get(:doesnotexist)).to be_nil
|
@@ -697,6 +750,17 @@ config_version=$vardir/random/scripts
|
|
697
750
|
cached.get_conf(:cached)
|
698
751
|
end
|
699
752
|
|
753
|
+
it "normalizes environment name to symbol" do
|
754
|
+
env = Puppet::Node::Environment.create(:cached, [])
|
755
|
+
mocked_loader = double('loader')
|
756
|
+
expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
|
757
|
+
|
758
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
759
|
+
|
760
|
+
cached.get_conf('cached')
|
761
|
+
cached.get_conf(:cached)
|
762
|
+
end
|
763
|
+
|
700
764
|
it "returns nil if environment is not found" do
|
701
765
|
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
702
766
|
expect(loader.get_conf(:doesnotexist)).to be_nil
|
@@ -786,6 +850,83 @@ config_version=$vardir/random/scripts
|
|
786
850
|
|
787
851
|
expect(service.evicted_envs).to eq([:an_environment])
|
788
852
|
end
|
853
|
+
|
854
|
+
context "when guarding an environment" do
|
855
|
+
before :each do
|
856
|
+
Puppet[:environment_timeout] = 0
|
857
|
+
end
|
858
|
+
|
859
|
+
let(:name) { :an_environment }
|
860
|
+
|
861
|
+
def with_guard(cached, name, &block)
|
862
|
+
cached.guard(name)
|
863
|
+
begin
|
864
|
+
yield
|
865
|
+
ensure
|
866
|
+
cached.unguard(name)
|
867
|
+
end
|
868
|
+
end
|
869
|
+
|
870
|
+
it "evicts an expired and unguarded environment" do
|
871
|
+
with_environment_loaded(service) do |cached|
|
872
|
+
cached.get!(name)
|
873
|
+
end
|
874
|
+
|
875
|
+
expect(service.created_envs).to eq([name, name])
|
876
|
+
expect(service.evicted_envs).to eq([name])
|
877
|
+
end
|
878
|
+
|
879
|
+
it "does not evict an expired, but guarded environment" do
|
880
|
+
with_environment_loaded(service) do |cached|
|
881
|
+
with_guard(cached, name) do
|
882
|
+
cached.get!(name) # these shouldn't reload
|
883
|
+
cached.get!(name)
|
884
|
+
end
|
885
|
+
end
|
886
|
+
|
887
|
+
expect(service.created_envs).to eq([name])
|
888
|
+
expect(service.evicted_envs).to eq([])
|
889
|
+
end
|
890
|
+
|
891
|
+
it "does not evict an environment marked for expiration, but is guarded" do
|
892
|
+
Puppet[:environment_timeout] = 'unlimited'
|
893
|
+
|
894
|
+
expect(service).to receive(:expired?).never
|
895
|
+
|
896
|
+
with_environment_loaded(service) do |cached|
|
897
|
+
with_guard(cached, name) do
|
898
|
+
cached.get!(name)
|
899
|
+
end
|
900
|
+
end
|
901
|
+
|
902
|
+
expect(service.created_envs).to eq([name])
|
903
|
+
expect(service.evicted_envs).to eq([])
|
904
|
+
end
|
905
|
+
|
906
|
+
it "evicts an environment that is no longer guarded" do
|
907
|
+
with_environment_loaded(service) do |cached|
|
908
|
+
with_guard(cached, name) {}
|
909
|
+
|
910
|
+
cached.get!(name) # this reloads
|
911
|
+
end
|
912
|
+
|
913
|
+
expect(service.created_envs).to eq([name, name])
|
914
|
+
expect(service.evicted_envs).to eq([name])
|
915
|
+
end
|
916
|
+
|
917
|
+
it "can nest guards" do
|
918
|
+
with_environment_loaded(service) do |cached|
|
919
|
+
with_guard(cached, name) do
|
920
|
+
with_guard(cached, name) do
|
921
|
+
cached.get!(name) # doesn't reload
|
922
|
+
end
|
923
|
+
end
|
924
|
+
end
|
925
|
+
|
926
|
+
expect(service.created_envs).to eq([name])
|
927
|
+
expect(service.evicted_envs).to eq([])
|
928
|
+
end
|
929
|
+
end
|
789
930
|
end
|
790
931
|
|
791
932
|
context '#clear' do
|
@@ -798,6 +939,14 @@ config_version=$vardir/random/scripts
|
|
798
939
|
|
799
940
|
expect(service.evicted_envs).to eq([:an_environment])
|
800
941
|
end
|
942
|
+
|
943
|
+
it "normalizes environment name to symbol" do
|
944
|
+
with_environment_loaded(service) do |cached|
|
945
|
+
cached.clear('an_environment')
|
946
|
+
end
|
947
|
+
|
948
|
+
expect(service.evicted_envs).to eq([:an_environment])
|
949
|
+
end
|
801
950
|
end
|
802
951
|
|
803
952
|
context '#clear_all' do
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Puppet::FacterImpl' do
|
4
|
+
subject(:facter_impl) { Puppet::FacterImpl.new }
|
5
|
+
|
6
|
+
it { is_expected.to respond_to(:value) }
|
7
|
+
it { is_expected.to respond_to(:add) }
|
8
|
+
|
9
|
+
describe '.value' do
|
10
|
+
let(:method_name) { :value }
|
11
|
+
|
12
|
+
before { allow(Facter).to receive(method_name) }
|
13
|
+
|
14
|
+
it 'delegates to Facter API' do
|
15
|
+
facter_impl.value('test_fact')
|
16
|
+
expect(Facter).to have_received(method_name).with('test_fact')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.add' do
|
21
|
+
let(:block) { Proc.new { setcode 'test' } }
|
22
|
+
let(:method_name) { :add }
|
23
|
+
|
24
|
+
before { allow(Facter).to receive(method_name) }
|
25
|
+
|
26
|
+
it 'delegates to Facter API' do
|
27
|
+
facter_impl.add('test_fact', &block)
|
28
|
+
expect(Facter).to have_received(method_name).with('test_fact', &block)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -104,8 +104,8 @@ describe Puppet::FileBucket::Dipper, :uses_checksums => true do
|
|
104
104
|
# Diff without the context
|
105
105
|
# Lines we need to see match 'Content' instead of trimming diff output filter out
|
106
106
|
# surrounding noise...or hard code the check values
|
107
|
-
if
|
108
|
-
Puppet::Util::Package.versioncmp(
|
107
|
+
if Puppet.runtime[:facter].value(:osfamily) == 'Solaris' &&
|
108
|
+
Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.0') >= 0
|
109
109
|
# Use gdiff on Solaris
|
110
110
|
diff12 = Puppet::Util::Execution.execute("gdiff -uN #{file1} #{file2}| grep Content")
|
111
111
|
diff21 = Puppet::Util::Execution.execute("gdiff -uN #{file2} #{file1}| grep Content")
|
@@ -159,6 +159,29 @@ describe Puppet::FileServing::Configuration::Parser do
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
+
describe Puppet::FileServing::Configuration::Parser, " when parsing the scripts mount" do
|
163
|
+
include FSConfigurationParserTesting
|
164
|
+
|
165
|
+
before do
|
166
|
+
@mount = double('scriptsmount', :name => "scripts", :validate => true)
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should create an instance of the Scripts Mount class" do
|
170
|
+
write_config_file "[scripts]\n"
|
171
|
+
|
172
|
+
expect(Puppet::FileServing::Mount::Scripts).to receive(:new).with("scripts").and_return(@mount)
|
173
|
+
@parser.parse
|
174
|
+
end
|
175
|
+
|
176
|
+
it "should warn if a path is set" do
|
177
|
+
write_config_file "[scripts]\npath /some/path\n"
|
178
|
+
expect(Puppet::FileServing::Mount::Scripts).to receive(:new).with("scripts").and_return(@mount)
|
179
|
+
|
180
|
+
expect(Puppet).to receive(:warning)
|
181
|
+
@parser.parse
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
162
185
|
describe Puppet::FileServing::Configuration::Parser, " when parsing the plugins mount" do
|
163
186
|
include FSConfigurationParserTesting
|
164
187
|
|
@@ -80,15 +80,16 @@ describe Puppet::FileServing::Configuration do
|
|
80
80
|
expect(config.mounted?("one")).to be_truthy
|
81
81
|
end
|
82
82
|
|
83
|
-
it "should add modules, plugins, and tasks mounts even if the file does not exist" do
|
83
|
+
it "should add modules, plugins, scripts, and tasks mounts even if the file does not exist" do
|
84
84
|
expect(Puppet::FileSystem).to receive(:exist?).and_return(false) # the file doesn't exist
|
85
85
|
config = Puppet::FileServing::Configuration.configuration
|
86
86
|
expect(config.mounted?("modules")).to be_truthy
|
87
87
|
expect(config.mounted?("plugins")).to be_truthy
|
88
|
+
expect(config.mounted?("scripts")).to be_truthy
|
88
89
|
expect(config.mounted?("tasks")).to be_truthy
|
89
90
|
end
|
90
91
|
|
91
|
-
it "should allow all access to modules, plugins, and tasks if no fileserver.conf exists" do
|
92
|
+
it "should allow all access to modules, plugins, scripts, and tasks if no fileserver.conf exists" do
|
92
93
|
expect(Puppet::FileSystem).to receive(:exist?).and_return(false) # the file doesn't exist
|
93
94
|
modules = double('modules')
|
94
95
|
allow(Puppet::FileServing::Mount::Modules).to receive(:new).and_return(modules)
|
@@ -99,10 +100,13 @@ describe Puppet::FileServing::Configuration do
|
|
99
100
|
tasks = double('tasks')
|
100
101
|
allow(Puppet::FileServing::Mount::Tasks).to receive(:new).and_return(tasks)
|
101
102
|
|
103
|
+
scripts = double('scripts')
|
104
|
+
allow(Puppet::FileServing::Mount::Scripts).to receive(:new).and_return(scripts)
|
105
|
+
|
102
106
|
Puppet::FileServing::Configuration.configuration
|
103
107
|
end
|
104
108
|
|
105
|
-
it "should not allow access from all to modules, plugins, and tasks if the fileserver.conf provided some rules" do
|
109
|
+
it "should not allow access from all to modules, plugins, scripts, and tasks if the fileserver.conf provided some rules" do
|
106
110
|
expect(Puppet::FileSystem).to receive(:exist?).and_return(false) # the file doesn't exist
|
107
111
|
|
108
112
|
modules = double('modules')
|
@@ -114,15 +118,19 @@ describe Puppet::FileServing::Configuration do
|
|
114
118
|
tasks = double('tasks')
|
115
119
|
allow(Puppet::FileServing::Mount::Tasks).to receive(:new).and_return(tasks)
|
116
120
|
|
121
|
+
scripts = double('scripts', :empty? => false)
|
122
|
+
allow(Puppet::FileServing::Mount::Scripts).to receive(:new).and_return(scripts)
|
123
|
+
|
117
124
|
Puppet::FileServing::Configuration.configuration
|
118
125
|
end
|
119
126
|
|
120
|
-
it "should add modules, plugins, and tasks mounts even if they are not returned by the parser" do
|
127
|
+
it "should add modules, plugins, scripts, and tasks mounts even if they are not returned by the parser" do
|
121
128
|
expect(@parser).to receive(:parse).and_return("one" => double("mount"))
|
122
129
|
expect(Puppet::FileSystem).to receive(:exist?).and_return(true) # the file doesn't exist
|
123
130
|
config = Puppet::FileServing::Configuration.configuration
|
124
131
|
expect(config.mounted?("modules")).to be_truthy
|
125
132
|
expect(config.mounted?("plugins")).to be_truthy
|
133
|
+
expect(config.mounted?("scripts")).to be_truthy
|
126
134
|
expect(config.mounted?("tasks")).to be_truthy
|
127
135
|
end
|
128
136
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/file_serving/mount/scripts'
|
3
|
+
|
4
|
+
describe Puppet::FileServing::Mount::Scripts do
|
5
|
+
before do
|
6
|
+
@mount = Puppet::FileServing::Mount::Scripts.new("scripts")
|
7
|
+
|
8
|
+
@environment = double('environment', :module => nil)
|
9
|
+
@request = double('request', :environment => @environment)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "when finding files" do
|
13
|
+
it "should fail if no module is specified" do
|
14
|
+
expect { @mount.find("", @request) }.to raise_error(/No module specified/)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should use the provided environment to find the module" do
|
18
|
+
expect(@environment).to receive(:module)
|
19
|
+
|
20
|
+
@mount.find("foo", @request)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should treat the first field of the relative path as the module name" do
|
24
|
+
expect(@environment).to receive(:module).with("foo")
|
25
|
+
@mount.find("foo/bar/baz", @request)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return nil if the specified module does not exist" do
|
29
|
+
expect(@environment).to receive(:module).with("foo")
|
30
|
+
@mount.find("foo/bar/baz", @request)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return the file path from the module" do
|
34
|
+
mod = double('module')
|
35
|
+
expect(mod).to receive(:script).with("bar/baz").and_return("eh")
|
36
|
+
expect(@environment).to receive(:module).with("foo").and_return(mod)
|
37
|
+
expect(@mount.find("foo/bar/baz", @request)).to eq("eh")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "when searching for files" do
|
42
|
+
it "should fail if no module is specified" do
|
43
|
+
expect { @mount.search("", @request) }.to raise_error(/No module specified/)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should use the node's environment to search the module" do
|
47
|
+
expect(@environment).to receive(:module)
|
48
|
+
|
49
|
+
@mount.search("foo", @request)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should treat the first field of the relative path as the module name" do
|
53
|
+
expect(@environment).to receive(:module).with("foo")
|
54
|
+
@mount.search("foo/bar/baz", @request)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return nil if the specified module does not exist" do
|
58
|
+
expect(@environment).to receive(:module).with("foo").and_return(nil)
|
59
|
+
@mount.search("foo/bar/baz", @request)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should return the script path as an array from the module" do
|
63
|
+
mod = double('module')
|
64
|
+
expect(mod).to receive(:script).with("bar/baz").and_return("eh")
|
65
|
+
expect(@environment).to receive(:module).with("foo").and_return(mod)
|
66
|
+
expect(@mount.search("foo/bar/baz", @request)).to eq(["eh"])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -296,6 +296,13 @@ describe "Puppet::FileSystem" do
|
|
296
296
|
expect(Puppet::FileSystem.read_preserve_line_endings(file)).to eq("file content \n")
|
297
297
|
end
|
298
298
|
end
|
299
|
+
|
300
|
+
it "should not warn about misusage of BOM with non-UTF encoding" do
|
301
|
+
allow(Encoding).to receive(:default_external).and_return(Encoding::US_ASCII)
|
302
|
+
with_file_content("file content \n") do |file|
|
303
|
+
expect{ Puppet::FileSystem.read_preserve_line_endings(file) }.not_to output(/BOM with non-UTF encoding US-ASCII is nonsense/).to_stderr
|
304
|
+
end
|
305
|
+
end
|
299
306
|
end
|
300
307
|
|
301
308
|
context "read without an encoding specified" do
|
@@ -870,6 +870,46 @@ describe "The lookup function" do
|
|
870
870
|
end
|
871
871
|
end
|
872
872
|
|
873
|
+
context 'with lookup_options' do
|
874
|
+
let(:environment_files) do
|
875
|
+
{
|
876
|
+
env_name => {
|
877
|
+
'hiera.yaml' => <<-YAML.unindent,
|
878
|
+
---
|
879
|
+
version: 5
|
880
|
+
YAML
|
881
|
+
'data' => {
|
882
|
+
'common.yaml' => common_yaml
|
883
|
+
}
|
884
|
+
}
|
885
|
+
}
|
886
|
+
end
|
887
|
+
|
888
|
+
context 'that are empty' do
|
889
|
+
let(:common_yaml) { <<-YAML.unindent }
|
890
|
+
lookup_options:
|
891
|
+
a: b
|
892
|
+
YAML
|
893
|
+
|
894
|
+
it 'ignores empty options' do
|
895
|
+
expect(lookup('a')).to eq("b")
|
896
|
+
end
|
897
|
+
end
|
898
|
+
|
899
|
+
context 'that contains a legal yaml hash with unexpected types' do
|
900
|
+
let(:common_yaml) { <<-YAML.unindent }
|
901
|
+
lookup_options:
|
902
|
+
:invalid_symbol
|
903
|
+
YAML
|
904
|
+
|
905
|
+
it 'fails lookup and reports a type mismatch' do
|
906
|
+
expect {
|
907
|
+
lookup('a')
|
908
|
+
}.to raise_error(Puppet::DataBinding::LookupError, /has wrong type, expects Puppet::LookupValue, got Runtime\[ruby, 'Symbol'\]/)
|
909
|
+
end
|
910
|
+
end
|
911
|
+
end
|
912
|
+
|
873
913
|
context 'with lookup_options configured using patterns' do
|
874
914
|
let(:mod_common) {
|
875
915
|
<<-YAML.unindent
|
@@ -1019,6 +1059,30 @@ describe "The lookup function" do
|
|
1019
1059
|
})
|
1020
1060
|
end
|
1021
1061
|
|
1062
|
+
context 'and lookup_options is empty' do
|
1063
|
+
let(:mod_common) { <<-YAML.unindent }
|
1064
|
+
lookup_options:
|
1065
|
+
mod::a: b
|
1066
|
+
YAML
|
1067
|
+
|
1068
|
+
it 'ignores empty options' do
|
1069
|
+
expect(lookup('mod::a')).to eq("b")
|
1070
|
+
end
|
1071
|
+
end
|
1072
|
+
|
1073
|
+
context 'and lookup_options contains a legal hash with unexpected types' do
|
1074
|
+
let(:mod_common) { <<-YAML.unindent }
|
1075
|
+
lookup_options:
|
1076
|
+
:invalid_symbol
|
1077
|
+
YAML
|
1078
|
+
|
1079
|
+
it 'fails lookup and reports a type mismatch' do
|
1080
|
+
expect {
|
1081
|
+
lookup('mod::a')
|
1082
|
+
}.to raise_error(Puppet::DataBinding::LookupError, /has wrong type, expects Puppet::LookupValue, got Runtime\[ruby, 'Symbol'\]/)
|
1083
|
+
end
|
1084
|
+
end
|
1085
|
+
|
1022
1086
|
context 'and patterns in module are not limited to module keys' do
|
1023
1087
|
let(:mod_common) {
|
1024
1088
|
<<-YAML.unindent
|
@@ -597,11 +597,68 @@ describe Puppet::HTTP::Client do
|
|
597
597
|
expect(response).to be_success
|
598
598
|
end
|
599
599
|
|
600
|
-
it "
|
600
|
+
it "does not preserve basic authorization when redirecting to different hosts" do
|
601
|
+
stub_request(:get, start_url).with(basic_auth: credentials).to_return(redirect_to(url: other_host))
|
602
|
+
stub_request(:get, other_host).to_return(status: 200)
|
603
|
+
|
604
|
+
client.get(start_url, options: {basic_auth: {user: 'user', password: 'pass'}})
|
605
|
+
expect(a_request(:get, other_host).
|
606
|
+
with{ |req| !req.headers.key?('Authorization')}).to have_been_made
|
607
|
+
end
|
608
|
+
|
609
|
+
it "does preserve basic authorization when redirecting to the same hosts" do
|
610
|
+
stub_request(:get, start_url).with(basic_auth: credentials).to_return(redirect_to(url: bar_url))
|
611
|
+
stub_request(:get, bar_url).with(basic_auth: credentials).to_return(status: 200)
|
612
|
+
|
613
|
+
client.get(start_url, options: {basic_auth: {user: 'user', password: 'pass'}})
|
614
|
+
expect(a_request(:get, bar_url).
|
615
|
+
with{ |req| req.headers.key?('Authorization')}).to have_been_made
|
616
|
+
end
|
617
|
+
|
618
|
+
it "does not preserve cookie header when redirecting to different hosts" do
|
619
|
+
headers = { 'Cookie' => 'TEST_COOKIE'}
|
620
|
+
|
621
|
+
stub_request(:get, start_url).with(headers: headers).to_return(redirect_to(url: other_host))
|
622
|
+
stub_request(:get, other_host).to_return(status: 200)
|
623
|
+
|
624
|
+
client.get(start_url, headers: headers)
|
625
|
+
expect(a_request(:get, other_host).
|
626
|
+
with{ |req| !req.headers.key?('Cookie')}).to have_been_made
|
627
|
+
end
|
628
|
+
|
629
|
+
it "does preserve cookie header when redirecting to the same hosts" do
|
630
|
+
headers = { 'Cookie' => 'TEST_COOKIE'}
|
631
|
+
|
632
|
+
stub_request(:get, start_url).with(headers: headers).to_return(redirect_to(url: bar_url))
|
633
|
+
stub_request(:get, bar_url).with(headers: headers).to_return(status: 200)
|
634
|
+
|
635
|
+
client.get(start_url, headers: headers)
|
636
|
+
expect(a_request(:get, bar_url).
|
637
|
+
with{ |req| req.headers.key?('Cookie')}).to have_been_made
|
638
|
+
end
|
639
|
+
|
640
|
+
it "does preserves cookie header and basic authentication when Puppet[:location_trusted] is true redirecting to different hosts" do
|
641
|
+
headers = { 'cookie' => 'TEST_COOKIE'}
|
642
|
+
Puppet[:location_trusted] = true
|
643
|
+
|
644
|
+
stub_request(:get, start_url).with(headers: headers, basic_auth: credentials).to_return(redirect_to(url: other_host))
|
645
|
+
stub_request(:get, other_host).with(headers: headers, basic_auth: credentials).to_return(status: 200)
|
646
|
+
|
647
|
+
client.get(start_url, headers: headers, options: {basic_auth: {user: 'user', password: 'pass'}})
|
648
|
+
expect(a_request(:get, other_host).
|
649
|
+
with{ |req| req.headers.key?('Authorization') && req.headers.key?('Cookie')}).to have_been_made
|
650
|
+
end
|
651
|
+
|
652
|
+
it "treats hosts as case-insensitive" do
|
653
|
+
start_url = URI("https://www.EXAmple.com:8140/Start")
|
654
|
+
bar_url = "https://www.example.com:8140/bar"
|
655
|
+
|
601
656
|
stub_request(:get, start_url).with(basic_auth: credentials).to_return(redirect_to(url: bar_url))
|
602
657
|
stub_request(:get, bar_url).with(basic_auth: credentials).to_return(status: 200)
|
603
658
|
|
604
659
|
client.get(start_url, options: {basic_auth: {user: 'user', password: 'pass'}})
|
660
|
+
expect(a_request(:get, bar_url).
|
661
|
+
with{ |req| req.headers.key?('Authorization')}).to have_been_made
|
605
662
|
end
|
606
663
|
|
607
664
|
it "redirects given a relative location" do
|
@@ -95,6 +95,14 @@ describe Puppet::HTTP::Service::Compiler do
|
|
95
95
|
subject.post_catalog(certname, environment: 'production', facts: facts, configured_environment: 'agent_specified')
|
96
96
|
end
|
97
97
|
|
98
|
+
it 'includes check_environment' do
|
99
|
+
stub_request(:post, uri)
|
100
|
+
.with(body: hash_including('check_environment' => 'false'))
|
101
|
+
.to_return(**catalog_response)
|
102
|
+
|
103
|
+
subject.post_catalog(certname, environment: 'production', facts: facts)
|
104
|
+
end
|
105
|
+
|
98
106
|
it 'includes transaction_uuid' do
|
99
107
|
uuid = "ec3d2844-b236-4287-b0ad-632fbb4d1ff0"
|
100
108
|
|
@@ -11,6 +11,9 @@ def set_facts(fact_hash)
|
|
11
11
|
end
|
12
12
|
|
13
13
|
describe Puppet::Resource::Catalog::Compiler do
|
14
|
+
include Matchers::Resource
|
15
|
+
include PuppetSpec::Files
|
16
|
+
|
14
17
|
let(:compiler) { described_class.new }
|
15
18
|
let(:node_name) { "foo" }
|
16
19
|
let(:node) { Puppet::Node.new(node_name)}
|
@@ -236,6 +239,46 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
236
239
|
expect { compiler.find(@request) }.to raise_error Puppet::Error,
|
237
240
|
"Unable to find a common checksum type between agent '' and master '[:sha256, :sha256lite, :md5, :md5lite, :sha1, :sha1lite, :sha512, :sha384, :sha224, :mtime, :ctime, :none]'."
|
238
241
|
end
|
242
|
+
|
243
|
+
it "prevents the environment from being evicted during compilation" do
|
244
|
+
Puppet[:environment_timeout] = 0
|
245
|
+
|
246
|
+
envs = Puppet.lookup(:environments)
|
247
|
+
|
248
|
+
expect(compiler).to receive(:compile) do
|
249
|
+
# we should get the same object
|
250
|
+
expect(envs.get!(:production)).to equal(envs.get!(:production))
|
251
|
+
end
|
252
|
+
|
253
|
+
compiler.find(@request)
|
254
|
+
end
|
255
|
+
|
256
|
+
context 'when checking agent and server specified environments' do
|
257
|
+
before :each do
|
258
|
+
FileUtils.mkdir_p(File.join(Puppet[:environmentpath], 'env_server'))
|
259
|
+
FileUtils.mkdir_p(File.join(Puppet[:environmentpath], 'env_agent'))
|
260
|
+
|
261
|
+
node.environment = 'env_server'
|
262
|
+
allow(Puppet::Node.indirection).to receive(:find).and_return(node)
|
263
|
+
|
264
|
+
@request.environment = 'env_agent'
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'ignores mismatched environments by default' do
|
268
|
+
catalog = compiler.find(@request)
|
269
|
+
|
270
|
+
expect(catalog.environment).to eq('env_server')
|
271
|
+
expect(catalog).to have_resource('Stage[main]')
|
272
|
+
end
|
273
|
+
|
274
|
+
it 'returns an empty catalog if asked to check the environment and they are mismatched' do
|
275
|
+
@request.options[:check_environment] = "true"
|
276
|
+
catalog = compiler.find(@request)
|
277
|
+
|
278
|
+
expect(catalog.environment).to eq('env_server')
|
279
|
+
expect(catalog.resources).to be_empty
|
280
|
+
end
|
281
|
+
end
|
239
282
|
end
|
240
283
|
|
241
284
|
describe "when handling a request with facts" do
|
@@ -564,6 +607,50 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
564
607
|
metadata
|
565
608
|
end
|
566
609
|
|
610
|
+
describe "and the environment is a symlink and versioned_environment_dirs is true" do
|
611
|
+
|
612
|
+
let(:tmpdir) { Dir.mktmpdir }
|
613
|
+
|
614
|
+
before(:each) do
|
615
|
+
Puppet[:versioned_environment_dirs] = true
|
616
|
+
prod_path = File.join(Puppet[:environmentpath], 'production')
|
617
|
+
FileUtils.rm_rf(prod_path)
|
618
|
+
FileUtils.symlink(tmpdir, prod_path)
|
619
|
+
end
|
620
|
+
|
621
|
+
it "inlines metadata for a file" do
|
622
|
+
catalog = compile_to_catalog(<<-MANIFEST, node)
|
623
|
+
file { '#{path}':
|
624
|
+
ensure => file,
|
625
|
+
source => '#{source}'
|
626
|
+
}
|
627
|
+
MANIFEST
|
628
|
+
|
629
|
+
module_relative_path = 'modules/mymodule/files/config_file.txt'
|
630
|
+
metadata = stubs_file_metadata(checksum_type,
|
631
|
+
checksum_value,
|
632
|
+
module_relative_path,
|
633
|
+
File.join(tmpdir, module_relative_path) )
|
634
|
+
expect(metadata).to receive(:source=).with(source)
|
635
|
+
expect(metadata).to receive(:content_uri=).with("puppet:///#{module_relative_path}")
|
636
|
+
|
637
|
+
options = {
|
638
|
+
:environment => catalog.environment_instance,
|
639
|
+
:links => :manage,
|
640
|
+
:checksum_type => checksum_type.to_sym,
|
641
|
+
:source_permissions => :ignore
|
642
|
+
}
|
643
|
+
expect(Puppet::FileServing::Metadata.indirection).to receive(:find).with(source, options).and_return(metadata)
|
644
|
+
|
645
|
+
compiler.send(:inline_metadata, catalog, checksum_type)
|
646
|
+
|
647
|
+
|
648
|
+
expect(catalog.metadata[path]).to eq(metadata)
|
649
|
+
expect(catalog.recursive_metadata).to be_empty
|
650
|
+
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
567
654
|
it "inlines metadata for a file" do
|
568
655
|
catalog = compile_to_catalog(<<-MANIFEST, node)
|
569
656
|
file { '#{path}':
|