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
@@ -91,7 +91,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
91
91
|
|
92
92
|
updates = Hash.new { |h, k| h[k] = [] }
|
93
93
|
body.split.each_slice(3) do |tuple|
|
94
|
-
break if tuple[0] =~ /^(Obsoleting|Security
|
94
|
+
break if tuple[0] =~ /^(Obsoleting|Security:|Update)/
|
95
95
|
hash = update_to_hash(*tuple[0..1])
|
96
96
|
# Create entries for both the package name without a version and a
|
97
97
|
# version since yum considers those as mostly interchangeable.
|
@@ -123,4 +123,23 @@ Puppet::Type.type(:package).provide :zypper, :parent => :rpm do
|
|
123
123
|
# zypper install can be used for update, too
|
124
124
|
self.install
|
125
125
|
end
|
126
|
+
|
127
|
+
def uninstall
|
128
|
+
#extract version numbers and convert to integers
|
129
|
+
major, minor, patch = zypper_version.scan(/\d+/).map{ |x| x.to_i }
|
130
|
+
|
131
|
+
if major < 1
|
132
|
+
super
|
133
|
+
else
|
134
|
+
options = [:remove, '--no-confirm']
|
135
|
+
if major == 1 && minor < 6
|
136
|
+
options << '--force-resolution'
|
137
|
+
end
|
138
|
+
|
139
|
+
options << @resource[:name]
|
140
|
+
|
141
|
+
zypper *options
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
126
145
|
end
|
@@ -12,7 +12,7 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
|
|
12
12
|
|
13
13
|
commands :update_rc => "/usr/sbin/update-rc.d"
|
14
14
|
# note this isn't being used as a command until
|
15
|
-
#
|
15
|
+
# https://projects.puppetlabs.com/issues/2538
|
16
16
|
# is resolved.
|
17
17
|
commands :invoke_rc => "/usr/sbin/invoke-rc.d"
|
18
18
|
commands :service => "/usr/sbin/service"
|
@@ -32,7 +32,7 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
|
|
32
32
|
|
33
33
|
def enabled?
|
34
34
|
# TODO: Replace system call when Puppet::Util::Execution.execute gives us a way
|
35
|
-
# to determine exit status.
|
35
|
+
# to determine exit status. https://projects.puppetlabs.com/issues/2538
|
36
36
|
system("/usr/sbin/invoke-rc.d", "--quiet", "--query", @resource[:name], "start")
|
37
37
|
|
38
38
|
# 104 is the exit status when you query start an enabled service.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'plist'
|
1
|
+
require 'puppet/util/plist' if Puppet.features.cfpropertylist?
|
2
2
|
Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
3
3
|
desc <<-'EOT'
|
4
4
|
This provider manages jobs with `launchd`, which is the default service
|
@@ -6,7 +6,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
6
6
|
|
7
7
|
For `launchd` documentation, see:
|
8
8
|
|
9
|
-
* <
|
9
|
+
* <https://developer.apple.com/macosx/launchd.html>
|
10
10
|
* <http://launchd.macosforge.org/>
|
11
11
|
|
12
12
|
This provider reads plists out of the following directories:
|
@@ -42,10 +42,10 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
42
42
|
include Puppet::Util::Warnings
|
43
43
|
|
44
44
|
commands :launchctl => "/bin/launchctl"
|
45
|
-
commands :plutil => "/usr/bin/plutil"
|
46
45
|
|
47
46
|
defaultfor :operatingsystem => :darwin
|
48
47
|
confine :operatingsystem => :darwin
|
48
|
+
confine :feature => :cfpropertylist
|
49
49
|
|
50
50
|
has_feature :enableable
|
51
51
|
has_feature :refreshable
|
@@ -193,19 +193,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
193
193
|
# Read a plist, whether its format is XML or in Apple's "binary1"
|
194
194
|
# format.
|
195
195
|
def self.read_plist(path)
|
196
|
-
|
197
|
-
return Plist::parse_xml(path)
|
198
|
-
rescue ArgumentError => detail
|
199
|
-
Puppet.debug("Error reading #{path}: #{detail}. Retrying with plutil.")
|
200
|
-
end
|
201
|
-
|
202
|
-
begin
|
203
|
-
Plist::parse_xml(plutil('-convert', 'xml1', '-o', '/dev/stdout', path))
|
204
|
-
rescue Puppet::ExecutionFailure => detail
|
205
|
-
Puppet.warning("Cannot read file #{path}; Puppet is skipping it. \n" +
|
206
|
-
"Details: #{detail}")
|
207
|
-
return nil
|
208
|
-
end
|
196
|
+
Puppet::Util::Plist.read_plist_file(path)
|
209
197
|
end
|
210
198
|
|
211
199
|
# Clean out the @property_hash variable containing the cached list of services
|
@@ -328,7 +316,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
328
316
|
else
|
329
317
|
overrides[resource[:name]] = false
|
330
318
|
end
|
331
|
-
Plist
|
319
|
+
Puppet::Util::Plist.write_plist_file(overrides, self.class.launchd_overrides)
|
332
320
|
end
|
333
321
|
|
334
322
|
def disable
|
@@ -338,6 +326,6 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
338
326
|
else
|
339
327
|
overrides[resource[:name]] = true
|
340
328
|
end
|
341
|
-
Plist
|
329
|
+
Puppet::Util::Plist.write_plist_file(overrides, self.class.launchd_overrides)
|
342
330
|
end
|
343
331
|
end
|
@@ -5,14 +5,21 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
5
5
|
|
6
6
|
commands :systemctl => "systemctl"
|
7
7
|
|
8
|
-
|
8
|
+
if Facter.value(:osfamily).downcase == 'debian'
|
9
|
+
# With multiple init systems on Debian, it is possible to have
|
10
|
+
# pieces of systemd around (e.g. systemctl) but not really be
|
11
|
+
# using systemd. We do not do this on other platforms as it can
|
12
|
+
# cause issues when running in a chroot without /run mounted
|
13
|
+
# (PUP-5577)
|
14
|
+
confine :exists => "/run/systemd/system"
|
15
|
+
end
|
9
16
|
|
10
17
|
defaultfor :osfamily => [:archlinux]
|
11
18
|
defaultfor :osfamily => :redhat, :operatingsystemmajrelease => "7"
|
12
19
|
defaultfor :osfamily => :redhat, :operatingsystem => :fedora
|
13
20
|
defaultfor :osfamily => :suse
|
14
21
|
defaultfor :operatingsystem => :debian, :operatingsystemmajrelease => "8"
|
15
|
-
defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["15.04","15.10"]
|
22
|
+
defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["15.04","15.10","16.04"]
|
16
23
|
|
17
24
|
def self.instances
|
18
25
|
i = []
|
@@ -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(: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
|
|
data/lib/puppet/resource.rb
CHANGED
@@ -438,19 +438,22 @@ class Puppet::Resource
|
|
438
438
|
end
|
439
439
|
|
440
440
|
missing_arguments.collect do |param, default|
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
441
|
+
rtype = resource_type
|
442
|
+
if rtype.type == :hostclass
|
443
|
+
using_bound_value = false
|
444
|
+
catch(:no_such_key) do
|
445
|
+
bound_value = Puppet::Pops::Lookup.search_and_merge("#{rtype.name}::#{param}", Puppet::Pops::Lookup::Invocation.new(scope), nil)
|
446
|
+
# Assign bound value but don't let an undef trump a default expression
|
447
|
+
unless bound_value.nil? && !default.nil?
|
448
|
+
self[param.to_sym] = bound_value
|
449
|
+
using_bound_value = true
|
450
|
+
end
|
451
|
+
end
|
452
|
+
end
|
453
|
+
unless using_bound_value
|
454
|
+
next if default.nil?
|
455
|
+
self[param.to_sym] = default.safeevaluate(scope)
|
451
456
|
end
|
452
|
-
|
453
|
-
self[param.to_sym] = value
|
454
457
|
param
|
455
458
|
end.compact
|
456
459
|
end
|
@@ -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
|