puppet 5.5.16-x86-mingw32 → 5.5.21-x86-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 +10 -10
- data/Gemfile +2 -3
- data/Gemfile.lock +57 -52
- data/ext/build_defaults.yaml +1 -0
- data/ext/cert_inspector +3 -3
- data/ext/project_data.yaml +2 -2
- data/ext/puppet-test +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +4 -4
- data/ext/windows/service/daemon.rb +54 -8
- data/install.rb +6 -24
- data/lib/puppet.rb +5 -2
- data/lib/puppet/agent.rb +5 -13
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/agent.rb +15 -1
- data/lib/puppet/application/apply.rb +2 -2
- data/lib/puppet/application/describe.rb +3 -9
- data/lib/puppet/application/device.rb +4 -4
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +13 -0
- data/lib/puppet/application/lookup.rb +1 -1
- data/lib/puppet/application/resource.rb +4 -4
- data/lib/puppet/application/script.rb +2 -2
- data/lib/puppet/configurer.rb +86 -28
- data/lib/puppet/configurer/downloader.rb +2 -6
- data/lib/puppet/daemon.rb +1 -1
- data/lib/puppet/defaults.rb +82 -38
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/external/nagios/base.rb +1 -1
- data/lib/puppet/face/ca.rb +1 -1
- data/lib/puppet/face/config.rb +10 -48
- data/lib/puppet/face/facts.rb +1 -1
- data/lib/puppet/face/module/list.rb +5 -5
- data/lib/puppet/face/module/search.rb +1 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/module/upgrade.rb +1 -1
- data/lib/puppet/face/plugin.rb +9 -2
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_system.rb +0 -8
- data/lib/puppet/file_system/memory_file.rb +1 -1
- data/lib/puppet/file_system/posix.rb +3 -2
- data/lib/puppet/file_system/uniquefile.rb +4 -0
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/gettext/module_translations.rb +1 -1
- data/lib/puppet/graph/rb_tree_map.rb +2 -2
- data/lib/puppet/graph/simple_graph.rb +6 -5
- data/lib/puppet/indirector/catalog/compiler.rb +8 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/hiera.rb +2 -0
- data/lib/puppet/indirector/resource/ral.rb +1 -3
- data/lib/puppet/indirector/resource/validator.rb +1 -1
- data/lib/puppet/interface.rb +2 -1
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/module_tool/applications/builder.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
- data/lib/puppet/module_tool/tar/mini.rb +12 -2
- data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/connection.rb +14 -12
- data/lib/puppet/network/http/factory.rb +1 -11
- data/lib/puppet/network/http/pool.rb +7 -1
- data/lib/puppet/network/http/rack/rest.rb +2 -2
- data/lib/puppet/network/http/site.rb +1 -1
- data/lib/puppet/network/resolver.rb +2 -2
- data/lib/puppet/node/environment.rb +4 -2
- data/lib/puppet/parameter.rb +8 -0
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/resourceparam.rb +1 -1
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +3 -0
- data/lib/puppet/parser/functions.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loaders.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/merge_strategy.rb +22 -18
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/pn_parser.rb +17 -16
- data/lib/puppet/pops/puppet_stack.rb +51 -48
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
- data/lib/puppet/pops/types/string_converter.rb +10 -10
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/pops/types/types.rb +3 -3
- data/lib/puppet/pops/validation/checker4_0.rb +10 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec.rb +6 -2
- data/lib/puppet/provider/file/posix.rb +5 -0
- data/lib/puppet/provider/group/groupadd.rb +19 -19
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/mount.rb +1 -1
- data/lib/puppet/provider/mount/parsed.rb +8 -8
- data/lib/puppet/provider/nameservice.rb +10 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
- data/lib/puppet/provider/nameservice/pw.rb +2 -2
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +14 -3
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +141 -0
- data/lib/puppet/provider/package/dpkg.rb +16 -18
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/openbsd.rb +14 -2
- data/lib/puppet/provider/package/pip.rb +37 -10
- data/lib/puppet/provider/package/pkg.rb +18 -5
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +4 -4
- data/lib/puppet/provider/package/rpm.rb +57 -19
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +35 -24
- data/lib/puppet/provider/package/zypper.rb +1 -0
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
- data/lib/puppet/provider/selmodule/semodule.rb +43 -26
- data/lib/puppet/provider/service/daemontools.rb +9 -9
- data/lib/puppet/provider/service/launchd.rb +20 -5
- data/lib/puppet/provider/service/openbsd.rb +1 -1
- data/lib/puppet/provider/service/rcng.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +2 -8
- data/lib/puppet/provider/service/systemd.rb +35 -22
- data/lib/puppet/provider/service/windows.rb +8 -0
- data/lib/puppet/provider/user/directoryservice.rb +31 -6
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/pw.rb +12 -3
- data/lib/puppet/provider/user/user_role_add.rb +5 -1
- data/lib/puppet/provider/user/useradd.rb +62 -27
- data/lib/puppet/provider/user/windows_adsi.rb +4 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/reference/indirection.rb +2 -2
- data/lib/puppet/reference/metaparameter.rb +1 -3
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/reference/type.rb +3 -9
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/resource.rb +18 -1
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/resource/type.rb +8 -0
- data/lib/puppet/settings.rb +43 -3
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/certificate_authority.rb +6 -5
- data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +1 -1
- data/lib/puppet/test/test_helper.rb +15 -10
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +15 -4
- data/lib/puppet/type/cron.rb +1 -1
- data/lib/puppet/type/exec.rb +21 -9
- data/lib/puppet/type/file.rb +14 -2
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/group.rb +4 -2
- data/lib/puppet/type/interface.rb +1 -1
- data/lib/puppet/type/notify.rb +3 -2
- data/lib/puppet/type/package.rb +107 -8
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/selboolean.rb +17 -3
- data/lib/puppet/type/service.rb +9 -10
- data/lib/puppet/type/user.rb +6 -24
- data/lib/puppet/type/yumrepo.rb +3 -7
- data/lib/puppet/util.rb +47 -25
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/execution.rb +4 -3
- data/lib/puppet/util/http_proxy.rb +24 -16
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/log.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +3 -12
- data/lib/puppet/util/logging.rb +30 -18
- data/lib/puppet/util/metric.rb +2 -2
- data/lib/puppet/util/monkey_patches.rb +1 -1
- data/lib/puppet/util/nagios_maker.rb +2 -2
- data/lib/puppet/util/network_device/cisco/device.rb +1 -1
- data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
- data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
- data/lib/puppet/util/pidlock.rb +12 -6
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/provider_features.rb +2 -4
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/selinux.rb +8 -2
- data/lib/puppet/util/windows/adsi.rb +60 -30
- data/lib/puppet/util/windows/api_types.rb +45 -32
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/process.rb +16 -15
- data/lib/puppet/util/windows/registry.rb +17 -15
- data/lib/puppet/util/windows/security.rb +3 -0
- data/lib/puppet/util/windows/service.rb +149 -4
- data/lib/puppet/util/windows/sid.rb +4 -3
- data/lib/puppet/vendor.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_pal.rb +2 -2
- data/locales/puppet.pot +479 -443
- data/man/man5/puppet.conf.5 +38 -8
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.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 +16 -1
- 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-master.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- 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-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/integration/configurer_spec.rb +52 -0
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/provider/service/systemd_spec.rb +8 -5
- data/spec/integration/type/file_spec.rb +28 -0
- data/spec/integration/type/notify_spec.rb +46 -0
- data/spec/integration/util/execution_spec.rb +27 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/unit/agent_spec.rb +34 -26
- data/spec/unit/application/agent_spec.rb +18 -0
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/device_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer_spec.rb +377 -397
- data/spec/unit/daemon_spec.rb +0 -1
- data/spec/unit/face/facts_spec.rb +9 -0
- data/spec/unit/face/plugin_spec.rb +8 -0
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/forge/forge_spec.rb +1 -3
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
- data/spec/unit/indirector/resource/ral_spec.rb +4 -4
- data/spec/unit/module_tool/tar/mini_spec.rb +1 -1
- data/spec/unit/network/http/api/indirected_routes_spec.rb +28 -11
- data/spec/unit/network/http/connection_spec.rb +43 -1
- data/spec/unit/network/http/factory_spec.rb +27 -5
- data/spec/unit/network/http/pool_spec.rb +32 -0
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/validator/validator_spec.rb +7 -0
- data/spec/unit/provider/exec_spec.rb +209 -0
- data/spec/unit/provider/group/groupadd_spec.rb +30 -1
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +13 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/dnf_spec.rb +7 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
- data/spec/unit/provider/package/dpkg_spec.rb +35 -7
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pip_spec.rb +93 -22
- data/spec/unit/provider/package/pkg_spec.rb +13 -1
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +36 -0
- data/spec/unit/provider/package/portage_spec.rb +4 -4
- data/spec/unit/provider/package/rpm_spec.rb +150 -16
- data/spec/unit/provider/package/yum_spec.rb +66 -0
- data/spec/unit/provider/package/zypper_spec.rb +13 -0
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/selmodule_spec.rb +118 -47
- data/spec/unit/provider/service/daemontools_spec.rb +24 -0
- data/spec/unit/provider/service/launchd_spec.rb +28 -0
- data/spec/unit/provider/service/runit_spec.rb +24 -0
- data/spec/unit/provider/service/systemd_spec.rb +109 -36
- data/spec/unit/provider/service/windows_spec.rb +20 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/pw_spec.rb +37 -0
- data/spec/unit/provider/user/useradd_spec.rb +122 -15
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +3 -0
- data/spec/unit/resource_spec.rb +26 -1
- data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction_spec.rb +18 -0
- data/spec/unit/type/exec_spec.rb +15 -12
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/file_spec.rb +9 -4
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/schedule_spec.rb +3 -1
- data/spec/unit/type/selboolean_spec.rb +4 -6
- data/spec/unit/type/service_spec.rb +25 -8
- data/spec/unit/type/user_spec.rb +32 -26
- data/spec/unit/type/yumrepo_spec.rb +30 -0
- data/spec/unit/type_spec.rb +40 -0
- data/spec/unit/util/execution_spec.rb +16 -0
- data/spec/unit/util/http_proxy_spec.rb +121 -1
- data/spec/unit/util/log/destinations_spec.rb +2 -26
- data/spec/unit/util/log_spec.rb +0 -112
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/pidlock_spec.rb +67 -40
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/windows/adsi_spec.rb +55 -4
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +9 -0
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/tasks/manpages.rake +1 -0
- metadata +18 -13
- data/ext/windows/eventlog/Rakefile +0 -32
- data/ext/windows/eventlog/puppetres.dll +0 -0
- data/ext/windows/eventlog/puppetres.mc +0 -18
- data/lib/puppet/pops/loader/null_loader.rb +0 -60
- data/locales/ja/puppet.po +0 -12114
- data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -6,78 +6,149 @@
|
|
6
6
|
require 'spec_helper'
|
7
7
|
require 'stringio'
|
8
8
|
|
9
|
-
|
9
|
+
describe Puppet::Type.type(:selmodule).provider(:semodule) do
|
10
|
+
let(:resource) { instance_double('resource', name: name) }
|
11
|
+
let(:provider) { described_class.new(resource) }
|
10
12
|
|
11
|
-
describe provider_class do
|
12
13
|
before :each do
|
13
|
-
|
14
|
-
allow(@resource).to receive(:[]).and_return("foo")
|
15
|
-
@provider = provider_class.new(@resource)
|
14
|
+
allow(resource).to receive(:[]).and_return name
|
16
15
|
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
def loaded_modules
|
18
|
+
{
|
19
|
+
'bar' => '1.2.3',
|
20
|
+
'foo' => '4.4.4',
|
21
|
+
'bang' => '1.0.0',
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def semodule_list_output
|
26
|
+
loaded_modules.map{|k,v| "#{k}\t#{v}"}.join("\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'selmodules_loaded' do
|
30
|
+
let(:name) { 'foo' }
|
31
|
+
|
32
|
+
it 'should return raise an exception when running selmodule raises an exception' do
|
33
|
+
provider.class.loaded_modules = nil # Reset loaded_modules before test
|
34
|
+
allow(provider.class).to receive(:command).with(:semodule).and_return '/usr/sbin/semodule'
|
35
|
+
allow(provider.class).to receive(:execpipe).with('/usr/sbin/semodule --list')
|
36
|
+
.and_yield(StringIO.new("this is\nan error")).and_raise(Puppet::ExecutionFailure, 'it failed')
|
37
|
+
expect { provider.selmodules_loaded }
|
38
|
+
.to raise_error(Puppet::Error, /Could not list policy modules: ".*" failed with "this is an error"/)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should return empty hash if no modules are loaded' do
|
42
|
+
provider.class.loaded_modules = nil # Reset loaded_modules before test
|
43
|
+
allow(provider.class).to receive(:command).with(:semodule).and_return '/usr/sbin/semodule'
|
44
|
+
allow(provider.class).to receive(:execpipe).with('/usr/sbin/semodule --list').and_yield StringIO.new('')
|
45
|
+
expect(provider.selmodules_loaded).to eq(Hash.new())
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should return hash of loaded modules' do
|
49
|
+
provider.class.loaded_modules = nil # Reset loaded_modules before test
|
50
|
+
allow(provider.class).to receive(:command).with(:semodule).and_return '/usr/sbin/semodule'
|
51
|
+
allow(provider.class).to receive(:execpipe).with('/usr/sbin/semodule --list').and_yield StringIO.new(semodule_list_output)
|
52
|
+
expect(provider.selmodules_loaded).to eq(loaded_modules)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should return cached hash of loaded modules' do
|
56
|
+
allow(provider.class).to receive(:loaded_modules).and_return loaded_modules
|
57
|
+
allow(provider.class).to receive(:command).with(:semodule).and_return '/usr/sbin/semodule'
|
58
|
+
allow(provider.class).to receive(:execpipe).with('/usr/sbin/semodule --list').and_yield StringIO.new("test\t1.0.0")
|
59
|
+
expect(provider.selmodules_loaded).to eq(loaded_modules)
|
23
60
|
end
|
24
61
|
|
25
|
-
it
|
26
|
-
|
27
|
-
|
28
|
-
|
62
|
+
it 'should return cached hash of loaded modules and not raise an exception' do
|
63
|
+
allow(provider.class).to receive(:loaded_modules).and_return loaded_modules
|
64
|
+
allow(provider.class).to receive(:command).with(:semodule).and_return '/usr/sbin/semodule'
|
65
|
+
allow(provider.class).to receive(:execpipe).with('/usr/sbin/semodule --list')
|
66
|
+
.and_yield(StringIO.new('this should not be called')).and_raise(Puppet::ExecutionFailure, 'it failed')
|
67
|
+
expect(provider.selmodules_loaded).to eq(loaded_modules)
|
29
68
|
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'exists? method' do
|
72
|
+
context 'with name foo' do
|
73
|
+
let(:name) { 'foo' }
|
74
|
+
|
75
|
+
it 'should return false if no modules are loaded' do
|
76
|
+
allow(provider).to receive(:selmodules_loaded).and_return Hash.new()
|
77
|
+
expect(provider.exists?).to eq(false)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should find a module if it is already loaded' do
|
81
|
+
allow(provider).to receive(:selmodules_loaded).and_return loaded_modules
|
82
|
+
expect(provider.exists?).to eq(true)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'with name foobar' do
|
87
|
+
let(:name) { 'foobar' }
|
30
88
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
89
|
+
it 'should return false if not loaded' do
|
90
|
+
allow(provider).to receive(:selmodules_loaded).and_return loaded_modules
|
91
|
+
expect(provider.exists?).to eq(false)
|
92
|
+
end
|
35
93
|
end
|
36
94
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
95
|
+
context 'with name myfoo' do
|
96
|
+
let(:name) { 'myfoo' }
|
97
|
+
|
98
|
+
it 'should return false if module with same suffix is loaded' do
|
99
|
+
allow(provider).to receive(:selmodules_loaded).and_return loaded_modules
|
100
|
+
expect(provider.exists?).to eq(false)
|
101
|
+
end
|
41
102
|
end
|
42
103
|
end
|
43
104
|
|
44
|
-
describe
|
45
|
-
|
46
|
-
|
47
|
-
|
105
|
+
describe 'selmodversion_file' do
|
106
|
+
let(:name) { 'foo' }
|
107
|
+
|
108
|
+
it 'should return 1.5.0 for the example policy file' do
|
109
|
+
allow(provider).to receive(:selmod_name_to_filename).and_return "#{File.dirname(__FILE__)}/selmodule-example.pp"
|
110
|
+
expect(provider.selmodversion_file).to eq('1.5.0')
|
48
111
|
end
|
49
112
|
end
|
50
113
|
|
51
|
-
describe
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
114
|
+
describe 'syncversion' do
|
115
|
+
let(:name) { 'foo' }
|
116
|
+
|
117
|
+
it 'should return :true if loaded and file modules are in sync' do
|
118
|
+
allow(provider).to receive(:selmodversion_loaded).and_return '1.5.0'
|
119
|
+
allow(provider).to receive(:selmodversion_file).and_return '1.5.0'
|
120
|
+
expect(provider.syncversion).to eq(:true)
|
56
121
|
end
|
57
122
|
|
58
|
-
it
|
59
|
-
|
60
|
-
|
61
|
-
expect(
|
123
|
+
it 'should return :false if loaded and file modules are not in sync' do
|
124
|
+
allow(provider).to receive(:selmodversion_loaded).and_return '1.4.0'
|
125
|
+
allow(provider).to receive(:selmodversion_file).and_return '1.5.0'
|
126
|
+
expect(provider.syncversion).to eq(:false)
|
62
127
|
end
|
63
128
|
|
64
|
-
it
|
65
|
-
|
66
|
-
expect(
|
129
|
+
it 'should return before checking file version if no loaded policy' do
|
130
|
+
allow(provider).to receive(:selmodversion_loaded).and_return nil
|
131
|
+
expect(provider.syncversion).to eq(:false)
|
67
132
|
end
|
68
133
|
end
|
69
134
|
|
70
|
-
describe
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
135
|
+
describe 'selmodversion_loaded' do
|
136
|
+
context 'with name foo' do
|
137
|
+
let(:name) { 'foo' }
|
138
|
+
|
139
|
+
it 'should return the version of a loaded module' do
|
140
|
+
allow(provider).to receive(:selmodules_loaded).and_return loaded_modules
|
141
|
+
expect(provider.selmodversion_loaded).to eq('4.4.4')
|
142
|
+
end
|
75
143
|
end
|
76
144
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
145
|
+
context 'with name foobar' do
|
146
|
+
let(:name) { 'foobar' }
|
147
|
+
|
148
|
+
it 'should return nil if module is not loaded' do
|
149
|
+
allow(provider).to receive(:selmodules_loaded).and_return loaded_modules
|
150
|
+
expect(provider.selmodversion_loaded).to be_nil
|
151
|
+
end
|
81
152
|
end
|
82
153
|
end
|
83
154
|
end
|
@@ -160,4 +160,28 @@ describe Puppet::Type.type(:service).provider(:daemontools) do
|
|
160
160
|
expect(@provider.status).to eq(:stopped)
|
161
161
|
end
|
162
162
|
end
|
163
|
+
|
164
|
+
context '.instances' do
|
165
|
+
before do
|
166
|
+
allow(described_class).to receive(:defpath).and_return(path)
|
167
|
+
end
|
168
|
+
|
169
|
+
context 'when defpath is nil' do
|
170
|
+
let(:path) { nil }
|
171
|
+
|
172
|
+
it 'returns info message' do
|
173
|
+
expect(Puppet).to receive(:info).with(/daemontools is unsuitable because service directory is nil/)
|
174
|
+
described_class.instances
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context 'when defpath does not exist' do
|
179
|
+
let(:path) { '/inexistent_path' }
|
180
|
+
|
181
|
+
it 'returns notice about missing path' do
|
182
|
+
expect(Puppet).to receive(:notice).with(/Service path #{path} does not exist/)
|
183
|
+
described_class.instances
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
163
187
|
end
|
@@ -125,6 +125,8 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
125
125
|
end
|
126
126
|
|
127
127
|
describe "when starting the service" do
|
128
|
+
let(:services) { "12345 0 #{joblabel}" }
|
129
|
+
|
128
130
|
it "should call any explicit 'start' command" do
|
129
131
|
resource[:start] = "/bin/false"
|
130
132
|
expect(subject).to receive(:texecute).with(:start, ["/bin/false"], true)
|
@@ -132,6 +134,7 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
132
134
|
end
|
133
135
|
|
134
136
|
it "should look for the relevant plist once" do
|
137
|
+
allow(provider).to receive(:launchctl).with(:list).and_return(services)
|
135
138
|
expect(subject).to receive(:plist_from_label).and_return([joblabel, {}]).once
|
136
139
|
expect(subject).to receive(:enabled?).and_return(:true)
|
137
140
|
expect(subject).to receive(:execute).with([:launchctl, :load, "-w", joblabel])
|
@@ -139,6 +142,7 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
139
142
|
end
|
140
143
|
|
141
144
|
it "should execute 'launchctl load' once without writing to the plist if the job is enabled" do
|
145
|
+
allow(provider).to receive(:launchctl).with(:list).and_return(services)
|
142
146
|
expect(subject).to receive(:plist_from_label).and_return([joblabel, {}])
|
143
147
|
expect(subject).to receive(:enabled?).and_return(:true)
|
144
148
|
expect(subject).to receive(:execute).with([:launchctl, :load, "-w", joblabel]).once
|
@@ -242,6 +246,30 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
242
246
|
end
|
243
247
|
end
|
244
248
|
|
249
|
+
describe "when a service is unavailable" do
|
250
|
+
let(:map) { {"some.random.job" => "/path/to/job.plist"} }
|
251
|
+
|
252
|
+
before :each do
|
253
|
+
allow(provider).to receive(:make_label_to_path_map).and_return(map)
|
254
|
+
end
|
255
|
+
|
256
|
+
it "should fail when searching for the unavailable service" do
|
257
|
+
expect { provider.jobsearch("NOSUCH") }.to raise_error(Puppet::Error)
|
258
|
+
end
|
259
|
+
|
260
|
+
it "should return false when enabling the service" do
|
261
|
+
expect(subject.enabled?).to eq(:false)
|
262
|
+
end
|
263
|
+
|
264
|
+
it "should fail when starting the service" do
|
265
|
+
expect { subject.start }.to raise_error(Puppet::Error)
|
266
|
+
end
|
267
|
+
|
268
|
+
it "should fail when starting the service" do
|
269
|
+
expect { subject.stop }.to raise_error(Puppet::Error)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
245
273
|
[[10, "10.6"], [13, "10.9"]].each do |kernel, version|
|
246
274
|
describe "when enabling the service on OS X #{version}" do
|
247
275
|
it "should write to the global launchd overrides file once" do
|
@@ -134,4 +134,28 @@ describe Puppet::Type.type(:service).provider(:runit) do
|
|
134
134
|
expect(@provider.status).to eq(:stopped)
|
135
135
|
end
|
136
136
|
end
|
137
|
+
|
138
|
+
context '.instances' do
|
139
|
+
before do
|
140
|
+
allow(described_class).to receive(:defpath).and_return(path)
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'when defpath is nil' do
|
144
|
+
let(:path) { nil }
|
145
|
+
|
146
|
+
it 'returns info message' do
|
147
|
+
expect(Puppet).to receive(:info).with(/runit is unsuitable because service directory is nil/)
|
148
|
+
described_class.instances
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context 'when defpath does not exist' do
|
153
|
+
let(:path) { '/inexistent_path' }
|
154
|
+
|
155
|
+
it 'returns notice about missing path' do
|
156
|
+
expect(Puppet).to receive(:notice).with(/Service path #{path} does not exist/)
|
157
|
+
described_class.instances
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
137
161
|
end
|
@@ -151,9 +151,19 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
151
151
|
autovt@.service
|
152
152
|
avahi-daemon.service
|
153
153
|
blk-availability.service
|
154
|
+
apparmor.service
|
155
|
+
umountnfs.service
|
156
|
+
urandom.service
|
157
|
+
brandbot.service
|
154
158
|
})
|
155
159
|
end
|
156
|
-
|
160
|
+
|
161
|
+
it "should print a debug message when a service with the state `bad` is found" do
|
162
|
+
expect(described_class).to receive(:systemctl).with('list-unit-files', '--type', 'service', '--full', '--all', '--no-pager').and_return(File.read(my_fixture('list_unit_files_services')))
|
163
|
+
expect(Puppet).to receive(:debug).with("apparmor.service marked as bad by `systemctl`. It is recommended to be further checked.")
|
164
|
+
described_class.instances
|
165
|
+
end
|
166
|
+
end
|
157
167
|
|
158
168
|
describe "#start" do
|
159
169
|
it "should use the supplied start command if specified" do
|
@@ -164,15 +174,15 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
164
174
|
|
165
175
|
it "should start the service with systemctl start otherwise" do
|
166
176
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
167
|
-
expect(provider).to receive(:systemctl).with(:unmask, 'sshd.service')
|
168
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','start','sshd.service'], {:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
177
|
+
expect(provider).to receive(:systemctl).with(:unmask, '--', 'sshd.service')
|
178
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','start', '--', 'sshd.service'], {:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
169
179
|
provider.start
|
170
180
|
end
|
171
181
|
|
172
182
|
it "should show journald logs on failure" do
|
173
183
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
174
|
-
expect(provider).to receive(:systemctl).with(:unmask, 'sshd.service')
|
175
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','start','sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
184
|
+
expect(provider).to receive(:systemctl).with(:unmask, '--', 'sshd.service')
|
185
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','start', '--', 'sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
176
186
|
.and_raise(Puppet::ExecutionFailure, "Failed to start sshd.service: Unit sshd.service failed to load: Invalid argument. See system logs and 'systemctl status sshd.service' for details.")
|
177
187
|
journalctl_logs = <<-EOS
|
178
188
|
-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --
|
@@ -194,13 +204,13 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
|
|
194
204
|
|
195
205
|
it "should stop the service with systemctl stop otherwise" do
|
196
206
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
197
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','stop','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
207
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','stop', '--', 'sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
198
208
|
provider.stop
|
199
209
|
end
|
200
210
|
|
201
211
|
it "should show journald logs on failure" do
|
202
212
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
203
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','stop','sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
213
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','stop', '--', 'sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
204
214
|
.and_raise(Puppet::ExecutionFailure, "Failed to stop sshd.service: Unit sshd.service failed to load: Invalid argument. See system logs and 'systemctl status sshd.service' for details.")
|
205
215
|
journalctl_logs = <<-EOS
|
206
216
|
-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --
|
@@ -216,52 +226,54 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
|
|
216
226
|
describe "#enabled?" do
|
217
227
|
it "should return :true if the service is enabled" do
|
218
228
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
219
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).
|
220
|
-
|
229
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled', '--', 'sshd.service'], :failonfail => false).
|
230
|
+
and_return(Puppet::Util::Execution::ProcessOutput.new("enabled\n", 0))
|
221
231
|
expect(provider.enabled?).to eq(:true)
|
222
232
|
end
|
223
233
|
|
224
234
|
it "should return :true if the service is static" do
|
225
235
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
226
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).
|
227
|
-
|
236
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled','--', 'sshd.service'], :failonfail => false).
|
237
|
+
and_return(Puppet::Util::Execution::ProcessOutput.new("static\n", 0))
|
228
238
|
expect(provider.enabled?).to eq(:true)
|
229
239
|
end
|
230
240
|
|
231
241
|
it "should return :false if the service is disabled" do
|
232
242
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
233
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).
|
234
|
-
|
243
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled', '--', 'sshd.service'], :failonfail => false).
|
244
|
+
and_return(Puppet::Util::Execution::ProcessOutput.new("disabled\n", 1))
|
235
245
|
expect(provider.enabled?).to eq(:false)
|
236
246
|
end
|
237
247
|
|
238
248
|
it "should return :false if the service is indirect" do
|
239
249
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
240
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).
|
241
|
-
|
250
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled', '--', 'sshd.service'], :failonfail => false).
|
251
|
+
and_return(Puppet::Util::Execution::ProcessOutput.new("indirect\n", 0))
|
242
252
|
expect(provider.enabled?).to eq(:false)
|
243
253
|
end
|
244
254
|
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
255
|
+
context "when masked" do
|
256
|
+
it "should return :false if the resource is attempting to be disabled" do
|
257
|
+
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :enable => false))
|
258
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled', '--', 'sshd.service'], :failonfail => false).
|
259
|
+
and_return(Puppet::Util::Execution::ProcessOutput.new("masked\n", 1))
|
260
|
+
expect(provider.enabled?).to eq(:false)
|
261
|
+
end
|
251
262
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
263
|
+
it "should return :mask if the resource is attempting to be masked" do
|
264
|
+
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :enable => 'mask'))
|
265
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled', '--', 'sshd.service'], :failonfail => false).
|
266
|
+
and_return(Puppet::Util::Execution::ProcessOutput.new("masked\n", 1))
|
267
|
+
expect(provider.enabled?).to eq(:mask)
|
268
|
+
end
|
257
269
|
end
|
258
270
|
end
|
259
271
|
|
260
272
|
describe "#enable" do
|
261
273
|
it "should run systemctl enable to enable a service" do
|
262
274
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
263
|
-
expect(provider).to receive(:systemctl).with(:unmask, 'sshd.service')
|
264
|
-
expect(provider).to receive(:systemctl).with(:enable, 'sshd.service')
|
275
|
+
expect(provider).to receive(:systemctl).with(:unmask, '--', 'sshd.service')
|
276
|
+
expect(provider).to receive(:systemctl).with(:enable, '--', 'sshd.service')
|
265
277
|
provider.enable
|
266
278
|
end
|
267
279
|
end
|
@@ -269,7 +281,7 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
|
|
269
281
|
describe "#disable" do
|
270
282
|
it "should run systemctl disable to disable a service" do
|
271
283
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
272
|
-
expect(provider).to receive(:systemctl).with(:disable, 'sshd.service')
|
284
|
+
expect(provider).to receive(:systemctl).with(:disable, '--', 'sshd.service')
|
273
285
|
provider.disable
|
274
286
|
end
|
275
287
|
end
|
@@ -280,8 +292,8 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
|
|
280
292
|
# :disable is the only call in the provider that uses a symbol instead of
|
281
293
|
# a string.
|
282
294
|
# This should be made consistent in the future and all tests updated.
|
283
|
-
expect(provider).to receive(:systemctl).with(:disable, 'sshd.service')
|
284
|
-
expect(provider).to receive(:systemctl).with(:mask, 'sshd.service')
|
295
|
+
expect(provider).to receive(:systemctl).with(:disable, '--', 'sshd.service')
|
296
|
+
expect(provider).to receive(:systemctl).with(:mask, '--', 'sshd.service')
|
285
297
|
provider.mask
|
286
298
|
end
|
287
299
|
end
|
@@ -291,7 +303,7 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
|
|
291
303
|
describe "#status" do
|
292
304
|
it "should return running if if the command returns 0" do
|
293
305
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
294
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','is-active','sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true).and_return("active\n")
|
306
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','is-active','--','sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true).and_return("active\n")
|
295
307
|
allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
|
296
308
|
expect(provider.status).to eq(:running)
|
297
309
|
end
|
@@ -299,7 +311,7 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
|
|
299
311
|
[-10,-1,3,10].each { |ec|
|
300
312
|
it "should return stopped if the command returns something non-0" do
|
301
313
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
302
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','is-active','sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true).and_return("inactive\n")
|
314
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','is-active','--','sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true).and_return("inactive\n")
|
303
315
|
allow($CHILD_STATUS).to receive(:exitstatus).and_return(ec)
|
304
316
|
expect(provider.status).to eq(:stopped)
|
305
317
|
end
|
@@ -317,20 +329,20 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
|
|
317
329
|
describe "#restart" do
|
318
330
|
it "should use the supplied restart command if specified" do
|
319
331
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :restart => '/bin/foo'))
|
320
|
-
expect(provider).not_to receive(:execute).with(['/bin/systemctl','restart','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
332
|
+
expect(provider).not_to receive(:execute).with(['/bin/systemctl','restart','--','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
321
333
|
expect(provider).to receive(:execute).with(['/bin/foo'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
322
334
|
provider.restart
|
323
335
|
end
|
324
336
|
|
325
337
|
it "should restart the service with systemctl restart" do
|
326
338
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
327
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','restart','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
339
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','restart','--','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
328
340
|
provider.restart
|
329
341
|
end
|
330
342
|
|
331
343
|
it "should show journald logs on failure" do
|
332
344
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
333
|
-
expect(provider).to receive(:execute).with(['/bin/systemctl','restart','sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
345
|
+
expect(provider).to receive(:execute).with(['/bin/systemctl','restart', '--', 'sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
334
346
|
.and_raise(Puppet::ExecutionFailure, "Failed to restart sshd.service: Unit sshd.service failed to load: Invalid argument. See system logs and 'systemctl status sshd.service' for details.")
|
335
347
|
journalctl_logs = <<-EOS
|
336
348
|
-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --
|
@@ -372,6 +384,67 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
|
|
372
384
|
end
|
373
385
|
end
|
374
386
|
|
387
|
+
describe "#insync_enabled?" do
|
388
|
+
let(:provider) do
|
389
|
+
described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :enable => false))
|
390
|
+
end
|
391
|
+
|
392
|
+
before do
|
393
|
+
allow(provider).to receive(:cached_enabled?).and_return({ output: service_state, exitcode: 0 })
|
394
|
+
end
|
395
|
+
|
396
|
+
context 'when service state is static' do
|
397
|
+
let(:service_state) { 'static' }
|
398
|
+
|
399
|
+
it 'is always enabled_insync even if current value is the same as expected' do
|
400
|
+
expect(provider).to be_enabled_insync(:false)
|
401
|
+
end
|
402
|
+
|
403
|
+
it 'is always enabled_insync even if current value is not the same as expected' do
|
404
|
+
expect(provider).to be_enabled_insync(:true)
|
405
|
+
end
|
406
|
+
|
407
|
+
it 'logs a debug messsage' do
|
408
|
+
expect(Puppet).to receive(:debug).with("Unable to enable or disable static service sshd.service")
|
409
|
+
provider.enabled_insync?(:true)
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
context 'when service state is indirect' do
|
414
|
+
let(:service_state) { 'indirect' }
|
415
|
+
|
416
|
+
it 'is always enabled_insync even if current value is the same as expected' do
|
417
|
+
expect(provider).to be_enabled_insync(:false)
|
418
|
+
end
|
419
|
+
|
420
|
+
it 'is always enabled_insync even if current value is not the same as expected' do
|
421
|
+
expect(provider).to be_enabled_insync(:true)
|
422
|
+
end
|
423
|
+
|
424
|
+
it 'logs a debug messsage' do
|
425
|
+
expect(Puppet).to receive(:debug).with("Service sshd.service is in 'indirect' state and cannot be enabled/disabled")
|
426
|
+
provider.enabled_insync?(:true)
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
430
|
+
context 'when service state is enabled' do
|
431
|
+
let(:service_state) { 'enabled' }
|
432
|
+
|
433
|
+
it 'is enabled_insync if current value is the same as expected' do
|
434
|
+
expect(provider).to be_enabled_insync(:false)
|
435
|
+
end
|
436
|
+
|
437
|
+
it 'is not enabled_insync if current value is not the same as expected' do
|
438
|
+
expect(provider).not_to be_enabled_insync(:true)
|
439
|
+
end
|
440
|
+
|
441
|
+
it 'logs no debug messsage' do
|
442
|
+
expect(Puppet).not_to receive(:debug)
|
443
|
+
provider.enabled_insync?(:true)
|
444
|
+
end
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
375
448
|
describe "#get_start_link_count" do
|
376
449
|
it "should strip the '.service' from the search if present in the resource name" do
|
377
450
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|