puppet 4.3.2-x64-mingw32 → 4.4.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/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +4 -4
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +65 -19
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +3 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node.rb +1 -1
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +3 -3
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +38 -13
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
- data/lib/puppet/pops/evaluator/closure.rb +84 -68
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +34 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup.rb +14 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +26 -2
- data/lib/puppet/pops/model/model.rb +8 -8
- data/lib/puppet/pops/model/model_label_provider.rb +13 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +26 -19
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +11 -7
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +138 -381
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1247
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops/validation/checker4_0.rb +83 -55
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +5 -8
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +6 -18
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +28 -38
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +4 -4
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +23 -14
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +1 -1
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +42 -4
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +90 -4
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/integration/util/windows/security_spec.rb +6 -6
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +11 -3
- data/spec/unit/functions/lookup_spec.rb +58 -13
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +61 -5
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +16 -0
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +100 -43
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +47 -34
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/yum_spec.rb +11 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/launchd_spec.rb +17 -35
- data/spec/unit/provider/service/systemd_spec.rb +7 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +96 -57
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +1 -1
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +114 -26
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -21,7 +21,7 @@ module Puppet
|
|
21
21
|
puppet master's filebucket with the _desired_ content for each file,
|
22
22
|
then instructs the agent to retrieve the content for a specific
|
23
23
|
checksum. For more details,
|
24
|
-
[see the `static_compiler` section in the catalog indirection docs](
|
24
|
+
[see the `static_compiler` section in the catalog indirection docs](https://docs.puppetlabs.com/references/latest/indirection.html#catalog).
|
25
25
|
|
26
26
|
To use a central filebucket for backups, you will usually want to declare
|
27
27
|
a filebucket resource and a resource default for the `backup` attribute
|
@@ -45,19 +45,24 @@ Puppet::Type.newtype(:interface) do
|
|
45
45
|
newvalues(:auto, :full, :half)
|
46
46
|
end
|
47
47
|
|
48
|
+
newproperty(:access_vlan) do
|
49
|
+
desc "Interface static access vlan."
|
50
|
+
newvalues(/^\d+/)
|
51
|
+
end
|
52
|
+
|
48
53
|
newproperty(:native_vlan) do
|
49
|
-
desc "Interface native vlan
|
54
|
+
desc "Interface native vlan when trunking."
|
50
55
|
newvalues(/^\d+/)
|
51
56
|
end
|
52
57
|
|
53
58
|
newproperty(:encapsulation) do
|
54
59
|
desc "Interface switchport encapsulation."
|
55
|
-
newvalues(:none, :dot1q, :isl )
|
60
|
+
newvalues(:none, :dot1q, :isl, :negotiate)
|
56
61
|
end
|
57
62
|
|
58
63
|
newproperty(:mode) do
|
59
64
|
desc "Interface switchport mode."
|
60
|
-
newvalues(:access, :trunk)
|
65
|
+
newvalues(:access, :trunk, 'dynamic auto', 'dynamic desirable')
|
61
66
|
end
|
62
67
|
|
63
68
|
newproperty(:allowed_trunk_vlans) do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Puppet::Type.newtype(:macauthorization) do
|
2
2
|
|
3
3
|
@doc = "Manage the Mac OS X authorization database. See the
|
4
|
-
[Apple developer site](
|
4
|
+
[Apple developer site](https://developer.apple.com/documentation/Security/Conceptual/Security_Overview/Security_Services/chapter_4_section_5.html)
|
5
5
|
for more information.
|
6
6
|
|
7
7
|
Note that authorization store directives with hyphens in their names have
|
data/lib/puppet/type/package.rb
CHANGED
@@ -74,6 +74,12 @@ module Puppet
|
|
74
74
|
value. On packaging systems that manage configuration files separately
|
75
75
|
from "normal" system files, you can uninstall config files by
|
76
76
|
specifying `purged` as the ensure value. This defaults to `installed`.
|
77
|
+
|
78
|
+
Version numbers must match the full version to install, including
|
79
|
+
release if the provider uses a release moniker. Ranges or semver
|
80
|
+
patterns are not accepted except for the `gem` package provider. For
|
81
|
+
example, to install the bash package from the rpm
|
82
|
+
`bash-4.1.2-29.el6.x86_64.rpm`, use the string `'4.1.2-29.el6'`.
|
77
83
|
EOT
|
78
84
|
|
79
85
|
attr_accessor :latest
|
data/lib/puppet/type/schedule.rb
CHANGED
@@ -2,7 +2,7 @@ module Puppet
|
|
2
2
|
Type.newtype(:schedule) do
|
3
3
|
@doc = <<-'EOT'
|
4
4
|
Define schedules for Puppet. Resources can be limited to a schedule by using the
|
5
|
-
[`schedule`](
|
5
|
+
[`schedule`](https://docs.puppetlabs.com/references/latest/metaparameter.html#schedule)
|
6
6
|
metaparameter.
|
7
7
|
|
8
8
|
Currently, **schedules can only be used to stop a resource from being
|
data/lib/puppet/type/stage.rb
CHANGED
@@ -2,7 +2,7 @@ Puppet::Type.newtype(:stage) do
|
|
2
2
|
desc "A resource type for creating new run stages. Once a stage is available,
|
3
3
|
classes can be assigned to it by declaring them with the resource-like syntax
|
4
4
|
and using
|
5
|
-
[the `stage` metaparameter](
|
5
|
+
[the `stage` metaparameter](https://docs.puppetlabs.com/references/latest/metaparameter.html#stage).
|
6
6
|
|
7
7
|
Note that new stages are not useful unless you also declare their order
|
8
8
|
in relation to the default `main` stage.
|
data/lib/puppet/type/user.rb
CHANGED
@@ -185,25 +185,26 @@ module Puppet
|
|
185
185
|
end
|
186
186
|
|
187
187
|
newproperty(:password, :required_features => :manages_passwords) do
|
188
|
-
desc %q{The user's password, in whatever encrypted format the local
|
189
|
-
system
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
hashes
|
197
|
-
|
198
|
-
|
199
|
-
need to be specified as
|
188
|
+
desc %q{The user's password, in whatever encrypted format the local system
|
189
|
+
requires. Consult your operating system's documentation for acceptable password
|
190
|
+
encryption formats and requirements.
|
191
|
+
|
192
|
+
* Mac OS X 10.5 and 10.6, and some older Linux distributions, use salted SHA1
|
193
|
+
hashes. You can use Puppet's built-in `sha1` function to generate a salted SHA1
|
194
|
+
hash from a password.
|
195
|
+
* Mac OS X 10.7 (Lion), and many recent Linux distributions, use salted SHA512
|
196
|
+
hashes. The Puppet Labs [stdlib][] module contains a `str2saltedsha512` function
|
197
|
+
which can generate password hashes for these operating systems.
|
198
|
+
* OS X 10.8 and higher use salted SHA512 PBKDF2 hashes. When managing passwords
|
199
|
+
on these systems, the `salt` and `iterations` attributes need to be specified as
|
200
|
+
well as the password.
|
200
201
|
* Windows passwords can only be managed in cleartext, as there is no Windows API
|
201
202
|
for setting the password hash.
|
202
203
|
|
203
204
|
[stdlib]: https://github.com/puppetlabs/puppetlabs-stdlib/
|
204
205
|
|
205
|
-
|
206
|
-
|
206
|
+
Enclose any value that includes a dollar sign ($) in single quotes (') to avoid
|
207
|
+
accidental variable interpolation.}
|
207
208
|
|
208
209
|
validate do |value|
|
209
210
|
raise ArgumentError, "Passwords cannot include ':'" if value.is_a?(String) and value.include?(":")
|
@@ -584,14 +585,15 @@ module Puppet
|
|
584
585
|
end
|
585
586
|
|
586
587
|
newproperty(:salt, :required_features => :manages_password_salt) do
|
587
|
-
desc "This is the 32
|
588
|
+
desc "This is the 32-byte salt used to generate the PBKDF2 password used in
|
588
589
|
OS X. This field is required for managing passwords on OS X >= 10.8."
|
589
590
|
end
|
590
591
|
|
591
592
|
newproperty(:iterations, :required_features => :manages_password_salt) do
|
592
593
|
desc "This is the number of iterations of a chained computation of the
|
593
|
-
password hash
|
594
|
-
is used in OS X
|
594
|
+
[PBKDF2 password hash](https://en.wikipedia.org/wiki/PBKDF2). This parameter
|
595
|
+
is used in OS X, and is required for managing passwords on OS X 10.8 and
|
596
|
+
newer."
|
595
597
|
|
596
598
|
munge do |value|
|
597
599
|
if value.is_a?(String) and value =~/^[-0-9]+$/
|
data/lib/puppet/type/yumrepo.rb
CHANGED
@@ -21,6 +21,16 @@ Puppet::Type.newtype(:yumrepo) do
|
|
21
21
|
YUM_BOOLEAN=/^(True|False|0|1|No|Yes)$/i
|
22
22
|
YUM_BOOLEAN_DOC="Valid values are: False/0/No or True/1/Yes."
|
23
23
|
|
24
|
+
# Common munge logic for YUM_BOOLEAN values. Munges for two requirements:
|
25
|
+
# 1) Because of how regex validation works in Puppet::Parameter::Value,
|
26
|
+
# Boolean false and lowercase false will not be considered invalid. However,
|
27
|
+
# if the user specified false (or true), they meant False (or True).
|
28
|
+
# 2) In order for parameter removal to work correctly, when absent is passed
|
29
|
+
# as a string it needs to be munged back to a symbol.
|
30
|
+
munge_yum_bool = Proc.new do |val|
|
31
|
+
val.to_s == 'absent' ? :absent : val.to_s.capitalize
|
32
|
+
end
|
33
|
+
|
24
34
|
VALID_SCHEMES = %w[file http https ftp]
|
25
35
|
|
26
36
|
newparam(:name, :namevar => true) do
|
@@ -81,6 +91,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
81
91
|
#{ABSENT_DOC}"
|
82
92
|
|
83
93
|
newvalues(YUM_BOOLEAN, :absent)
|
94
|
+
munge(&munge_yum_bool)
|
84
95
|
end
|
85
96
|
|
86
97
|
newproperty(:gpgcheck) do
|
@@ -90,6 +101,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
90
101
|
#{ABSENT_DOC}"
|
91
102
|
|
92
103
|
newvalues(YUM_BOOLEAN, :absent)
|
104
|
+
munge(&munge_yum_bool)
|
93
105
|
end
|
94
106
|
|
95
107
|
newproperty(:repo_gpgcheck) do
|
@@ -98,6 +110,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
98
110
|
#{ABSENT_DOC}"
|
99
111
|
|
100
112
|
newvalues(YUM_BOOLEAN, :absent)
|
113
|
+
munge(&munge_yum_bool)
|
101
114
|
end
|
102
115
|
|
103
116
|
newproperty(:gpgkey) do
|
@@ -179,6 +192,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
179
192
|
#{ABSENT_DOC}"
|
180
193
|
|
181
194
|
newvalues(YUM_BOOLEAN, :absent)
|
195
|
+
munge(&munge_yum_bool)
|
182
196
|
end
|
183
197
|
|
184
198
|
newproperty(:failovermethod) do
|
@@ -194,6 +208,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
194
208
|
#{ABSENT_DOC}"
|
195
209
|
|
196
210
|
newvalues(YUM_BOOLEAN, :absent)
|
211
|
+
munge(&munge_yum_bool)
|
197
212
|
end
|
198
213
|
|
199
214
|
newproperty(:retries) do
|
@@ -231,6 +246,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
231
246
|
#{ABSENT_DOC}"
|
232
247
|
|
233
248
|
newvalues(YUM_BOOLEAN, :absent)
|
249
|
+
munge(&munge_yum_bool)
|
234
250
|
end
|
235
251
|
|
236
252
|
newproperty(:priority) do
|
@@ -307,6 +323,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
307
323
|
#{ABSENT_DOC}"
|
308
324
|
|
309
325
|
newvalues(YUM_BOOLEAN, :absent)
|
326
|
+
munge(&munge_yum_bool)
|
310
327
|
end
|
311
328
|
|
312
329
|
newproperty(:sslcacert) do
|
@@ -323,6 +340,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
323
340
|
#{ABSENT_DOC}"
|
324
341
|
|
325
342
|
newvalues(YUM_BOOLEAN, :absent)
|
343
|
+
munge(&munge_yum_bool)
|
326
344
|
end
|
327
345
|
|
328
346
|
newproperty(:sslclientcert) do
|
@@ -359,6 +377,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
359
377
|
#{ABSENT_DOC}"
|
360
378
|
|
361
379
|
newvalues(YUM_BOOLEAN, :absent)
|
380
|
+
munge(&munge_yum_bool)
|
362
381
|
end
|
363
382
|
|
364
383
|
newproperty(:assumeyes) do
|
@@ -367,6 +386,7 @@ Puppet::Type.newtype(:yumrepo) do
|
|
367
386
|
#{ABSENT_DOC}"
|
368
387
|
|
369
388
|
newvalues(YUM_BOOLEAN, :absent)
|
389
|
+
munge(&munge_yum_bool)
|
370
390
|
end
|
371
391
|
|
372
392
|
newproperty(:deltarpm_percentage) do
|
data/lib/puppet/util.rb
CHANGED
@@ -21,24 +21,118 @@ module Util
|
|
21
21
|
require 'puppet/util/posix'
|
22
22
|
extend Puppet::Util::POSIX
|
23
23
|
|
24
|
+
# Can't use Puppet.features.microsoft_windows? as it may be mocked out in a test. This can cause test recurring test failures
|
25
|
+
require 'puppet/util/windows/process' if Puppet::Util::Platform.windows?
|
26
|
+
|
24
27
|
extend Puppet::Util::SymbolicFileMode
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
def default_env
|
30
|
+
Puppet.features.microsoft_windows? ?
|
31
|
+
:windows :
|
32
|
+
:posix
|
33
|
+
end
|
34
|
+
module_function :default_env
|
35
|
+
|
36
|
+
# @param name [String] The name of the environment variable to retrieve
|
37
|
+
# @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
|
38
|
+
# @return [String] Value of the specified environment variable. nil if it does not exist
|
39
|
+
# @api private
|
40
|
+
def get_env(name, mode = default_env)
|
41
|
+
if mode == :windows
|
42
|
+
Puppet::Util::Windows::Process.get_environment_strings.each do |key, value |
|
43
|
+
if name.casecmp(key) == 0 then
|
44
|
+
return value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
return nil
|
48
|
+
else
|
49
|
+
ENV[name]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
module_function :get_env
|
53
|
+
|
54
|
+
# @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
|
55
|
+
# @return [Hash] A hashtable of all environment variables
|
56
|
+
# @api private
|
57
|
+
def get_environment(mode = default_env)
|
58
|
+
case mode
|
59
|
+
when :posix
|
60
|
+
ENV.to_hash
|
61
|
+
when :windows
|
62
|
+
Puppet::Util::Windows::Process.get_environment_strings
|
63
|
+
else
|
64
|
+
raise "Unable to retrieve the environment for mode #{mode}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
module_function :get_environment
|
68
|
+
|
69
|
+
# Removes all environment variables
|
70
|
+
# @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
|
71
|
+
# @api private
|
72
|
+
def clear_environment(mode = default_env)
|
73
|
+
case mode
|
74
|
+
when :posix
|
75
|
+
ENV.clear
|
76
|
+
when :windows
|
77
|
+
Puppet::Util::Windows::Process.get_environment_strings.each do |key, _|
|
78
|
+
Puppet::Util::Windows::Process.set_environment_variable(key, nil)
|
79
|
+
end
|
80
|
+
else
|
81
|
+
raise "Unable to clear the environment for mode #{mode}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
module_function :clear_environment
|
85
|
+
|
86
|
+
# @param name [String] The name of the environment variable to set
|
87
|
+
# @param value [String] The value to set the variable to. nil deletes the environment variable
|
88
|
+
# @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
|
89
|
+
# @api private
|
90
|
+
def set_env(name, value = nil, mode = default_env)
|
91
|
+
case mode
|
92
|
+
when :posix
|
93
|
+
ENV[name] = value
|
94
|
+
when :windows
|
95
|
+
Puppet::Util::Windows::Process.set_environment_variable(name,value)
|
96
|
+
else
|
97
|
+
raise "Unable to set the environment variable #{name} for mode #{mode}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
module_function :set_env
|
101
|
+
|
102
|
+
# @param name [Hash] Environment variables to merge into the existing environment. nil values will remove the variable
|
103
|
+
# @param mode [Symbol] Which operating system mode to use e.g. :posix or :windows. Use nil to autodetect
|
104
|
+
# @api private
|
105
|
+
def merge_environment(env_hash, mode = default_env)
|
106
|
+
case mode
|
107
|
+
when :posix
|
108
|
+
env_hash.each { |name, val| ENV[name.to_s] = val }
|
109
|
+
when :windows
|
110
|
+
env_hash.each do |name, val|
|
111
|
+
Puppet::Util::Windows::Process.set_environment_variable(name.to_s, val)
|
112
|
+
end
|
113
|
+
else
|
114
|
+
raise "Unable to merge given values into the current environment for mode #{mode}"
|
32
115
|
end
|
116
|
+
end
|
117
|
+
module_function :merge_environment
|
33
118
|
|
119
|
+
# Run some code with a specific environment. Resets the environment back to
|
120
|
+
# what it was at the end of the code.
|
121
|
+
# Windows can store unicode chars in the environment as keys or values, but
|
122
|
+
# Rubys ENV tries to roundtrip them through the local codepage, which can
|
123
|
+
# cause encoding problems - underlying helpers use Windows APIs on Windows
|
124
|
+
# see https://bugs.ruby-lang.org/issues/8822
|
125
|
+
def withenv(hash, mode = :posix)
|
126
|
+
saved = get_environment(mode)
|
127
|
+
merge_environment(hash, mode)
|
34
128
|
yield
|
35
129
|
ensure
|
36
|
-
|
37
|
-
|
38
|
-
|
130
|
+
if saved
|
131
|
+
clear_environment(mode)
|
132
|
+
merge_environment(saved, mode)
|
39
133
|
end
|
40
134
|
end
|
41
|
-
|
135
|
+
module_function :withenv
|
42
136
|
|
43
137
|
# Execute a given chunk of code with a new umask.
|
44
138
|
def self.withumask(mask)
|
@@ -147,14 +241,16 @@ module Util
|
|
147
241
|
if absolute_path?(bin)
|
148
242
|
return bin if FileTest.file? bin and FileTest.executable? bin
|
149
243
|
else
|
150
|
-
|
244
|
+
exts = Puppet::Util.get_env('PATHEXT')
|
245
|
+
exts = exts ? exts.split(File::PATH_SEPARATOR) : %w[.COM .EXE .BAT .CMD]
|
246
|
+
Puppet::Util.get_env('PATH').split(File::PATH_SEPARATOR).each do |dir|
|
151
247
|
begin
|
152
248
|
dest = File.expand_path(File.join(dir, bin))
|
153
249
|
rescue ArgumentError => e
|
154
250
|
# if the user's PATH contains a literal tilde (~) character and HOME is not set, we may get
|
155
251
|
# an ArgumentError here. Let's check to see if that is the case; if not, re-raise whatever error
|
156
252
|
# was thrown.
|
157
|
-
if e.to_s =~ /HOME/ and (
|
253
|
+
if e.to_s =~ /HOME/ and (Puppet::Util.get_env('HOME').nil? || Puppet::Util.get_env('HOME') == "")
|
158
254
|
# if we get here they have a tilde in their PATH. We'll issue a single warning about this and then
|
159
255
|
# ignore this path element and carry on with our lives.
|
160
256
|
Puppet::Util::Warnings.warnonce("PATH contains a ~ character, and HOME is not set; ignoring PATH element '#{dir}'.")
|
@@ -166,8 +262,6 @@ module Util
|
|
166
262
|
end
|
167
263
|
else
|
168
264
|
if Puppet.features.microsoft_windows? && File.extname(dest).empty?
|
169
|
-
exts = ENV['PATHEXT']
|
170
|
-
exts = exts ? exts.split(File::PATH_SEPARATOR) : %w[.COM .EXE .BAT .CMD]
|
171
265
|
exts.each do |ext|
|
172
266
|
destext = File.expand_path(dest + ext)
|
173
267
|
return destext if FileTest.file? destext and FileTest.executable? destext
|
@@ -467,14 +561,7 @@ module Util
|
|
467
561
|
module_function :deterministic_rand
|
468
562
|
|
469
563
|
def deterministic_rand_int(seed,max)
|
470
|
-
|
471
|
-
Random.new(seed).rand(max)
|
472
|
-
else
|
473
|
-
srand(seed)
|
474
|
-
result = rand(max)
|
475
|
-
srand()
|
476
|
-
result
|
477
|
-
end
|
564
|
+
Random.new(seed).rand(max)
|
478
565
|
end
|
479
566
|
module_function :deterministic_rand_int
|
480
567
|
end
|
data/lib/puppet/util/autoload.rb
CHANGED
@@ -2,6 +2,15 @@ require 'pathname'
|
|
2
2
|
require 'puppet/util/rubygems'
|
3
3
|
require 'puppet/util/warnings'
|
4
4
|
require 'puppet/util/methodhelper'
|
5
|
+
require 'puppet/pops/adaptable'
|
6
|
+
|
7
|
+
# An adapter that ties the module_directories cache to the environment where the modules are parsed. This
|
8
|
+
# adapter ensures that the life-cycle of this cache doesn't exceed the life-cycle of the environment.
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
class Puppet::Util::ModuleDirectoriesAdapter < Puppet::Pops::Adaptable::Adapter
|
12
|
+
attr_accessor :directories
|
13
|
+
end
|
5
14
|
|
6
15
|
# Autoload paths, either based on names or all at once.
|
7
16
|
class Puppet::Util::Autoload
|
@@ -99,12 +108,6 @@ class Puppet::Util::Autoload
|
|
99
108
|
end
|
100
109
|
|
101
110
|
def module_directories(env)
|
102
|
-
# We're using a per-thread cache of module directories so that we don't
|
103
|
-
# scan the filesystem each time we try to load something. This is reset
|
104
|
-
# at the beginning of compilation and at the end of an agent run.
|
105
|
-
$env_module_directories ||= {}
|
106
|
-
|
107
|
-
|
108
111
|
# This is a little bit of a hack. Basically, the autoloader is being
|
109
112
|
# called indirectly during application bootstrapping when we do things
|
110
113
|
# such as check "features". However, during bootstrapping, we haven't
|
@@ -129,11 +132,13 @@ class Puppet::Util::Autoload
|
|
129
132
|
|
130
133
|
if env
|
131
134
|
# if the app defaults have been initialized then it should be safe to access the module path setting.
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
135
|
+
Puppet::Util::ModuleDirectoriesAdapter.adapt(env) do |a|
|
136
|
+
a.directories ||= env.modulepath.collect do |dir|
|
137
|
+
Dir.entries(dir).reject { |f| f =~ /^\./ }.collect { |f| File.join(dir, f, "lib") }
|
138
|
+
end.flatten.find_all do |d|
|
139
|
+
FileTest.directory?(d)
|
140
|
+
end
|
141
|
+
end.directories
|
137
142
|
else
|
138
143
|
[]
|
139
144
|
end
|