puppet 6.16.0-x86-mingw32 → 6.20.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 +6 -2
- data/Gemfile.lock +40 -36
- data/README.md +3 -4
- data/Rakefile +4 -12
- data/lib/puppet/agent.rb +2 -2
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +23 -6
- data/lib/puppet/application/apply.rb +20 -21
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +70 -20
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +113 -46
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +13 -1
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +4 -4
- data/lib/puppet/file_system/uniquefile.rb +8 -16
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +3 -7
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +6 -1
- data/lib/puppet/http/redirector.rb +9 -7
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/response.rb +19 -0
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/file_content/rest.rb +1 -1
- data/lib/puppet/indirector/file_metadata/http.rb +25 -5
- data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/request.rb +5 -5
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/formats.rb +2 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/network/http/connection_adapter.rb +6 -4
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +90 -13
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +7 -6
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
- data/lib/puppet/parser/compiler.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 +4 -1
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -8
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/pops/validation/checker4_0.rb +29 -15
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +38 -0
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +2 -1
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +3 -3
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -4
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/reports/http.rb +2 -0
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +10 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +63 -21
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +18 -13
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +12 -8
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +15 -7
- data/lib/puppet/type/file.rb +40 -15
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +32 -12
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/service.rb +53 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/autoload.rb +10 -15
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/fact_dif.rb +62 -0
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +60 -33
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/user.rb +242 -8
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +501 -443
- data/man/man5/puppet.conf.5 +70 -24
- data/man/man8/puppet-agent.8 +8 -5
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +2 -2
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +7 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +263 -54
- data/spec/integration/application/apply_spec.rb +168 -149
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +70 -21
- data/spec/integration/application/help_spec.rb +42 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +53 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +20 -3
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/network/http_pool_spec.rb +26 -9
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +11 -0
- 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 +1 -1
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +5 -3
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/registry_spec.rb +7 -17
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +3 -5
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +41 -10
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application/man_spec.rb +52 -0
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +15 -2
- data/spec/unit/application_spec.rb +60 -13
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer_spec.rb +86 -37
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +10 -3
- data/spec/unit/context/trusted_information_spec.rb +10 -4
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +65 -12
- data/spec/unit/face/node_spec.rb +2 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/client_spec.rb +64 -9
- data/spec/unit/http/resolver_spec.rb +24 -5
- data/spec/unit/http/response_spec.rb +6 -0
- data/spec/unit/http/service/ca_spec.rb +2 -3
- data/spec/unit/http/service/compiler_spec.rb +51 -3
- data/spec/unit/http/service/file_server_spec.rb +2 -3
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -3
- data/spec/unit/http/service_spec.rb +1 -2
- data/spec/unit/http/session_spec.rb +8 -21
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +5 -5
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -10
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/connection_spec.rb +42 -32
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/scope_spec.rb +1 -1
- 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 +15 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +76 -3
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +45 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -6
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/service/windows_spec.rb +50 -14
- 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/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +23 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +14 -13
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +82 -50
- data/spec/unit/test/test_helper_spec.rb +17 -0
- 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/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +3 -1
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/file_spec.rb +122 -102
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +210 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/type_spec.rb +52 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/command_line_spec.rb +11 -6
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- data/spec/unit/util_spec.rb +16 -9
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- metadata +52 -53
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/integration/test/test_helper_spec.rb +0 -31
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/face/module_spec.rb +0 -3
- data/spec/unit/man_spec.rb +0 -31
@@ -47,7 +47,7 @@ class EnvironmentContext < Adaptable::Adapter
|
|
47
47
|
file_data = @file_data_cache[path]
|
48
48
|
stat = Puppet::FileSystem.stat(path)
|
49
49
|
unless file_data && file_data.valid?(stat)
|
50
|
-
Puppet.debug
|
50
|
+
Puppet.debug { "File at '#{path}' was changed, reloading" } if file_data
|
51
51
|
content = Puppet::FileSystem.read(path, :encoding => 'utf-8')
|
52
52
|
file_data = FileData.new(path, stat.ino, stat.mtime, stat.size, block_given? ? yield(content) : content)
|
53
53
|
@file_data_cache[path] = file_data
|
@@ -46,6 +46,7 @@ class HieraConfig
|
|
46
46
|
KEY_DATADIR = 'datadir'.freeze
|
47
47
|
KEY_DEFAULT_HIERARCHY = 'default_hierarchy'.freeze
|
48
48
|
KEY_HIERARCHY = 'hierarchy'.freeze
|
49
|
+
KEY_PLAN_HIERARCHY = 'plan_hierarchy'.freeze
|
49
50
|
KEY_LOGGER = 'logger'.freeze
|
50
51
|
KEY_OPTIONS = 'options'.freeze
|
51
52
|
KEY_PATH = 'path'.freeze
|
@@ -580,6 +581,7 @@ class HieraConfigV5 < HieraConfig
|
|
580
581
|
tf.optional(KEY_OPTIONS) => tf.hash_kv(option_name_t, tf.data),
|
581
582
|
}),
|
582
583
|
tf.optional(KEY_HIERARCHY) => hierarchy_t,
|
584
|
+
tf.optional(KEY_PLAN_HIERARCHY) => hierarchy_t,
|
583
585
|
tf.optional(KEY_DEFAULT_HIERARCHY) => hierarchy_t
|
584
586
|
})
|
585
587
|
end
|
@@ -600,7 +602,15 @@ class HieraConfigV5 < HieraConfig
|
|
600
602
|
return data_providers
|
601
603
|
end
|
602
604
|
|
603
|
-
|
605
|
+
compiler = Puppet.lookup(:pal_compiler) { nil }
|
606
|
+
config_key = if compiler.is_a?(Puppet::Pal::ScriptCompiler) && !@config[KEY_PLAN_HIERARCHY].nil?
|
607
|
+
KEY_PLAN_HIERARCHY
|
608
|
+
elsif use_default_hierarchy
|
609
|
+
KEY_DEFAULT_HIERARCHY
|
610
|
+
else
|
611
|
+
KEY_HIERARCHY
|
612
|
+
end
|
613
|
+
@config[config_key].each do |he|
|
604
614
|
name = he[KEY_NAME]
|
605
615
|
if data_providers.include?(name)
|
606
616
|
first_line = find_line_matching(/\s+name:\s+['"]?#{name}(?:[^\w]|$)/)
|
@@ -691,6 +701,9 @@ class HieraConfigV5 < HieraConfig
|
|
691
701
|
defaults = config[KEY_DEFAULTS]
|
692
702
|
validate_defaults(defaults) unless defaults.nil?
|
693
703
|
config[KEY_HIERARCHY].each { |he| validate_hierarchy(he, defaults, owner) }
|
704
|
+
if config.include?(KEY_PLAN_HIERARCHY)
|
705
|
+
config[KEY_PLAN_HIERARCHY].each { |he| validate_hierarchy(he, defaults, owner) }
|
706
|
+
end
|
694
707
|
|
695
708
|
if config.include?(KEY_DEFAULT_HIERARCHY)
|
696
709
|
unless owner.is_a?(ModuleDataProvider)
|
@@ -31,7 +31,7 @@ class Puppet::Pops::Model::AstTransformer
|
|
31
31
|
def ast(o, klass, hash={})
|
32
32
|
# create and pass hash with file and line information
|
33
33
|
# PUP-3274 - still needed since hostname transformation requires AST::HostName, and AST::Regexp
|
34
|
-
klass.new(merge_location(hash, o))
|
34
|
+
klass.new(**merge_location(hash, o))
|
35
35
|
end
|
36
36
|
|
37
37
|
# THIS IS AN EXPENSIVE OPERATION
|
@@ -23,13 +23,16 @@ module Puppet::Pops::Types
|
|
23
23
|
#
|
24
24
|
# An `ArgumentError` is raised for all other objects.
|
25
25
|
#
|
26
|
-
# @param
|
26
|
+
# @param my_caller [Object] The calling object to reference in errors
|
27
|
+
# @param obj [Object] The object to produce an `Iterable` for
|
28
|
+
# @param infer_elements [Boolean] Whether or not to recursively infer all elements of obj. Optional
|
29
|
+
#
|
27
30
|
# @return [Iterable,nil] The produced `Iterable`
|
28
31
|
# @raise [ArgumentError] In case an `Iterable` cannot be produced
|
29
32
|
# @api public
|
30
|
-
def self.asserted_iterable(
|
31
|
-
iter = self.on(obj)
|
32
|
-
raise ArgumentError, "#{
|
33
|
+
def self.asserted_iterable(my_caller, obj, infer_elements = false)
|
34
|
+
iter = self.on(obj, nil, infer_elements)
|
35
|
+
raise ArgumentError, "#{my_caller.class}(): wrong argument type (#{obj.class}; is not Iterable." if iter.nil?
|
33
36
|
iter
|
34
37
|
end
|
35
38
|
|
@@ -48,11 +51,14 @@ module Puppet::Pops::Types
|
|
48
51
|
# The value `nil` is returned for all other objects.
|
49
52
|
#
|
50
53
|
# @param o [Object] The object to produce an `Iterable` for
|
51
|
-
# @param element_type [PAnyType] the element type for the iterator. Optional
|
54
|
+
# @param element_type [PAnyType] the element type for the iterator. Optional
|
55
|
+
# @param infer_elements [Boolean] if element_type is nil, whether or not to recursively
|
56
|
+
# infer types for the entire collection. Optional
|
57
|
+
#
|
52
58
|
# @return [Iterable,nil] The produced `Iterable` or `nil` if it couldn't be produced
|
53
59
|
#
|
54
60
|
# @api public
|
55
|
-
def self.on(o, element_type = nil)
|
61
|
+
def self.on(o, element_type = nil, infer_elements = true)
|
56
62
|
case o
|
57
63
|
when IteratorProducer
|
58
64
|
o.iterator
|
@@ -64,7 +70,7 @@ module Puppet::Pops::Types
|
|
64
70
|
if o.empty?
|
65
71
|
Iterator.new(PUnitType::DEFAULT, o.each)
|
66
72
|
else
|
67
|
-
if element_type.nil?
|
73
|
+
if element_type.nil? && infer_elements
|
68
74
|
tc = TypeCalculator.singleton
|
69
75
|
element_type = PVariantType.maybe_create(o.map {|e| tc.infer_set(e) })
|
70
76
|
end
|
@@ -75,7 +81,7 @@ module Puppet::Pops::Types
|
|
75
81
|
if o.empty?
|
76
82
|
HashIterator.new(PHashType::DEFAULT_KEY_PAIR_TUPLE, o.each)
|
77
83
|
else
|
78
|
-
if element_type.nil?
|
84
|
+
if element_type.nil? && infer_elements
|
79
85
|
tc = TypeCalculator.singleton
|
80
86
|
element_type = PTupleType.new([
|
81
87
|
PVariantType.maybe_create(o.keys.map {|e| tc.infer_set(e) }),
|
@@ -202,6 +208,26 @@ module Puppet::Pops::Types
|
|
202
208
|
@enumeration.send(name, *arguments, &block)
|
203
209
|
end
|
204
210
|
|
211
|
+
def next
|
212
|
+
@enumeration.next
|
213
|
+
end
|
214
|
+
|
215
|
+
def map(*args, &block)
|
216
|
+
@enumeration.map(*args, &block)
|
217
|
+
end
|
218
|
+
|
219
|
+
def reduce(*args, &block)
|
220
|
+
@enumeration.reduce(*args, &block)
|
221
|
+
end
|
222
|
+
|
223
|
+
def all?(&block)
|
224
|
+
@enumeration.all?(&block)
|
225
|
+
end
|
226
|
+
|
227
|
+
def any?(&block)
|
228
|
+
@enumeration.any?(&block)
|
229
|
+
end
|
230
|
+
|
205
231
|
def step(step, &block)
|
206
232
|
raise ArgumentError if step <= 0
|
207
233
|
r = self
|
@@ -22,7 +22,7 @@ class PMetaType < PAnyType
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def instance?(o, guard = nil)
|
25
|
-
|
25
|
+
raise NotImplementedError, "Subclass of PMetaType should implement 'instance?'"
|
26
26
|
end
|
27
27
|
|
28
28
|
# Called from the TypeParser once it has found a type using the Loader. The TypeParser will
|
@@ -349,6 +349,10 @@ class PTypeSetType < PMetaType
|
|
349
349
|
self.class == o.class && @name_authority == o.name_authority && @name == o.name && @version == o.version
|
350
350
|
end
|
351
351
|
|
352
|
+
def instance?(o, guard = nil)
|
353
|
+
o.is_a?(PTypeSetType)
|
354
|
+
end
|
355
|
+
|
352
356
|
DEFAULT = self.new({
|
353
357
|
KEY_NAME => 'DefaultTypeSet',
|
354
358
|
KEY_NAME_AUTHORITY => Pcore::RUNTIME_NAME_AUTHORITY,
|
@@ -199,6 +199,11 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
def check_Application(o)
|
203
|
+
check_NamedDefinition(o)
|
204
|
+
acceptor.accept(Issues::DEPRECATED_APP_ORCHESTRATION, o, {:klass => o})
|
205
|
+
end
|
206
|
+
|
202
207
|
def check_AssignmentExpression(o)
|
203
208
|
case o.operator
|
204
209
|
when '='
|
@@ -296,6 +301,7 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
296
301
|
end
|
297
302
|
|
298
303
|
def check_CapabilityMapping(o)
|
304
|
+
acceptor.accept(Issues::DEPRECATED_APP_ORCHESTRATION, o, {:klass => o})
|
299
305
|
ok =
|
300
306
|
case o.component
|
301
307
|
when Model::QualifiedReference
|
@@ -589,36 +595,40 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
589
595
|
# @api private
|
590
596
|
class Puppet::Util::FileNamespaceAdapter < Puppet::Pops::Adaptable::Adapter
|
591
597
|
attr_accessor :file_to_namespace
|
598
|
+
|
599
|
+
def self.create_adapter(env)
|
600
|
+
adapter = super(env)
|
601
|
+
adapter.file_to_namespace = {}
|
602
|
+
adapter
|
603
|
+
end
|
592
604
|
end
|
593
605
|
|
594
606
|
def namespace_for_file(file)
|
595
607
|
env = Puppet.lookup(:current_environment)
|
596
608
|
return NO_NAMESPACE if env.nil?
|
597
609
|
|
598
|
-
Puppet::Util::FileNamespaceAdapter.adapt(env)
|
599
|
-
adapter.file_to_namespace ||= {}
|
610
|
+
adapter = Puppet::Util::FileNamespaceAdapter.adapt(env)
|
600
611
|
|
601
|
-
|
602
|
-
|
612
|
+
file_namespace = adapter.file_to_namespace[file]
|
613
|
+
return file_namespace unless file_namespace.nil? # No cache entry, so we do the calculation
|
603
614
|
|
604
|
-
|
615
|
+
path = Pathname.new(file)
|
605
616
|
|
606
|
-
|
617
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if path.extname != ".pp"
|
607
618
|
|
608
|
-
|
619
|
+
path = path.expand_path
|
609
620
|
|
610
|
-
|
621
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if initial_manifest?(path, env.manifest)
|
611
622
|
|
612
|
-
|
613
|
-
|
623
|
+
#All auto-loaded files from modules come from a module search path dir
|
624
|
+
relative_path = get_module_relative_path(path, env.full_modulepath)
|
614
625
|
|
615
|
-
|
626
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if relative_path == NO_PATH
|
616
627
|
|
617
|
-
|
618
|
-
|
628
|
+
#If a file comes from a module, but isn't in the right place, always error
|
629
|
+
names = dir_to_names(relative_path)
|
619
630
|
|
620
|
-
|
621
|
-
end
|
631
|
+
return adapter.file_to_namespace[file] = (names == BAD_MODULE_FILE ? BAD_MODULE_FILE : names.join("::").freeze)
|
622
632
|
end
|
623
633
|
|
624
634
|
def initial_manifest?(path, manifest_setting)
|
@@ -865,6 +875,10 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
865
875
|
rvalue(o.matching_expr)
|
866
876
|
end
|
867
877
|
|
878
|
+
def check_SiteDefinition(o)
|
879
|
+
acceptor.accept(Issues::DEPRECATED_APP_ORCHESTRATION, o, {:klass => o})
|
880
|
+
end
|
881
|
+
|
868
882
|
def check_UnaryExpression(o)
|
869
883
|
rvalue(o.expr)
|
870
884
|
end
|
@@ -31,6 +31,7 @@ class ValidatorFactory_4_0 < Factory
|
|
31
31
|
p[Issues::RT_NO_STORECONFIGS] = Puppet[:storeconfigs] ? :ignore : :warning
|
32
32
|
|
33
33
|
p[Issues::FUTURE_RESERVED_WORD] = :deprecation
|
34
|
+
p[Issues::DEPRECATED_APP_ORCHESTRATION] = :deprecation
|
34
35
|
|
35
36
|
p[Issues::DUPLICATE_KEY] = Puppet[:strict] == :off ? :ignore : Puppet[:strict]
|
36
37
|
p[Issues::NAME_WITH_HYPHEN] = :error
|
@@ -126,7 +126,7 @@ Puppet::Type.type(:file).provide :windows do
|
|
126
126
|
# If the SYSTEM account does _not_ have FullControl in this scenario, we should
|
127
127
|
# force the resource out of sync no matter what.
|
128
128
|
#TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
|
129
|
-
Puppet.debug _("%{resource_name}: %{mode_part_type} set to SYSTEM. SYSTEM permissions cannot be set below FullControl ('7')") % { resource_name: resource[:name], mode_part_type: mode_part['type']}
|
129
|
+
Puppet.debug { _("%{resource_name}: %{mode_part_type} set to SYSTEM. SYSTEM permissions cannot be set below FullControl ('7')") % { resource_name: resource[:name], mode_part_type: mode_part['type']} }
|
130
130
|
return nil
|
131
131
|
end
|
132
132
|
end
|
@@ -16,6 +16,7 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
16
16
|
|
17
17
|
commands :aptget => "/usr/bin/apt-get"
|
18
18
|
commands :aptcache => "/usr/bin/apt-cache"
|
19
|
+
commands :aptmark => "/usr/bin/apt-mark"
|
19
20
|
commands :preseed => "/usr/bin/debconf-set-selections"
|
20
21
|
|
21
22
|
defaultfor :osfamily => :debian
|
@@ -30,6 +31,43 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
30
31
|
false
|
31
32
|
end
|
32
33
|
|
34
|
+
def self.instances
|
35
|
+
packages = super
|
36
|
+
manual_marks = aptmark('showmanual').split("\n")
|
37
|
+
packages.each do |package|
|
38
|
+
package.mark = :manual if manual_marks.include?(package.name)
|
39
|
+
end
|
40
|
+
packages
|
41
|
+
end
|
42
|
+
|
43
|
+
def query
|
44
|
+
hash = super
|
45
|
+
hash[:mark] = :manual if aptmark('showmanual').split("\n").include?(@resource[:name])
|
46
|
+
hash
|
47
|
+
end
|
48
|
+
|
49
|
+
def initialize(value={})
|
50
|
+
super(value)
|
51
|
+
@property_flush = {}
|
52
|
+
end
|
53
|
+
|
54
|
+
def mark
|
55
|
+
@property_flush[:mark]
|
56
|
+
end
|
57
|
+
|
58
|
+
def mark=(value)
|
59
|
+
@property_flush[:mark] = value
|
60
|
+
end
|
61
|
+
|
62
|
+
def flush
|
63
|
+
# unless we are removing the package mark it if it hasn't already been marked
|
64
|
+
if @property_flush
|
65
|
+
unless @property_flush[:mark] || [:purge, :absent].include?(resource[:ensure])
|
66
|
+
aptmark('manual', resource[:name])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
33
71
|
# A derivative of DPKG; this is how most people actually manage
|
34
72
|
# Debian boxes, and the only thing that differs is that it can
|
35
73
|
# install packages from remote sites.
|
@@ -16,7 +16,7 @@ Puppet::Type.type(:package).provide :aptitude, :parent => :apt, :source => :dpkg
|
|
16
16
|
output = aptitude(*args)
|
17
17
|
|
18
18
|
# Yay, stupid aptitude doesn't throw an error when the package is missing.
|
19
|
-
if args.include?(:install) and output =~ /Couldn't find any package/
|
19
|
+
if args.include?(:install) and output.to_s =~ /Couldn't find any package/
|
20
20
|
raise Puppet::Error.new(
|
21
21
|
_("Could not find package %{name}") % { name: self.name }
|
22
22
|
)
|
@@ -74,7 +74,7 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
|
|
74
74
|
elsif ['config-files', 'half-installed', 'unpacked', 'half-configured'].include?(hash[:status])
|
75
75
|
hash[:ensure] = :absent
|
76
76
|
end
|
77
|
-
hash[:mark] =
|
77
|
+
hash[:mark] = hash[:desired] == 'hold' ? :hold : :none
|
78
78
|
else
|
79
79
|
Puppet.debug("Failed to match dpkg-query line #{line.inspect}")
|
80
80
|
end
|
@@ -53,11 +53,13 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
|
|
53
53
|
#
|
54
54
|
# In this case, causing the puppet_gem provider to inherit the parent gem provider's convenience gemcmd() methods, with the wrong path.
|
55
55
|
|
56
|
-
def self.execute_gem_command(command, command_options)
|
56
|
+
def self.execute_gem_command(command, command_options, custom_environment = {})
|
57
57
|
validate_command(command)
|
58
58
|
cmd = [command] << command_options
|
59
59
|
|
60
|
-
|
60
|
+
custom_environment = {'HOME'=>Puppet::Util.get_env('HOME')}.merge(custom_environment)
|
61
|
+
|
62
|
+
execute(cmd, {:failonfail => true, :combine => true, :custom_environment => custom_environment})
|
61
63
|
end
|
62
64
|
|
63
65
|
def self.instances(target_command = nil)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Puppet package provider for Python's `pip2` package management frontend.
|
2
|
+
# <http://pip.pypa.io/>
|
3
|
+
|
4
|
+
Puppet::Type.type(:package).provide :pip2,
|
5
|
+
:parent => :pip do
|
6
|
+
|
7
|
+
desc "Python packages via `pip2`.
|
8
|
+
|
9
|
+
This provider supports the `install_options` attribute, which allows command-line flags to be passed to pip2.
|
10
|
+
These options should be specified as an array where each element is either a string or a hash."
|
11
|
+
|
12
|
+
has_feature :installable, :uninstallable, :upgradeable, :versionable, :install_options, :targetable
|
13
|
+
|
14
|
+
def self.cmd
|
15
|
+
["pip2"]
|
16
|
+
end
|
17
|
+
end
|
@@ -18,4 +18,9 @@ Puppet::Type.type(:package).provide :puppet_gem, :parent => :gem do
|
|
18
18
|
Puppet.debug("Invalidating rubygems cache after uninstalling gem '#{resource[:name]}'")
|
19
19
|
Puppet::Util::Autoload.gem_source.clear_paths
|
20
20
|
end
|
21
|
+
|
22
|
+
def self.execute_gem_command(command, command_options, custom_environment = {})
|
23
|
+
custom_environment['PKG_CONFIG_PATH'] = '/opt/puppetlabs/puppet/lib/pkgconfig' unless Puppet::Util::Platform.windows?
|
24
|
+
super(command, command_options, custom_environment)
|
25
|
+
end
|
21
26
|
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
unless Puppet::Util::Platform.jruby_fips?
|
2
|
+
require 'rubygems/commands/list_command'
|
3
|
+
end
|
4
|
+
require 'stringio'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
# Ruby gems support.
|
8
|
+
Puppet::Type.type(:package).provide :puppetserver_gem, :parent => :gem do
|
9
|
+
desc "Puppet Server Ruby Gem support. If a URL is passed via `source`, then
|
10
|
+
that URL is appended to the list of remote gem repositories which by default
|
11
|
+
contains rubygems.org; To ensure that only the specified source is used also
|
12
|
+
pass `--clear-sources` in via `install_options`; if a source is present but
|
13
|
+
is not a valid URL, it will be interpreted as the path to a local gem file.
|
14
|
+
If source is not present at all, the gem will be installed from the default
|
15
|
+
gem repositories."
|
16
|
+
|
17
|
+
has_feature :versionable, :install_options, :uninstall_options
|
18
|
+
|
19
|
+
confine :feature => :hocon
|
20
|
+
# see SERVER-2578
|
21
|
+
confine :fips_enabled => false
|
22
|
+
|
23
|
+
# Define the default provider package command name, as the parent 'gem' provider is targetable.
|
24
|
+
# Required by Puppet::Provider::Package::Targetable::resource_or_provider_command
|
25
|
+
|
26
|
+
def self.provider_command
|
27
|
+
command(:puppetservercmd)
|
28
|
+
end
|
29
|
+
|
30
|
+
# The gem command uses HOME to locate a gemrc file.
|
31
|
+
# CommandDefiner in provider.rb will set failonfail, combine, and environment.
|
32
|
+
|
33
|
+
has_command(:puppetservercmd, '/opt/puppetlabs/bin/puppetserver') do
|
34
|
+
environment(HOME: ENV['HOME'])
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.gemlist(options)
|
38
|
+
command_options = ['gem', 'list']
|
39
|
+
|
40
|
+
if options[:local]
|
41
|
+
command_options << '--local'
|
42
|
+
else
|
43
|
+
command_options << '--remote'
|
44
|
+
end
|
45
|
+
|
46
|
+
if options[:source]
|
47
|
+
command_options << '--source' << options[:source]
|
48
|
+
end
|
49
|
+
|
50
|
+
if options[:justme]
|
51
|
+
gem_regex = '\A' + options[:justme] + '\z'
|
52
|
+
command_options << gem_regex
|
53
|
+
end
|
54
|
+
|
55
|
+
if options[:local]
|
56
|
+
list = execute_rubygems_list_command(gem_regex)
|
57
|
+
else
|
58
|
+
begin
|
59
|
+
list = puppetservercmd(command_options)
|
60
|
+
rescue Puppet::ExecutionFailure => detail
|
61
|
+
raise Puppet::Error, _("Could not list gems: %{detail}") % { detail: detail }, detail.backtrace
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# When `/tmp` is mounted `noexec`, `puppetserver gem list` will output:
|
66
|
+
# *** LOCAL GEMS ***
|
67
|
+
# causing gemsplit to output:
|
68
|
+
# Warning: Could not match *** LOCAL GEMS ***
|
69
|
+
gem_list = list
|
70
|
+
.lines
|
71
|
+
.select { |x| x =~ /^(\S+)\s+\((.+)\)/ }
|
72
|
+
.map { |set| gemsplit(set) }
|
73
|
+
|
74
|
+
if options[:justme]
|
75
|
+
return gem_list.shift
|
76
|
+
else
|
77
|
+
return gem_list
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def install(useversion = true)
|
82
|
+
command_options = ['gem', 'install']
|
83
|
+
command_options += install_options if resource[:install_options]
|
84
|
+
|
85
|
+
command_options << '-v' << resource[:ensure] if (!resource[:ensure].is_a? Symbol) && useversion
|
86
|
+
|
87
|
+
command_options << '--no-document'
|
88
|
+
|
89
|
+
if resource[:source]
|
90
|
+
begin
|
91
|
+
uri = URI.parse(resource[:source])
|
92
|
+
rescue => detail
|
93
|
+
self.fail Puppet::Error, _("Invalid source '%{uri}': %{detail}") % { uri: uri, detail: detail }, detail
|
94
|
+
end
|
95
|
+
|
96
|
+
case uri.scheme
|
97
|
+
when nil
|
98
|
+
# no URI scheme => interpret the source as a local file
|
99
|
+
command_options << resource[:source]
|
100
|
+
when /file/i
|
101
|
+
command_options << uri.path
|
102
|
+
when 'puppet'
|
103
|
+
# we don't support puppet:// URLs (yet)
|
104
|
+
raise Puppet::Error.new(_('puppet:// URLs are not supported as gem sources'))
|
105
|
+
else
|
106
|
+
# interpret it as a gem repository
|
107
|
+
command_options << '--source' << "#{resource[:source]}" << resource[:name]
|
108
|
+
end
|
109
|
+
else
|
110
|
+
command_options << resource[:name]
|
111
|
+
end
|
112
|
+
|
113
|
+
output = puppetservercmd(command_options)
|
114
|
+
# Apparently, some gem versions don't exit non-0 on failure.
|
115
|
+
self.fail _("Could not install: %{output}") % { output: output.chomp } if output.include?('ERROR')
|
116
|
+
end
|
117
|
+
|
118
|
+
def uninstall
|
119
|
+
command_options = ['gem', 'uninstall']
|
120
|
+
command_options << '--executables' << '--all' << resource[:name]
|
121
|
+
command_options += uninstall_options if resource[:uninstall_options]
|
122
|
+
|
123
|
+
output = puppetservercmd(command_options)
|
124
|
+
# Apparently, some gem versions don't exit non-0 on failure.
|
125
|
+
self.fail _("Could not uninstall: %{output}") % { output: output.chomp } if output.include?('ERROR')
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
# The puppetserver gem cli command is very slow, since it starts a JVM.
|
131
|
+
#
|
132
|
+
# Instead, for the list subcommand (which is executed with every puppet run),
|
133
|
+
# use the rubygems library from puppet ruby: setting GEM_HOME and GEM_PATH
|
134
|
+
# to the default values, or the values in the puppetserver configuration file.
|
135
|
+
#
|
136
|
+
# The rubygems library cannot access java platform gems,
|
137
|
+
# for example: json (1.8.3 java)
|
138
|
+
# but java platform gems should not be managed by this (or any) provider.
|
139
|
+
|
140
|
+
def self.execute_rubygems_list_command(gem_regex)
|
141
|
+
puppetserver_default_gem_home = '/opt/puppetlabs/server/data/puppetserver/jruby-gems'
|
142
|
+
puppetserver_default_vendored_jruby_gems = '/opt/puppetlabs/server/data/puppetserver/vendored-jruby-gems'
|
143
|
+
puppet_default_vendor_gems = '/opt/puppetlabs/puppet/lib/ruby/vendor_gems'
|
144
|
+
puppetserver_default_gem_path = [puppetserver_default_gem_home, puppetserver_default_vendored_jruby_gems, puppet_default_vendor_gems].join(':')
|
145
|
+
|
146
|
+
pe_puppetserver_conf_file = '/etc/puppetlabs/puppetserver/conf.d/pe-puppet-server.conf'
|
147
|
+
os_puppetserver_conf_file = '/etc/puppetlabs/puppetserver/puppetserver.conf'
|
148
|
+
puppetserver_conf_file = Facter.value(:pe_server_version) ? pe_puppetserver_conf_file : os_puppetserver_conf_file
|
149
|
+
puppetserver_conf = Hocon.load(puppetserver_conf_file)
|
150
|
+
|
151
|
+
gem_env = {}
|
152
|
+
if puppetserver_conf.empty? || puppetserver_conf.key?('jruby-puppet') == false
|
153
|
+
gem_env['GEM_HOME'] = puppetserver_default_gem_home
|
154
|
+
gem_env['GEM_PATH'] = puppetserver_default_gem_path
|
155
|
+
else
|
156
|
+
gem_env['GEM_HOME'] = puppetserver_conf['jruby-puppet'].key?('gem-home') ? puppetserver_conf['jruby-puppet']['gem-home'] : puppetserver_default_gem_home
|
157
|
+
gem_env['GEM_PATH'] = puppetserver_conf['jruby-puppet'].key?('gem-path') ? puppetserver_conf['jruby-puppet']['gem-path'].join(':') : puppetserver_default_gem_path
|
158
|
+
end
|
159
|
+
gem_env['GEM_SPEC_CACHE'] = "/tmp/#{$$}"
|
160
|
+
Gem.paths = gem_env
|
161
|
+
|
162
|
+
sio_inn = StringIO.new
|
163
|
+
sio_out = StringIO.new
|
164
|
+
sio_err = StringIO.new
|
165
|
+
stream_ui = Gem::StreamUI.new(sio_inn, sio_out, sio_err, false)
|
166
|
+
gem_list_cmd = Gem::Commands::ListCommand.new
|
167
|
+
gem_list_cmd.options[:domain] = :local
|
168
|
+
gem_list_cmd.options[:args] = [gem_regex] if gem_regex
|
169
|
+
gem_list_cmd.ui = stream_ui
|
170
|
+
gem_list_cmd.execute
|
171
|
+
|
172
|
+
# There is no method exclude default gems from the local gem list,
|
173
|
+
# for example: psych (default: 2.2.2)
|
174
|
+
# but default gems should not be managed by this (or any) provider.
|
175
|
+
gem_list = sio_out.string.lines.reject { |gem| gem =~ / \(default\: / }
|
176
|
+
gem_list.join("\n")
|
177
|
+
ensure
|
178
|
+
Gem.clear_paths
|
179
|
+
end
|
180
|
+
end
|