puppet 6.18.0-x64-mingw32 → 6.21.1-x64-mingw32
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/CODEOWNERS +2 -16
- data/Gemfile +2 -0
- data/Gemfile.lock +37 -34
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +9 -3
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +5 -5
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +50 -8
- data/lib/puppet/defaults.rb +67 -35
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/request.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/formats.rb +2 -1
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +70 -17
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +34 -2
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +1 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/resource/type.rb +2 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +62 -20
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/transaction/report.rb +11 -7
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/fact_dif.rb +62 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +289 -268
- data/man/man5/puppet.conf.5 +33 -17
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +7 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +183 -22
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/filebucket_spec.rb +7 -7
- data/spec/integration/application/plugin_spec.rb +3 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/defaults_spec.rb +19 -1
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +5 -3
- data/spec/integration/util/windows/registry_spec.rb +0 -10
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/facts_spec.rb +3 -1
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application_spec.rb +60 -13
- data/spec/unit/configurer_spec.rb +39 -6
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +62 -11
- data/spec/unit/face/node_spec.rb +2 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/resolver_spec.rb +24 -4
- data/spec/unit/http/service/ca_spec.rb +2 -2
- data/spec/unit/http/service/compiler_spec.rb +51 -2
- data/spec/unit/http/service/file_server_spec.rb +2 -2
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -2
- data/spec/unit/http/service_spec.rb +1 -1
- data/spec/unit/http/session_spec.rb +8 -20
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +4 -4
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +28 -23
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +4 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -1
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction/report_spec.rb +2 -0
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util_spec.rb +13 -6
- metadata +32 -10
- data/spec/integration/application/config_spec.rb +0 -74
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/module_spec.rb +0 -3
@@ -11,9 +11,7 @@ describe Puppet::Type.type(:package).provider(:apt) do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
let(:provider) do
|
14
|
-
provider
|
15
|
-
provider.resource = resource
|
16
|
-
provider
|
14
|
+
resource.provider
|
17
15
|
end
|
18
16
|
|
19
17
|
it "should be the default provider on :osfamily => Debian" do
|
@@ -88,7 +86,7 @@ Version table:
|
|
88
86
|
|
89
87
|
describe ".instances" do
|
90
88
|
before do
|
91
|
-
allow(Puppet::Type::Package::ProviderDpkg).to receive(:instances).and_return([
|
89
|
+
allow(Puppet::Type::Package::ProviderDpkg).to receive(:instances).and_return([provider])
|
92
90
|
end
|
93
91
|
|
94
92
|
context "when package is manual marked" do
|
@@ -97,8 +95,7 @@ Version table:
|
|
97
95
|
end
|
98
96
|
|
99
97
|
it 'sets mark to manual' do
|
100
|
-
expect(
|
101
|
-
described_class.instances
|
98
|
+
expect(described_class.instances.map(&:mark)).to eq([:manual])
|
102
99
|
end
|
103
100
|
end
|
104
101
|
|
@@ -108,8 +105,7 @@ Version table:
|
|
108
105
|
end
|
109
106
|
|
110
107
|
it 'does not set mark to manual' do
|
111
|
-
expect(
|
112
|
-
described_class.instances
|
108
|
+
expect(described_class.instances.map(&:mark)).to eq([nil])
|
113
109
|
end
|
114
110
|
end
|
115
111
|
end
|
@@ -119,24 +115,12 @@ Version table:
|
|
119
115
|
allow(provider).to receive(:dpkgquery).and_return("name: #{resource.name}" )
|
120
116
|
end
|
121
117
|
|
122
|
-
context "when package is manual marked" do
|
123
|
-
before do
|
124
|
-
allow(described_class).to receive(:aptmark).with('showmanual').and_return("#{resource.name}\n")
|
125
|
-
end
|
126
|
-
|
127
|
-
it 'sets mark to manual' do
|
128
|
-
result = provider.query
|
129
|
-
expect(result[:mark]).to eql(:manual)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
context 'when package is not manual marked ' do
|
134
|
-
before do
|
135
|
-
allow(described_class).to receive(:aptmark).with('showmanual').and_return('')
|
136
|
-
end
|
137
118
|
|
119
|
+
context 'when package is not installed on the system' do
|
138
120
|
it 'does not set mark to manual' do
|
139
121
|
result = provider.query
|
122
|
+
|
123
|
+
expect(described_class).not_to receive(:aptmark)
|
140
124
|
expect(result[:mark]).to be_nil
|
141
125
|
end
|
142
126
|
end
|
@@ -293,5 +277,26 @@ Version table:
|
|
293
277
|
|
294
278
|
provider.install
|
295
279
|
end
|
280
|
+
|
281
|
+
it "should install using the source attribute if present" do
|
282
|
+
resource[:ensure] = :installed
|
283
|
+
resource[:source] = '/my/local/package/file'
|
284
|
+
|
285
|
+
expect(provider).to receive(:aptget).with(any_args, :install, resource[:source])
|
286
|
+
expect(provider).to receive(:properties).and_return({:mark => :none})
|
287
|
+
|
288
|
+
provider.install
|
289
|
+
end
|
290
|
+
|
291
|
+
it "should install specific version using the source attribute if present" do
|
292
|
+
resource[:ensure] = '1.2.3'
|
293
|
+
resource[:source] = '/my/local/package/file'
|
294
|
+
|
295
|
+
expect(provider).to receive(:aptget).with(any_args, :install, resource[:source])
|
296
|
+
expect(provider).to receive(:properties).and_return({:mark => :none})
|
297
|
+
expect(provider).to receive(:query).and_return({:ensure => '1.2.3'})
|
298
|
+
|
299
|
+
provider.install
|
300
|
+
end
|
296
301
|
end
|
297
302
|
end
|
@@ -13,7 +13,7 @@ describe Puppet::Type.type(:package).provider(:aptitude) do
|
|
13
13
|
|
14
14
|
before do
|
15
15
|
allow(Puppet::Util).to receive(:which).with('/usr/bin/dpkg-query').and_return(dpkgquery_path)
|
16
|
-
allow(described_class).to receive(:aptmark).with('showmanual').and_return("")
|
16
|
+
allow(described_class).to receive(:aptmark).with('showmanual', 'faff').and_return("")
|
17
17
|
end
|
18
18
|
|
19
19
|
{ :absent => "deinstall ok config-files faff 1.2.3-1\n",
|
@@ -1,17 +1,18 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet/provider/package'
|
3
3
|
|
4
|
+
Puppet::Type.type(:package).provide(:test_base_provider, parent: Puppet::Provider::Package) do
|
5
|
+
def query; end
|
6
|
+
end
|
7
|
+
|
4
8
|
describe Puppet::Provider::Package do
|
9
|
+
let(:provider) { Puppet::Type.type(:package).provider(:test_base_provider).new }
|
10
|
+
|
5
11
|
it 'returns absent for uninstalled packages when not purgeable' do
|
6
|
-
provider = Puppet::Provider::Package.new
|
7
|
-
expect(provider).to receive(:query).and_return(nil)
|
8
|
-
expect(provider.class).to receive(:feature?).with(:purgeable).and_return(false)
|
9
12
|
expect(provider.properties[:ensure]).to eq(:absent)
|
10
13
|
end
|
11
14
|
|
12
15
|
it 'returns purged for uninstalled packages when purgeable' do
|
13
|
-
provider = Puppet::Provider::Package.new
|
14
|
-
expect(provider).to receive(:query).and_return(nil)
|
15
16
|
expect(provider.class).to receive(:feature?).with(:purgeable).and_return(true)
|
16
17
|
expect(provider.properties[:ensure]).to eq(:purged)
|
17
18
|
end
|
@@ -32,7 +32,7 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
32
32
|
expect(Puppet::Util::Execution).to receive(:execpipe).with(execpipe_args).and_yield(bash_installed_io)
|
33
33
|
|
34
34
|
installed = double('bash')
|
35
|
-
expect(described_class).to receive(:new).with(:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :status => "installed", :provider => :dpkg).and_return(installed)
|
35
|
+
expect(described_class).to receive(:new).with(:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :mark => :none, :status => "installed", :provider => :dpkg).and_return(installed)
|
36
36
|
|
37
37
|
expect(described_class.instances).to eq([installed])
|
38
38
|
end
|
@@ -41,9 +41,9 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
41
41
|
expect(Puppet::Util::Execution).to receive(:execpipe).with(execpipe_args).and_yield(all_installed_io)
|
42
42
|
|
43
43
|
bash = double('bash')
|
44
|
-
expect(described_class).to receive(:new).with(:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :status => "installed", :provider => :dpkg).and_return(bash)
|
44
|
+
expect(described_class).to receive(:new).with(:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :mark => :none, :status => "installed", :provider => :dpkg).and_return(bash)
|
45
45
|
vim = double('vim')
|
46
|
-
expect(described_class).to receive(:new).with(:ensure => "2:7.3.547-6ubuntu5", :error => "ok", :desired => "install", :name => "vim", :status => "installed", :provider => :dpkg).and_return(vim)
|
46
|
+
expect(described_class).to receive(:new).with(:ensure => "2:7.3.547-6ubuntu5", :error => "ok", :desired => "install", :name => "vim", :mark => :none, :status => "installed", :provider => :dpkg).and_return(vim)
|
47
47
|
|
48
48
|
expect(described_class.instances).to eq([bash, vim])
|
49
49
|
end
|
@@ -107,7 +107,7 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
107
107
|
it "returns a hash of the found package status for an installed package" do
|
108
108
|
dpkg_query_execution_with_multiple_args_returns(query_output, args_with_provides,virtual_packages_query_args)
|
109
109
|
dpkg_query_execution_with_multiple_args_returns(dpkg_query_result, args, query_args)
|
110
|
-
expect(provider.query).to eq(:ensure => "2.7.13", :error => "ok", :desired => "install", :name => "python", :status => "installed", :provider => :dpkg)
|
110
|
+
expect(provider.query).to eq(:ensure => "2.7.13", :error => "ok", :desired => "install", :name => "python", :mark => :none, :status => "installed", :provider => :dpkg)
|
111
111
|
end
|
112
112
|
|
113
113
|
it "considers the package absent if the dpkg-query result cannot be interpreted" do
|
@@ -160,6 +160,20 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
160
160
|
expect(provider.query[:mark]).to eq(:hold)
|
161
161
|
end
|
162
162
|
|
163
|
+
it "considers the package held if its state is 'hold'" do
|
164
|
+
dpkg_query_execution_with_multiple_args_returns(query_output.gsub("install","hold"),args_with_provides,virtual_packages_query_args)
|
165
|
+
dpkg_query_execution_with_multiple_args_returns(dpkg_query_result.gsub("install","hold"), args, query_args)
|
166
|
+
expect(provider.query[:ensure]).to eq("2.7.13")
|
167
|
+
expect(provider.query[:mark]).to eq(:hold)
|
168
|
+
end
|
169
|
+
|
170
|
+
it "considers mark status to be none if package is not held" do
|
171
|
+
dpkg_query_execution_with_multiple_args_returns(query_output.gsub("install","ok"),args_with_provides,virtual_packages_query_args)
|
172
|
+
dpkg_query_execution_with_multiple_args_returns(dpkg_query_result.gsub("install","ok"), args, query_args)
|
173
|
+
expect(provider.query[:ensure]).to eq("2.7.13")
|
174
|
+
expect(provider.query[:mark]).to eq(:none)
|
175
|
+
end
|
176
|
+
|
163
177
|
context "regex check for query search" do
|
164
178
|
let(:resource_name) { 'python-email' }
|
165
179
|
let(:resource) { instance_double('Puppet::Type::Package') }
|
@@ -168,10 +182,10 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
168
182
|
allow(resource).to receive(:[]=)
|
169
183
|
end
|
170
184
|
|
171
|
-
it "checks if virtual package regex for query is
|
185
|
+
it "checks if virtual package regex for query is correct and physical package is installed" do
|
172
186
|
dpkg_query_execution_with_multiple_args_returns(query_output,args_with_provides,virtual_packages_query_args)
|
173
187
|
dpkg_query_execution_with_multiple_args_returns(dpkg_query_result, args, query_args)
|
174
|
-
expect(provider.query).to match({:desired=>"install", :ensure=>"2.7.13", :error=>"ok", :name=>"python", :provider
|
188
|
+
expect(provider.query).to match({:desired => "install", :ensure => "2.7.13", :error => "ok", :name => "python", :mark => :none, :provider => :dpkg, :status => "installed"})
|
175
189
|
end
|
176
190
|
|
177
191
|
context "regex check with no partial matching" do
|
@@ -208,7 +222,7 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
208
222
|
it "returns a hash of the found package status for an installed package" do
|
209
223
|
dpkg_query_execution_returns(bash_installed_output)
|
210
224
|
|
211
|
-
expect(provider.query).to eq({:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :status => "installed", :provider => :dpkg})
|
225
|
+
expect(provider.query).to eq({:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :mark => :none, :status => "installed", :provider => :dpkg})
|
212
226
|
end
|
213
227
|
|
214
228
|
it "considers the package absent if the dpkg-query result cannot be interpreted" do
|
@@ -271,6 +285,7 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
271
285
|
:error => 'ok',
|
272
286
|
:status => 'status',
|
273
287
|
:name => resource_name,
|
288
|
+
:mark => :none,
|
274
289
|
:ensure => 'ensure',
|
275
290
|
:provider => :dpkg,
|
276
291
|
}
|
@@ -46,6 +46,8 @@ describe Puppet::Type.type(:package).provider(:openbsd) do
|
|
46
46
|
allow(described_class).to receive(:command).with(:pkginfo).and_return('/bin/pkg_info')
|
47
47
|
allow(described_class).to receive(:command).with(:pkgadd).and_return('/bin/pkg_add')
|
48
48
|
allow(described_class).to receive(:command).with(:pkgdelete).and_return('/bin/pkg_delete')
|
49
|
+
|
50
|
+
allow(Puppet::FileSystem).to receive(:exist?)
|
49
51
|
end
|
50
52
|
|
51
53
|
context "#instances" do
|
@@ -32,10 +32,12 @@ describe Puppet::Type.type(:package).provider(:pacman) do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should call yaourt to install the right package quietly when yaourt is installed" do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
without_partial_double_verification do
|
36
|
+
allow(described_class).to receive(:yaourt?).and_return(true)
|
37
|
+
args = ['--noconfirm', '--needed', '--noprogressbar', '-S', resource[:name]]
|
38
|
+
expect(provider).to receive(:yaourt).at_least(:once).with(*args).and_return('')
|
39
|
+
provider.install
|
40
|
+
end
|
39
41
|
end
|
40
42
|
|
41
43
|
it "should raise an Puppet::Error if the installation failed" do
|
@@ -74,10 +76,12 @@ describe Puppet::Type.type(:package).provider(:pacman) do
|
|
74
76
|
end
|
75
77
|
|
76
78
|
it "should call yaourt to install the right package quietly when yaourt is installed" do
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
79
|
+
without_partial_double_verification do
|
80
|
+
expect(described_class).to receive(:yaourt?).and_return(true)
|
81
|
+
args = ['--noconfirm', '--needed', '--noprogressbar', '-x', '--arg=value', '-S', resource[:name]]
|
82
|
+
expect(provider).to receive(:yaourt).at_least(:once).with(*args).and_return('')
|
83
|
+
provider.install
|
84
|
+
end
|
81
85
|
end
|
82
86
|
end
|
83
87
|
|
@@ -172,10 +176,12 @@ describe Puppet::Type.type(:package).provider(:pacman) do
|
|
172
176
|
end
|
173
177
|
|
174
178
|
it "should call yaourt to remove the right package quietly" do
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
+
without_partial_double_verification do
|
180
|
+
allow(described_class).to receive(:yaourt?).and_return(true)
|
181
|
+
args = ["--noconfirm", "--noprogressbar", "-R", resource[:name]]
|
182
|
+
expect(provider).to receive(:yaourt).with(*args)
|
183
|
+
provider.uninstall
|
184
|
+
end
|
179
185
|
end
|
180
186
|
|
181
187
|
it "adds any uninstall_options" do
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Puppet::Type.type(:package).provider(:pip2) do
|
4
|
+
|
5
|
+
it { is_expected.to be_installable }
|
6
|
+
it { is_expected.to be_uninstallable }
|
7
|
+
it { is_expected.to be_upgradeable }
|
8
|
+
it { is_expected.to be_versionable }
|
9
|
+
it { is_expected.to be_install_options }
|
10
|
+
it { is_expected.to be_targetable }
|
11
|
+
|
12
|
+
it "should inherit most things from pip provider" do
|
13
|
+
expect(described_class < Puppet::Type.type(:package).provider(:pip))
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should use pip2 command" do
|
17
|
+
expect(described_class.cmd).to eq(["pip2"])
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'calculated specificity' do
|
21
|
+
context 'when is not defaultfor' do
|
22
|
+
subject { described_class.specificity }
|
23
|
+
it { is_expected.to eql 1 }
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when is defaultfor' do
|
27
|
+
let(:os) { Facter.value(:operatingsystem) }
|
28
|
+
subject do
|
29
|
+
described_class.defaultfor(operatingsystem: os)
|
30
|
+
described_class.specificity
|
31
|
+
end
|
32
|
+
it { is_expected.to be > 100 }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -14,9 +14,8 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
14
14
|
it { is_expected.to be_version_ranges }
|
15
15
|
|
16
16
|
before do
|
17
|
-
@resource = Puppet::
|
18
|
-
|
19
|
-
@provider = described_class.new(@resource)
|
17
|
+
@resource = Puppet::Type.type(:package).new(name: "fake_package", provider: :pip)
|
18
|
+
@provider = @resource.provider
|
20
19
|
@client = double('client')
|
21
20
|
allow(@client).to receive(:call).with('package_releases', 'real_package').and_return(["1.3", "1.2.5", "1.2.4"])
|
22
21
|
allow(@client).to receive(:call).with('package_releases', 'fake_package').and_return([])
|
@@ -335,7 +334,6 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
335
334
|
|
336
335
|
it "should install" do
|
337
336
|
@resource[:ensure] = :installed
|
338
|
-
@resource[:source] = nil
|
339
337
|
expect(@provider).to receive(:execute).with(["/fake/bin/pip", ["install", "-q", "fake_package"]])
|
340
338
|
@provider.install
|
341
339
|
end
|
@@ -368,7 +366,6 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
368
366
|
|
369
367
|
it "should install a particular version" do
|
370
368
|
@resource[:ensure] = "0.0.0"
|
371
|
-
@resource[:source] = nil
|
372
369
|
# TJK
|
373
370
|
expect(@provider).to receive(:execute).with(["/fake/bin/pip", ["install", "-q", "fake_package==0.0.0"]])
|
374
371
|
@provider.install
|
@@ -376,7 +373,6 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
376
373
|
|
377
374
|
it "should upgrade" do
|
378
375
|
@resource[:ensure] = :latest
|
379
|
-
@resource[:source] = nil
|
380
376
|
# TJK
|
381
377
|
expect(@provider).to receive(:execute).with(["/fake/bin/pip", ["install", "-q", "--upgrade", "fake_package"]])
|
382
378
|
@provider.install
|
@@ -384,7 +380,6 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
384
380
|
|
385
381
|
it "should handle install options" do
|
386
382
|
@resource[:ensure] = :installed
|
387
|
-
@resource[:source] = nil
|
388
383
|
@resource[:install_options] = [{"--timeout" => "10"}, "--no-index"]
|
389
384
|
expect(@provider).to receive(:execute).with(["/fake/bin/pip", ["install", "-q", "--timeout=10", "--no-index", "fake_package"]])
|
390
385
|
@provider.install
|
@@ -415,7 +410,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
415
410
|
let(:pip) { '/fake/bin/pip' }
|
416
411
|
|
417
412
|
it "should look up version if pip is present" do
|
418
|
-
allow(described_class).to receive(:
|
413
|
+
allow(described_class).to receive(:cmd).and_return(pip)
|
419
414
|
process = ['pip 8.0.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)']
|
420
415
|
allow(described_class).to receive(:execpipe).with([pip, '--version']).and_yield(process)
|
421
416
|
|
@@ -423,7 +418,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
423
418
|
end
|
424
419
|
|
425
420
|
it "parses multiple lines of output" do
|
426
|
-
allow(described_class).to receive(:
|
421
|
+
allow(described_class).to receive(:cmd).and_return(pip)
|
427
422
|
process = [
|
428
423
|
"/usr/local/lib/python2.7/dist-packages/urllib3/contrib/socks.py:37: DependencyWarning: SOCKS support in urllib3 requires the installation of optional dependencies: specifically, PySocks. For more information, see https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxies",
|
429
424
|
" DependencyWarning",
|
@@ -435,7 +430,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
435
430
|
end
|
436
431
|
|
437
432
|
it "raises if there isn't a version string" do
|
438
|
-
allow(described_class).to receive(:
|
433
|
+
allow(described_class).to receive(:cmd).and_return(pip)
|
439
434
|
allow(described_class).to receive(:execpipe).with([pip, '--version']).and_yield([""])
|
440
435
|
expect {
|
441
436
|
described_class.pip_version(pip)
|
@@ -444,7 +439,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
|
|
444
439
|
|
445
440
|
it "quotes commands with spaces" do
|
446
441
|
pip = 'C:\Program Files\Python27\Scripts\pip.exe'
|
447
|
-
allow(described_class).to receive(:
|
442
|
+
allow(described_class).to receive(:cmd).and_return(pip)
|
448
443
|
process = ["pip 18.1 from c:\program files\python27\lib\site-packages\pip (python 2.7)\r\n"]
|
449
444
|
allow(described_class).to receive(:execpipe).with(["\"#{pip}\"", '--version']).and_yield(process)
|
450
445
|
|
@@ -8,10 +8,6 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
|
|
8
8
|
it { is_expected.not_to be_uninstallable }
|
9
9
|
|
10
10
|
describe "when installing it should fail when" do
|
11
|
-
before :each do
|
12
|
-
expect(Puppet::Util).not_to receive(:execute)
|
13
|
-
end
|
14
|
-
|
15
11
|
it "no source is specified" do
|
16
12
|
expect { provider.install }.to raise_error(Puppet::Error, /must specify a package source/)
|
17
13
|
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Puppet::Type.type(:package).provider(:puppetserver_gem) do
|
4
|
+
let(:resource) do
|
5
|
+
Puppet::Type.type(:package).new(
|
6
|
+
name: 'myresource',
|
7
|
+
ensure: :installed
|
8
|
+
)
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:provider) do
|
12
|
+
provider = described_class.new
|
13
|
+
provider.resource = resource
|
14
|
+
provider
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:provider_gem_cmd) { '/opt/puppetlabs/bin/puppetserver' }
|
18
|
+
|
19
|
+
custom_environment = { HOME: ENV['HOME'] }
|
20
|
+
|
21
|
+
let(:execute_options) { { failonfail: true, combine: true, custom_environment: custom_environment } }
|
22
|
+
|
23
|
+
before :each do
|
24
|
+
resource.provider = provider
|
25
|
+
allow(Puppet::Util).to receive(:which).with(provider_gem_cmd).and_return(provider_gem_cmd)
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#install" do
|
29
|
+
it "uses the path to the gem command" do
|
30
|
+
allow(described_class).to receive(:validate_command).with(provider_gem_cmd)
|
31
|
+
expect(Puppet::Util::Execution).to receive(:execute).with(be_a(Array), execute_options) { |args| expect(args[0]).to eq(provider_gem_cmd) }.and_return('')
|
32
|
+
provider.install
|
33
|
+
end
|
34
|
+
|
35
|
+
it "appends version if given" do
|
36
|
+
resource[:ensure] = ['1.2.1']
|
37
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem install -v 1.2.1 --no-document myresource}).and_return('')
|
38
|
+
provider.install
|
39
|
+
end
|
40
|
+
|
41
|
+
context "with install_options" do
|
42
|
+
it "does not append the parameter by default" do
|
43
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem install --no-document myresource}).and_return('')
|
44
|
+
provider.install
|
45
|
+
end
|
46
|
+
|
47
|
+
it "allows setting the parameter" do
|
48
|
+
resource[:install_options] = [ '--force', {'--bindir' => '/usr/bin' } ]
|
49
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem install --force --bindir=/usr/bin --no-document myresource}).and_return('')
|
50
|
+
provider.install
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "with source" do
|
55
|
+
it "correctly sets http source" do
|
56
|
+
resource[:source] = 'http://rubygems.com'
|
57
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem install --no-document --source http://rubygems.com myresource}).and_return('')
|
58
|
+
provider.install
|
59
|
+
end
|
60
|
+
|
61
|
+
it "correctly sets local file source" do
|
62
|
+
resource[:source] = 'paint-2.2.0.gem'
|
63
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem install --no-document paint-2.2.0.gem}).and_return('')
|
64
|
+
provider.install
|
65
|
+
end
|
66
|
+
|
67
|
+
it "correctly sets local file source with URI scheme" do
|
68
|
+
resource[:source] = 'file:///root/paint-2.2.0.gem'
|
69
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem install --no-document /root/paint-2.2.0.gem}).and_return('')
|
70
|
+
provider.install
|
71
|
+
end
|
72
|
+
|
73
|
+
it "raises if given a puppet URI scheme" do
|
74
|
+
resource[:source] = 'puppet:///paint-2.2.0.gem'
|
75
|
+
expect { provider.install }.to raise_error(Puppet::Error, 'puppet:// URLs are not supported as gem sources')
|
76
|
+
end
|
77
|
+
|
78
|
+
it "raises if given an invalid URI" do
|
79
|
+
resource[:source] = 'h;ttp://rubygems.com'
|
80
|
+
expect { provider.install }.to raise_error(Puppet::Error, /Invalid source '': bad URI\(is not URI\?\)/)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "#uninstall" do
|
86
|
+
it "uses the path to the gem command" do
|
87
|
+
allow(described_class).to receive(:validate_command).with(provider_gem_cmd)
|
88
|
+
expect(Puppet::Util::Execution).to receive(:execute).with(be_a(Array), execute_options) { |args| expect(args[0]).to eq(provider_gem_cmd) }.and_return('')
|
89
|
+
provider.uninstall
|
90
|
+
end
|
91
|
+
|
92
|
+
context "with uninstall_options" do
|
93
|
+
it "does not append the parameter by default" do
|
94
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem uninstall --executables --all myresource}).and_return('')
|
95
|
+
provider.uninstall
|
96
|
+
end
|
97
|
+
|
98
|
+
it "allows setting the parameter" do
|
99
|
+
resource[:uninstall_options] = [ '--force', {'--bindir' => '/usr/bin' } ]
|
100
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem uninstall --executables --all myresource --force --bindir=/usr/bin}).and_return('')
|
101
|
+
provider.uninstall
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe ".gemlist" do
|
107
|
+
context "listing installed packages" do
|
108
|
+
it "uses the puppet rubygems library to list local gems" do
|
109
|
+
expected = { name: 'world_airports', provider: :puppetserver_gem, ensure: ['1.1.3'] }
|
110
|
+
expect(described_class).to receive(:execute_rubygems_list_command).with(nil).and_return(File.read(my_fixture('gem-list-local-packages')))
|
111
|
+
expect(described_class.gemlist({ local: true })).to include(expected)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
it "appends the gem source if given" do
|
116
|
+
expect(described_class).to receive(:puppetservercmd).with(%w{gem list --remote --source https://rubygems.com}).and_return('')
|
117
|
+
described_class.gemlist({ source: 'https://rubygems.com' })
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'calculated specificity' do
|
122
|
+
context 'when is not defaultfor' do
|
123
|
+
subject { described_class.specificity }
|
124
|
+
it { is_expected.to eql 1 }
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'when is defaultfor' do
|
128
|
+
let(:os) { Facter.value(:operatingsystem) }
|
129
|
+
subject do
|
130
|
+
described_class.defaultfor(operatingsystem: os)
|
131
|
+
described_class.specificity
|
132
|
+
end
|
133
|
+
it { is_expected.to be > 100 }
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|