puppet 6.17.0-x64-mingw32 → 6.21.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +2 -0
- data/Gemfile.lock +38 -34
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +9 -3
- data/lib/puppet/application/apply.rb +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 +50 -8
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +88 -38
- 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/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_system/file_impl.rb +3 -3
- 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 +1 -1
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/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_metadata/http.rb +1 -0
- 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 +4 -4
- 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/master/v3/environments.rb +0 -1
- 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 +3 -2
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- 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 +22 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- 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/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 +19 -15
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +67 -1
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- 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 +1 -0
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- 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 +55 -8
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/resource/type.rb +2 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +63 -21
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +10 -3
- 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 +2 -2
- data/lib/puppet/type.rb +4 -3
- data/lib/puppet/type/file.rb +2 -2
- data/lib/puppet/type/file/source.rb +28 -8
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/service.rb +4 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +26 -12
- data/lib/puppet/util/autoload.rb +10 -15
- data/lib/puppet/util/character_encoding.rb +9 -5
- 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/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +15 -1
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/util/windows/user.rb +219 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +342 -312
- data/man/man5/puppet.conf.5 +53 -18
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +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 +208 -55
- 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 +19 -1
- 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/node/environment_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/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 +0 -10
- data/spec/integration/util/windows/user_spec.rb +7 -0
- 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_spec.rb +86 -37
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +10 -3
- 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/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_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 +0 -1
- data/spec/unit/http/resolver_spec.rb +24 -5
- 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/indirection_spec.rb +8 -12
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +4 -4
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/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 +0 -9
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +85 -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 +28 -0
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider/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 +11 -10
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +2 -0
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +36 -3
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- 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_spec.rb +13 -6
- metadata +49 -50
- 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/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
@@ -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,
|
@@ -595,36 +595,40 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
595
595
|
# @api private
|
596
596
|
class Puppet::Util::FileNamespaceAdapter < Puppet::Pops::Adaptable::Adapter
|
597
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
|
598
604
|
end
|
599
605
|
|
600
606
|
def namespace_for_file(file)
|
601
607
|
env = Puppet.lookup(:current_environment)
|
602
608
|
return NO_NAMESPACE if env.nil?
|
603
609
|
|
604
|
-
Puppet::Util::FileNamespaceAdapter.adapt(env)
|
605
|
-
adapter.file_to_namespace ||= {}
|
610
|
+
adapter = Puppet::Util::FileNamespaceAdapter.adapt(env)
|
606
611
|
|
607
|
-
|
608
|
-
|
612
|
+
file_namespace = adapter.file_to_namespace[file]
|
613
|
+
return file_namespace unless file_namespace.nil? # No cache entry, so we do the calculation
|
609
614
|
|
610
|
-
|
615
|
+
path = Pathname.new(file)
|
611
616
|
|
612
|
-
|
617
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if path.extname != ".pp"
|
613
618
|
|
614
|
-
|
619
|
+
path = path.expand_path
|
615
620
|
|
616
|
-
|
621
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if initial_manifest?(path, env.manifest)
|
617
622
|
|
618
|
-
|
619
|
-
|
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)
|
620
625
|
|
621
|
-
|
626
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if relative_path == NO_PATH
|
622
627
|
|
623
|
-
|
624
|
-
|
628
|
+
#If a file comes from a module, but isn't in the right place, always error
|
629
|
+
names = dir_to_names(relative_path)
|
625
630
|
|
626
|
-
|
627
|
-
end
|
631
|
+
return adapter.file_to_namespace[file] = (names == BAD_MODULE_FILE ? BAD_MODULE_FILE : names.join("::").freeze)
|
628
632
|
end
|
629
633
|
|
630
634
|
def initial_manifest?(path, manifest_setting)
|
data/lib/puppet/property/list.rb
CHANGED
@@ -47,7 +47,7 @@ module Puppet
|
|
47
47
|
#ok, some 'convention' if the list property is named groups, provider should implement a groups method
|
48
48
|
tmp = provider.send(name) if provider
|
49
49
|
if tmp && tmp != :absent
|
50
|
-
return tmp.split(delimiter)
|
50
|
+
return tmp.instance_of?(Array) ? tmp : tmp.split(delimiter)
|
51
51
|
else
|
52
52
|
return :absent
|
53
53
|
end
|
@@ -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
|
@@ -130,16 +130,21 @@ Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameSe
|
|
130
130
|
private
|
131
131
|
|
132
132
|
def findgroup(key, value)
|
133
|
-
group_file =
|
133
|
+
group_file = '/etc/group'
|
134
134
|
group_keys = [:group_name, :password, :gid, :user_list]
|
135
|
-
|
136
|
-
@
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
135
|
+
|
136
|
+
unless @groups
|
137
|
+
unless Puppet::FileSystem.exist?(group_file)
|
138
|
+
raise Puppet::Error.new("Forcelocal set for group resource '#{resource[:name]}', but #{group_file} does not exist")
|
139
|
+
end
|
140
|
+
|
141
|
+
@groups = []
|
142
|
+
Puppet::FileSystem.each_line(group_file) do |line|
|
143
|
+
group = line.chomp.split(':')
|
144
|
+
@groups << Hash[group_keys.zip(group)]
|
141
145
|
end
|
142
146
|
end
|
143
|
-
|
147
|
+
|
148
|
+
@groups.find { |param| param[key] == value } || false
|
144
149
|
end
|
145
150
|
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,47 @@ 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
|
+
|
46
|
+
if !%i(absent purged).include?(hash[:ensure]) && aptmark('showmanual', @resource[:name]).strip == @resource[:name]
|
47
|
+
hash[:mark] = :manual
|
48
|
+
end
|
49
|
+
|
50
|
+
hash
|
51
|
+
end
|
52
|
+
|
53
|
+
def initialize(value={})
|
54
|
+
super(value)
|
55
|
+
@property_flush = {}
|
56
|
+
end
|
57
|
+
|
58
|
+
def mark
|
59
|
+
@property_flush[:mark]
|
60
|
+
end
|
61
|
+
|
62
|
+
def mark=(value)
|
63
|
+
@property_flush[:mark] = value
|
64
|
+
end
|
65
|
+
|
66
|
+
def flush
|
67
|
+
# unless we are removing the package mark it if it hasn't already been marked
|
68
|
+
if @property_flush
|
69
|
+
unless @property_flush[:mark] || [:purge, :absent].include?(resource[:ensure])
|
70
|
+
aptmark('manual', resource[:name])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
33
75
|
# A derivative of DPKG; this is how most people actually manage
|
34
76
|
# Debian boxes, and the only thing that differs is that it can
|
35
77
|
# install packages from remote sites.
|
@@ -109,7 +151,13 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
109
151
|
end
|
110
152
|
|
111
153
|
cmd += install_options if @resource[:install_options]
|
112
|
-
cmd << :install
|
154
|
+
cmd << :install
|
155
|
+
|
156
|
+
if source
|
157
|
+
cmd << source
|
158
|
+
else
|
159
|
+
cmd << str
|
160
|
+
end
|
113
161
|
|
114
162
|
self.unhold if self.properties[:mark] == :hold
|
115
163
|
begin
|
@@ -117,6 +165,18 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
117
165
|
ensure
|
118
166
|
self.hold if @resource[:mark] == :hold
|
119
167
|
end
|
168
|
+
|
169
|
+
# If a source file was specified, we must make sure the expected version was installed from specified file
|
170
|
+
if source && !%i(present installed).include?(should)
|
171
|
+
is = self.query
|
172
|
+
raise Puppet::Error, _("Could not find package %{name}") % { name: self.name } unless is
|
173
|
+
|
174
|
+
version = is[:ensure]
|
175
|
+
|
176
|
+
raise Puppet::Error, _("Failed to update to version %{should}, got version %{version} instead") % { should: should, version: version } unless
|
177
|
+
insync?(version)
|
178
|
+
end
|
179
|
+
|
120
180
|
end
|
121
181
|
|
122
182
|
# What's the latest package version available?
|
@@ -193,4 +253,10 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
193
253
|
end
|
194
254
|
should_range.include?(is_version)
|
195
255
|
end
|
256
|
+
|
257
|
+
private
|
258
|
+
|
259
|
+
def source
|
260
|
+
@source ||= @resource[:source]
|
261
|
+
end
|
196
262
|
end
|
@@ -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
|