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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require 'facter'
|
|
2
|
-
require 'plist'
|
|
2
|
+
require 'puppet/util/plist' if Puppet.features.cfpropertylist?
|
|
3
3
|
require 'puppet'
|
|
4
4
|
require 'tempfile'
|
|
5
5
|
|
|
@@ -12,6 +12,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
|
|
|
12
12
|
commands :security => "/usr/bin/security"
|
|
13
13
|
|
|
14
14
|
confine :operatingsystem => :darwin
|
|
15
|
+
confine :feature => :cfpropertylist
|
|
15
16
|
|
|
16
17
|
defaultfor :operatingsystem => :darwin
|
|
17
18
|
|
|
@@ -50,7 +51,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
|
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
def populate_rules_rights
|
|
53
|
-
auth_plist = Plist
|
|
54
|
+
auth_plist = Puppet::Util::Plist.parse_plist(AuthDB)
|
|
54
55
|
raise Puppet::Error.new("Cannot parse: #{AuthDB}") if not auth_plist
|
|
55
56
|
self.rights = auth_plist["rights"].dup
|
|
56
57
|
self.rules = auth_plist["rules"].dup
|
|
@@ -124,12 +125,12 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
|
|
|
124
125
|
end
|
|
125
126
|
|
|
126
127
|
def destroy_rule
|
|
127
|
-
authdb = Plist
|
|
128
|
+
authdb = Puppet::Util::Plist.parse_plist(AuthDB)
|
|
128
129
|
authdb_rules = authdb["rules"].dup
|
|
129
130
|
if authdb_rules[resource[:name]]
|
|
130
131
|
begin
|
|
131
132
|
authdb["rules"].delete(resource[:name])
|
|
132
|
-
Plist
|
|
133
|
+
Puppet::Util::Plist.write_plist_file(authdb, AuthDB)
|
|
133
134
|
rescue Errno::EACCES => e
|
|
134
135
|
raise Puppet::Error.new("Error saving #{AuthDB}: #{e}", e)
|
|
135
136
|
end
|
|
@@ -144,7 +145,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
|
|
|
144
145
|
cmds = []
|
|
145
146
|
cmds << :security << "authorizationdb" << "read" << resource[:name]
|
|
146
147
|
output = execute(cmds, :failonfail => false, :combine => false)
|
|
147
|
-
current_values = Plist
|
|
148
|
+
current_values = Puppet::Util::Plist.parse_plist(output)
|
|
148
149
|
current_values ||= {}
|
|
149
150
|
specified_values = convert_plist_to_native_attributes(@property_hash)
|
|
150
151
|
|
|
@@ -155,7 +156,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
|
|
|
155
156
|
end
|
|
156
157
|
|
|
157
158
|
def flush_rule
|
|
158
|
-
authdb = Plist
|
|
159
|
+
authdb = Puppet::Util::Plist.parse_plist(AuthDB)
|
|
159
160
|
authdb_rules = authdb["rules"].dup
|
|
160
161
|
current_values = {}
|
|
161
162
|
current_values = authdb_rules[resource[:name]] if authdb_rules[resource[:name]]
|
|
@@ -171,7 +172,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
|
|
|
171
172
|
values = convert_plist_to_native_attributes(values)
|
|
172
173
|
tmp = Tempfile.new('puppet_macauthorization')
|
|
173
174
|
begin
|
|
174
|
-
Plist
|
|
175
|
+
Puppet::Util::Plist.write_plist_file(values, tmp.path)
|
|
175
176
|
cmds = []
|
|
176
177
|
cmds << :security << "authorizationdb" << "write" << name
|
|
177
178
|
execute(cmds, :failonfail => false, :combine => false, :stdinfile => tmp.path.to_s)
|
|
@@ -189,11 +190,11 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
|
|
|
189
190
|
# support modifying rules at all so we have to twiddle the whole
|
|
190
191
|
# plist... :( See Apple Bug #6386000
|
|
191
192
|
values = convert_plist_to_native_attributes(values)
|
|
192
|
-
authdb = Plist
|
|
193
|
+
authdb = Puppet::Util::Plist.parse_plist(AuthDB)
|
|
193
194
|
authdb["rules"][name] = values
|
|
194
195
|
|
|
195
196
|
begin
|
|
196
|
-
Plist
|
|
197
|
+
Puppet::Util::Plist.write_plist_file(authdb, AuthDB)
|
|
197
198
|
rescue
|
|
198
199
|
raise Puppet::Error.new("Error writing to: #{AuthDB}")
|
|
199
200
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'puppet'
|
|
2
2
|
require 'puppet/provider/nameservice'
|
|
3
|
-
require 'plist'
|
|
3
|
+
require 'puppet/util/plist' if Puppet.features.cfpropertylist?
|
|
4
4
|
require 'fileutils'
|
|
5
5
|
|
|
6
6
|
class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameService
|
|
@@ -18,8 +18,8 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
|
|
|
18
18
|
commands :dscl => "/usr/bin/dscl"
|
|
19
19
|
commands :dseditgroup => "/usr/sbin/dseditgroup"
|
|
20
20
|
commands :sw_vers => "/usr/bin/sw_vers"
|
|
21
|
-
commands :plutil => '/usr/bin/plutil'
|
|
22
21
|
confine :operatingsystem => :darwin
|
|
22
|
+
confine :feature => :cfpropertylist
|
|
23
23
|
defaultfor :operatingsystem => :darwin
|
|
24
24
|
|
|
25
25
|
|
|
@@ -97,7 +97,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
|
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
def self.parse_dscl_plist_data(dscl_output)
|
|
100
|
-
Plist.
|
|
100
|
+
Puppet::Util::Plist.parse_plist(dscl_output)
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
def self.generate_attribute_hash(input_hash, *type_properties)
|
|
@@ -160,7 +160,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
|
|
|
160
160
|
def self.get_exec_preamble(ds_action, resource_name = nil)
|
|
161
161
|
# JJM 2007-07-24
|
|
162
162
|
# DSCL commands are often repetitive and contain the same positional
|
|
163
|
-
# arguments over and over. See
|
|
163
|
+
# arguments over and over. See https://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/additionalfeatures/chapter_10_section_9.html
|
|
164
164
|
# for an example of what I mean.
|
|
165
165
|
# This method spits out proper DSCL commands for us.
|
|
166
166
|
# We EXPECT name to be @resource[:name] when called from an instance object.
|
|
@@ -192,92 +192,77 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
|
|
|
192
192
|
Please check your password and try again.")
|
|
193
193
|
end
|
|
194
194
|
|
|
195
|
-
|
|
195
|
+
plist_file = "#{users_plist_dir}/#{resource_name}.plist"
|
|
196
|
+
if Puppet::FileSystem.exist?(plist_file)
|
|
196
197
|
# If a plist already exists in /var/db/dslocal/nodes/Default/users, then
|
|
197
198
|
# we will need to extract the binary plist from the 'ShadowHashData'
|
|
198
199
|
# key, log the new password into the resultant plist's 'SALTED-SHA512'
|
|
199
200
|
# key, and then save the entire structure back.
|
|
200
|
-
users_plist = Plist
|
|
201
|
-
"#{users_plist_dir}/#{resource_name}.plist"))
|
|
201
|
+
users_plist = Puppet::Util::Plist.read_plist_file(plist_file)
|
|
202
202
|
|
|
203
|
-
# users_plist['ShadowHashData'][0]
|
|
203
|
+
# users_plist['ShadowHashData'][0] is actually a binary plist
|
|
204
204
|
# that's nested INSIDE the user's plist (which itself is a binary
|
|
205
205
|
# plist). If we encounter a user plist that DOESN'T have a
|
|
206
206
|
# ShadowHashData field, create one.
|
|
207
207
|
if users_plist['ShadowHashData']
|
|
208
|
-
password_hash_plist = users_plist['ShadowHashData'][0]
|
|
209
|
-
converted_hash_plist =
|
|
208
|
+
password_hash_plist = users_plist['ShadowHashData'][0]
|
|
209
|
+
converted_hash_plist = convert_binary_to_hash(password_hash_plist)
|
|
210
210
|
else
|
|
211
|
-
users_plist['ShadowHashData'] =
|
|
212
|
-
converted_hash_plist = {'SALTED-SHA512' =>
|
|
211
|
+
users_plist['ShadowHashData'] = ''
|
|
212
|
+
converted_hash_plist = {'SALTED-SHA512' => ''}
|
|
213
213
|
end
|
|
214
214
|
|
|
215
|
-
# converted_hash_plist['SALTED-SHA512']
|
|
215
|
+
# converted_hash_plist['SALTED-SHA512'] expects a Base64 encoded
|
|
216
216
|
# string. The password_hash provided as a resource attribute is a
|
|
217
217
|
# hex value. We need to convert the provided hex value to a Base64
|
|
218
218
|
# encoded string to nest it in the converted hash plist.
|
|
219
|
-
converted_hash_plist['SALTED-SHA512']
|
|
219
|
+
converted_hash_plist['SALTED-SHA512'] = \
|
|
220
220
|
password_hash.unpack('a2'*(password_hash.size/2)).collect { |i| i.hex.chr }.join
|
|
221
221
|
|
|
222
222
|
# Finally, we can convert the nested plist back to binary, embed it
|
|
223
223
|
# into the user's plist, and convert the resultant plist back to
|
|
224
224
|
# a binary plist.
|
|
225
|
-
changed_plist =
|
|
226
|
-
users_plist['ShadowHashData'][0]
|
|
227
|
-
Plist
|
|
228
|
-
plutil('-convert', 'binary1', "#{users_plist_dir}/#{resource_name}.plist")
|
|
225
|
+
changed_plist = convert_hash_to_binary(converted_hash_plist)
|
|
226
|
+
users_plist['ShadowHashData'][0] = changed_plist
|
|
227
|
+
Puppet::Util::Plist.write_plist_file(users_plist, plist_file, :binary)
|
|
229
228
|
end
|
|
230
229
|
end
|
|
231
230
|
|
|
232
231
|
def self.get_password(guid, username)
|
|
233
|
-
|
|
232
|
+
plist_file = "#{users_plist_dir}/#{username}.plist"
|
|
233
|
+
if Puppet::FileSystem.exist?(plist_file)
|
|
234
234
|
# If a plist exists in /var/db/dslocal/nodes/Default/users, we will
|
|
235
235
|
# extract the binary plist from the 'ShadowHashData' key, decode the
|
|
236
236
|
# salted-SHA512 password hash, and then return it.
|
|
237
|
-
users_plist = Plist
|
|
237
|
+
users_plist = Puppet::Util::Plist.read_plist_file(plist_file)
|
|
238
|
+
|
|
238
239
|
if users_plist['ShadowHashData']
|
|
239
|
-
# users_plist['ShadowHashData'][0]
|
|
240
|
+
# users_plist['ShadowHashData'][0] is actually a binary plist
|
|
240
241
|
# that's nested INSIDE the user's plist (which itself is a binary
|
|
241
242
|
# plist).
|
|
242
|
-
password_hash_plist = users_plist['ShadowHashData'][0]
|
|
243
|
-
converted_hash_plist =
|
|
243
|
+
password_hash_plist = users_plist['ShadowHashData'][0]
|
|
244
|
+
converted_hash_plist = convert_binary_to_hash(password_hash_plist)
|
|
244
245
|
|
|
245
|
-
# converted_hash_plist['SALTED-SHA512']
|
|
246
|
+
# converted_hash_plist['SALTED-SHA512'] is a Base64 encoded
|
|
246
247
|
# string. The password_hash provided as a resource attribute is a
|
|
247
248
|
# hex value. We need to convert the Base64 encoded string to a
|
|
248
249
|
# hex value and provide it back to Puppet.
|
|
249
|
-
password_hash = converted_hash_plist['SALTED-SHA512'].
|
|
250
|
+
password_hash = converted_hash_plist['SALTED-SHA512'].unpack("H*")[0]
|
|
250
251
|
password_hash
|
|
251
252
|
end
|
|
252
253
|
end
|
|
253
254
|
end
|
|
254
255
|
|
|
255
|
-
# This method will accept a hash
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
Puppet.
|
|
259
|
-
Puppet.debug('Executing: \'plutil -convert binary1 -o - -\'')
|
|
260
|
-
IO.popen('plutil -convert binary1 -o - -', 'r+') do |io|
|
|
261
|
-
io.write plist_data.to_plist
|
|
262
|
-
io.close_write
|
|
263
|
-
@converted_plist = io.read
|
|
264
|
-
end
|
|
265
|
-
@converted_plist
|
|
256
|
+
# This method will accept a hash and convert it to a binary plist (string value).
|
|
257
|
+
def self.convert_hash_to_binary(plist_data)
|
|
258
|
+
Puppet.debug('Converting plist hash to binary')
|
|
259
|
+
Puppet::Util::Plist.dump_plist(plist_data, :binary)
|
|
266
260
|
end
|
|
267
261
|
|
|
268
|
-
# This method will accept a binary plist (as a string) and convert it to a
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
Puppet.
|
|
272
|
-
Puppet.debug('Executing: \'plutil -convert xml1 -o - -\'')
|
|
273
|
-
IO.popen('plutil -convert xml1 -o - -', 'r+') do |io|
|
|
274
|
-
io.write plist_data
|
|
275
|
-
io.close_write
|
|
276
|
-
@converted_plist = io.read
|
|
277
|
-
end
|
|
278
|
-
Puppet.debug('Converting XML values to a hash.')
|
|
279
|
-
@plist_hash = Plist::parse_xml(@converted_plist)
|
|
280
|
-
@plist_hash
|
|
262
|
+
# This method will accept a binary plist (as a string) and convert it to a hash.
|
|
263
|
+
def self.convert_binary_to_hash(plist_data)
|
|
264
|
+
Puppet.debug('Converting binary plist to hash')
|
|
265
|
+
Puppet::Util::Plist.parse_plist(plist_data)
|
|
281
266
|
end
|
|
282
267
|
|
|
283
268
|
# Unlike most other *nixes, OS X doesn't provide built in functionality
|
|
@@ -333,7 +318,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
|
|
|
333
318
|
exec_arg_vector << ns_to_ds_attribute_map[:guid]
|
|
334
319
|
begin
|
|
335
320
|
guid_output = execute(exec_arg_vector)
|
|
336
|
-
guid_plist = Plist.
|
|
321
|
+
guid_plist = Puppet::Util::Plist.parse_plist(guid_output)
|
|
337
322
|
# Although GeneratedUID like all DirectoryService values can be multi-valued
|
|
338
323
|
# according to the schema, in practice user accounts cannot have multiple UUIDs
|
|
339
324
|
# otherwise Bad Things Happen, so we just deal with the first value.
|
|
@@ -13,10 +13,12 @@
|
|
|
13
13
|
# in /var/db/.puppet_appdmg_installed_<name>
|
|
14
14
|
|
|
15
15
|
require 'puppet/provider/package'
|
|
16
|
+
require 'puppet/util/plist' if Puppet.features.cfpropertylist?
|
|
16
17
|
Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Package) do
|
|
17
18
|
desc "Package management which copies application bundles to a target."
|
|
18
19
|
|
|
19
20
|
confine :operatingsystem => :darwin
|
|
21
|
+
confine :feature => :cfpropertylist
|
|
20
22
|
|
|
21
23
|
commands :hdiutil => "/usr/bin/hdiutil"
|
|
22
24
|
commands :curl => "/usr/bin/curl"
|
|
@@ -50,7 +52,6 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
|
|
|
50
52
|
|
|
51
53
|
def self.installpkgdmg(source, name)
|
|
52
54
|
require 'open-uri'
|
|
53
|
-
require 'plist'
|
|
54
55
|
cached_source = source
|
|
55
56
|
tmpdir = Dir.mktmpdir
|
|
56
57
|
begin
|
|
@@ -67,7 +68,7 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
|
|
|
67
68
|
|
|
68
69
|
open(cached_source) do |dmg|
|
|
69
70
|
xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
|
|
70
|
-
ptable = Plist::
|
|
71
|
+
ptable = Puppet::Util::Plist::parse_plist(xml_str)
|
|
71
72
|
# JJM Filter out all mount-paths into a single array, discard the rest.
|
|
72
73
|
mounts = ptable['system-entities'].collect { |entity|
|
|
73
74
|
entity['mount-point']
|
|
@@ -28,7 +28,7 @@ Puppet::Type.type(:package).provide :dnf, :parent => :yum do
|
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
defaultfor :operatingsystem => :fedora, :operatingsystemmajrelease => '22'
|
|
31
|
+
defaultfor :operatingsystem => :fedora, :operatingsystemmajrelease => ['22', '23']
|
|
32
32
|
|
|
33
33
|
# The value to pass to DNF as its error output level.
|
|
34
34
|
# DNF differs from Yum slightly with regards to error outputting.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
require 'puppet/provider/package'
|
|
5
5
|
require 'xmlrpc/client'
|
|
6
|
+
require 'puppet/util/http_proxy'
|
|
6
7
|
|
|
7
8
|
Puppet::Type.type(:package).provide :pip,
|
|
8
9
|
:parent => ::Puppet::Provider::Package do
|
|
@@ -29,7 +30,8 @@ Puppet::Type.type(:package).provide :pip,
|
|
|
29
30
|
# that's managed by `pip` or an empty array if `pip` is not available.
|
|
30
31
|
def self.instances
|
|
31
32
|
packages = []
|
|
32
|
-
pip_cmd = which(
|
|
33
|
+
pip_cmd = cmd.map { |c| which(c) }.find { |c| c != nil }
|
|
34
|
+
return [] unless pip_cmd
|
|
33
35
|
execpipe "#{pip_cmd} freeze" do |process|
|
|
34
36
|
process.collect do |line|
|
|
35
37
|
next unless options = parse(line)
|
|
@@ -40,11 +42,7 @@ Puppet::Type.type(:package).provide :pip,
|
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
def self.cmd
|
|
43
|
-
|
|
44
|
-
"pip-python"
|
|
45
|
-
else
|
|
46
|
-
"pip"
|
|
47
|
-
end
|
|
45
|
+
["pip", "pip-python"]
|
|
48
46
|
end
|
|
49
47
|
|
|
50
48
|
# Return structured information about a particular package or `nil` if
|
|
@@ -60,7 +58,16 @@ Puppet::Type.type(:package).provide :pip,
|
|
|
60
58
|
# cache of PyPI's package list so this operation will always have to
|
|
61
59
|
# ask the web service.
|
|
62
60
|
def latest
|
|
63
|
-
|
|
61
|
+
http_proxy_host = Puppet::Util::HttpProxy.http_proxy_host
|
|
62
|
+
http_proxy_port = Puppet::Util::HttpProxy.http_proxy_port
|
|
63
|
+
if http_proxy_host && http_proxy_port
|
|
64
|
+
proxy = "#{http_proxy_host}:#{http_proxy_port}"
|
|
65
|
+
else
|
|
66
|
+
# nil is acceptable
|
|
67
|
+
proxy = http_proxy_host
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
client = XMLRPC::Client.new2("http://pypi.python.org/pypi", proxy)
|
|
64
71
|
client.http_header_extra = {"Content-Type" => "text/xml"}
|
|
65
72
|
client.timeout = 10
|
|
66
73
|
result = client.call("package_releases", @resource[:name])
|
|
@@ -113,11 +120,11 @@ Puppet::Type.type(:package).provide :pip,
|
|
|
113
120
|
def lazy_pip(*args)
|
|
114
121
|
pip *args
|
|
115
122
|
rescue NoMethodError => e
|
|
116
|
-
if pathname =
|
|
123
|
+
if pathname = self.class.cmd.map { |c| which(c) }.find { |c| c != nil }
|
|
117
124
|
self.class.commands :pip => pathname
|
|
118
125
|
pip *args
|
|
119
126
|
else
|
|
120
|
-
raise e, "Could not locate
|
|
127
|
+
raise e, "Could not locate command #{self.class.cmd.join(' and ')}.", e.backtrace
|
|
121
128
|
end
|
|
122
129
|
end
|
|
123
130
|
|
|
@@ -2,7 +2,7 @@ require 'puppet/provider/package'
|
|
|
2
2
|
|
|
3
3
|
Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package do
|
|
4
4
|
desc "OpenSolaris image packaging system. See pkg(5) for more information"
|
|
5
|
-
#
|
|
5
|
+
# https://docs.oracle.com/cd/E19963-01/html/820-6572/managepkgs.html
|
|
6
6
|
# A few notes before we start :
|
|
7
7
|
# Opensolaris pkg has two slightly different formats (as of now.)
|
|
8
8
|
# The first one is what is distributed with the Solaris 11 Express 11/10 dvd
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
# in /var/db/.puppet_pkgdmg_installed_<name>
|
|
10
10
|
|
|
11
11
|
require 'puppet/provider/package'
|
|
12
|
-
require 'plist'
|
|
12
|
+
require 'puppet/util/plist' if Puppet.features.cfpropertylist?
|
|
13
13
|
require 'puppet/util/http_proxy'
|
|
14
14
|
|
|
15
15
|
Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Package do
|
|
@@ -36,6 +36,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
|
|
|
36
36
|
package, you must create a new DMG with a different filename."
|
|
37
37
|
|
|
38
38
|
confine :operatingsystem => :darwin
|
|
39
|
+
confine :feature => :cfpropertylist
|
|
39
40
|
defaultfor :operatingsystem => :darwin
|
|
40
41
|
commands :installer => "/usr/sbin/installer"
|
|
41
42
|
commands :hdiutil => "/usr/bin/hdiutil"
|
|
@@ -102,7 +103,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
|
|
|
102
103
|
# If you fix this to use open-uri again, you must update the docs above. -NF
|
|
103
104
|
File.open(cached_source) do |dmg|
|
|
104
105
|
xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", dmg.path
|
|
105
|
-
hdiutil_info = Plist
|
|
106
|
+
hdiutil_info = Puppet::Util::Plist.parse_plist(xml_str)
|
|
106
107
|
raise Puppet::Error.new("No disk entities returned by mount at #{dmg.path}") unless hdiutil_info.has_key?("system-entities")
|
|
107
108
|
mounts = hdiutil_info["system-entities"].collect { |entity|
|
|
108
109
|
entity["mount-point"]
|
|
@@ -20,8 +20,8 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
|
20
20
|
pkg(['version', '-voRL='])
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
def self.get_latest_version(origin)
|
|
24
|
-
if latest_version =
|
|
23
|
+
def self.get_latest_version(origin, version_list)
|
|
24
|
+
if latest_version = version_list.lines.find { |l| l =~ /^#{origin} / }
|
|
25
25
|
latest_version = latest_version.split(' ').last.split(')').first
|
|
26
26
|
return latest_version
|
|
27
27
|
end
|
|
@@ -32,6 +32,7 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
|
32
32
|
packages = []
|
|
33
33
|
begin
|
|
34
34
|
info = self.get_query
|
|
35
|
+
version_list = self.get_version_list
|
|
35
36
|
|
|
36
37
|
unless info
|
|
37
38
|
return packages
|
|
@@ -40,7 +41,7 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
|
40
41
|
info.lines.each do |line|
|
|
41
42
|
|
|
42
43
|
name, version, origin = line.chomp.split(" ", 3)
|
|
43
|
-
latest_version = get_latest_version(origin) || version
|
|
44
|
+
latest_version = get_latest_version(origin, version_list) || version
|
|
44
45
|
|
|
45
46
|
pkg = {
|
|
46
47
|
:ensure => version,
|
|
@@ -84,7 +85,15 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
|
84
85
|
when true, false, Symbol
|
|
85
86
|
installname = resource[:name]
|
|
86
87
|
else
|
|
87
|
-
|
|
88
|
+
# If resource[:name] is actually an origin (e.g. 'www/curl' instead of
|
|
89
|
+
# just 'curl'), drop the category prefix. pkgng doesn't support version
|
|
90
|
+
# pinning with the origin syntax (pkg install curl-1.2.3 is valid, but
|
|
91
|
+
# pkg install www/curl-1.2.3 is not).
|
|
92
|
+
if resource[:name] =~ /\//
|
|
93
|
+
installname = resource[:name].split('/')[1] + '-' + resource[:ensure]
|
|
94
|
+
else
|
|
95
|
+
installname = resource[:name] + '-' + resource[:ensure]
|
|
96
|
+
end
|
|
88
97
|
end
|
|
89
98
|
|
|
90
99
|
if not source # install using default repo logic
|
|
@@ -281,7 +281,6 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
|
281
281
|
self::NEVRA_FIELDS.zip(match.captures) { |f, v| hash[f] = v }
|
|
282
282
|
hash[:provider] = self.name
|
|
283
283
|
hash[:ensure] = "#{hash[:version]}-#{hash[:release]}"
|
|
284
|
-
hash[:ensure].prepend("#{hash[:epoch]}:") if hash[:epoch] != '0'
|
|
285
284
|
else
|
|
286
285
|
Puppet.debug("Failed to match rpm line #{line}")
|
|
287
286
|
end
|
|
@@ -75,7 +75,7 @@ Puppet::Type.type(:package).provide(:windows, :parent => Puppet::Provider::Packa
|
|
|
75
75
|
check_result(output.exitstatus)
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
-
#
|
|
78
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa368542(v=vs.85).aspx
|
|
79
79
|
self::ERROR_SUCCESS = 0
|
|
80
80
|
self::ERROR_SUCCESS_REBOOT_INITIATED = 1641
|
|
81
81
|
self::ERROR_SUCCESS_REBOOT_REQUIRED = 3010
|
|
@@ -80,7 +80,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
|
80
80
|
elsif output.exitstatus == 0
|
|
81
81
|
self.debug "#{command(:cmd)} check-update exited with 0; no package updates available."
|
|
82
82
|
else
|
|
83
|
-
self.
|
|
83
|
+
self.warning "Could not check for updates, '#{command(:cmd)} check-update' exited with #{output.exitstatus}"
|
|
84
84
|
end
|
|
85
85
|
updates
|
|
86
86
|
end
|
|
@@ -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,9 +12,10 @@ 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
|
+
commands :service => "/usr/sbin/service"
|
|
18
19
|
|
|
19
20
|
defaultfor :operatingsystem => :cumuluslinux
|
|
20
21
|
defaultfor :operatingsystem => :debian, :operatingsystemmajrelease => ['5','6','7']
|
|
@@ -31,7 +32,7 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
|
|
|
31
32
|
|
|
32
33
|
def enabled?
|
|
33
34
|
# TODO: Replace system call when Puppet::Util::Execution.execute gives us a way
|
|
34
|
-
# to determine exit status.
|
|
35
|
+
# to determine exit status. https://projects.puppetlabs.com/issues/2538
|
|
35
36
|
system("/usr/sbin/invoke-rc.d", "--quiet", "--query", @resource[:name], "start")
|
|
36
37
|
|
|
37
38
|
# 104 is the exit status when you query start an enabled service.
|
|
@@ -65,23 +66,9 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
|
|
|
65
66
|
end
|
|
66
67
|
|
|
67
68
|
def statuscmd
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
else
|
|
73
|
-
majversion = Facter.value(:operatingsystemmajrelease).split('.')[0].to_i
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if ((os == 'debian' && majversion >= 8) || (os == 'ubuntu' && majversion >= 15))
|
|
78
|
-
# SysVInit scripts will always return '0' for status when the service is masked,
|
|
79
|
-
# even if the service is actually stopped. Use the SysVInit-Systemd compatibility
|
|
80
|
-
# layer to determine the actual status. This is only necessary when the SysVInit
|
|
81
|
-
# version of a service is queried. I.e, 'ntp' instead of 'ntp.service'.
|
|
82
|
-
(@resource[:hasstatus] == :true) && ["systemctl", "is-active", @resource[:name]]
|
|
83
|
-
else
|
|
84
|
-
super
|
|
85
|
-
end
|
|
69
|
+
# /usr/sbin/service provides an abstraction layer which is able to query services
|
|
70
|
+
# independent of the init system used.
|
|
71
|
+
# See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=775795
|
|
72
|
+
(@resource[:hasstatus] == :true) && [command(:service), @resource[:name], "status"]
|
|
86
73
|
end
|
|
87
74
|
end
|
|
@@ -49,6 +49,13 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
|
49
49
|
excludes += %w{wait-for-state portmap-wait}
|
|
50
50
|
# these excludes were found with grep -r -L start /etc/init.d
|
|
51
51
|
excludes += %w{rcS module-init-tools}
|
|
52
|
+
# Prevent puppet failing on unsafe scripts from Yocto Linux
|
|
53
|
+
if Facter.value(:osfamily) == "cisco-wrlinux"
|
|
54
|
+
excludes += %w{banner.sh bootmisc.sh checkroot.sh devpts.sh dmesg.sh
|
|
55
|
+
hostname.sh mountall.sh mountnfs.sh populate-volatile.sh
|
|
56
|
+
rmnologin.sh save-rtc.sh sendsigs sysfs.sh umountfs
|
|
57
|
+
umountnfs.sh}
|
|
58
|
+
end
|
|
52
59
|
# Prevent puppet failing to get status of the new service introduced
|
|
53
60
|
# by the fix for this (bug https://bugs.launchpad.net/ubuntu/+source/lightdm/+bug/982889)
|
|
54
61
|
# due to puppet's inability to deal with upstart services with instances.
|
|
@@ -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,13 +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
|
-
Plist::parse_xml(plutil('-convert', 'xml1', '-o', '/dev/stdout', path))
|
|
198
|
-
rescue Puppet::ExecutionFailure => detail
|
|
199
|
-
Puppet.warning("Cannot read file #{path}; Puppet is skipping it. \n" +
|
|
200
|
-
"Details: #{detail}")
|
|
201
|
-
return nil
|
|
202
|
-
end
|
|
196
|
+
Puppet::Util::Plist.read_plist_file(path)
|
|
203
197
|
end
|
|
204
198
|
|
|
205
199
|
# Clean out the @property_hash variable containing the cached list of services
|
|
@@ -322,7 +316,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
|
322
316
|
else
|
|
323
317
|
overrides[resource[:name]] = false
|
|
324
318
|
end
|
|
325
|
-
Plist
|
|
319
|
+
Puppet::Util::Plist.write_plist_file(overrides, self.class.launchd_overrides)
|
|
326
320
|
end
|
|
327
321
|
|
|
328
322
|
def disable
|
|
@@ -332,6 +326,6 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
|
332
326
|
else
|
|
333
327
|
overrides[resource[:name]] = true
|
|
334
328
|
end
|
|
335
|
-
Plist
|
|
329
|
+
Puppet::Util::Plist.write_plist_file(overrides, self.class.launchd_overrides)
|
|
336
330
|
end
|
|
337
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"
|
|
22
|
+
defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["15.04","15.10","16.04"]
|
|
16
23
|
|
|
17
24
|
def self.instances
|
|
18
25
|
i = []
|