puppet 7.9.0 → 7.10.0
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -6
- 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/configurer.rb +155 -46
- data/lib/puppet/defaults.rb +51 -26
- data/lib/puppet/environments.rb +66 -26
- data/lib/puppet/file_serving/configuration.rb +2 -0
- data/lib/puppet/file_serving/configuration/parser.rb +2 -0
- data/lib/puppet/file_serving/mount/scripts.rb +24 -0
- data/lib/puppet/functions/find_template.rb +2 -2
- data/lib/puppet/http/service/compiler.rb +6 -1
- data/lib/puppet/indirector/catalog/compiler.rb +21 -3
- data/lib/puppet/indirector/catalog/rest.rb +1 -0
- 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/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/node/environment.rb +10 -11
- data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
- data/lib/puppet/provider/package/pkg.rb +8 -1
- data/lib/puppet/provider/service/launchd.rb +1 -1
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +42 -9
- data/lib/puppet/transaction/persistence.rb +11 -1
- data/lib/puppet/transaction/report.rb +15 -1
- data/lib/puppet/type.rb +1 -1
- data/lib/puppet/type/exec.rb +10 -1
- data/lib/puppet/type/file.rb +6 -6
- data/lib/puppet/type/filebucket.rb +2 -2
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +134 -94
- data/man/man5/puppet.conf.5 +65 -25
- data/man/man8/puppet-agent.8 +1 -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/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 +102 -52
- data/spec/integration/application/filebucket_spec.rb +5 -0
- data/spec/integration/configurer_spec.rb +17 -1
- data/spec/integration/l10n/compiler_spec.rb +37 -0
- 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/configurer_spec.rb +265 -54
- data/spec/unit/environments_spec.rb +150 -1
- 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/functions/logging_spec.rb +1 -0
- 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/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/pops/parser/parse_containers_spec.rb +0 -11
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
- data/spec/unit/provider/package/pkg_spec.rb +19 -5
- 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/useradd_spec.rb +3 -2
- metadata +34 -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
|
@@ -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
|
@@ -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}':
|