puppet 4.3.2 → 4.4.0
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
data/lib/puppet/transaction.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'puppet'
|
2
2
|
require 'puppet/util/tagging'
|
3
|
+
require 'puppet/util/skip_tags'
|
3
4
|
require 'puppet/application'
|
4
5
|
require 'digest/sha1'
|
5
6
|
require 'set'
|
@@ -185,6 +186,10 @@ class Puppet::Transaction
|
|
185
186
|
super
|
186
187
|
end
|
187
188
|
|
189
|
+
def skip_tags
|
190
|
+
@skip_tags ||= Puppet::Util::SkipTags.new(Puppet[:skip_tags]).tags
|
191
|
+
end
|
192
|
+
|
188
193
|
def prefetch_if_necessary(resource)
|
189
194
|
provider_class = resource.provider.class
|
190
195
|
return unless provider_class.respond_to?(:prefetch) and !prefetched_providers[resource.type][provider_class.name]
|
@@ -339,7 +344,9 @@ class Puppet::Transaction
|
|
339
344
|
|
340
345
|
# Should this resource be skipped?
|
341
346
|
def skip?(resource)
|
342
|
-
if
|
347
|
+
if skip_tags?(resource)
|
348
|
+
resource.debug "Skipping with skip tags #{skip_tags.join(", ")}"
|
349
|
+
elsif missing_tags?(resource)
|
343
350
|
resource.debug "Not tagged with #{tags.join(", ")}"
|
344
351
|
elsif ! scheduled?(resource)
|
345
352
|
resource.debug "Not scheduled"
|
@@ -375,6 +382,13 @@ class Puppet::Transaction
|
|
375
382
|
not resource.tagged?(*tags)
|
376
383
|
end
|
377
384
|
|
385
|
+
def skip_tags?(resource)
|
386
|
+
return false if ignore_tags?
|
387
|
+
return false if skip_tags.empty?
|
388
|
+
|
389
|
+
resource.tagged?(*skip_tags)
|
390
|
+
end
|
391
|
+
|
378
392
|
def split_qualified_tags?
|
379
393
|
false
|
380
394
|
end
|
@@ -389,4 +403,3 @@ class Puppet::Transaction
|
|
389
403
|
end
|
390
404
|
|
391
405
|
require 'puppet/transaction/report'
|
392
|
-
|
@@ -22,9 +22,10 @@ class Puppet::Transaction::AdditionalResourceGenerator
|
|
22
22
|
end
|
23
23
|
return unless generated
|
24
24
|
generated = [generated] unless generated.is_a?(Array)
|
25
|
-
generated.collect do |res|
|
25
|
+
generated.collect! do |res|
|
26
26
|
@catalog.resource(res.ref) || res
|
27
|
-
end
|
27
|
+
end
|
28
|
+
unless resource.depthfirst?
|
28
29
|
# This is reversed becuase PUP-1963 changed how generated
|
29
30
|
# resources were added to the catalog. It exists for backwards
|
30
31
|
# compatibility only, and can probably be removed in Puppet 5
|
@@ -34,6 +35,9 @@ class Puppet::Transaction::AdditionalResourceGenerator
|
|
34
35
|
# catalog one by one adjacent to the parent resource. This
|
35
36
|
# causes an implicit reversal of their application order from
|
36
37
|
# the old code. The reverse makes it all work like it did.
|
38
|
+
generated.reverse!
|
39
|
+
end
|
40
|
+
generated.each do |res|
|
37
41
|
add_resource(res, resource)
|
38
42
|
|
39
43
|
add_generated_directed_dependency(resource, res)
|
@@ -48,6 +48,17 @@ class Puppet::Transaction::Report
|
|
48
48
|
# @return [String] uuid
|
49
49
|
attr_accessor :transaction_uuid
|
50
50
|
|
51
|
+
# The id of the code input to the compiler.
|
52
|
+
attr_accessor :code_id
|
53
|
+
|
54
|
+
# A master generated catalog uuid, useful for connecting a single catalog to multiple reports.
|
55
|
+
attr_accessor :catalog_uuid
|
56
|
+
|
57
|
+
# Whether a cached catalog was used in the run, and if so, the reason that it was used.
|
58
|
+
# @return [String] One of the values: 'not_used', 'explicitly_requested',
|
59
|
+
# or 'on_failure'
|
60
|
+
attr_accessor :cached_catalog_status
|
61
|
+
|
51
62
|
# The host name for which the report is generated
|
52
63
|
# @return [String] the host name
|
53
64
|
attr_accessor :host
|
@@ -172,10 +183,13 @@ class Puppet::Transaction::Report
|
|
172
183
|
@host = Puppet[:node_name_value]
|
173
184
|
@time = Time.now
|
174
185
|
@kind = kind
|
175
|
-
@report_format =
|
186
|
+
@report_format = 5
|
176
187
|
@puppet_version = Puppet.version
|
177
188
|
@configuration_version = configuration_version
|
178
189
|
@transaction_uuid = transaction_uuid
|
190
|
+
@code_id = nil
|
191
|
+
@catalog_uuid = nil
|
192
|
+
@cached_catalog_status = nil
|
179
193
|
@environment = environment
|
180
194
|
@status = 'failed' # assume failed until the report is finalized
|
181
195
|
end
|
@@ -190,6 +204,19 @@ class Puppet::Transaction::Report
|
|
190
204
|
@status = data['status']
|
191
205
|
@host = data['host']
|
192
206
|
@time = data['time']
|
207
|
+
|
208
|
+
if catalog_uuid = data['catalog_uuid']
|
209
|
+
@catalog_uuid = catalog_uuid
|
210
|
+
end
|
211
|
+
|
212
|
+
if code_id = data['code_id']
|
213
|
+
@code_id = code_id
|
214
|
+
end
|
215
|
+
|
216
|
+
if cached_catalog_status = data['cached_catalog_status']
|
217
|
+
@cached_catalog_status = cached_catalog_status
|
218
|
+
end
|
219
|
+
|
193
220
|
if @time.is_a? String
|
194
221
|
@time = Time.parse(@time)
|
195
222
|
end
|
@@ -221,6 +248,9 @@ class Puppet::Transaction::Report
|
|
221
248
|
'time' => @time.iso8601(9),
|
222
249
|
'configuration_version' => @configuration_version,
|
223
250
|
'transaction_uuid' => @transaction_uuid,
|
251
|
+
'catalog_uuid' => @catalog_uuid,
|
252
|
+
'code_id' => @code_id,
|
253
|
+
'cached_catalog_status' => @cached_catalog_status,
|
224
254
|
'report_format' => @report_format,
|
225
255
|
'puppet_version' => @puppet_version,
|
226
256
|
'kind' => @kind,
|
@@ -69,8 +69,6 @@ class Puppet::Transaction::ResourceHarness
|
|
69
69
|
def perform_changes(resource, context)
|
70
70
|
cache(resource, :checked, Time.now)
|
71
71
|
|
72
|
-
return [] if ! allow_changes?(resource)
|
73
|
-
|
74
72
|
# Record the current state in state.yml.
|
75
73
|
context.audited_params.each do |param|
|
76
74
|
cache(resource, param, context.current_values[param])
|
@@ -96,29 +94,6 @@ class Puppet::Transaction::ResourceHarness
|
|
96
94
|
capture_audit_events(resource, context)
|
97
95
|
end
|
98
96
|
|
99
|
-
def allow_changes?(resource)
|
100
|
-
if resource.purging? and resource.deleting? and deps = relationship_graph.dependents(resource) \
|
101
|
-
and ! deps.empty? and deps.detect { |d| ! d.deleting? }
|
102
|
-
real_deps = deps.reject { |r| r.class.name == :whit }
|
103
|
-
if real_deps.empty?
|
104
|
-
true
|
105
|
-
else
|
106
|
-
deplabel = real_deps.collect { |r| r.ref }.join(",")
|
107
|
-
plurality = real_deps.length > 1 ? "":"s"
|
108
|
-
resource.warning "#{deplabel} still depend#{plurality} on me -- not purging"
|
109
|
-
false
|
110
|
-
end
|
111
|
-
else
|
112
|
-
true
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
# allow_changes? is only made public to enable the existing spec tests to run
|
117
|
-
# under rspec 3 (apparently rspec 2 didn't enforce access controls?). Please do not
|
118
|
-
# treat this as part of a public API.
|
119
|
-
# Possible future improvement: rewrite to not require access to private methods.
|
120
|
-
public :allow_changes?
|
121
|
-
|
122
97
|
def sync_if_needed(param, context)
|
123
98
|
historical_value = context.historical_values[param.name]
|
124
99
|
current_value = context.current_values[param.name]
|
data/lib/puppet/type.rb
CHANGED
@@ -1246,7 +1246,7 @@ class Type
|
|
1246
1246
|
event _would_ have been sent.
|
1247
1247
|
|
1248
1248
|
**Important note:**
|
1249
|
-
[The `noop` setting](
|
1249
|
+
[The `noop` setting](https://docs.puppetlabs.com/references/latest/configuration.html#noop)
|
1250
1250
|
allows you to globally enable or disable noop mode, but it will _not_ override
|
1251
1251
|
the `noop` metaparameter on individual resources. That is, the value of the
|
1252
1252
|
global `noop` setting will _only_ affect resources that do not have an explicit
|
@@ -1266,7 +1266,7 @@ class Type
|
|
1266
1266
|
The value of this metaparameter must be the `name` of a `schedule`
|
1267
1267
|
resource. This means you must declare a schedule resource, then
|
1268
1268
|
refer to it by name; see
|
1269
|
-
[the docs for the `schedule` type](
|
1269
|
+
[the docs for the `schedule` type](https://docs.puppetlabs.com/references/latest/type.html#schedule)
|
1270
1270
|
for more info.
|
1271
1271
|
|
1272
1272
|
schedule { 'everyday':
|
@@ -1558,7 +1558,7 @@ class Type
|
|
1558
1558
|
|
1559
1559
|
newmetaparam(:require, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
|
1560
1560
|
desc "One or more resources that this resource depends on, expressed as
|
1561
|
-
[resource references](
|
1561
|
+
[resource references](https://docs.puppetlabs.com/puppet/latest/reference/lang_data_resource_reference.html).
|
1562
1562
|
Multiple resources can be specified as an array of references. When this
|
1563
1563
|
attribute is present:
|
1564
1564
|
|
@@ -1567,12 +1567,12 @@ class Type
|
|
1567
1567
|
This is one of the four relationship metaparameters, along with
|
1568
1568
|
`before`, `notify`, and `subscribe`. For more context, including the
|
1569
1569
|
alternate chaining arrow (`->` and `~>`) syntax, see
|
1570
|
-
[the language page on relationships](
|
1570
|
+
[the language page on relationships](https://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html)."
|
1571
1571
|
end
|
1572
1572
|
|
1573
1573
|
newmetaparam(:subscribe, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :ALL_EVENTS, :callback => :refresh}) do
|
1574
1574
|
desc "One or more resources that this resource depends on, expressed as
|
1575
|
-
[resource references](
|
1575
|
+
[resource references](https://docs.puppetlabs.com/puppet/latest/reference/lang_data_resource_reference.html).
|
1576
1576
|
Multiple resources can be specified as an array of references. When this
|
1577
1577
|
attribute is present:
|
1578
1578
|
|
@@ -1585,12 +1585,12 @@ class Type
|
|
1585
1585
|
This is one of the four relationship metaparameters, along with
|
1586
1586
|
`before`, `require`, and `notify`. For more context, including the
|
1587
1587
|
alternate chaining arrow (`->` and `~>`) syntax, see
|
1588
|
-
[the language page on relationships](
|
1588
|
+
[the language page on relationships](https://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html)."
|
1589
1589
|
end
|
1590
1590
|
|
1591
1591
|
newmetaparam(:before, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
|
1592
1592
|
desc "One or more resources that depend on this resource, expressed as
|
1593
|
-
[resource references](
|
1593
|
+
[resource references](https://docs.puppetlabs.com/puppet/latest/reference/lang_data_resource_reference.html).
|
1594
1594
|
Multiple resources can be specified as an array of references. When this
|
1595
1595
|
attribute is present:
|
1596
1596
|
|
@@ -1599,12 +1599,12 @@ class Type
|
|
1599
1599
|
This is one of the four relationship metaparameters, along with
|
1600
1600
|
`require`, `notify`, and `subscribe`. For more context, including the
|
1601
1601
|
alternate chaining arrow (`->` and `~>`) syntax, see
|
1602
|
-
[the language page on relationships](
|
1602
|
+
[the language page on relationships](https://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html)."
|
1603
1603
|
end
|
1604
1604
|
|
1605
1605
|
newmetaparam(:notify, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :ALL_EVENTS, :callback => :refresh}) do
|
1606
1606
|
desc "One or more resources that depend on this resource, expressed as
|
1607
|
-
[resource references](
|
1607
|
+
[resource references](https://docs.puppetlabs.com/puppet/latest/reference/lang_data_resource_reference.html).
|
1608
1608
|
Multiple resources can be specified as an array of references. When this
|
1609
1609
|
attribute is present:
|
1610
1610
|
|
@@ -1617,7 +1617,7 @@ class Type
|
|
1617
1617
|
This is one of the four relationship metaparameters, along with
|
1618
1618
|
`before`, `require`, and `subscribe`. For more context, including the
|
1619
1619
|
alternate chaining arrow (`->` and `~>`) syntax, see
|
1620
|
-
[the language page on relationships](
|
1620
|
+
[the language page on relationships](https://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html)."
|
1621
1621
|
end
|
1622
1622
|
|
1623
1623
|
newmetaparam(:stage) do
|
@@ -1630,7 +1630,7 @@ class Type
|
|
1630
1630
|
By default, all classes are declared in the `main` stage. To assign a class
|
1631
1631
|
to a different stage, you must:
|
1632
1632
|
|
1633
|
-
* Declare the new stage as a [`stage` resource](
|
1633
|
+
* Declare the new stage as a [`stage` resource](https://docs.puppetlabs.com/references/latest/type.html#stage).
|
1634
1634
|
* Declare an order relationship between the new stage and the `main` stage.
|
1635
1635
|
* Use the resource-like syntax to declare the class, and set the `stage`
|
1636
1636
|
metaparameter to the name of the desired stage.
|
data/lib/puppet/type/augeas.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# you may not use this file except in compliance with the License.
|
6
6
|
# You may obtain a copy of the License at
|
7
7
|
#
|
8
|
-
#
|
8
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
9
9
|
#
|
10
10
|
# Unless required by applicable law or agreed to in writing, software
|
11
11
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
data/lib/puppet/type/cron.rb
CHANGED
@@ -18,29 +18,29 @@ Puppet::Type.newtype(:cron) do
|
|
18
18
|
|
19
19
|
Example:
|
20
20
|
|
21
|
-
cron { logrotate:
|
22
|
-
command =>
|
23
|
-
user => root,
|
21
|
+
cron { 'logrotate':
|
22
|
+
command => '/usr/sbin/logrotate',
|
23
|
+
user => 'root',
|
24
24
|
hour => 2,
|
25
|
-
minute => 0
|
25
|
+
minute => 0,
|
26
26
|
}
|
27
27
|
|
28
28
|
Note that all periodic attributes can be specified as an array of values:
|
29
29
|
|
30
|
-
cron { logrotate:
|
31
|
-
command =>
|
32
|
-
user => root,
|
33
|
-
hour => [2, 4]
|
30
|
+
cron { 'logrotate':
|
31
|
+
command => '/usr/sbin/logrotate',
|
32
|
+
user => 'root',
|
33
|
+
hour => [2, 4],
|
34
34
|
}
|
35
35
|
|
36
36
|
...or using ranges or the step syntax `*/2` (although there's no guarantee
|
37
37
|
that your `cron` daemon supports these):
|
38
38
|
|
39
|
-
cron { logrotate:
|
40
|
-
command =>
|
41
|
-
user => root,
|
39
|
+
cron { 'logrotate':
|
40
|
+
command => '/usr/sbin/logrotate',
|
41
|
+
user => 'root',
|
42
42
|
hour => ['2-4'],
|
43
|
-
minute => '*/10'
|
43
|
+
minute => '*/10',
|
44
44
|
}
|
45
45
|
|
46
46
|
An important note: _the Cron type will not reset parameters that are
|
data/lib/puppet/type/file.rb
CHANGED
@@ -367,9 +367,10 @@ Puppet::Type.newtype(:file) do
|
|
367
367
|
creator_count += 1 if self.should(param)
|
368
368
|
end
|
369
369
|
creator_count += 1 if @parameters.include?(:source)
|
370
|
+
|
370
371
|
self.fail "You cannot specify more than one of #{CREATORS.collect { |p| p.to_s}.join(", ")}" if creator_count > 1
|
371
372
|
|
372
|
-
self.fail "You cannot specify a remote recursion without a source" if !self[:source]
|
373
|
+
self.fail "You cannot specify a remote recursion without a source" if !self[:source] && self[:recurse] == :remote
|
373
374
|
|
374
375
|
self.fail "You cannot specify source when using checksum 'none'" if self[:checksum] == :none && !self[:source].nil?
|
375
376
|
|
@@ -377,13 +378,19 @@ Puppet::Type.newtype(:file) do
|
|
377
378
|
self.fail "You cannot specify content when using checksum '#{checksum_type}'" if self[:checksum] == checksum_type && !self[:content].nil?
|
378
379
|
end
|
379
380
|
|
380
|
-
self.warning "Possible error: recurselimit is set but not recurse, no recursion will happen" if !self[:recurse]
|
381
|
+
self.warning "Possible error: recurselimit is set but not recurse, no recursion will happen" if !self[:recurse] && self[:recurselimit]
|
381
382
|
|
382
383
|
if @parameters[:content] && @parameters[:content].actual_content
|
383
384
|
# Now that we know the checksum, update content (in case it was created before checksum was known).
|
384
385
|
@parameters[:content].value = @parameters[:checksum].sum(@parameters[:content].actual_content)
|
385
386
|
end
|
386
387
|
|
388
|
+
if self[:checksum] && self[:checksum_value] && !send("#{self[:checksum]}?", self[:checksum_value])
|
389
|
+
self.fail "Checksum value '#{self[:checksum_value]}' is not a valid checksum type #{self[:checksum]}"
|
390
|
+
end
|
391
|
+
|
392
|
+
self.warning "Checksum value is ignored unless content or source are specified" if self[:checksum_value] && !self[:content] && !self[:source]
|
393
|
+
|
387
394
|
provider.validate if provider.respond_to?(:validate)
|
388
395
|
end
|
389
396
|
|
@@ -398,7 +405,7 @@ Puppet::Type.newtype(:file) do
|
|
398
405
|
|
399
406
|
# Determine the user to write files as.
|
400
407
|
def asuser
|
401
|
-
if self.should(:owner)
|
408
|
+
if self.should(:owner) && ! self.should(:owner).is_a?(Symbol)
|
402
409
|
writeable = Puppet::Util::SUIDManager.asuser(self.should(:owner)) {
|
403
410
|
FileTest.writable?(::File.dirname(self[:path]))
|
404
411
|
}
|
@@ -571,22 +578,29 @@ Puppet::Type.newtype(:file) do
|
|
571
578
|
remove_less_specific_files(result)
|
572
579
|
end
|
573
580
|
|
581
|
+
def remove_less_specific_files(files)
|
582
|
+
existing_files = catalog.vertices.select { |r| r.is_a?(self.class) }
|
583
|
+
self.class.remove_less_specific_files(files, self[:path], existing_files) do |file|
|
584
|
+
file[:path]
|
585
|
+
end
|
586
|
+
end
|
587
|
+
|
574
588
|
# This is to fix bug #2296, where two files recurse over the same
|
575
589
|
# set of files. It's a rare case, and when it does happen you're
|
576
590
|
# not likely to have many actual conflicts, which is good, because
|
577
591
|
# this is a pretty inefficient implementation.
|
578
|
-
def remove_less_specific_files(files)
|
592
|
+
def self.remove_less_specific_files(files, parent_path, existing_files, &block)
|
579
593
|
# REVISIT: is this Windows safe? AltSeparator?
|
580
|
-
mypath =
|
581
|
-
other_paths =
|
582
|
-
select
|
583
|
-
collect { |r| r
|
594
|
+
mypath = parent_path.split(::File::Separator)
|
595
|
+
other_paths = existing_files.
|
596
|
+
select { |r| (yield r) != parent_path}.
|
597
|
+
collect { |r| (yield r).split(::File::Separator) }.
|
584
598
|
select { |p| p[0,mypath.length] == mypath }
|
585
599
|
|
586
600
|
return files if other_paths.empty?
|
587
601
|
|
588
602
|
files.reject { |file|
|
589
|
-
path = file
|
603
|
+
path = (yield file).split(::File::Separator)
|
590
604
|
other_paths.any? { |p| path[0,p.length] == p }
|
591
605
|
}
|
592
606
|
end
|
@@ -629,12 +643,43 @@ Puppet::Type.newtype(:file) do
|
|
629
643
|
|
630
644
|
# Recurse against our remote file.
|
631
645
|
def recurse_remote(children)
|
646
|
+
recurse_remote_metadata.each do |meta|
|
647
|
+
if meta.relative_path == "."
|
648
|
+
self[:checksum] = meta.checksum_type
|
649
|
+
parameter(:source).metadata = meta
|
650
|
+
next
|
651
|
+
end
|
652
|
+
children[meta.relative_path] ||= newchild(meta.relative_path)
|
653
|
+
children[meta.relative_path][:source] = meta.source
|
654
|
+
children[meta.relative_path][:checksum] = meta.checksum_type
|
655
|
+
children[meta.relative_path].parameter(:source).metadata = meta
|
656
|
+
end
|
657
|
+
|
658
|
+
children
|
659
|
+
end
|
660
|
+
|
661
|
+
def recurse_remote_metadata
|
632
662
|
sourceselect = self[:sourceselect]
|
633
663
|
|
634
664
|
total = self[:source].collect do |source|
|
635
|
-
|
636
|
-
|
637
|
-
|
665
|
+
# For each inlined file resource, the catalog contains a hash mapping
|
666
|
+
# source path to lists of metadata returned by a server-side search.
|
667
|
+
if recursive_metadata = catalog.recursive_metadata[title]
|
668
|
+
result = recursive_metadata[source]
|
669
|
+
else
|
670
|
+
result = perform_recursion(source)
|
671
|
+
end
|
672
|
+
|
673
|
+
next unless result
|
674
|
+
return [] if top = result.find { |r| r.relative_path == "." } and top.ftype != "directory"
|
675
|
+
result.each do |data|
|
676
|
+
if data.relative_path == '.'
|
677
|
+
data.source = source
|
678
|
+
else
|
679
|
+
# REMIND: appending file paths to URL may not be safe, e.g. foo+bar
|
680
|
+
data.source = "#{source}/#{data.relative_path}"
|
681
|
+
end
|
682
|
+
end
|
638
683
|
break result if result and ! result.empty? and sourceselect == :first
|
639
684
|
result
|
640
685
|
end.flatten.compact
|
@@ -644,22 +689,12 @@ Puppet::Type.newtype(:file) do
|
|
644
689
|
found = []
|
645
690
|
total.reject! do |data|
|
646
691
|
result = found.include?(data.relative_path)
|
647
|
-
found << data.relative_path unless
|
692
|
+
found << data.relative_path unless result
|
648
693
|
result
|
649
694
|
end
|
650
695
|
end
|
651
696
|
|
652
|
-
total
|
653
|
-
if meta.relative_path == "."
|
654
|
-
parameter(:source).metadata = meta
|
655
|
-
next
|
656
|
-
end
|
657
|
-
children[meta.relative_path] ||= newchild(meta.relative_path)
|
658
|
-
children[meta.relative_path][:source] = meta.source
|
659
|
-
children[meta.relative_path].parameter(:source).metadata = meta
|
660
|
-
end
|
661
|
-
|
662
|
-
children
|
697
|
+
total
|
663
698
|
end
|
664
699
|
|
665
700
|
def perform_recursion(path)
|
@@ -707,7 +742,27 @@ Puppet::Type.newtype(:file) do
|
|
707
742
|
end
|
708
743
|
|
709
744
|
def retrieve
|
710
|
-
|
745
|
+
# This check is done in retrieve to ensure it happens before we try to use
|
746
|
+
# metadata in `copy_source_values`, but so it only fails the resource and not
|
747
|
+
# catalog validation (because that would be a breaking change from Puppet 4).
|
748
|
+
if Puppet.features.microsoft_windows? && parameter(:source) &&
|
749
|
+
[:use, :use_when_creating].include?(self[:source_permissions])
|
750
|
+
err_msg = "Copying owner/mode/group from the source file on Windows" <<
|
751
|
+
" is not supported; use source_permissions => ignore."
|
752
|
+
|
753
|
+
if self[:owner] == nil || self[:group] == nil || self[:mode] == nil
|
754
|
+
# Fail on Windows if source permissions are being used and the file resource
|
755
|
+
# does not have mode owner, group, and mode all set (which would take precedence).
|
756
|
+
self.fail err_msg
|
757
|
+
else
|
758
|
+
# Warn if use source permissions is specified on Windows
|
759
|
+
self.warning err_msg
|
760
|
+
end
|
761
|
+
end
|
762
|
+
|
763
|
+
# `checksum_value` implies explicit management of all metadata, so skip metadata
|
764
|
+
# retrieval. Otherwise, if source is set, retrieve metadata for source.
|
765
|
+
if (source = parameter(:source)) && property(:checksum_value).nil?
|
711
766
|
source.copy_source_values
|
712
767
|
end
|
713
768
|
super
|
@@ -786,9 +841,10 @@ Puppet::Type.newtype(:file) do
|
|
786
841
|
resource
|
787
842
|
end
|
788
843
|
|
789
|
-
# Write out the file.
|
790
|
-
#
|
791
|
-
|
844
|
+
# Write out the file. To write content, pass the property as an argument
|
845
|
+
# to delegate writing to; must implement a #write method that takes the file
|
846
|
+
# as an argument.
|
847
|
+
def write(property = nil)
|
792
848
|
remove_existing(:file)
|
793
849
|
|
794
850
|
mode = self.should(:mode) # might be nil
|
@@ -797,7 +853,8 @@ Puppet::Type.newtype(:file) do
|
|
797
853
|
if write_temporary_file?
|
798
854
|
Puppet::Util.replace_file(self[:path], mode_int) do |file|
|
799
855
|
file.binmode
|
800
|
-
|
856
|
+
devfail 'a property should have been provided if write_temporary_file? returned true' if property.nil?
|
857
|
+
content_checksum = property.write(file)
|
801
858
|
file.flush
|
802
859
|
fail_if_checksum_is_wrong(file.path, content_checksum) if validate_checksum?
|
803
860
|
if self[:validate_cmd]
|
@@ -809,7 +866,7 @@ Puppet::Type.newtype(:file) do
|
|
809
866
|
end
|
810
867
|
else
|
811
868
|
umask = mode ? 000 : 022
|
812
|
-
Puppet::Util.withumask(umask) { ::File.open(self[:path], 'wb', mode_int ) { |f|
|
869
|
+
Puppet::Util.withumask(umask) { ::File.open(self[:path], 'wb', mode_int ) { |f| property.write(f) if property } }
|
813
870
|
end
|
814
871
|
|
815
872
|
# make sure all of the modes are actually correct
|
@@ -889,16 +946,9 @@ Puppet::Type.newtype(:file) do
|
|
889
946
|
self.fail "File written to disk did not match checksum; discarding changes (#{content_checksum} vs #{newsum})"
|
890
947
|
end
|
891
948
|
|
892
|
-
# write the current content. Note that if there is no content property
|
893
|
-
# simply opening the file with 'w' as done in write is enough to truncate
|
894
|
-
# or write an empty length file.
|
895
|
-
def write_content(file)
|
896
|
-
(content = property(:content)) && content.write(file)
|
897
|
-
end
|
898
|
-
|
899
949
|
def write_temporary_file?
|
900
|
-
#
|
901
|
-
#
|
950
|
+
# Unfortunately we don't know the source file size before fetching it so
|
951
|
+
# let's assume the file won't be empty. Why isn't it part of the metadata?
|
902
952
|
(c = property(:content) and c.length) || @parameters[:source]
|
903
953
|
end
|
904
954
|
|
@@ -914,6 +964,7 @@ Puppet::Type.newtype(:file) do
|
|
914
964
|
thing.sync unless thing.safe_insync?(currentvalue)
|
915
965
|
end
|
916
966
|
end
|
967
|
+
|
917
968
|
end
|
918
969
|
|
919
970
|
# We put all of the properties in separate files, because there are so many
|
@@ -922,6 +973,7 @@ end
|
|
922
973
|
require 'puppet/type/file/checksum'
|
923
974
|
require 'puppet/type/file/content' # can create the file
|
924
975
|
require 'puppet/type/file/source' # can create the file
|
976
|
+
require 'puppet/type/file/checksum_value' # can create the file, in place of content
|
925
977
|
require 'puppet/type/file/target' # creates a different type of file
|
926
978
|
require 'puppet/type/file/ensure' # can create the file
|
927
979
|
require 'puppet/type/file/owner'
|