puppet 6.19.0-x86-mingw32 → 7.3.0-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 +2 -16
- data/Gemfile +3 -4
- data/Gemfile.lock +33 -28
- data/README.md +1 -1
- data/conf/fileserver.conf +5 -10
- data/ext/build_defaults.yaml +1 -1
- data/ext/osx/file_mapping.yaml +0 -5
- data/ext/project_data.yaml +2 -14
- data/ext/redhat/puppet.spec.erb +0 -1
- data/ext/windows/service/daemon.rb +6 -5
- data/install.rb +21 -17
- data/lib/puppet.rb +11 -20
- data/lib/puppet/application.rb +182 -104
- data/lib/puppet/application/agent.rb +1 -0
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +101 -104
- data/lib/puppet/application/filebucket.rb +15 -11
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application/ssl.rb +1 -1
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +44 -36
- data/lib/puppet/configurer/plugin_handler.rb +21 -19
- data/lib/puppet/defaults.rb +71 -170
- data/lib/puppet/environments.rb +44 -75
- data/lib/puppet/face/config.rb +10 -0
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +80 -6
- data/lib/puppet/face/help.rb +1 -1
- data/lib/puppet/face/node/clean.rb +8 -0
- data/lib/puppet/face/plugin.rb +5 -8
- 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/ffi/windows.rb +12 -0
- data/lib/puppet/ffi/windows/api_types.rb +311 -0
- data/lib/puppet/ffi/windows/constants.rb +404 -0
- data/lib/puppet/ffi/windows/functions.rb +628 -0
- data/lib/puppet/ffi/windows/structs.rb +338 -0
- data/lib/puppet/file_serving/configuration.rb +0 -5
- data/lib/puppet/file_serving/configuration/parser.rb +6 -32
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_serving/mount.rb +1 -2
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/generate/models/type/type.rb +4 -1
- data/lib/puppet/http.rb +22 -13
- data/lib/puppet/http/client.rb +164 -114
- data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
- data/lib/puppet/http/errors.rb +16 -0
- data/lib/puppet/http/external_client.rb +5 -7
- data/lib/puppet/{network/http → http}/factory.rb +8 -11
- data/lib/puppet/{network/http → http}/pool.rb +61 -26
- data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
- data/lib/puppet/http/proxy.rb +137 -0
- data/lib/puppet/http/redirector.rb +4 -12
- data/lib/puppet/http/resolver.rb +5 -15
- data/lib/puppet/http/resolver/server_list.rb +6 -10
- data/lib/puppet/http/resolver/settings.rb +4 -7
- data/lib/puppet/http/resolver/srv.rb +7 -11
- data/lib/puppet/http/response.rb +36 -54
- data/lib/puppet/http/response_converter.rb +24 -0
- data/lib/puppet/http/response_net_http.rb +42 -0
- data/lib/puppet/http/retry_after_handler.rb +4 -13
- data/lib/puppet/http/service.rb +12 -26
- data/lib/puppet/http/service/ca.rb +11 -22
- data/lib/puppet/http/service/compiler.rb +22 -69
- data/lib/puppet/http/service/file_server.rb +18 -27
- data/lib/puppet/http/service/puppetserver.rb +26 -12
- data/lib/puppet/http/service/report.rb +8 -10
- data/lib/puppet/http/session.rb +11 -20
- data/lib/puppet/{network/http → http}/site.rb +1 -2
- data/lib/puppet/indirector/catalog/rest.rb +2 -4
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +24 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/rest.rb +3 -22
- data/lib/puppet/indirector/facts/yaml.rb +3 -58
- data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
- data/lib/puppet/indirector/file_content/rest.rb +2 -6
- data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
- data/lib/puppet/indirector/file_server.rb +1 -8
- data/lib/puppet/indirector/generic_http.rb +0 -11
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/node/rest.rb +2 -4
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/report/rest.rb +3 -8
- data/lib/puppet/indirector/request.rb +0 -101
- data/lib/puppet/indirector/rest.rb +12 -263
- data/lib/puppet/module_tool/applications.rb +0 -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/authconfig.rb +2 -96
- data/lib/puppet/network/authorization.rb +13 -35
- data/lib/puppet/network/formats.rb +69 -1
- data/lib/puppet/network/http.rb +3 -3
- data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
- data/lib/puppet/network/http/api/master/v3.rb +11 -13
- data/lib/puppet/network/http/connection.rb +247 -316
- data/lib/puppet/network/http/handler.rb +0 -1
- data/lib/puppet/network/http_pool.rb +16 -34
- data/lib/puppet/node.rb +1 -30
- data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
- data/lib/puppet/pal/pal_impl.rb +73 -18
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
- data/lib/puppet/parser/compiler.rb +0 -198
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
- data/lib/puppet/parser/resource.rb +0 -69
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/issues.rb +0 -5
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
- data/lib/puppet/pops/model/ast.pp +0 -42
- data/lib/puppet/pops/model/ast.rb +0 -290
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +0 -45
- data/lib/puppet/pops/model/model_label_provider.rb +0 -5
- data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
- data/lib/puppet/pops/model/pn_transformer.rb +0 -16
- data/lib/puppet/pops/parser/egrammar.ra +0 -56
- data/lib/puppet/pops/parser/eparser.rb +1520 -1712
- data/lib/puppet/pops/parser/lexer2.rb +4 -4
- data/lib/puppet/pops/parser/parser_support.rb +0 -5
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
- data/lib/puppet/pops/types/type_calculator.rb +0 -7
- data/lib/puppet/pops/types/type_parser.rb +0 -4
- data/lib/puppet/pops/types/types.rb +0 -1
- data/lib/puppet/pops/validation/checker4_0.rb +9 -37
- data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
- data/lib/puppet/provider.rb +0 -13
- data/lib/puppet/provider/nameservice.rb +0 -18
- data/lib/puppet/provider/package/apt.rb +4 -0
- data/lib/puppet/provider/package/dpkg.rb +0 -10
- data/lib/puppet/provider/package/gem.rb +23 -3
- data/lib/puppet/provider/package/pip.rb +0 -1
- data/lib/puppet/provider/package/pkg.rb +0 -4
- data/lib/puppet/provider/package/portage.rb +1 -1
- data/lib/puppet/provider/package/puppet_gem.rb +1 -4
- data/lib/puppet/provider/service/smf.rb +191 -73
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/directoryservice.rb +0 -10
- data/lib/puppet/reference/configuration.rb +8 -5
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +1 -89
- data/lib/puppet/resource/catalog.rb +1 -14
- data/lib/puppet/resource/type.rb +3 -119
- data/lib/puppet/resource/type_collection.rb +3 -48
- data/lib/puppet/runtime.rb +1 -2
- data/lib/puppet/settings.rb +88 -48
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/settings/integer_setting.rb +17 -0
- data/lib/puppet/settings/port_setting.rb +15 -0
- data/lib/puppet/settings/priority_setting.rb +5 -4
- data/lib/puppet/ssl.rb +10 -6
- data/lib/puppet/ssl/base.rb +3 -5
- data/lib/puppet/ssl/certificate.rb +0 -6
- data/lib/puppet/ssl/certificate_request.rb +1 -12
- data/lib/puppet/ssl/certificate_signer.rb +6 -0
- data/lib/puppet/ssl/oids.rb +3 -1
- data/lib/puppet/ssl/ssl_provider.rb +17 -0
- data/lib/puppet/ssl/state_machine.rb +3 -1
- data/lib/puppet/ssl/verifier.rb +2 -0
- data/lib/puppet/test/test_helper.rb +1 -3
- data/lib/puppet/transaction.rb +1 -7
- data/lib/puppet/transaction/report.rb +2 -4
- data/lib/puppet/type.rb +0 -76
- data/lib/puppet/type/file.rb +5 -7
- data/lib/puppet/type/file/checksum.rb +1 -1
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/filebucket.rb +3 -3
- data/lib/puppet/type/package.rb +5 -13
- data/lib/puppet/type/user.rb +1 -1
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/execution.rb +0 -11
- data/lib/puppet/util/http_proxy.rb +2 -215
- data/lib/puppet/util/monkey_patches.rb +0 -46
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rdoc.rb +0 -7
- data/lib/puppet/util/retry_action.rb +1 -1
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +9 -1
- data/lib/puppet/util/windows.rb +3 -8
- data/lib/puppet/util/windows/daemon.rb +360 -0
- data/lib/puppet/util/windows/error.rb +1 -0
- data/lib/puppet/util/windows/eventlog.rb +4 -9
- data/lib/puppet/util/windows/file.rb +8 -242
- data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
- data/lib/puppet/util/windows/process.rb +4 -226
- data/lib/puppet/util/windows/service.rb +9 -460
- data/lib/puppet/util/windows/string.rb +12 -13
- data/lib/puppet/util/yaml.rb +0 -22
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509.rb +5 -1
- data/lib/puppet/x509/cert_provider.rb +29 -1
- data/locales/puppet.pot +629 -1314
- data/man/man5/puppet.conf.5 +39 -99
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- 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 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +58 -9
- data/man/man8/puppet-filebucket.8 +6 -6
- 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 +1 -58
- data/man/man8/puppet-node.8 +4 -1
- 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.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +151 -14
- data/spec/integration/application/apply_spec.rb +20 -1
- data/spec/integration/application/filebucket_spec.rb +16 -16
- data/spec/integration/application/help_spec.rb +2 -0
- data/spec/integration/application/plugin_spec.rb +23 -1
- data/spec/integration/defaults_spec.rb +7 -10
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
- data/spec/integration/network/http_pool_spec.rb +3 -21
- data/spec/integration/parser/catalog_spec.rb +0 -38
- data/spec/integration/parser/node_spec.rb +0 -9
- data/spec/integration/parser/pcore_resource_spec.rb +0 -37
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/type/file_spec.rb +5 -4
- data/spec/integration/util/windows/adsi_spec.rb +3 -1
- data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
- data/spec/integration/util/windows/registry_spec.rb +0 -10
- data/spec/integration/util/windows/security_spec.rb +1 -1
- data/spec/lib/puppet_spec/puppetserver.rb +1 -1
- data/spec/lib/puppet_spec/settings.rb +7 -1
- data/spec/spec_helper.rb +3 -4
- data/spec/unit/agent_spec.rb +8 -8
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/facts_spec.rb +35 -0
- data/spec/unit/application/filebucket_spec.rb +41 -41
- data/spec/unit/application/ssl_spec.rb +2 -2
- data/spec/unit/application_spec.rb +51 -9
- data/spec/unit/certificate_factory_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +6 -2
- data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
- data/spec/unit/configurer_spec.rb +12 -9
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/context/trusted_information_spec.rb +2 -6
- data/spec/unit/defaults_spec.rb +26 -32
- data/spec/unit/environments_spec.rb +96 -22
- data/spec/unit/face/config_spec.rb +27 -32
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/face/node_spec.rb +14 -13
- data/spec/unit/face/plugin_spec.rb +73 -33
- data/spec/unit/file_bucket/file_spec.rb +1 -1
- data/spec/unit/file_serving/configuration/parser_spec.rb +22 -19
- data/spec/unit/file_serving/configuration_spec.rb +6 -12
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/camelcase_spec.rb +1 -1
- data/spec/unit/functions/capitalize_spec.rb +1 -1
- data/spec/unit/functions/downcase_spec.rb +1 -1
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/functions/upcase_spec.rb +1 -1
- data/spec/unit/http/client_spec.rb +7 -8
- data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
- data/spec/unit/http/external_client_spec.rb +4 -4
- data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
- data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
- data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
- data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
- data/spec/unit/http/resolver_spec.rb +13 -13
- data/spec/unit/http/service/compiler_spec.rb +49 -62
- data/spec/unit/http/service/file_server_spec.rb +3 -3
- data/spec/unit/http/service/puppetserver_spec.rb +34 -4
- data/spec/unit/http/service_spec.rb +1 -2
- data/spec/unit/http/session_spec.rb +16 -14
- data/spec/unit/{network/http → http}/site_spec.rb +3 -3
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +104 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
- data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
- data/spec/unit/indirector/file_server_spec.rb +1 -15
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/rest_spec.rb +2 -17
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +0 -264
- data/spec/unit/indirector/rest_spec.rb +98 -752
- 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 +2 -132
- data/spec/unit/network/authorization_spec.rb +2 -55
- data/spec/unit/network/formats_spec.rb +45 -4
- data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -101
- data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
- data/spec/unit/network/http/api_spec.rb +10 -0
- data/spec/unit/network/http/connection_spec.rb +19 -41
- data/spec/unit/network/http/handler_spec.rb +0 -6
- data/spec/unit/network/http_pool_spec.rb +0 -4
- data/spec/unit/node/environment_spec.rb +33 -21
- data/spec/unit/node_spec.rb +2 -54
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
- 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/pops/evaluator/evaluating_parser_spec.rb +4 -7
- data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
- data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
- data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
- data/spec/unit/pops/types/type_factory_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +61 -46
- data/spec/unit/pops/visitor_spec.rb +1 -1
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/nameservice_spec.rb +66 -122
- data/spec/unit/provider/package/apt_spec.rb +4 -8
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dpkg_spec.rb +0 -48
- data/spec/unit/provider/package/gem_spec.rb +32 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- 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/puppet_gem_spec.rb +3 -2
- data/spec/unit/provider/service/smf_spec.rb +401 -165
- data/spec/unit/provider/service/windows_spec.rb +0 -1
- 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 +1 -0
- data/spec/unit/provider_spec.rb +6 -20
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/resource/type_collection_spec.rb +2 -22
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -66
- data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
- data/spec/unit/settings/integer_setting_spec.rb +42 -0
- data/spec/unit/settings/port_setting_spec.rb +31 -0
- data/spec/unit/settings/priority_setting_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +560 -228
- data/spec/unit/ssl/base_spec.rb +36 -4
- data/spec/unit/ssl/certificate_request_spec.rb +15 -45
- data/spec/unit/ssl/certificate_spec.rb +2 -11
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- data/spec/unit/ssl/state_machine_spec.rb +0 -1
- data/spec/unit/ssl/verifier_spec.rb +0 -21
- 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 +0 -2
- data/spec/unit/transaction/resource_harness_spec.rb +2 -2
- data/spec/unit/transaction_spec.rb +57 -82
- data/spec/unit/type/file/checksum_spec.rb +6 -6
- data/spec/unit/type/file/content_spec.rb +1 -2
- data/spec/unit/type/file/ensure_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +1 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +0 -1
- data/spec/unit/type/file_spec.rb +12 -12
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/package_spec.rb +1 -1
- 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 +22 -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 -4
- data/spec/unit/util/execution_spec.rb +15 -40
- 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/monkey_patches_spec.rb +0 -6
- 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 +21 -121
- 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/windows/string_spec.rb +1 -3
- data/spec/unit/util/yaml_spec.rb +0 -54
- data/spec/unit/util_spec.rb +13 -24
- metadata +66 -226
- data/conf/auth.conf +0 -150
- data/lib/puppet/application/cert.rb +0 -76
- data/lib/puppet/application/key.rb +0 -4
- data/lib/puppet/application/man.rb +0 -4
- data/lib/puppet/application/status.rb +0 -4
- data/lib/puppet/face/key.rb +0 -16
- data/lib/puppet/face/man.rb +0 -145
- data/lib/puppet/face/module/build.rb +0 -14
- data/lib/puppet/face/module/generate.rb +0 -14
- data/lib/puppet/face/module/search.rb +0 -103
- data/lib/puppet/face/status.rb +0 -51
- data/lib/puppet/indirector/certificate/file.rb +0 -9
- data/lib/puppet/indirector/certificate/rest.rb +0 -18
- data/lib/puppet/indirector/certificate_request/file.rb +0 -9
- data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
- data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
- data/lib/puppet/indirector/file_content/http.rb +0 -22
- data/lib/puppet/indirector/key/file.rb +0 -46
- data/lib/puppet/indirector/key/memory.rb +0 -7
- data/lib/puppet/indirector/ssl_file.rb +0 -162
- data/lib/puppet/indirector/status.rb +0 -3
- data/lib/puppet/indirector/status/local.rb +0 -12
- data/lib/puppet/indirector/status/rest.rb +0 -27
- data/lib/puppet/module_tool/applications/searcher.rb +0 -29
- data/lib/puppet/network/auth_config_parser.rb +0 -90
- data/lib/puppet/network/authstore.rb +0 -283
- data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
- data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
- data/lib/puppet/network/http/base_pool.rb +0 -36
- data/lib/puppet/network/http/compression.rb +0 -127
- data/lib/puppet/network/http/connection_adapter.rb +0 -184
- data/lib/puppet/network/http/nocache_pool.rb +0 -28
- data/lib/puppet/network/rest_controller.rb +0 -2
- data/lib/puppet/network/rights.rb +0 -210
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
- data/lib/puppet/parser/environment_compiler.rb +0 -202
- data/lib/puppet/pops/types/enumeration.rb +0 -16
- data/lib/puppet/resource/capability_finder.rb +0 -154
- data/lib/puppet/rest/errors.rb +0 -15
- data/lib/puppet/rest/response.rb +0 -35
- data/lib/puppet/rest/route.rb +0 -85
- data/lib/puppet/rest/routes.rb +0 -135
- data/lib/puppet/ssl/host.rb +0 -505
- data/lib/puppet/ssl/key.rb +0 -61
- data/lib/puppet/ssl/validator.rb +0 -61
- data/lib/puppet/ssl/validator/default_validator.rb +0 -209
- data/lib/puppet/ssl/validator/no_validator.rb +0 -22
- data/lib/puppet/ssl/verifier_adapter.rb +0 -58
- data/lib/puppet/status.rb +0 -40
- data/lib/puppet/util/connection.rb +0 -88
- data/lib/puppet/util/ssl.rb +0 -83
- data/lib/puppet/util/windows/api_types.rb +0 -309
- data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
- data/lib/puppet/vendor/load_pathspec.rb +0 -1
- data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
- data/lib/puppet/vendor/pathspec/LICENSE +0 -201
- data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/pathspec/README.md +0 -53
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
- data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
- data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
- data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
- data/man/man8/puppet-key.8 +0 -126
- data/man/man8/puppet-man.8 +0 -76
- data/man/man8/puppet-status.8 +0 -108
- data/spec/integration/application/config_spec.rb +0 -74
- data/spec/integration/network/authconfig_spec.rb +0 -256
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
- data/spec/unit/application/man_spec.rb +0 -52
- data/spec/unit/capability_spec.rb +0 -414
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/key_spec.rb +0 -9
- data/spec/unit/face/module/search_spec.rb +0 -231
- data/spec/unit/face/module_spec.rb +0 -3
- data/spec/unit/face/status_spec.rb +0 -9
- data/spec/unit/indirector/certificate/file_spec.rb +0 -14
- data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
- data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
- data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
- data/spec/unit/indirector/key/file_spec.rb +0 -79
- data/spec/unit/indirector/ssl_file_spec.rb +0 -305
- data/spec/unit/indirector/status/local_spec.rb +0 -10
- data/spec/unit/indirector/status/rest_spec.rb +0 -50
- data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
- data/spec/unit/network/auth_config_parser_spec.rb +0 -115
- data/spec/unit/network/authstore_spec.rb +0 -422
- data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
- data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
- data/spec/unit/network/http/compression_spec.rb +0 -240
- data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
- data/spec/unit/network/http_spec.rb +0 -9
- data/spec/unit/network/rights_spec.rb +0 -439
- data/spec/unit/parser/environment_compiler_spec.rb +0 -730
- data/spec/unit/pops/types/enumeration_spec.rb +0 -51
- data/spec/unit/resource/capability_finder_spec.rb +0 -143
- data/spec/unit/rest/route_spec.rb +0 -132
- data/spec/unit/ssl/host_spec.rb +0 -650
- data/spec/unit/ssl/key_spec.rb +0 -173
- data/spec/unit/ssl/validator_spec.rb +0 -278
- data/spec/unit/status_spec.rb +0 -45
- data/spec/unit/util/ssl_spec.rb +0 -91
@@ -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
|
@@ -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
|
@@ -392,39 +392,13 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
392
392
|
allow(Tempfile).to receive(:open).and_yield(tempfile)
|
393
393
|
end
|
394
394
|
|
395
|
-
it "installs first if package is not present and ensure holding" do
|
396
|
-
allow(provider).to receive(:execute)
|
397
|
-
allow(provider).to receive(:package_not_installed?).and_return(true)
|
398
|
-
expect(provider).to receive(:install).once
|
399
|
-
expect(provider).to receive(:hold)
|
400
|
-
provider.deprecated_hold
|
401
|
-
end
|
402
|
-
|
403
|
-
it "skips install new package if hold is true" do
|
404
|
-
allow(provider).to receive(:execute)
|
405
|
-
allow(provider).to receive(:package_not_installed?).and_return(true)
|
406
|
-
expect(provider).to receive(:install).once
|
407
|
-
expect(provider).to receive(:hold)
|
408
|
-
provider.deprecated_hold
|
409
|
-
end
|
410
|
-
|
411
|
-
it "skips install new package if package is allready installed" do
|
412
|
-
allow(provider).to receive(:execute)
|
413
|
-
allow(provider).to receive(:package_not_installed?).and_return(false)
|
414
|
-
expect(provider).not_to receive(:install)
|
415
|
-
expect(provider).to receive(:hold)
|
416
|
-
provider.deprecated_hold
|
417
|
-
end
|
418
|
-
|
419
395
|
it "executes dpkg --set-selections when holding" do
|
420
|
-
allow(provider).to receive(:package_not_installed?).and_return(false)
|
421
396
|
allow(provider).to receive(:install)
|
422
397
|
expect(provider).to receive(:execute).with([:dpkg, '--set-selections'], {:failonfail => false, :combine => false, :stdinfile => tempfile.path}).once
|
423
398
|
provider.hold
|
424
399
|
end
|
425
400
|
|
426
401
|
it "executes dpkg --set-selections when unholding" do
|
427
|
-
allow(provider).to receive(:package_not_installed?).and_return(false)
|
428
402
|
allow(provider).to receive(:install)
|
429
403
|
expect(provider).to receive(:execute).with([:dpkg, '--set-selections'], {:failonfail => false, :combine => false, :stdinfile => tempfile.path}).once
|
430
404
|
provider.hold
|
@@ -467,26 +441,4 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
|
|
467
441
|
provider.purge
|
468
442
|
end
|
469
443
|
|
470
|
-
context "package_not_installed?" do
|
471
|
-
context "allow_virtual false" do
|
472
|
-
before do
|
473
|
-
allow(resource).to receive(:allow_virtual?).and_return(false)
|
474
|
-
end
|
475
|
-
|
476
|
-
it "returns true if package is not found" do
|
477
|
-
expect(provider).to receive(:dpkgquery).with("-W", "--showformat", "'${Status} ${Package} ${Version}\\n'", resource_name).and_raise(Puppet::ExecutionFailure.new("eh"))
|
478
|
-
expect(provider.package_not_installed?).to eq(true)
|
479
|
-
end
|
480
|
-
|
481
|
-
it "returns true if package is not installed" do
|
482
|
-
expect(provider).to receive(:dpkgquery).with("-W", "--showformat", "'${Status} ${Package} ${Version}\\n'", resource_name).and_return("unknown ok not-installed #{resource_name}")
|
483
|
-
expect(provider.package_not_installed?).to eq(true)
|
484
|
-
end
|
485
|
-
|
486
|
-
it "returns false if package is installed" do
|
487
|
-
expect(provider).to receive(:dpkgquery).with("-W", "--showformat", "'${Status} ${Package} ${Version}\\n'", resource_name).and_return("install ok installed resource_name 1.2.3")
|
488
|
-
expect(provider.package_not_installed?).to eq(false)
|
489
|
-
end
|
490
|
-
end
|
491
|
-
end
|
492
444
|
end
|
@@ -12,6 +12,10 @@ context Puppet::Type.type(:package).provider(:gem) do
|
|
12
12
|
let(:provider_gem_cmd) { '/provider/gem' }
|
13
13
|
let(:execute_options) { {:failonfail => true, :combine => true, :custom_environment => {"HOME"=>ENV["HOME"]}} }
|
14
14
|
|
15
|
+
before do
|
16
|
+
allow(Puppet::Util::Platform).to receive(:windows?).and_return(false)
|
17
|
+
end
|
18
|
+
|
15
19
|
context 'installing myresource' do
|
16
20
|
let(:resource) do
|
17
21
|
Puppet::Type.type(:package).new(
|
@@ -36,6 +40,34 @@ context Puppet::Type.type(:package).provider(:gem) do
|
|
36
40
|
allow(provider).to receive(:rubygem_version).and_return('1.9.9')
|
37
41
|
end
|
38
42
|
|
43
|
+
context 'on windows' do
|
44
|
+
let(:path) do
|
45
|
+
"C:\\Program Files\\Puppet Labs\\Puppet\\puppet\\bin;C:\\Program Files\\Puppet Labs\\Puppet\\bin;C:\\Ruby26-x64\\bin;C:\\Windows\\system32\\bin"
|
46
|
+
end
|
47
|
+
|
48
|
+
let(:expected_path) do
|
49
|
+
"C:\\Program Files\\Puppet Labs\\Puppet\\bin;C:\\Ruby26-x64\\bin;C:\\Windows\\system32\\bin"
|
50
|
+
end
|
51
|
+
|
52
|
+
before do
|
53
|
+
allow(Puppet::Util::Platform).to receive(:windows?).and_return(true)
|
54
|
+
allow(Puppet::Util).to receive(:get_env)
|
55
|
+
allow(Puppet::Util).to receive(:get_env).with('PATH').and_return(path)
|
56
|
+
allow(described_class).to receive(:validate_command).with(provider_gem_cmd)
|
57
|
+
stub_const('::File::PATH_SEPARATOR', ';')
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'removes puppet/bin from PATH' do
|
61
|
+
expect(described_class).to receive(:execute) \
|
62
|
+
.with(
|
63
|
+
anything,
|
64
|
+
hash_including(custom_environment: hash_including(PATH: expected_path))
|
65
|
+
)
|
66
|
+
.and_return("")
|
67
|
+
provider.install
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
39
71
|
it "should use the path to the gem command" do
|
40
72
|
allow(described_class).to receive(:validate_command).with(provider_gem_cmd)
|
41
73
|
expect(described_class).to receive(:execute).with(be_a(Array), execute_options) { |args| expect(args[0]).to eq(provider_gem_cmd) }.and_return("")
|
@@ -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
|
@@ -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
|
@@ -15,19 +15,20 @@ describe Puppet::Type.type(:package).provider(:puppet_gem) do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
if Puppet::Util::Platform.windows?
|
18
|
-
let(:provider_gem_cmd) { 'gem' }
|
18
|
+
let(:provider_gem_cmd) { 'C:\Program Files\Puppet Labs\Puppet\puppet\bin\gem.bat' }
|
19
19
|
else
|
20
20
|
let(:provider_gem_cmd) { '/opt/puppetlabs/puppet/bin/gem' }
|
21
21
|
end
|
22
22
|
|
23
23
|
custom_environment = {"HOME"=>ENV["HOME"]}
|
24
|
-
custom_environment['PKG_CONFIG_PATH'] = '/opt/puppetlabs/puppet/lib/pkgconfig'
|
24
|
+
custom_environment['PKG_CONFIG_PATH'] = '/opt/puppetlabs/puppet/lib/pkgconfig'
|
25
25
|
|
26
26
|
let(:execute_options) { {:failonfail => true, :combine => true, :custom_environment => custom_environment} }
|
27
27
|
|
28
28
|
before :each do
|
29
29
|
resource.provider = provider
|
30
30
|
allow(described_class).to receive(:command).with(:gemcmd).and_return(provider_gem_cmd)
|
31
|
+
allow(Puppet::Util::Platform).to receive(:windows?).and_return(false)
|
31
32
|
end
|
32
33
|
|
33
34
|
context "when installing" do
|
@@ -4,6 +4,16 @@ describe 'Puppet::Type::Service::Provider::Smf',
|
|
4
4
|
unless: Puppet::Util::Platform.windows? || Puppet::Util::Platform.jruby? do
|
5
5
|
let(:provider_class) { Puppet::Type.type(:service).provider(:smf) }
|
6
6
|
|
7
|
+
def set_resource_params(params = {})
|
8
|
+
params.each do |param, value|
|
9
|
+
if value.nil?
|
10
|
+
@provider.resource.delete(param) if @provider.resource[param]
|
11
|
+
else
|
12
|
+
@provider.resource[param] = value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
7
17
|
before(:each) do
|
8
18
|
# Create a mock resource
|
9
19
|
@resource = Puppet::Type.type(:service).new(
|
@@ -18,14 +28,13 @@ describe 'Puppet::Type::Service::Provider::Smf',
|
|
18
28
|
allow(Facter).to receive(:value).with(:osfamily).and_return('Solaris')
|
19
29
|
allow(Facter).to receive(:value).with(:operatingsystemrelease).and_return('11.2')
|
20
30
|
end
|
21
|
-
|
22
31
|
context ".instances" do
|
23
32
|
it "should have an instances method" do
|
24
33
|
expect(provider_class).to respond_to :instances
|
25
34
|
end
|
26
35
|
|
27
36
|
it "should get a list of services (excluding legacy)" do
|
28
|
-
expect(provider_class).to receive(:svcs).with('-H', '-o', 'state,fmri').and_return(File.read(my_fixture('
|
37
|
+
expect(provider_class).to receive(:svcs).with('-H', '-o', 'state,fmri').and_return(File.read(my_fixture('svcs_instances.out')))
|
29
38
|
instances = provider_class.instances.map { |p| {:name => p.get(:name), :ensure => p.get(:ensure)} }
|
30
39
|
# we dont manage legacy
|
31
40
|
expect(instances.size).to eq(3)
|
@@ -35,255 +44,482 @@ describe 'Puppet::Type::Service::Provider::Smf',
|
|
35
44
|
end
|
36
45
|
end
|
37
46
|
|
38
|
-
|
39
|
-
|
40
|
-
|
47
|
+
describe '#service_exists?' do
|
48
|
+
it 'returns true if the service exists' do
|
49
|
+
expect(@provider).to receive(:service_fmri)
|
50
|
+
expect(@provider.service_exists?).to be(true)
|
51
|
+
end
|
41
52
|
|
42
|
-
|
43
|
-
|
44
|
-
|
53
|
+
it 'returns false if the service does not exist' do
|
54
|
+
expect(@provider).to receive(:service_fmri).and_raise(
|
55
|
+
Puppet::ExecutionFailure, 'svcs failed!'
|
56
|
+
)
|
45
57
|
|
46
|
-
|
47
|
-
|
58
|
+
expect(@provider.service_exists?).to be(false)
|
59
|
+
end
|
48
60
|
end
|
49
61
|
|
50
|
-
|
51
|
-
|
52
|
-
|
62
|
+
describe '#setup_service' do
|
63
|
+
it 'noops if the service resource does not have the manifest parameter passed-in' do
|
64
|
+
expect(@provider).not_to receive(:svccfg)
|
53
65
|
|
54
|
-
|
55
|
-
|
56
|
-
|
66
|
+
set_resource_params({ :manifest => nil })
|
67
|
+
@provider.setup_service
|
68
|
+
end
|
57
69
|
|
58
|
-
|
59
|
-
|
60
|
-
|
70
|
+
context 'when the service resource has a manifest parameter passed-in' do
|
71
|
+
let(:manifest) { 'foo' }
|
72
|
+
before(:each) { set_resource_params({ :manifest => manifest }) }
|
73
|
+
|
74
|
+
it 'noops if the service resource already exists' do
|
75
|
+
expect(@provider).not_to receive(:svccfg)
|
76
|
+
|
77
|
+
expect(@provider).to receive(:service_exists?).and_return(true)
|
78
|
+
@provider.setup_service
|
79
|
+
end
|
61
80
|
|
62
|
-
|
63
|
-
|
81
|
+
it "imports the service resource's manifest" do
|
82
|
+
expect(@provider).to receive(:service_exists?).and_return(false)
|
83
|
+
|
84
|
+
expect(@provider).to receive(:svccfg).with(:import, manifest)
|
85
|
+
@provider.setup_service
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'raises a Puppet::Error if SMF fails to import the manifest' do
|
89
|
+
expect(@provider).to receive(:service_exists?).and_return(false)
|
90
|
+
|
91
|
+
failure_reason = 'svccfg failed!'
|
92
|
+
expect(@provider).to receive(:svccfg).with(:import, manifest).and_raise(Puppet::ExecutionFailure, failure_reason)
|
93
|
+
expect { @provider.setup_service }.to raise_error do |error|
|
94
|
+
expect(error).to be_a(Puppet::Error)
|
95
|
+
expect(error.message).to match(failure_reason)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
64
99
|
end
|
65
100
|
|
66
|
-
describe
|
67
|
-
|
68
|
-
|
101
|
+
describe '#service_fmri' do
|
102
|
+
it 'returns the memoized the fmri if it exists' do
|
103
|
+
@provider.instance_variable_set(:@fmri, 'resource_fmri')
|
104
|
+
expect(@provider.service_fmri).to eql('resource_fmri')
|
69
105
|
end
|
70
106
|
|
71
|
-
it
|
72
|
-
expect(@provider).to receive(:svcs).with('-
|
73
|
-
|
107
|
+
it 'raises a Puppet::Error if the service resource matches multiple FMRIs' do
|
108
|
+
expect(@provider).to receive(:svcs).with('-l', @provider.resource[:name]).and_return(File.read(my_fixture('svcs_multiple_fmris.out')))
|
109
|
+
|
110
|
+
expect { @provider.service_fmri }.to raise_error do |error|
|
111
|
+
expect(error).to be_a(Puppet::Error)
|
112
|
+
expect(error.message).to match(@provider.resource[:name])
|
113
|
+
expect(error.message).to match('multiple')
|
114
|
+
|
115
|
+
matched_fmris = ["svc:/application/tstapp:one", "svc:/application/tstapp:two"]
|
116
|
+
expect(error.message).to match(matched_fmris.join(', '))
|
117
|
+
end
|
74
118
|
end
|
75
119
|
|
76
|
-
it
|
77
|
-
|
78
|
-
|
120
|
+
it 'raises a Puppet:ExecutionFailure if svcs fails' do
|
121
|
+
expect(@provider).to receive(:svcs).with('-l', @provider.resource[:name]).and_raise(
|
122
|
+
Puppet::ExecutionFailure, 'svcs failed!'
|
123
|
+
)
|
124
|
+
|
125
|
+
expect { @provider.service_fmri }.to raise_error do |error|
|
126
|
+
expect(error).to be_a(Puppet::ExecutionFailure)
|
127
|
+
expect(error.message).to match('svcs failed!')
|
128
|
+
end
|
79
129
|
end
|
80
130
|
|
81
|
-
it "
|
82
|
-
|
83
|
-
|
84
|
-
|
131
|
+
it "returns the service resource's fmri and memoizes it" do
|
132
|
+
expect(@provider).to receive(:svcs).with('-l', @provider.resource[:name]).and_return(File.read(my_fixture('svcs_fmri.out')))
|
133
|
+
|
134
|
+
expected_fmri = 'svc:/application/tstapp:default'
|
135
|
+
|
136
|
+
expect(@provider.service_fmri).to eql(expected_fmri)
|
137
|
+
expect(@provider.instance_variable_get(:@fmri)).to eql(expected_fmri)
|
85
138
|
end
|
139
|
+
end
|
86
140
|
|
87
|
-
|
88
|
-
|
89
|
-
|
141
|
+
describe '#enabled?' do
|
142
|
+
let(:fmri) { 'resource_fmri' }
|
143
|
+
before(:each) do
|
144
|
+
allow(@provider).to receive(:service_fmri).and_return(fmri)
|
90
145
|
end
|
91
146
|
|
92
|
-
it
|
93
|
-
|
94
|
-
|
147
|
+
it 'returns :true if the service is enabled' do
|
148
|
+
expect(@provider).to receive(:svccfg).with('-s', fmri, 'listprop', 'general/enabled').and_return(
|
149
|
+
'general/enabled boolean true'
|
150
|
+
)
|
151
|
+
|
152
|
+
expect(@provider.enabled?).to be(:true)
|
95
153
|
end
|
96
154
|
|
97
|
-
it
|
98
|
-
|
99
|
-
|
155
|
+
it 'return :false if the service is not enabled' do
|
156
|
+
expect(@provider).to receive(:svccfg).with('-s', fmri, 'listprop', 'general/enabled').and_return(
|
157
|
+
'general/enabled boolean false'
|
158
|
+
)
|
159
|
+
|
160
|
+
expect(@provider.enabled?).to be(:false)
|
100
161
|
end
|
101
162
|
|
102
|
-
it
|
103
|
-
|
104
|
-
expect(@provider.
|
163
|
+
it 'returns :false if the service does not exist' do
|
164
|
+
expect(@provider).to receive(:service_exists?).and_return(false)
|
165
|
+
expect(@provider.enabled?).to be(:false)
|
105
166
|
end
|
167
|
+
end
|
106
168
|
|
107
|
-
|
108
|
-
|
109
|
-
|
169
|
+
describe '#restartcmd' do
|
170
|
+
let(:fmri) { 'resource_fmri' }
|
171
|
+
before(:each) do
|
172
|
+
allow(@provider).to receive(:service_fmri).and_return(fmri)
|
110
173
|
end
|
111
174
|
|
112
|
-
it
|
113
|
-
|
114
|
-
|
175
|
+
it 'returns the right command for restarting the service for Solaris versions newer than 11.2' do
|
176
|
+
expect(Facter).to receive(:value).with(:operatingsystemrelease).and_return('11.3')
|
177
|
+
|
178
|
+
expect(@provider.restartcmd).to eql([@provider.command(:adm), :restart, '-s', fmri])
|
115
179
|
end
|
116
|
-
end
|
117
180
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
expect(@provider).to
|
122
|
-
expect(@provider).to receive(:wait).with('online')
|
123
|
-
@provider.start
|
181
|
+
it 'returns the right command for restarting the service on Solaris 11.2' do
|
182
|
+
expect(Facter).to receive(:value).with(:operatingsystemrelease).and_return('11.2')
|
183
|
+
|
184
|
+
expect(@provider.restartcmd).to eql([@provider.command(:adm), :restart, '-s', fmri])
|
124
185
|
end
|
125
186
|
|
126
|
-
it
|
127
|
-
expect(
|
128
|
-
|
129
|
-
expect(@provider).to
|
130
|
-
@provider.start
|
187
|
+
it 'returns the right command for restarting the service for Solaris versions older than Solaris 11.2' do
|
188
|
+
expect(Facter).to receive(:value).with(:operatingsystemrelease).and_return('10.3')
|
189
|
+
|
190
|
+
expect(@provider.restartcmd).to eql([@provider.command(:adm), :restart, fmri])
|
131
191
|
end
|
192
|
+
end
|
132
193
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
@provider.start
|
194
|
+
describe '#service_states' do
|
195
|
+
let(:fmri) { 'resource_fmri' }
|
196
|
+
before(:each) do
|
197
|
+
allow(@provider).to receive(:service_fmri).and_return(fmri)
|
138
198
|
end
|
139
199
|
|
140
|
-
it
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
200
|
+
it 'returns the current and next states of the service' do
|
201
|
+
expect(@provider).to receive(:svcs).with('-H', '-o', 'state,nstate', fmri).and_return(
|
202
|
+
'online disabled'
|
203
|
+
)
|
204
|
+
|
205
|
+
expect(@provider.service_states).to eql({ :current => 'online', :next => 'disabled' })
|
145
206
|
end
|
146
207
|
|
147
|
-
it "
|
148
|
-
expect(@provider).to receive(:
|
149
|
-
|
150
|
-
|
151
|
-
|
208
|
+
it "returns nil for the next state if svcs marks it as '-'" do
|
209
|
+
expect(@provider).to receive(:svcs).with('-H', '-o', 'state,nstate', fmri).and_return(
|
210
|
+
'online -'
|
211
|
+
)
|
212
|
+
|
213
|
+
expect(@provider.service_states).to eql({ :current => 'online', :next => nil })
|
152
214
|
end
|
153
215
|
end
|
154
216
|
|
155
|
-
|
217
|
+
describe '#wait' do
|
218
|
+
# TODO: Document this method!
|
219
|
+
def transition_service(from, to, tries)
|
220
|
+
intermediate_returns = [{ :current => from, :next => to }] * (tries - 1)
|
221
|
+
final_return = { :current => to, :next => nil }
|
222
|
+
|
223
|
+
allow(@provider).to receive(:service_states).and_return(*intermediate_returns.push(final_return))
|
224
|
+
end
|
225
|
+
|
156
226
|
before(:each) do
|
157
|
-
|
158
|
-
|
159
|
-
allow($CHILD_STATUS).to receive(:exitstatus).and_return(1)
|
227
|
+
allow(Timeout).to receive(:timeout).and_yield
|
228
|
+
allow(Kernel).to receive(:sleep)
|
160
229
|
end
|
161
230
|
|
162
|
-
it
|
163
|
-
|
164
|
-
|
165
|
-
expect(@provider).to receive(:svccfg).with(:import, "/tmp/myservice.xml")
|
166
|
-
expect(@provider).to receive(:texecute).with(:start, ["/usr/sbin/svcadm", :enable, '-rs', "/system/myservice"], true)
|
167
|
-
expect(@provider).to receive(:wait).with('online')
|
168
|
-
expect(@provider).to receive(:svcs).with('-H', '-o', 'state,nstate', "/system/myservice").and_return("online\t-")
|
169
|
-
@provider.start
|
231
|
+
it 'waits for the service to enter the desired state' do
|
232
|
+
transition_service('online', 'disabled', 1)
|
233
|
+
@provider.wait('offline', 'disabled', 'uninitialized')
|
170
234
|
end
|
171
235
|
|
172
|
-
it
|
173
|
-
expect(
|
174
|
-
|
175
|
-
expect { @provider.
|
236
|
+
it 'times out and raises a Puppet::Error after sixty seconds' do
|
237
|
+
expect(Timeout).to receive(:timeout).with(60).and_raise(Timeout::Error, 'method timed out!')
|
238
|
+
|
239
|
+
expect { @provider.wait('online') }.to raise_error do |error|
|
240
|
+
expect(error).to be_a(Puppet::Error)
|
241
|
+
expect(error.message).to match(@provider.resource[:name])
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'sleeps a bit before querying the service state' do
|
246
|
+
transition_service('disabled', 'online', 10)
|
247
|
+
expect(Kernel).to receive(:sleep).with(1).exactly(9).times
|
248
|
+
|
249
|
+
@provider.wait('online')
|
176
250
|
end
|
177
251
|
end
|
178
252
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
@provider.
|
253
|
+
describe '#restart' do
|
254
|
+
let(:fmri) { 'resource_fmri' }
|
255
|
+
|
256
|
+
before(:each) do
|
257
|
+
allow(@provider).to receive(:service_fmri).and_return(fmri)
|
258
|
+
allow(@provider).to receive(:texecute)
|
259
|
+
allow(@provider).to receive(:wait)
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'should restart the service' do
|
263
|
+
expect(@provider).to receive(:texecute)
|
264
|
+
@provider.restart
|
184
265
|
end
|
185
266
|
|
186
|
-
it
|
187
|
-
expect(@provider).to receive(:
|
188
|
-
|
189
|
-
expect { @provider.stop }.to raise_error Puppet::Error, ('Timed out waiting for /system/myservice to transition states')
|
267
|
+
it 'should wait for the service to restart' do
|
268
|
+
expect(@provider).to receive(:wait).with('online')
|
269
|
+
@provider.restart
|
190
270
|
end
|
191
271
|
end
|
192
272
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
273
|
+
describe '#status' do
|
274
|
+
let(:states) do
|
275
|
+
{
|
276
|
+
:current => 'online',
|
277
|
+
:next => nil
|
278
|
+
}
|
198
279
|
end
|
199
280
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
expect(@provider).to receive(:wait).with('online')
|
205
|
-
@provider.restart
|
206
|
-
end
|
281
|
+
before(:each) do
|
282
|
+
allow(@provider).to receive(:service_states).and_return(states)
|
283
|
+
|
284
|
+
allow(Facter).to receive(:value).with(:operatingsystemrelease).and_return('10.3')
|
207
285
|
end
|
208
286
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
expect(
|
213
|
-
expect(@provider).to receive(:wait).with('online')
|
214
|
-
@provider.restart
|
287
|
+
it "should run the status command if it's passed in" do
|
288
|
+
set_resource_params({ :status => 'status_cmd' })
|
289
|
+
expect(@provider).to receive(:ucommand).with(:status, false) do |_, _|
|
290
|
+
expect($CHILD_STATUS).to receive(:exitstatus).and_return(0)
|
215
291
|
end
|
292
|
+
expect(@provider).not_to receive(:service_states)
|
293
|
+
|
294
|
+
expect(@provider.status).to eql(:running)
|
216
295
|
end
|
217
296
|
|
218
|
-
|
219
|
-
it "
|
220
|
-
|
221
|
-
|
222
|
-
expect(@provider).to
|
223
|
-
@provider.restart
|
297
|
+
shared_examples 'returns the right status' do |svcs_state, expected_state|
|
298
|
+
it "returns '#{expected_state}' if the svcs state is '#{svcs_state}'" do
|
299
|
+
|
300
|
+
states[:current] = svcs_state
|
301
|
+
expect(@provider.status).to eql(expected_state)
|
224
302
|
end
|
225
303
|
end
|
226
|
-
end
|
227
304
|
|
228
|
-
|
229
|
-
|
230
|
-
|
305
|
+
include_examples 'returns the right status', 'online', :running
|
306
|
+
include_examples 'returns the right status', 'offline', :stopped
|
307
|
+
include_examples 'returns the right status', 'disabled', :stopped
|
308
|
+
include_examples 'returns the right status', 'uninitialized', :stopped
|
309
|
+
include_examples 'returns the right status', 'maintenance', :maintenance
|
310
|
+
include_examples 'returns the right status', 'degraded', :degraded
|
231
311
|
|
232
|
-
|
312
|
+
it "raises a Puppet::Error if the svcs state is 'legacy_run'" do
|
313
|
+
states[:current] = 'legacy_run'
|
314
|
+
expect { @provider.status }.to raise_error do |error|
|
233
315
|
expect(error).to be_a(Puppet::Error)
|
234
|
-
expect(error.message).to match(
|
235
|
-
expect(error.message).to match('multiple')
|
236
|
-
|
237
|
-
matched_fmris = ["svc:/application/tstapp:one", "svc:/application/tstapp:two"]
|
238
|
-
expect(error.message).to match(matched_fmris.join(', '))
|
316
|
+
expect(error.message).to match('legacy')
|
239
317
|
end
|
240
318
|
end
|
241
319
|
|
242
|
-
it
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
expect { @provider.service_fmri }.to raise_error do |error|
|
248
|
-
expect(error).to be_a(Puppet::ExecutionFailure)
|
249
|
-
expect(error.message).to match('svcs failed!')
|
320
|
+
it "raises a Puppet::Error if the svcs state is unmanageable" do
|
321
|
+
states[:current] = 'unmanageable state'
|
322
|
+
expect { @provider.status }.to raise_error do |error|
|
323
|
+
expect(error).to be_a(Puppet::Error)
|
324
|
+
expect(error.message).to match(states[:current])
|
250
325
|
end
|
251
326
|
end
|
252
327
|
|
253
|
-
it "returns the service
|
254
|
-
|
328
|
+
it "returns 'stopped' if the service does not exist" do
|
329
|
+
expect(@provider).to receive(:service_states).and_raise(Puppet::ExecutionFailure, 'service does not exist!')
|
330
|
+
expect(@provider.status).to eql(:stopped)
|
331
|
+
end
|
255
332
|
|
256
|
-
|
333
|
+
it "uses the current state for comparison if the next state is not provided" do
|
334
|
+
states[:next] = 'disabled'
|
335
|
+
expect(@provider.status).to eql(:stopped)
|
336
|
+
end
|
257
337
|
|
258
|
-
|
259
|
-
|
338
|
+
it "should return stopped for an incomplete service on Solaris 11" do
|
339
|
+
allow(Facter).to receive(:value).with(:operatingsystemrelease).and_return('11.3')
|
340
|
+
allow(@provider).to receive(:complete_service?).and_return(false)
|
341
|
+
expect(@provider.status).to eq(:stopped)
|
260
342
|
end
|
261
343
|
end
|
262
344
|
|
263
|
-
describe '#
|
264
|
-
let(:fmri) { '
|
265
|
-
|
345
|
+
describe '#maybe_clear_service_then_svcadm' do
|
346
|
+
let(:fmri) { 'resource_fmri' }
|
266
347
|
before(:each) do
|
267
348
|
allow(@provider).to receive(:service_fmri).and_return(fmri)
|
268
349
|
end
|
269
350
|
|
270
|
-
it '
|
271
|
-
|
351
|
+
it 'applies the svcadm subcommand with the given flags' do
|
352
|
+
expect(@provider).to receive(:adm).with('enable', '-rst', fmri)
|
353
|
+
@provider.maybe_clear_service_then_svcadm(:stopped, 'enable', '-rst')
|
354
|
+
end
|
272
355
|
|
273
|
-
|
356
|
+
[:maintenance, :degraded].each do |status|
|
357
|
+
it "clears the service before applying the svcadm subcommand if the service status is #{status}" do
|
358
|
+
expect(@provider).to receive(:adm).with('clear', fmri)
|
359
|
+
expect(@provider).to receive(:adm).with('enable', '-rst', fmri)
|
360
|
+
|
361
|
+
@provider.maybe_clear_service_then_svcadm(status, 'enable', '-rst')
|
362
|
+
end
|
274
363
|
end
|
364
|
+
end
|
275
365
|
|
276
|
-
|
277
|
-
|
278
|
-
|
366
|
+
describe '#flush' do
|
367
|
+
def mark_property_for_syncing(property, value)
|
368
|
+
properties_to_sync = @provider.instance_variable_get(:@properties_to_sync)
|
369
|
+
properties_to_sync[property] = value
|
279
370
|
end
|
280
371
|
|
281
|
-
it 'should
|
282
|
-
|
283
|
-
|
284
|
-
|
372
|
+
it 'should noop if enable and ensure do not need to be syncd' do
|
373
|
+
expect(@provider).not_to receive(:setup_service)
|
374
|
+
@provider.flush
|
375
|
+
end
|
285
376
|
|
286
|
-
|
377
|
+
context 'enable or ensure need to be syncd' do
|
378
|
+
let(:stopped_states) do
|
379
|
+
['offline', 'disabled', 'uninitialized']
|
380
|
+
end
|
381
|
+
|
382
|
+
let(:fmri) { 'resource_fmri' }
|
383
|
+
let(:mock_status) { :maintenance }
|
384
|
+
before(:each) do
|
385
|
+
allow(@provider).to receive(:setup_service)
|
386
|
+
allow(@provider).to receive(:service_fmri).and_return(fmri)
|
387
|
+
|
388
|
+
# We will update this mock on a per-test basis.
|
389
|
+
allow(@provider).to receive(:status).and_return(mock_status)
|
390
|
+
allow(@provider).to receive(:wait)
|
391
|
+
end
|
392
|
+
|
393
|
+
context 'only ensure needs to be syncd' do
|
394
|
+
it 'stops the service if ensure == stopped' do
|
395
|
+
mark_property_for_syncing(:ensure, :stopped)
|
396
|
+
|
397
|
+
expect(@provider).to receive(:maybe_clear_service_then_svcadm).with(mock_status, 'disable', '-st')
|
398
|
+
expect(@provider).to receive(:wait).with(*stopped_states)
|
399
|
+
|
400
|
+
@provider.flush
|
401
|
+
end
|
402
|
+
|
403
|
+
it 'starts the service if ensure == running' do
|
404
|
+
mark_property_for_syncing(:ensure, :running)
|
405
|
+
|
406
|
+
expect(@provider).to receive(:maybe_clear_service_then_svcadm).with(mock_status, 'enable', '-rst')
|
407
|
+
expect(@provider).to receive(:wait).with('online')
|
408
|
+
|
409
|
+
@provider.flush
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
context 'enable needs to be syncd' do
|
414
|
+
before(:each) do
|
415
|
+
# We will stub this value out later, this default is useful
|
416
|
+
# for the final state tests.
|
417
|
+
mark_property_for_syncing(:enable, true)
|
418
|
+
end
|
419
|
+
|
420
|
+
it 'enables the service' do
|
421
|
+
mark_property_for_syncing(:enable, true)
|
422
|
+
|
423
|
+
expect(@provider).to receive(:maybe_clear_service_then_svcadm).with(mock_status, 'enable', '-rs')
|
424
|
+
|
425
|
+
expect(@provider).to receive(:adm).with('mark', '-I', 'maintenance', fmri)
|
426
|
+
|
427
|
+
@provider.flush
|
428
|
+
end
|
429
|
+
|
430
|
+
it 'disables the service' do
|
431
|
+
mark_property_for_syncing(:enable, false)
|
432
|
+
|
433
|
+
expect(@provider).to receive(:maybe_clear_service_then_svcadm).with(mock_status, 'disable', '-s')
|
434
|
+
|
435
|
+
expect(@provider).to receive(:adm).with('mark', '-I', 'maintenance', fmri)
|
436
|
+
|
437
|
+
@provider.flush
|
438
|
+
end
|
439
|
+
|
440
|
+
context 'when the final service state is running' do
|
441
|
+
before(:each) do
|
442
|
+
allow(@provider).to receive(:status).and_return(:running)
|
443
|
+
end
|
444
|
+
|
445
|
+
it 'starts the service if enable was false' do
|
446
|
+
mark_property_for_syncing(:enable, false)
|
447
|
+
|
448
|
+
expect(@provider).to receive(:adm).with('disable', '-s', fmri)
|
449
|
+
expect(@provider).to receive(:adm).with('enable', '-rst', fmri)
|
450
|
+
expect(@provider).to receive(:wait).with('online')
|
451
|
+
|
452
|
+
@provider.flush
|
453
|
+
end
|
454
|
+
|
455
|
+
it 'waits for the service to start if enable was true' do
|
456
|
+
mark_property_for_syncing(:enable, true)
|
457
|
+
|
458
|
+
expect(@provider).to receive(:adm).with('enable', '-rs', fmri)
|
459
|
+
expect(@provider).to receive(:wait).with('online')
|
460
|
+
|
461
|
+
@provider.flush
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
465
|
+
context 'when the final service state is stopped' do
|
466
|
+
before(:each) do
|
467
|
+
allow(@provider).to receive(:status).and_return(:stopped)
|
468
|
+
end
|
469
|
+
|
470
|
+
it 'stops the service if enable was true' do
|
471
|
+
mark_property_for_syncing(:enable, true)
|
472
|
+
|
473
|
+
expect(@provider).to receive(:adm).with('enable', '-rs', fmri)
|
474
|
+
expect(@provider).to receive(:adm).with('disable', '-st', fmri)
|
475
|
+
expect(@provider).to receive(:wait).with(*stopped_states)
|
476
|
+
|
477
|
+
@provider.flush
|
478
|
+
end
|
479
|
+
|
480
|
+
it 'waits for the service to stop if enable was false' do
|
481
|
+
mark_property_for_syncing(:enable, false)
|
482
|
+
|
483
|
+
expect(@provider).to_not receive(:adm).with('disable', '-st', fmri)
|
484
|
+
expect(@provider).to receive(:wait).with(*stopped_states)
|
485
|
+
|
486
|
+
@provider.flush
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
it 'marks the service as being under maintenance if the final state is maintenance' do
|
491
|
+
expect(@provider).to receive(:status).and_return(:maintenance)
|
492
|
+
|
493
|
+
expect(@provider).to receive(:adm).with('clear', fmri)
|
494
|
+
expect(@provider).to receive(:adm).with('enable', '-rs', fmri)
|
495
|
+
|
496
|
+
expect(@provider).to receive(:adm).with('mark', '-I', 'maintenance', fmri)
|
497
|
+
expect(@provider).to receive(:wait).with('maintenance')
|
498
|
+
|
499
|
+
@provider.flush
|
500
|
+
end
|
501
|
+
|
502
|
+
it 'uses the ensure value as the final state if ensure also needs to be syncd' do
|
503
|
+
mark_property_for_syncing(:ensure, :running)
|
504
|
+
expect(@provider).to receive(:status).and_return(:stopped)
|
505
|
+
|
506
|
+
expect(@provider).to receive(:adm).with('enable', '-rs', fmri)
|
507
|
+
expect(@provider).to receive(:wait).with('online')
|
508
|
+
|
509
|
+
@provider.flush
|
510
|
+
end
|
511
|
+
|
512
|
+
it 'marks the final state of a degraded service as running' do
|
513
|
+
expect(@provider).to receive(:status).and_return(:degraded)
|
514
|
+
|
515
|
+
expect(@provider).to receive(:adm).with('clear', fmri)
|
516
|
+
expect(@provider).to receive(:adm).with('enable', '-rs', fmri)
|
517
|
+
|
518
|
+
expect(@provider).to receive(:wait).with('online')
|
519
|
+
|
520
|
+
@provider.flush
|
521
|
+
end
|
522
|
+
end
|
287
523
|
end
|
288
524
|
end
|
289
525
|
end
|