puppet 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- 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/build_defaults.yaml +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/hiera/scope.rb +1 -1
- 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 +45 -47
- 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/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- 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/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/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- 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/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- 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/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- 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/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- 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 +6 -2
- 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/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- 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/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- 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/functions.rb +28 -16
- 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 +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- 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 +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -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 +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -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 +18 -13
- 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/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -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 +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- 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 +16 -8
- 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 +140 -387
- 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 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- 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/group/windows_adsi.rb +2 -2
- 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 +16 -9
- 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/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- 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/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- 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/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 +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- 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/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- 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/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- 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/type.rb +11 -11
- 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 +65 -28
- 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 +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- 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 +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- 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/puppet.rb +17 -0
- 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/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -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/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- 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/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- 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/collection_spec.rb +8 -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 +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- 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/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- 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/epp_face_spec.rb +2 -2
- 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 +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- 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 +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- 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/indirector/json_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 +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- 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 +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -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 -390
- 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 +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- 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 +88 -47
- 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/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- 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 +99 -50
- 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 +46 -38
- 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 +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- 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/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- 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/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -8,7 +8,7 @@ Puppet::Type.type(:sshkey).provide(
|
|
|
8
8
|
desc "Parse and generate host-wide known hosts files for SSH."
|
|
9
9
|
|
|
10
10
|
text_line :comment, :match => /^#/
|
|
11
|
-
text_line :blank, :match => /^\s
|
|
11
|
+
text_line :blank, :match => /^\s*$/
|
|
12
12
|
|
|
13
13
|
record_line :parsed, :fields => %w{name type key},
|
|
14
14
|
:post_parse => proc { |hash|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# but puppet does not allow it. There is a ticket open for that (#5431)
|
|
8
8
|
# - AIX maximum password age is in WEEKs, not days
|
|
9
9
|
#
|
|
10
|
-
# See
|
|
10
|
+
# See https://docs.puppetlabs.com/guides/provider_development.html
|
|
11
11
|
# for more information
|
|
12
12
|
#
|
|
13
13
|
# Author:: Hector Rivas Gandara <keymon@gmail.com>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require 'puppet'
|
|
2
|
-
require 'plist'
|
|
2
|
+
require 'puppet/util/plist' if Puppet.features.cfpropertylist?
|
|
3
3
|
require 'base64'
|
|
4
4
|
|
|
5
5
|
Puppet::Type.type(:user).provide :directoryservice do
|
|
@@ -13,11 +13,11 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
13
13
|
commands :uuidgen => '/usr/bin/uuidgen'
|
|
14
14
|
commands :dsimport => '/usr/bin/dsimport'
|
|
15
15
|
commands :dscl => '/usr/bin/dscl'
|
|
16
|
-
commands :plutil => '/usr/bin/plutil'
|
|
17
16
|
commands :dscacheutil => '/usr/bin/dscacheutil'
|
|
18
17
|
|
|
19
18
|
# Provider confines and defaults
|
|
20
19
|
confine :operatingsystem => :darwin
|
|
20
|
+
confine :feature => :cfpropertylist
|
|
21
21
|
defaultfor :operatingsystem => :darwin
|
|
22
22
|
|
|
23
23
|
# Need this to create getter/setter methods automagically
|
|
@@ -91,7 +91,7 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
91
91
|
# Return an array of hashes containing information about every user on
|
|
92
92
|
# the system.
|
|
93
93
|
def self.get_all_users
|
|
94
|
-
Plist.
|
|
94
|
+
Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'readall', '/Users')
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
# This method accepts an individual user plist, passed as a hash, and
|
|
@@ -164,14 +164,14 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
164
164
|
# Use dscl to retrieve an array of hashes containing attributes about all
|
|
165
165
|
# of the local groups on the machine.
|
|
166
166
|
def self.get_list_of_groups
|
|
167
|
-
@groups ||= Plist.
|
|
167
|
+
@groups ||= Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'readall', '/Groups')
|
|
168
168
|
end
|
|
169
169
|
|
|
170
170
|
# Perform a dscl lookup at the path specified for the specific keyname
|
|
171
171
|
# value. The value returned is the first item within the array returned
|
|
172
172
|
# from dscl
|
|
173
173
|
def self.get_attribute_from_dscl(path, username, keyname)
|
|
174
|
-
Plist.
|
|
174
|
+
Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'read', "/#{path}/#{username}", keyname)
|
|
175
175
|
end
|
|
176
176
|
|
|
177
177
|
# The plist embedded in the ShadowHashData key is a binary plist. The
|
|
@@ -179,40 +179,25 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
179
179
|
# extract the binary plist, convert it to XML, and return it.
|
|
180
180
|
def self.get_embedded_binary_plist(shadow_hash_data)
|
|
181
181
|
embedded_binary_plist = Array(shadow_hash_data['dsAttrTypeNative:ShadowHashData'][0].delete(' ')).pack('H*')
|
|
182
|
-
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
# This method will accept a hash
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
Puppet.
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
@converted_plist
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
# This method will accept a binary plist (as a string) and convert it to a
|
|
199
|
-
# hash via Plist::parse_xml.
|
|
200
|
-
def self.convert_binary_to_xml(plist_data)
|
|
201
|
-
Puppet.debug('Converting binary plist to XML')
|
|
202
|
-
Puppet.debug('Executing: \'plutil -convert xml1 -o - -\'')
|
|
203
|
-
IO.popen('plutil -convert xml1 -o - -', 'r+') do |io|
|
|
204
|
-
io.write plist_data
|
|
205
|
-
io.close_write
|
|
206
|
-
@converted_plist = io.read
|
|
207
|
-
end
|
|
208
|
-
Puppet.debug('Converting XML values to a hash.')
|
|
209
|
-
Plist::parse_xml(@converted_plist)
|
|
182
|
+
convert_binary_to_hash(embedded_binary_plist)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# This method will accept a hash and convert it to a binary plist (string value).
|
|
186
|
+
def self.convert_hash_to_binary(plist_data)
|
|
187
|
+
Puppet.debug('Converting plist hash to binary')
|
|
188
|
+
Puppet::Util::Plist.dump_plist(plist_data, :binary)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# This method will accept a binary plist (as a string) and convert it to a hash.
|
|
192
|
+
def self.convert_binary_to_hash(plist_data)
|
|
193
|
+
Puppet.debug('Converting binary plist to hash')
|
|
194
|
+
Puppet::Util::Plist.parse_plist(plist_data)
|
|
210
195
|
end
|
|
211
196
|
|
|
212
197
|
# The salted-SHA512 password hash in 10.7 is stored in the 'SALTED-SHA512'
|
|
213
198
|
# key as binary data. That data is extracted and converted to a hex string.
|
|
214
199
|
def self.get_salted_sha512(embedded_binary_plist)
|
|
215
|
-
embedded_binary_plist['SALTED-SHA512'].
|
|
200
|
+
embedded_binary_plist['SALTED-SHA512'].unpack("H*")[0]
|
|
216
201
|
end
|
|
217
202
|
|
|
218
203
|
# This method reads the passed embedded_binary_plist hash and returns values
|
|
@@ -222,7 +207,7 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
222
207
|
def self.get_salted_sha512_pbkdf2(field, embedded_binary_plist)
|
|
223
208
|
case field
|
|
224
209
|
when 'salt', 'entropy'
|
|
225
|
-
embedded_binary_plist['SALTED-SHA512-PBKDF2'][field].
|
|
210
|
+
embedded_binary_plist['SALTED-SHA512-PBKDF2'][field].unpack('H*').first
|
|
226
211
|
when 'iterations'
|
|
227
212
|
Integer(embedded_binary_plist['SALTED-SHA512-PBKDF2'][field])
|
|
228
213
|
else
|
|
@@ -549,15 +534,16 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
549
534
|
def get_users_plist(username)
|
|
550
535
|
# This method will retrieve the data stored in a user's plist and
|
|
551
536
|
# return it as a native Ruby hash.
|
|
552
|
-
|
|
537
|
+
path = "#{users_plist_dir}/#{username}.plist"
|
|
538
|
+
Puppet::Util::Plist.read_plist_file(path)
|
|
553
539
|
end
|
|
554
540
|
|
|
555
541
|
# This method will return the binary plist that's embedded in the
|
|
556
542
|
# ShadowHashData key of a user's plist, or false if it doesn't exist.
|
|
557
543
|
def get_shadow_hash_data(users_plist)
|
|
558
544
|
if users_plist['ShadowHashData']
|
|
559
|
-
password_hash_plist = users_plist['ShadowHashData'][0]
|
|
560
|
-
self.class.
|
|
545
|
+
password_hash_plist = users_plist['ShadowHashData'][0]
|
|
546
|
+
self.class.convert_binary_to_hash(password_hash_plist)
|
|
561
547
|
else
|
|
562
548
|
false
|
|
563
549
|
end
|
|
@@ -568,22 +554,13 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
568
554
|
# into the ShadowHashData key of the user's plist.
|
|
569
555
|
def set_shadow_hash_data(users_plist, binary_plist)
|
|
570
556
|
if users_plist.has_key?('ShadowHashData')
|
|
571
|
-
users_plist['ShadowHashData'][0]
|
|
557
|
+
users_plist['ShadowHashData'][0] = binary_plist
|
|
572
558
|
else
|
|
573
|
-
users_plist['ShadowHashData'] = [
|
|
559
|
+
users_plist['ShadowHashData'] = [binary_plist]
|
|
574
560
|
end
|
|
575
561
|
write_users_plist_to_disk(users_plist)
|
|
576
562
|
end
|
|
577
563
|
|
|
578
|
-
# This method returns a new StringIO object. Why does it exist?
|
|
579
|
-
# Well, StringIO objects have their own 'serial number', so when
|
|
580
|
-
# writing rspec tests it's difficult to compare StringIO objects
|
|
581
|
-
# due to this serial number. If this action is wrapped in its own
|
|
582
|
-
# method, it can be mocked for easier testing.
|
|
583
|
-
def new_stringio_object(value = '')
|
|
584
|
-
StringIO.new(value)
|
|
585
|
-
end
|
|
586
|
-
|
|
587
564
|
# This method accepts an argument of a hex password hash, and base64
|
|
588
565
|
# decodes it into a format that OS X 10.7 and 10.8 will store
|
|
589
566
|
# in the user's plist.
|
|
@@ -598,17 +575,17 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
598
575
|
def set_salted_sha512(users_plist, shadow_hash_data, value)
|
|
599
576
|
unless shadow_hash_data
|
|
600
577
|
shadow_hash_data = Hash.new
|
|
601
|
-
shadow_hash_data['SALTED-SHA512'] =
|
|
578
|
+
shadow_hash_data['SALTED-SHA512'] = ''
|
|
602
579
|
end
|
|
603
|
-
shadow_hash_data['SALTED-SHA512']
|
|
604
|
-
binary_plist = self.class.
|
|
580
|
+
shadow_hash_data['SALTED-SHA512'] = base64_decode_string(value)
|
|
581
|
+
binary_plist = self.class.convert_hash_to_binary(shadow_hash_data)
|
|
605
582
|
set_shadow_hash_data(users_plist, binary_plist)
|
|
606
583
|
end
|
|
607
584
|
|
|
608
585
|
# This method accepts a passed value and one of three fields: 'salt',
|
|
609
586
|
# 'entropy', or 'iterations'. These fields correspond with the fields
|
|
610
587
|
# utilized in a PBKDF2 password hashing system
|
|
611
|
-
# (see
|
|
588
|
+
# (see https://en.wikipedia.org/wiki/PBKDF2 ) where 'entropy' is the
|
|
612
589
|
# password hash, 'salt' is the password hash salt value, and 'iterations'
|
|
613
590
|
# is an integer recommended to be > 10,000. The remaining arguments are
|
|
614
591
|
# the user's plist itself, and the shadow_hash_data hash containing the
|
|
@@ -618,8 +595,7 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
618
595
|
shadow_hash_data['SALTED-SHA512-PBKDF2'] = Hash.new unless shadow_hash_data['SALTED-SHA512-PBKDF2']
|
|
619
596
|
case field
|
|
620
597
|
when 'salt', 'entropy'
|
|
621
|
-
shadow_hash_data['SALTED-SHA512-PBKDF2'][field] =
|
|
622
|
-
shadow_hash_data['SALTED-SHA512-PBKDF2'][field].string = base64_decode_string(value)
|
|
598
|
+
shadow_hash_data['SALTED-SHA512-PBKDF2'][field] = base64_decode_string(value)
|
|
623
599
|
when 'iterations'
|
|
624
600
|
shadow_hash_data['SALTED-SHA512-PBKDF2'][field] = Integer(value)
|
|
625
601
|
else
|
|
@@ -633,15 +609,14 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
|
633
609
|
# Convert shadow_hash_data to a binary plist, and call the
|
|
634
610
|
# set_shadow_hash_data method to serialize and write the data
|
|
635
611
|
# back to the user's plist.
|
|
636
|
-
binary_plist = self.class.
|
|
612
|
+
binary_plist = self.class.convert_hash_to_binary(shadow_hash_data)
|
|
637
613
|
set_shadow_hash_data(users_plist, binary_plist)
|
|
638
614
|
end
|
|
639
615
|
|
|
640
616
|
# This method will accept a plist in XML format, save it to disk, convert
|
|
641
617
|
# the plist to a binary format, and flush the dscl cache.
|
|
642
618
|
def write_users_plist_to_disk(users_plist)
|
|
643
|
-
Plist
|
|
644
|
-
plutil'-convert', 'binary1', "#{users_plist_dir}/#{@resource.name}.plist"
|
|
619
|
+
Puppet::Util::Plist.write_plist_file(users_plist, "#{users_plist_dir}/#{@resource.name}.plist", :binary)
|
|
645
620
|
end
|
|
646
621
|
|
|
647
622
|
# This is a simple wrapper method for writing values to a file.
|
|
@@ -40,7 +40,7 @@ Puppet::Type.type(:user).provide :windows_adsi do
|
|
|
40
40
|
specified_users = Puppet::Util::Windows::ADSI::Group.name_sid_hash(should)
|
|
41
41
|
|
|
42
42
|
if @resource[:membership] == :inclusive
|
|
43
|
-
current_users == specified_users
|
|
43
|
+
current_users.keys.to_a == specified_users.keys.to_a
|
|
44
44
|
else
|
|
45
45
|
(specified_users.keys.to_a & current_users.keys.to_a) == specified_users.keys.to_a
|
|
46
46
|
end
|
|
@@ -55,7 +55,7 @@ Puppet::Type.type(:user).provide :windows_adsi do
|
|
|
55
55
|
else
|
|
56
56
|
account = sid.account
|
|
57
57
|
end
|
|
58
|
-
resource.debug("#{sid.domain}\\#{account} (#{sid.
|
|
58
|
+
resource.debug("#{sid.domain}\\#{account} (#{sid.sid})")
|
|
59
59
|
"#{sid.domain}\\#{account}"
|
|
60
60
|
end
|
|
61
61
|
return groups.join(',')
|
|
@@ -74,9 +74,12 @@ Puppet::Type.type(:yumrepo).provide(:inifile) do
|
|
|
74
74
|
def self.reposdir(conf='/etc/yum.conf', dirs=['/etc/yum.repos.d', '/etc/yum/repos.d'])
|
|
75
75
|
reposdir = find_conf_value('reposdir', conf)
|
|
76
76
|
# Use directories in reposdir if they are set instead of default
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
if reposdir
|
|
78
|
+
# Follow the code from the yum/config.py
|
|
79
|
+
dirs = reposdir.gsub!("\n", ' ')
|
|
80
|
+
dirs = reposdir.gsub!(',', ' ')
|
|
81
|
+
dirs = reposdir.split
|
|
82
|
+
end
|
|
80
83
|
dirs.select! { |dir| Puppet::FileSystem.exist?(dir) }
|
|
81
84
|
if dirs.empty?
|
|
82
85
|
Puppet.debug('No yum directories were found on the local filesystem')
|
|
@@ -40,7 +40,7 @@ Puppet::Type.type(:zfs).provide(:zfs) do
|
|
|
40
40
|
|
|
41
41
|
PARAMETER_UNSET_OR_NOT_AVAILABLE = '-'
|
|
42
42
|
|
|
43
|
-
#
|
|
43
|
+
# https://docs.oracle.com/cd/E19963-01/html/821-1448/gbscy.html
|
|
44
44
|
# shareiscsi (added in build 120) was removed from S11 build 136
|
|
45
45
|
# aclmode was removed from S11 in build 139 but it may have been added back
|
|
46
46
|
# http://webcache.googleusercontent.com/search?q=cache:-p74K0DVsdwJ:developers.slashdot.org/story/11/11/09/2343258/solaris-11-released+&cd=13
|
|
@@ -48,7 +48,7 @@ Puppet::Type.type(:zpool).provide(:zpool) do
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def get_pool_data
|
|
51
|
-
#
|
|
51
|
+
# https://docs.oracle.com/cd/E19082-01/817-2271/gbcve/index.html
|
|
52
52
|
# we could also use zpool iostat -v mypool for a (little bit) cleaner output
|
|
53
53
|
out = execute("zpool status #{@resource[:pool]}", :failonfail => false, :combine => false)
|
|
54
54
|
zpool_data = out.lines.select { |line| line.index("\t") == 0 }.collect { |l| l.strip.split("\s")[0] }
|
|
@@ -73,7 +73,7 @@ config.header = <<EOT
|
|
|
73
73
|
|
|
74
74
|
See the [configuration guide][confguide] for more details.
|
|
75
75
|
|
|
76
|
-
[confguide]: http://docs.puppetlabs.com/
|
|
76
|
+
[confguide]: http://docs.puppetlabs.com/puppet/latest/reference/config_about_settings.html
|
|
77
77
|
|
|
78
78
|
* * *
|
|
79
79
|
|
|
@@ -91,7 +91,7 @@ providers = Puppet::Util::Reference.newreference :providers, :title => "Provider
|
|
|
91
91
|
|
|
92
92
|
ret << markdown_header(type.name.to_s + "_", 2)
|
|
93
93
|
|
|
94
|
-
ret << "[#{type.name}](
|
|
94
|
+
ret << "[#{type.name}](https://docs.puppetlabs.com/references/stable/type.html##{type.name})\n\n"
|
|
95
95
|
ret << option("Default provider", default)
|
|
96
96
|
ret << doctable(headers, table_data)
|
|
97
97
|
|
|
@@ -35,15 +35,10 @@ module Puppet::Resource::CapabilityFinder
|
|
|
35
35
|
['select_catalogs',
|
|
36
36
|
['=', 'code_id', code_id]]]]
|
|
37
37
|
end
|
|
38
|
-
query = query_terms.to_json
|
|
39
38
|
|
|
40
|
-
Puppet.notice "Capability lookup #{cap}]: #{
|
|
39
|
+
Puppet.notice "Capability lookup #{cap}]: #{query_terms}"
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
response = http.action("/pdb/query/v4/resources?query=#{CGI.escape(query)}") do |conn, uri|
|
|
44
|
-
conn.get(uri, { 'Accept' => 'application/json'})
|
|
45
|
-
end
|
|
46
|
-
json = response.body
|
|
41
|
+
data = query_puppetdb(query_terms)
|
|
47
42
|
|
|
48
43
|
# The format of the response body is documented at
|
|
49
44
|
# http://docs.puppetlabs.com/puppetdb/3.0/api/query/v4/resources.html#response-format
|
|
@@ -53,12 +48,6 @@ module Puppet::Resource::CapabilityFinder
|
|
|
53
48
|
# ::Resource. If the array contains more than one entry, we have a
|
|
54
49
|
# bug in the overall system, as we allowed multiple capabilities with
|
|
55
50
|
# the same type and title to be produced in this environment.
|
|
56
|
-
begin
|
|
57
|
-
data = JSON.parse(json)
|
|
58
|
-
rescue JSON::JSONError => e
|
|
59
|
-
raise Puppet::DevError,
|
|
60
|
-
"Invalid JSON from PuppetDB when looking up #{cap}\n#{e}\nRaw JSON was:\n#{json}"
|
|
61
|
-
end
|
|
62
51
|
unless data.is_a?(Array)
|
|
63
52
|
raise Puppet::DevError,
|
|
64
53
|
"Unexpected response from PuppetDB when looking up #{cap}: " +
|
|
@@ -92,4 +81,22 @@ module Puppet::Resource::CapabilityFinder
|
|
|
92
81
|
return resource
|
|
93
82
|
end
|
|
94
83
|
end
|
|
84
|
+
|
|
85
|
+
def self.query_puppetdb(query)
|
|
86
|
+
# If using PuppetDB >= 4, use the API method query_puppetdb()
|
|
87
|
+
if Puppet::Util::Puppetdb.respond_to?(:query_puppetdb)
|
|
88
|
+
# PuppetDB 4 uses a unified query endpoint, so we have to specify what we're querying
|
|
89
|
+
Puppet::Util::Puppetdb.query_puppetdb(["from", "resources", query])
|
|
90
|
+
# For PuppetDB < 4, use the old internal method action()
|
|
91
|
+
else
|
|
92
|
+
url = "/pdb/query/v4/resource?query=#{CGI.escape(query.to_json)}"
|
|
93
|
+
response = Puppet::Util::Puppetdb::Http.action(url) do |conn, uri|
|
|
94
|
+
conn.get(uri, { 'Accept' => 'application/json'})
|
|
95
|
+
end
|
|
96
|
+
JSON.parse(response.body)
|
|
97
|
+
end
|
|
98
|
+
rescue JSON::JSONError => e
|
|
99
|
+
raise Puppet::DevError,
|
|
100
|
+
"Invalid JSON from PuppetDB when looking up #{cap}\n#{e}"
|
|
101
|
+
end
|
|
95
102
|
end
|
|
@@ -3,6 +3,7 @@ require 'puppet/indirector'
|
|
|
3
3
|
require 'puppet/transaction'
|
|
4
4
|
require 'puppet/util/tagging'
|
|
5
5
|
require 'puppet/graph'
|
|
6
|
+
require 'securerandom'
|
|
6
7
|
|
|
7
8
|
require 'puppet/resource/capability_finder'
|
|
8
9
|
|
|
@@ -32,6 +33,22 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
|
32
33
|
# The id of the code input to the compiler.
|
|
33
34
|
attr_accessor :code_id
|
|
34
35
|
|
|
36
|
+
# The UUID of the catalog
|
|
37
|
+
attr_accessor :catalog_uuid
|
|
38
|
+
|
|
39
|
+
# @return [Integer] catalog format version number. This value is constant
|
|
40
|
+
# for a given version of Puppet; it is incremented when a new release of
|
|
41
|
+
# Puppet changes the API for the various objects that make up the catalog.
|
|
42
|
+
attr_accessor :catalog_format
|
|
43
|
+
|
|
44
|
+
# Inlined file metadata for non-recursive find
|
|
45
|
+
# A hash of title => metadata
|
|
46
|
+
attr_accessor :metadata
|
|
47
|
+
|
|
48
|
+
# Inlined file metadata for recursive search
|
|
49
|
+
# A hash of title => { source => [metadata, ...] }
|
|
50
|
+
attr_accessor :recursive_metadata
|
|
51
|
+
|
|
35
52
|
# How long this catalog took to retrieve. Used for reporting stats.
|
|
36
53
|
attr_accessor :retrieval_duration
|
|
37
54
|
|
|
@@ -272,6 +289,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
|
272
289
|
def initialize(name = nil, environment = Puppet::Node::Environment::NONE, code_id = nil)
|
|
273
290
|
super()
|
|
274
291
|
@name = name
|
|
292
|
+
@catalog_uuid = SecureRandom.uuid
|
|
293
|
+
@catalog_format = 1
|
|
294
|
+
@metadata = {}
|
|
295
|
+
@recursive_metadata = {}
|
|
275
296
|
@classes = []
|
|
276
297
|
@resource_table = {}
|
|
277
298
|
@resources = []
|
|
@@ -379,6 +400,12 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
|
379
400
|
result.code_id = code_id
|
|
380
401
|
end
|
|
381
402
|
|
|
403
|
+
if catalog_uuid = data['catalog_uuid']
|
|
404
|
+
result.catalog_uuid = catalog_uuid
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
result.catalog_format = data['catalog_format'] || 0
|
|
408
|
+
|
|
382
409
|
if environment = data['environment']
|
|
383
410
|
result.environment = environment
|
|
384
411
|
result.environment_instance = Puppet::Node::Environment.remote(environment.to_sym)
|
|
@@ -411,20 +438,46 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
|
411
438
|
result.add_class(*classes)
|
|
412
439
|
end
|
|
413
440
|
|
|
441
|
+
if metadata = data['metadata']
|
|
442
|
+
result.metadata = metadata.inject({}) { |h, (k, v)| h[k] = Puppet::FileServing::Metadata.from_data_hash(v); h }
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
if recursive_metadata = data['recursive_metadata']
|
|
446
|
+
result.recursive_metadata = recursive_metadata.inject({}) do |h, (title, source_to_meta_hash)|
|
|
447
|
+
h[title] = source_to_meta_hash.inject({}) do |inner_h, (source, metas)|
|
|
448
|
+
inner_h[source] = metas.map {|meta| Puppet::FileServing::Metadata.from_data_hash(meta)}
|
|
449
|
+
inner_h
|
|
450
|
+
end
|
|
451
|
+
h
|
|
452
|
+
end
|
|
453
|
+
end
|
|
454
|
+
|
|
414
455
|
result
|
|
415
456
|
end
|
|
416
457
|
|
|
417
458
|
def to_data_hash
|
|
459
|
+
metadata_hash = metadata.inject({}) { |h, (k, v)| h[k] = v.to_data_hash; h }
|
|
460
|
+
recursive_metadata_hash = recursive_metadata.inject({}) do |h, (title, source_to_meta_hash)|
|
|
461
|
+
h[title] = source_to_meta_hash.inject({}) do |inner_h, (source, metas)|
|
|
462
|
+
inner_h[source] = metas.map {|meta| meta.to_data_hash}
|
|
463
|
+
inner_h
|
|
464
|
+
end
|
|
465
|
+
h
|
|
466
|
+
end
|
|
467
|
+
|
|
418
468
|
{
|
|
419
469
|
'tags' => tags,
|
|
420
470
|
'name' => name,
|
|
421
471
|
'version' => version,
|
|
422
472
|
'code_id' => code_id,
|
|
423
|
-
'
|
|
473
|
+
'catalog_uuid' => catalog_uuid,
|
|
474
|
+
'catalog_format' => catalog_format,
|
|
475
|
+
'environment' => environment.to_s,
|
|
424
476
|
'resources' => @resources.collect { |v| @resource_table[v].to_data_hash },
|
|
425
477
|
'edges' => edges. collect { |e| e.to_data_hash },
|
|
426
|
-
'classes' => classes
|
|
427
|
-
}
|
|
478
|
+
'classes' => classes,
|
|
479
|
+
}.merge(metadata_hash.empty? ? {} : {'metadata' => metadata_hash})
|
|
480
|
+
.merge(recursive_metadata_hash.empty? ? {} : {'recursive_metadata' => recursive_metadata_hash})
|
|
428
481
|
end
|
|
429
482
|
|
|
430
483
|
# Convert our catalog into a RAL catalog.
|
|
@@ -536,6 +589,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
|
536
589
|
|
|
537
590
|
result.version = self.version
|
|
538
591
|
result.code_id = self.code_id
|
|
592
|
+
result.catalog_uuid = self.catalog_uuid
|
|
593
|
+
result.catalog_format = self.catalog_format
|
|
594
|
+
result.metadata = self.metadata
|
|
595
|
+
result.recursive_metadata = self.recursive_metadata
|
|
539
596
|
|
|
540
597
|
map = {}
|
|
541
598
|
resources.each do |resource|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'time'
|
|
2
2
|
require 'puppet/network/format_support'
|
|
3
|
+
require 'puppet/util/psych_support'
|
|
3
4
|
|
|
4
5
|
module Puppet
|
|
5
6
|
class Resource
|
|
@@ -11,6 +12,7 @@ module Puppet
|
|
|
11
12
|
#
|
|
12
13
|
# @api private
|
|
13
14
|
class Status
|
|
15
|
+
include Puppet::Util::PsychSupport
|
|
14
16
|
include Puppet::Util::Tagging
|
|
15
17
|
include Puppet::Network::FormatSupport
|
|
16
18
|
|
|
@@ -181,7 +183,14 @@ module Puppet
|
|
|
181
183
|
@failed = data['failed']
|
|
182
184
|
|
|
183
185
|
@events = data['events'].map do |event|
|
|
184
|
-
|
|
186
|
+
# in YAML (for reports) we serialize this as an object, but
|
|
187
|
+
# in PSON it becomes a hash. Depending on where we came from
|
|
188
|
+
# we might not need to deserialize it.
|
|
189
|
+
if event.class == Puppet::Transaction::Event
|
|
190
|
+
event
|
|
191
|
+
else
|
|
192
|
+
Puppet::Transaction::Event.from_data_hash(event)
|
|
193
|
+
end
|
|
185
194
|
end
|
|
186
195
|
end
|
|
187
196
|
|
|
@@ -194,7 +203,7 @@ module Puppet
|
|
|
194
203
|
'resource_type' => @resource_type,
|
|
195
204
|
'containment_path' => @containment_path,
|
|
196
205
|
'evaluation_time' => @evaluation_time,
|
|
197
|
-
'tags' => @tags,
|
|
206
|
+
'tags' => @tags.to_a,
|
|
198
207
|
'time' => @time.iso8601(9),
|
|
199
208
|
'failed' => @failed,
|
|
200
209
|
'changed' => @changed,
|
data/lib/puppet/resource/type.rb
CHANGED
|
@@ -174,12 +174,9 @@ class Puppet::Resource::Type
|
|
|
174
174
|
|
|
175
175
|
if code
|
|
176
176
|
if @match # Only bother setting up the ephemeral scope if there are match variables to add into it
|
|
177
|
-
|
|
178
|
-
elevel = scope.ephemeral_level
|
|
177
|
+
scope.with_guarded_scope do
|
|
179
178
|
scope.ephemeral_from(@match, file, line)
|
|
180
179
|
code.safeevaluate(scope)
|
|
181
|
-
ensure
|
|
182
|
-
scope.unset_ephemeral_var(elevel)
|
|
183
180
|
end
|
|
184
181
|
else
|
|
185
182
|
code.safeevaluate(scope)
|
|
@@ -346,18 +343,23 @@ class Puppet::Resource::Type
|
|
|
346
343
|
end
|
|
347
344
|
|
|
348
345
|
# Validate and set any arguments passed by the resource as variables in the scope.
|
|
346
|
+
#
|
|
347
|
+
# This method is known to only be used on the server/compile side.
|
|
348
|
+
#
|
|
349
349
|
# @param resource [Puppet::Parser::Resource] the resource
|
|
350
350
|
# @param scope [Puppet::Parser::Scope] the scope
|
|
351
351
|
#
|
|
352
352
|
# @api private
|
|
353
353
|
def set_resource_parameters(resource, scope)
|
|
354
354
|
# Inject parameters from using external lookup
|
|
355
|
+
modname = resource[:module_name] || module_name
|
|
356
|
+
scope[MODULE_NAME] = modname unless modname.nil?
|
|
357
|
+
caller_name = resource[:caller_module_name] || scope.parent_module_name
|
|
358
|
+
scope[CALLER_MODULE_NAME] = caller_name unless caller_name.nil?
|
|
359
|
+
|
|
355
360
|
resource.add_parameters_from_consume
|
|
356
361
|
inject_external_parameters(resource, scope)
|
|
357
362
|
|
|
358
|
-
resource_hash = {}
|
|
359
|
-
resource.each { |k, v| resource_hash[k.to_s] = v.value unless k == :name || k == :title }
|
|
360
|
-
|
|
361
363
|
if @type == :hostclass
|
|
362
364
|
scope[TITLE] = resource.title.to_s.downcase
|
|
363
365
|
scope[NAME] = resource.name.to_s.downcase
|
|
@@ -365,17 +367,21 @@ class Puppet::Resource::Type
|
|
|
365
367
|
scope[TITLE] = resource.title
|
|
366
368
|
scope[NAME] = resource.name
|
|
367
369
|
end
|
|
370
|
+
scope.class_set(self.name,scope) if hostclass? || node?
|
|
368
371
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
372
|
+
param_hash = scope.with_parameter_scope(arguments.keys) do |param_scope|
|
|
373
|
+
# Assign directly to the parameter scope to avoid scope parameter validation at this point. It
|
|
374
|
+
# will happen anyway when the values are assigned to the scope after the parameter scoped has
|
|
375
|
+
# been popped.
|
|
376
|
+
resource.each { |k, v| param_scope[k.to_s] = v.value unless k == :name || k == :title }
|
|
377
|
+
assign_defaults(resource, param_scope, scope)
|
|
378
|
+
param_scope.to_hash
|
|
379
|
+
end
|
|
373
380
|
|
|
374
|
-
|
|
381
|
+
validate_resource_hash(resource, param_hash)
|
|
375
382
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
resource_hash.each { |param, value| exceptwrap { scope[param] = value }}
|
|
383
|
+
# Assign parameter values to current scope
|
|
384
|
+
param_hash.each { |param, value| exceptwrap { scope[param] = value }}
|
|
379
385
|
end
|
|
380
386
|
|
|
381
387
|
# Lookup and inject parameters from external scope
|
|
@@ -385,28 +391,30 @@ class Puppet::Resource::Type
|
|
|
385
391
|
# Only lookup parameters for host classes
|
|
386
392
|
return unless type == :hostclass
|
|
387
393
|
parameters = resource.parameters
|
|
388
|
-
arguments.each do |param_name,
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
394
|
+
arguments.each do |param_name, default|
|
|
395
|
+
sym_name = param_name.to_sym
|
|
396
|
+
param = parameters[sym_name]
|
|
397
|
+
next unless param.nil? || param.value.nil?
|
|
398
|
+
catch(:no_such_key) do
|
|
399
|
+
bound_value = Puppet::Pops::Lookup.search_and_merge("#{name}::#{param_name}", Puppet::Pops::Lookup::Invocation.new(scope), nil)
|
|
400
|
+
# Assign bound value but don't let an undef trump a default expression
|
|
401
|
+
resource[sym_name] = bound_value unless bound_value.nil? && !default.nil?
|
|
402
|
+
end
|
|
393
403
|
end
|
|
394
404
|
end
|
|
395
405
|
private :inject_external_parameters
|
|
396
406
|
|
|
397
|
-
def assign_defaults(resource,
|
|
407
|
+
def assign_defaults(resource, param_scope, scope)
|
|
398
408
|
return unless resource.is_a?(Puppet::Parser::Resource)
|
|
399
409
|
parameters = resource.parameters
|
|
400
|
-
hashed_types = parameter_struct.hashed_elements
|
|
401
410
|
arguments.each do |param_name, default|
|
|
402
411
|
next if default.nil?
|
|
403
412
|
name = param_name.to_sym
|
|
404
413
|
param = parameters[name]
|
|
405
414
|
next unless param.nil? || param.value.nil?
|
|
406
|
-
|
|
407
|
-
value = default.safeevaluate(scope)
|
|
415
|
+
value = exceptwrap { param_scope.evaluate3x(param_name, default, scope) }
|
|
408
416
|
resource[name] = value
|
|
409
|
-
|
|
417
|
+
param_scope[param_name] = value
|
|
410
418
|
end
|
|
411
419
|
end
|
|
412
420
|
private :assign_defaults
|
|
@@ -551,21 +559,4 @@ class Puppet::Resource::Type
|
|
|
551
559
|
type_factory.struct(members)
|
|
552
560
|
end
|
|
553
561
|
private :create_params_struct
|
|
554
|
-
|
|
555
|
-
# Consult external data bindings for class parameter values which must be
|
|
556
|
-
# namespaced in the backend.
|
|
557
|
-
#
|
|
558
|
-
# Example:
|
|
559
|
-
#
|
|
560
|
-
# class foo($port=0){ ... }
|
|
561
|
-
#
|
|
562
|
-
# We make a request to the backend for the key 'foo::port' not 'foo'
|
|
563
|
-
#
|
|
564
|
-
def lookup_external_default_for(param, scope)
|
|
565
|
-
if type == :hostclass
|
|
566
|
-
catch(:no_such_key) { return Puppet::Pops::Lookup.search_and_merge("#{name}::#{param}", Puppet::Pops::Lookup::Invocation.new(scope), nil) }
|
|
567
|
-
end
|
|
568
|
-
nil
|
|
569
|
-
end
|
|
570
|
-
private :lookup_external_default_for
|
|
571
562
|
end
|