puppet 4.5.3-x64-mingw32 → 4.6.1-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/Gemfile +10 -1
- data/ext/debian/control +2 -4
- data/ext/project_data.yaml +4 -4
- data/install.rb +6 -2
- data/lib/puppet.rb +3 -1
- data/lib/puppet/agent/locker.rb +1 -1
- data/lib/puppet/application.rb +6 -4
- data/lib/puppet/application/agent.rb +2 -1
- data/lib/puppet/application/cert.rb +35 -2
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/generate.rb +5 -0
- data/lib/puppet/application/lookup.rb +3 -3
- data/lib/puppet/application_support.rb +1 -1
- data/lib/puppet/compilable_resource_type.rb +15 -0
- data/lib/puppet/configurer.rb +67 -10
- data/lib/puppet/configurer/plugin_handler.rb +2 -4
- data/lib/puppet/data_providers/hiera_config.rb +1 -1
- data/lib/puppet/defaults.rb +34 -7
- data/lib/puppet/environments.rb +4 -2
- data/lib/puppet/error.rb +1 -1
- data/lib/puppet/external/dot.rb +1 -1
- data/lib/puppet/face/ca.rb +4 -1
- data/lib/puppet/face/certificate.rb +7 -1
- data/lib/puppet/face/epp.rb +5 -5
- data/lib/puppet/face/generate.rb +64 -0
- data/lib/puppet/face/help.rb +19 -13
- data/lib/puppet/face/man.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +1 -1
- data/lib/puppet/file_system.rb +16 -0
- data/lib/puppet/file_system/file_impl.rb +5 -0
- data/lib/puppet/file_system/memory_impl.rb +4 -0
- data/lib/puppet/file_system/path_pattern.rb +1 -0
- data/lib/puppet/file_system/windows.rb +19 -0
- data/lib/puppet/functions.rb +3 -5
- data/lib/puppet/functions/assert_type.rb +1 -1
- data/lib/puppet/functions/defined.rb +7 -5
- data/lib/puppet/functions/dig.rb +2 -18
- data/lib/puppet/functions/hiera.rb +1 -1
- data/lib/puppet/functions/lest.rb +1 -37
- data/lib/puppet/functions/new.rb +2 -473
- data/lib/puppet/functions/reverse_each.rb +2 -59
- data/lib/puppet/functions/scanf.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -63
- data/lib/puppet/functions/then.rb +1 -61
- data/lib/puppet/functions/type.rb +1 -40
- data/lib/puppet/functions/unwrap.rb +40 -0
- data/lib/puppet/generate/models/type/property.rb +70 -0
- data/lib/puppet/generate/models/type/type.rb +57 -0
- data/lib/puppet/generate/templates/type/pcore.erb +41 -0
- data/lib/puppet/generate/type.rb +239 -0
- data/lib/puppet/graph/simple_graph.rb +2 -6
- data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/key/ca.rb +2 -2
- data/lib/puppet/indirector/request.rb +25 -4
- data/lib/puppet/indirector/rest.rb +73 -3
- data/lib/puppet/info_service/class_information_service.rb +1 -2
- data/lib/puppet/interface/documentation.rb +1 -1
- data/lib/puppet/loaders.rb +2 -0
- data/lib/puppet/metatype/manager.rb +6 -6
- data/lib/puppet/module.rb +8 -1
- data/lib/puppet/module_tool.rb +2 -2
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/errors/installer.rb +2 -2
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
- data/lib/puppet/network/http/rack/rest.rb +15 -1
- data/lib/puppet/network/rights.rb +1 -11
- data/lib/puppet/node/environment.rb +7 -3
- data/lib/puppet/node/facts.rb +1 -1
- data/lib/puppet/parameter.rb +23 -3
- data/lib/puppet/parameter/boolean.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parser.rb +0 -1
- data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
- data/lib/puppet/parser/ast/resource.rb +5 -0
- data/lib/puppet/parser/ast/resource_instance.rb +5 -1
- data/lib/puppet/parser/ast/resourceparam.rb +5 -0
- data/lib/puppet/parser/compiler.rb +14 -17
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
- data/lib/puppet/parser/environment_compiler.rb +10 -0
- data/lib/puppet/parser/functions/create_resources.rb +39 -24
- data/lib/puppet/parser/functions/defined.rb +2 -26
- data/lib/puppet/parser/functions/dig.rb +29 -0
- data/lib/puppet/parser/functions/lest.rb +49 -0
- data/lib/puppet/parser/functions/new.rb +530 -0
- data/lib/puppet/parser/functions/require.rb +1 -1
- data/lib/puppet/parser/functions/reverse_each.rb +83 -0
- data/lib/puppet/parser/functions/scanf.rb +4 -4
- data/lib/puppet/parser/functions/step.rb +84 -0
- data/lib/puppet/parser/functions/then.rb +73 -0
- data/lib/puppet/parser/functions/type.rb +53 -0
- data/lib/puppet/parser/resource.rb +16 -7
- data/lib/puppet/parser/scope.rb +36 -28
- data/lib/puppet/parser/type_loader.rb +1 -1
- data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
- data/lib/puppet/pops.rb +13 -0
- data/lib/puppet/pops/adapters.rb +49 -49
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
- data/lib/puppet/pops/evaluator/closure.rb +39 -13
- data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
- data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
- data/lib/puppet/pops/functions/function.rb +5 -0
- data/lib/puppet/pops/issues.rb +1 -1
- data/lib/puppet/pops/label_provider.rb +2 -2
- data/lib/puppet/pops/loader/base_loader.rb +12 -15
- data/lib/puppet/pops/loader/loader.rb +15 -50
- data/lib/puppet/pops/loader/loader_paths.rb +28 -2
- data/lib/puppet/pops/loader/module_loaders.rb +16 -1
- data/lib/puppet/pops/loader/null_loader.rb +17 -1
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
- data/lib/puppet/pops/loader/static_loader.rb +55 -0
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
- data/lib/puppet/pops/loader/typed_name.rb +50 -0
- data/lib/puppet/pops/loaders.rb +64 -19
- data/lib/puppet/pops/merge_strategy.rb +7 -7
- data/lib/puppet/pops/migration/migration_checker.rb +4 -0
- data/lib/puppet/pops/model/model_label_provider.rb +2 -0
- data/lib/puppet/pops/parser/egrammar.ra +8 -5
- data/lib/puppet/pops/parser/eparser.rb +1550 -1498
- data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
- data/lib/puppet/pops/parser/lexer2.rb +14 -1
- data/lib/puppet/pops/parser/locator.rb +30 -1
- data/lib/puppet/pops/parser/parser_support.rb +0 -3
- data/lib/puppet/pops/parser/slurp_support.rb +3 -3
- data/lib/puppet/pops/patterns.rb +9 -1
- data/lib/puppet/pops/pcore.rb +67 -11
- data/lib/puppet/pops/puppet_stack.rb +43 -0
- data/lib/puppet/pops/resource/param.rb +51 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
- data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
- data/lib/puppet/pops/serialization.rb +17 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
- data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
- data/lib/puppet/pops/serialization/deserializer.rb +60 -0
- data/lib/puppet/pops/serialization/extension.rb +126 -0
- data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
- data/lib/puppet/pops/serialization/json.rb +247 -0
- data/lib/puppet/pops/serialization/object.rb +63 -0
- data/lib/puppet/pops/serialization/rgen.rb +151 -0
- data/lib/puppet/pops/serialization/serializer.rb +91 -0
- data/lib/puppet/pops/serialization/time_factory.rb +66 -0
- data/lib/puppet/pops/types/annotatable.rb +36 -0
- data/lib/puppet/pops/types/implementation_registry.rb +3 -8
- data/lib/puppet/pops/types/p_meta_type.rb +83 -0
- data/lib/puppet/pops/types/p_object_type.rb +110 -117
- data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
- data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
- data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
- data/lib/puppet/pops/types/puppet_object.rb +0 -5
- data/lib/puppet/pops/types/ruby_generator.rb +9 -2
- data/lib/puppet/pops/types/type_calculator.rb +6 -1
- data/lib/puppet/pops/types/type_factory.rb +14 -12
- data/lib/puppet/pops/types/type_formatter.rb +78 -33
- data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
- data/lib/puppet/pops/types/type_parser.rb +27 -2
- data/lib/puppet/pops/types/type_set_reference.rb +59 -0
- data/lib/puppet/pops/types/types.rb +366 -13
- data/lib/puppet/pops/validation.rb +4 -4
- data/lib/puppet/pops/validation/checker4_0.rb +5 -2
- data/lib/puppet/pops/visitor.rb +2 -2
- data/lib/puppet/property.rb +64 -5
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/group/aix.rb +4 -4
- data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
- data/lib/puppet/provider/package/appdmg.rb +3 -3
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +5 -0
- data/lib/puppet/provider/package/nim.rb +1 -1
- data/lib/puppet/provider/package/pacman.rb +2 -2
- data/lib/puppet/provider/package/pip.rb +5 -3
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +5 -5
- data/lib/puppet/provider/package/pkgdmg.rb +4 -4
- data/lib/puppet/provider/package/pkgin.rb +1 -1
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +48 -8
- data/lib/puppet/provider/package/sun.rb +1 -1
- data/lib/puppet/provider/package/tdnf.rb +28 -0
- data/lib/puppet/provider/package/yum.rb +22 -4
- data/lib/puppet/provider/parsedfile.rb +2 -2
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +2 -2
- data/lib/puppet/provider/service/debian.rb +3 -3
- data/lib/puppet/provider/service/init.rb +5 -3
- data/lib/puppet/provider/service/launchd.rb +16 -2
- data/lib/puppet/provider/service/runit.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +8 -1
- data/lib/puppet/provider/service/systemd.rb +39 -6
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +3 -2
- data/lib/puppet/provider/user/directoryservice.rb +4 -3
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +3 -0
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/reference/type.rb +1 -1
- data/lib/puppet/resource.rb +33 -7
- data/lib/puppet/resource/capability_finder.rb +74 -54
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/settings.rb +17 -6
- data/lib/puppet/settings/environment_conf.rb +1 -1
- data/lib/puppet/settings/server_list_setting.rb +20 -0
- data/lib/puppet/ssl/certificate_authority.rb +32 -9
- data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +10 -0
- data/lib/puppet/ssl/validator/default_validator.rb +2 -2
- data/lib/puppet/test/test_helper.rb +2 -2
- data/lib/puppet/transaction.rb +12 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
- data/lib/puppet/transaction/event.rb +29 -2
- data/lib/puppet/transaction/event_manager.rb +1 -1
- data/lib/puppet/transaction/persistence.rb +84 -0
- data/lib/puppet/transaction/report.rb +49 -2
- data/lib/puppet/transaction/resource_harness.rb +98 -18
- data/lib/puppet/type.rb +63 -21
- data/lib/puppet/type/augeas.rb +3 -3
- data/lib/puppet/type/cron.rb +1 -1
- data/lib/puppet/type/file.rb +39 -2
- data/lib/puppet/type/file/data_sync.rb +13 -5
- data/lib/puppet/type/host.rb +1 -1
- data/lib/puppet/type/mount.rb +2 -6
- data/lib/puppet/type/notify.rb +1 -1
- data/lib/puppet/type/package.rb +1 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/scheduled_task.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -2
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/yumrepo.rb +3 -3
- data/lib/puppet/type/zone.rb +1 -1
- data/lib/puppet/util.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/command_line.rb +6 -2
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/http_proxy.rb +1 -1
- data/lib/puppet/util/inifile.rb +1 -1
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/logging.rb +1 -1
- data/lib/puppet/util/multi_match.rb +1 -1
- data/lib/puppet/util/plist.rb +15 -5
- data/lib/puppet/util/profiler.rb +1 -1
- data/lib/puppet/util/profiler/around_profiler.rb +1 -1
- data/lib/puppet/util/psych_support.rb +1 -1
- data/lib/puppet/util/rdoc.rb +2 -2
- data/lib/puppet/util/rubygems.rb +1 -1
- data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/adsi.rb +30 -8
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/file.rb +59 -0
- data/lib/puppet/util/windows/process.rb +10 -0
- data/lib/puppet/util/windows/security.rb +1 -1
- data/lib/puppet/util/windows/user.rb +22 -4
- data/lib/puppet/util/yaml.rb +15 -3
- data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
- data/lib/puppet/vendor/rgen_patch.rb +1 -1
- data/lib/puppet/version.rb +2 -2
- data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
- data/spec/integration/agent/logging_spec.rb +15 -14
- data/spec/integration/application/apply_spec.rb +1 -0
- data/spec/integration/directory_environments_spec.rb +16 -0
- data/spec/integration/environments/settings_spec.rb +32 -4
- data/spec/integration/faces/documentation_spec.rb +1 -1
- data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
- data/spec/integration/node/environment_spec.rb +21 -0
- data/spec/integration/parser/collection_spec.rb +10 -0
- data/spec/integration/parser/compiler_spec.rb +76 -840
- data/spec/integration/parser/functions/require_spec.rb +3 -3
- data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
- data/spec/integration/parser/pcore_resource_spec.rb +208 -0
- data/spec/integration/parser/resource_expressions_spec.rb +4 -2
- data/spec/integration/provider/yumrepo_spec.rb +4 -1
- data/spec/integration/transaction/report_spec.rb +666 -0
- data/spec/integration/type/file_spec.rb +11 -12
- data/spec/integration/util/windows/adsi_spec.rb +99 -0
- data/spec/integration/util/windows/principal_spec.rb +109 -60
- data/spec/integration/util/windows/process_spec.rb +4 -2
- data/spec/integration/util/windows/security_spec.rb +34 -8
- data/spec/integration/util/windows/user_spec.rb +26 -4
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/network.rb +12 -8
- data/spec/shared_examples/rhel_package_provider.rb +341 -0
- data/spec/spec_helper.rb +8 -2
- data/spec/unit/application/cert_spec.rb +20 -0
- data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
- data/spec/unit/configurer_spec.rb +46 -0
- data/spec/unit/defaults_spec.rb +14 -0
- data/spec/unit/face/generate_spec.rb +230 -0
- data/spec/unit/face/help_spec.rb +53 -0
- data/spec/unit/face/parser_spec.rb +6 -0
- data/spec/unit/face/plugin_spec.rb +0 -4
- data/spec/unit/file_system_spec.rb +85 -0
- data/spec/unit/functions/lookup_spec.rb +4 -4
- data/spec/unit/functions/match_spec.rb +2 -2
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/split_spec.rb +1 -1
- data/spec/unit/functions/unwrap_spec.rb +29 -0
- data/spec/unit/functions/versioncmp_spec.rb +1 -1
- data/spec/unit/functions4_spec.rb +8 -8
- data/spec/unit/indirector/facts/facter_spec.rb +1 -9
- data/spec/unit/indirector/rest_spec.rb +95 -9
- data/spec/unit/module_spec.rb +43 -7
- data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
- data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
- data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
- data/spec/unit/network/rights_spec.rb +1 -1
- data/spec/unit/parameter_spec.rb +11 -0
- data/spec/unit/parser/compiler_spec.rb +19 -33
- data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
- data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
- data/spec/unit/parser/functions/require_spec.rb +2 -2
- data/spec/unit/parser/resource_spec.rb +21 -11
- data/spec/unit/parser/scope_spec.rb +1 -5
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
- data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
- data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
- data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
- data/spec/unit/pops/puppet_stack_spec.rb +79 -0
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
- data/spec/unit/pops/serialization/packer_spec.rb +153 -0
- data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
- data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
- data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
- data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
- data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
- data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
- data/spec/unit/pops/types/type_parser_spec.rb +1 -1
- data/spec/unit/pops/types/types_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +18 -1
- data/spec/unit/property_spec.rb +48 -11
- data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
- data/spec/unit/provider/package/dnf_spec.rb +1 -99
- data/spec/unit/provider/package/pacman_spec.rb +4 -4
- data/spec/unit/provider/package/pip_spec.rb +14 -0
- data/spec/unit/provider/package/pkg_spec.rb +6 -0
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
- data/spec/unit/provider/package/portage_spec.rb +64 -8
- data/spec/unit/provider/package/tdnf_spec.rb +18 -0
- data/spec/unit/provider/package/windows/package_spec.rb +4 -1
- data/spec/unit/provider/package/windows_spec.rb +8 -2
- data/spec/unit/provider/package/yum_spec.rb +6 -377
- data/spec/unit/provider/service/base_spec.rb +6 -0
- data/spec/unit/provider/service/debian_spec.rb +16 -7
- data/spec/unit/provider/service/gentoo_spec.rb +6 -0
- data/spec/unit/provider/service/init_spec.rb +7 -0
- data/spec/unit/provider/service/launchd_spec.rb +35 -4
- data/spec/unit/provider/service/openrc_spec.rb +6 -0
- data/spec/unit/provider/service/smf_spec.rb +31 -6
- data/spec/unit/provider/service/src_spec.rb +6 -0
- data/spec/unit/provider/service/systemd_spec.rb +70 -20
- data/spec/unit/provider/service/upstart_spec.rb +6 -0
- data/spec/unit/provider/user/aix_spec.rb +7 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
- data/spec/unit/resource/capability_finder_spec.rb +51 -3
- data/spec/unit/resource/catalog_spec.rb +5 -0
- data/spec/unit/resource/type_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +19 -0
- data/spec/unit/settings_spec.rb +13 -0
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
- data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
- data/spec/unit/ssl/host_spec.rb +1 -1
- data/spec/unit/ssl/oids_spec.rb +24 -21
- data/spec/unit/transaction/event_spec.rb +3 -1
- data/spec/unit/transaction/persistence_spec.rb +173 -0
- data/spec/unit/transaction/report_spec.rb +64 -1
- data/spec/unit/transaction/resource_harness_spec.rb +91 -0
- data/spec/unit/type/file/content_spec.rb +47 -15
- data/spec/unit/type/file_spec.rb +28 -0
- data/spec/unit/type/mount_spec.rb +5 -12
- data/spec/unit/type/yumrepo_spec.rb +1 -5
- data/spec/unit/type_spec.rb +32 -0
- data/spec/unit/util/command_line_spec.rb +11 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/plist_spec.rb +16 -3
- data/spec/unit/util/storage_spec.rb +4 -1
- data/spec/unit/util/windows/adsi_spec.rb +23 -2
- data/spec/unit/util/windows/file_spec.rb +56 -1
- data/spec/unit/util/windows/sid_spec.rb +31 -7
- data/spec/unit/util/yaml_spec.rb +12 -0
- data/spec/unit/util_spec.rb +87 -20
- metadata +91 -48
- data/ext/puppetlisten/puppetlisten.rb +0 -77
- data/ext/puppetlisten/puppetrun.rb +0 -38
- data/lib/puppet/resource/type_collection_helper.rb +0 -7
- data/spec/unit/parser/functions/defined_spec.rb +0 -120
- data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
@@ -17,6 +17,12 @@ describe "base service provider" do
|
|
17
17
|
|
18
18
|
subject { provider }
|
19
19
|
|
20
|
+
if Puppet.features.microsoft_windows?
|
21
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
22
|
+
command = "cmd.exe /c \"exit 0\""
|
23
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
24
|
+
end
|
25
|
+
|
20
26
|
context "basic operations" do
|
21
27
|
subject do
|
22
28
|
type.new(
|
@@ -9,6 +9,12 @@ provider_class = Puppet::Type.type(:service).provider(:debian)
|
|
9
9
|
|
10
10
|
describe provider_class do
|
11
11
|
|
12
|
+
if Puppet.features.microsoft_windows?
|
13
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
14
|
+
command = "cmd.exe /c \"exit 0\""
|
15
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
16
|
+
end
|
17
|
+
|
12
18
|
before(:each) do
|
13
19
|
# Create a mock resource
|
14
20
|
@resource = stub 'resource'
|
@@ -33,17 +39,20 @@ describe provider_class do
|
|
33
39
|
@provider.stubs(:invoke_rc)
|
34
40
|
end
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
Facter.expects(:value).with(:
|
40
|
-
if os == 'Debian'
|
41
|
-
Facter.expects(:value).with(:operatingsystemmajrelease).returns('7')
|
42
|
-
end
|
42
|
+
['1','2'].each do |version|
|
43
|
+
it "should be the default provider on CumulusLinux #{version}" do
|
44
|
+
Facter.expects(:value).with(:operatingsystem).at_least_once.returns('CumulusLinux')
|
45
|
+
Facter.expects(:value).with(:operatingsystemmajrelease).returns(version)
|
43
46
|
expect(provider_class.default?).to be_truthy
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
50
|
+
it "should be the default provider on Debian" do
|
51
|
+
Facter.expects(:value).with(:operatingsystem).at_least_once.returns('Debian')
|
52
|
+
Facter.expects(:value).with(:operatingsystemmajrelease).returns('7')
|
53
|
+
expect(provider_class.default?).to be_truthy
|
54
|
+
end
|
55
|
+
|
47
56
|
it "should have an enabled? method" do
|
48
57
|
expect(@provider).to respond_to(:enabled?)
|
49
58
|
end
|
@@ -4,6 +4,12 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe Puppet::Type.type(:service).provider(:gentoo) do
|
6
6
|
|
7
|
+
if Puppet.features.microsoft_windows?
|
8
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
9
|
+
command = "cmd.exe /c \"exit 0\""
|
10
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
11
|
+
end
|
12
|
+
|
7
13
|
before :each do
|
8
14
|
Puppet::Type.type(:service).stubs(:defaultprovider).returns described_class
|
9
15
|
FileTest.stubs(:file?).with('/sbin/rc-update').returns true
|
@@ -6,6 +6,13 @@
|
|
6
6
|
require 'spec_helper'
|
7
7
|
|
8
8
|
describe Puppet::Type.type(:service).provider(:init) do
|
9
|
+
|
10
|
+
if Puppet.features.microsoft_windows?
|
11
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
12
|
+
command = "cmd.exe /c \"exit 0\""
|
13
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
14
|
+
end
|
15
|
+
|
9
16
|
before do
|
10
17
|
Puppet::Type.type(:service).defaultprovider = described_class
|
11
18
|
end
|
@@ -7,11 +7,17 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
7
7
|
let (:plistlib) { Puppet::Util::Plist }
|
8
8
|
let (:joblabel) { "com.foo.food" }
|
9
9
|
let (:provider) { subject.class }
|
10
|
-
let(:resource) { Puppet::Type.type(:service).new(:name => joblabel, :provider => :launchd) }
|
10
|
+
let (:resource) { Puppet::Type.type(:service).new(:name => joblabel, :provider => :launchd) }
|
11
11
|
let (:launchd_overrides_6_9) { '/var/db/launchd.db/com.apple.launchd/overrides.plist' }
|
12
12
|
let (:launchd_overrides_10_) { '/var/db/com.apple.xpc.launchd/disabled.plist' }
|
13
13
|
subject { resource.provider }
|
14
14
|
|
15
|
+
if Puppet.features.microsoft_windows?
|
16
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
17
|
+
command = "cmd.exe /c \"exit 0\""
|
18
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
19
|
+
end
|
20
|
+
|
15
21
|
describe "the type interface" do
|
16
22
|
%w{ start stop enabled? enable disable status}.each do |method|
|
17
23
|
it { is_expected.to respond_to method.to_sym }
|
@@ -20,9 +26,9 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
20
26
|
|
21
27
|
describe 'the status of the services' do
|
22
28
|
it "should call the external command 'launchctl list' once" do
|
23
|
-
|
24
|
-
|
25
|
-
|
29
|
+
provider.expects(:launchctl).with(:list).returns(joblabel)
|
30
|
+
provider.expects(:jobsearch).with(nil).returns({joblabel => "/Library/LaunchDaemons/#{joblabel}"})
|
31
|
+
provider.prefetch({})
|
26
32
|
end
|
27
33
|
it "should return stopped if not listed in launchctl list output" do
|
28
34
|
provider.expects(:launchctl).with(:list).returns('com.bar.is_running')
|
@@ -37,6 +43,31 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
37
43
|
after :each do
|
38
44
|
provider.instance_variable_set(:@job_list, nil)
|
39
45
|
end
|
46
|
+
|
47
|
+
describe "when hasstatus is set to false" do
|
48
|
+
before :each do
|
49
|
+
resource[:hasstatus] = :false
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should use the user-provided status command if present and return running if true" do
|
53
|
+
resource[:status] = '/bin/true'
|
54
|
+
subject.expects(:texecute).with(:status, ["/bin/true"], false).returns(0)
|
55
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(0)
|
56
|
+
expect(subject.status).to eq(:running)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should use the user-provided status command if present and return stopped if false" do
|
60
|
+
resource[:status] = '/bin/false'
|
61
|
+
subject.expects(:texecute).with(:status, ["/bin/false"], false).returns(nil)
|
62
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(1)
|
63
|
+
expect(subject.status).to eq(:stopped)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should fall back to getpid if no status command is provided" do
|
67
|
+
subject.expects(:getpid).returns(123)
|
68
|
+
expect(subject.status).to eq(:running)
|
69
|
+
end
|
70
|
+
end
|
40
71
|
end
|
41
72
|
|
42
73
|
[[10, '10.6'], [13, '10.9']].each do |kernel, version|
|
@@ -4,6 +4,12 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe Puppet::Type.type(:service).provider(:openrc) do
|
6
6
|
|
7
|
+
if Puppet.features.microsoft_windows?
|
8
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
9
|
+
command = "cmd.exe /c \"exit 0\""
|
10
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
11
|
+
end
|
12
|
+
|
7
13
|
before :each do
|
8
14
|
Puppet::Type.type(:service).stubs(:defaultprovider).returns described_class
|
9
15
|
['/sbin/rc-service', '/bin/rc-status', '/sbin/rc-update'].each do |command|
|
@@ -20,6 +20,9 @@ describe provider_class, :if => Puppet.features.posix? do
|
|
20
20
|
FileTest.stubs(:executable?).with('/usr/sbin/svcadm').returns true
|
21
21
|
FileTest.stubs(:file?).with('/usr/bin/svcs').returns true
|
22
22
|
FileTest.stubs(:executable?).with('/usr/bin/svcs').returns true
|
23
|
+
Facter.stubs(:value).with(:operatingsystem).returns('Solaris')
|
24
|
+
Facter.stubs(:value).with(:osfamily).returns('Solaris')
|
25
|
+
Facter.stubs(:value).with(:operatingsystemrelease).returns '11.2'
|
23
26
|
end
|
24
27
|
|
25
28
|
describe ".instances" do
|
@@ -174,17 +177,39 @@ describe provider_class, :if => Puppet.features.posix? do
|
|
174
177
|
end
|
175
178
|
|
176
179
|
describe "when restarting" do
|
177
|
-
it "should call 'svcadm restart /system/myservice'" do
|
178
|
-
@provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "/system/myservice"], true)
|
179
|
-
@provider.expects(:wait).with('online')
|
180
|
-
@provider.restart
|
181
|
-
end
|
182
180
|
|
183
181
|
it "should error if timeout occurs while restarting the service" do
|
184
|
-
@provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "/system/myservice"], true)
|
182
|
+
@provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "-s", "/system/myservice"], true)
|
185
183
|
Timeout.expects(:timeout).with(60).raises(Timeout::Error)
|
186
184
|
expect { @provider.restart }.to raise_error Puppet::Error, ('Timed out waiting for /system/myservice to transition states')
|
187
185
|
end
|
188
186
|
|
187
|
+
context 'with :operatingsystemrelease == 10_u10' do
|
188
|
+
it "should call 'svcadm restart /system/myservice'" do
|
189
|
+
Facter.stubs(:value).with(:operatingsystemrelease).returns '10_u10'
|
190
|
+
@provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "/system/myservice"], true)
|
191
|
+
@provider.expects(:wait).with('online')
|
192
|
+
@provider.restart
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
context 'with :operatingsystemrelease == 11.2' do
|
197
|
+
it "should call 'svcadm restart -s /system/myservice'" do
|
198
|
+
Facter.stubs(:value).with(:operatingsystemrelease).returns '11.2'
|
199
|
+
@provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "-s", "/system/myservice"], true)
|
200
|
+
@provider.expects(:wait).with('online')
|
201
|
+
@provider.restart
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
context 'with :operatingsystemrelease > 11.2' do
|
206
|
+
it "should call 'svcadm restart -s /system/myservice'" do
|
207
|
+
Facter.stubs(:value).with(:operatingsystemrelease).returns '11.3'
|
208
|
+
@provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "-s", "/system/myservice"], true)
|
209
|
+
@provider.expects(:wait).with('online')
|
210
|
+
@provider.restart
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
189
214
|
end
|
190
215
|
end
|
@@ -9,6 +9,12 @@ provider_class = Puppet::Type.type(:service).provider(:src)
|
|
9
9
|
|
10
10
|
describe provider_class do
|
11
11
|
|
12
|
+
if Puppet.features.microsoft_windows?
|
13
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
14
|
+
command = "cmd.exe /c \"exit 0\""
|
15
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
16
|
+
end
|
17
|
+
|
12
18
|
before :each do
|
13
19
|
@resource = stub 'resource'
|
14
20
|
@resource.stubs(:[]).returns(nil)
|
@@ -5,6 +5,13 @@
|
|
5
5
|
require 'spec_helper'
|
6
6
|
|
7
7
|
describe Puppet::Type.type(:service).provider(:systemd) do
|
8
|
+
|
9
|
+
if Puppet.features.microsoft_windows?
|
10
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
11
|
+
command = "cmd.exe /c \"exit 0\""
|
12
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
13
|
+
end
|
14
|
+
|
8
15
|
before :each do
|
9
16
|
Puppet::Type.type(:service).stubs(:defaultprovider).returns described_class
|
10
17
|
described_class.stubs(:which).with('systemctl').returns '/bin/systemctl'
|
@@ -51,6 +58,13 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
51
58
|
end
|
52
59
|
end
|
53
60
|
|
61
|
+
it "should be the default provider on cumulus3" do
|
62
|
+
Facter.stubs(:value).with(:osfamily).returns(:debian)
|
63
|
+
Facter.stubs(:value).with(:operatingsystem).returns('CumulusLinux')
|
64
|
+
Facter.stubs(:value).with(:operatingsystemmajrelease).returns("3")
|
65
|
+
expect(described_class).to be_default
|
66
|
+
end
|
67
|
+
|
54
68
|
it "should be the default provider on sles12" do
|
55
69
|
Facter.stubs(:value).with(:osfamily).returns(:suse)
|
56
70
|
Facter.stubs(:value).with(:operatingsystemmajrelease).returns("12")
|
@@ -98,25 +112,13 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
98
112
|
expect(described_class).not_to be_default
|
99
113
|
end
|
100
114
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
it "should be the default provider on ubuntu15.10" do
|
109
|
-
Facter.stubs(:value).with(:osfamily).returns(:debian)
|
110
|
-
Facter.stubs(:value).with(:operatingsystem).returns(:ubuntu)
|
111
|
-
Facter.stubs(:value).with(:operatingsystemmajrelease).returns("15.10")
|
112
|
-
expect(described_class).to be_default
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should be the default provider on ubuntu16.04" do
|
116
|
-
Facter.stubs(:value).with(:osfamily).returns(:debian)
|
117
|
-
Facter.stubs(:value).with(:operatingsystem).returns(:ubuntu)
|
118
|
-
Facter.stubs(:value).with(:operatingsystemmajrelease).returns("16.04")
|
119
|
-
expect(described_class).to be_default
|
115
|
+
[ '15.04', '15.10', '16.04', '16.10' ].each do |ver|
|
116
|
+
it "should be the default provider on ubuntu#{ver}" do
|
117
|
+
Facter.stubs(:value).with(:osfamily).returns(:debian)
|
118
|
+
Facter.stubs(:value).with(:operatingsystem).returns(:ubuntu)
|
119
|
+
Facter.stubs(:value).with(:operatingsystemmajrelease).returns("#{ver}")
|
120
|
+
expect(described_class).to be_default
|
121
|
+
end
|
120
122
|
end
|
121
123
|
|
122
124
|
[:enabled?, :enable, :disable, :start, :stop, :status, :restart].each do |method|
|
@@ -152,9 +154,24 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
152
154
|
it "should start the service with systemctl start otherwise" do
|
153
155
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
154
156
|
provider.expects(:systemctl).with(:unmask, 'sshd.service')
|
155
|
-
provider.expects(:execute).with(['/bin/systemctl','start','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
157
|
+
provider.expects(:execute).with(['/bin/systemctl','start','sshd.service'], {:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
156
158
|
provider.start
|
157
159
|
end
|
160
|
+
|
161
|
+
it "should show journald logs on failure" do
|
162
|
+
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
163
|
+
provider.expects(:systemctl).with(:unmask, 'sshd.service')
|
164
|
+
provider.expects(:execute).with(['/bin/systemctl','start','sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
165
|
+
.raises(Puppet::ExecutionFailure, "Failed to start sshd.service: Unit sshd.service failed to load: Invalid argument. See system logs and 'systemctl status sshd.service' for details.")
|
166
|
+
journalctl_logs = <<-EOS
|
167
|
+
-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --
|
168
|
+
Jun 14 21:41:34 foo.example.com systemd[1]: Stopping sshd Service...
|
169
|
+
Jun 14 21:41:35 foo.example.com systemd[1]: Starting sshd Service...
|
170
|
+
Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= and ExecStop= setting. Refusing.
|
171
|
+
EOS
|
172
|
+
provider.expects(:execute).with("journalctl -n 50 --since '5 minutes ago' -u sshd.service --no-pager").returns(journalctl_logs)
|
173
|
+
expect { provider.start }.to raise_error(Puppet::Error, /Systemd start for sshd.service failed![\n]+journalctl log for sshd.service:[\n]+-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --/m)
|
174
|
+
end
|
158
175
|
end
|
159
176
|
|
160
177
|
describe "#stop" do
|
@@ -169,36 +186,55 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
169
186
|
provider.expects(:execute).with(['/bin/systemctl','stop','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
170
187
|
provider.stop
|
171
188
|
end
|
189
|
+
|
190
|
+
it "should show journald logs on failure" do
|
191
|
+
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
192
|
+
provider.expects(:execute).with(['/bin/systemctl','stop','sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
193
|
+
.raises(Puppet::ExecutionFailure, "Failed to stop sshd.service: Unit sshd.service failed to load: Invalid argument. See system logs and 'systemctl status sshd.service' for details.")
|
194
|
+
journalctl_logs = <<-EOS
|
195
|
+
-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --
|
196
|
+
Jun 14 21:41:34 foo.example.com systemd[1]: Stopping sshd Service...
|
197
|
+
Jun 14 21:41:35 foo.example.com systemd[1]: Starting sshd Service...
|
198
|
+
Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= and ExecStop= setting. Refusing.
|
199
|
+
EOS
|
200
|
+
provider.expects(:execute).with("journalctl -n 50 --since '5 minutes ago' -u sshd.service --no-pager").returns(journalctl_logs)
|
201
|
+
expect { provider.stop }.to raise_error(Puppet::Error, /Systemd stop for sshd.service failed![\n]+journalctl log for sshd.service:[\n]-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --/m)
|
202
|
+
end
|
172
203
|
end
|
173
204
|
|
174
205
|
describe "#enabled?" do
|
175
206
|
it "should return :true if the service is enabled" do
|
176
207
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
177
208
|
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "enabled\n"
|
209
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(0)
|
178
210
|
expect(provider.enabled?).to eq(:true)
|
179
211
|
end
|
180
212
|
|
181
213
|
it "should return :true if the service is static" do
|
182
214
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
183
215
|
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "static\n"
|
216
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(0)
|
184
217
|
expect(provider.enabled?).to eq(:true)
|
185
218
|
end
|
186
219
|
|
187
220
|
it "should return :false if the service is disabled" do
|
188
221
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
189
222
|
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "disabled\n"
|
223
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(1)
|
190
224
|
expect(provider.enabled?).to eq(:false)
|
191
225
|
end
|
192
226
|
|
193
227
|
it "should return :false if the service is masked and the resource is attempting to be disabled" do
|
194
228
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :enable => false))
|
195
229
|
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "masked\n"
|
230
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(1)
|
196
231
|
expect(provider.enabled?).to eq(:false)
|
197
232
|
end
|
198
233
|
|
199
234
|
it "should return :mask if the service is masked and the resource is attempting to be masked" do
|
200
235
|
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :enable => 'mask'))
|
201
236
|
provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "masked\n"
|
237
|
+
$CHILD_STATUS.stubs(:exitstatus).returns(1)
|
202
238
|
expect(provider.enabled?).to eq(:mask)
|
203
239
|
end
|
204
240
|
end
|
@@ -273,6 +309,20 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
273
309
|
provider.expects(:execute).with(['/bin/systemctl','restart','sshd.service'], :failonfail => true, :override_locale => false, :squelch => false, :combine => true)
|
274
310
|
provider.restart
|
275
311
|
end
|
312
|
+
|
313
|
+
it "should show journald logs on failure" do
|
314
|
+
provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
|
315
|
+
provider.expects(:execute).with(['/bin/systemctl','restart','sshd.service'],{:failonfail => true, :override_locale => false, :squelch => false, :combine => true})
|
316
|
+
.raises(Puppet::ExecutionFailure, "Failed to restart sshd.service: Unit sshd.service failed to load: Invalid argument. See system logs and 'systemctl status sshd.service' for details.")
|
317
|
+
journalctl_logs = <<-EOS
|
318
|
+
-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --
|
319
|
+
Jun 14 21:41:34 foo.example.com systemd[1]: Stopping sshd Service...
|
320
|
+
Jun 14 21:41:35 foo.example.com systemd[1]: Starting sshd Service...
|
321
|
+
Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= and ExecStop= setting. Refusing.
|
322
|
+
EOS
|
323
|
+
provider.expects(:execute).with("journalctl -n 50 --since '5 minutes ago' -u sshd.service --no-pager").returns(journalctl_logs)
|
324
|
+
expect { provider.restart }.to raise_error(Puppet::Error, /Systemd restart for sshd.service failed![\n]+journalctl log for sshd.service:[\n]+-- Logs begin at Tue 2016-06-14 11:59:21 UTC, end at Tue 2016-06-14 21:45:02 UTC. --/m)
|
325
|
+
end
|
276
326
|
end
|
277
327
|
|
278
328
|
describe "#debian_enabled?" do
|
@@ -7,6 +7,12 @@ describe Puppet::Type.type(:service).provider(:upstart) do
|
|
7
7
|
let(:start_on_default_runlevels) { "\nstart on runlevel [2,3,4,5]" }
|
8
8
|
let(:provider_class) { Puppet::Type.type(:service).provider(:upstart) }
|
9
9
|
|
10
|
+
if Puppet.features.microsoft_windows?
|
11
|
+
# Get a pid for $CHILD_STATUS to latch on to
|
12
|
+
command = "cmd.exe /c \"exit 0\""
|
13
|
+
Puppet::Util::Execution.execute(command, {:failonfail => false})
|
14
|
+
end
|
15
|
+
|
10
16
|
def given_contents_of(file, content)
|
11
17
|
File.open(file, 'w') do |file|
|
12
18
|
file.write(content)
|
@@ -55,6 +55,7 @@ guest id=100 pgrp=usr groups=usr home=/home/guest
|
|
55
55
|
|
56
56
|
describe "invoked via manifest" do
|
57
57
|
let(:attribute_array) { ["rlogin=false", "login =true"] }
|
58
|
+
let(:single_attribute_array) { "rlogin=false" }
|
58
59
|
|
59
60
|
it "should return only the keys of the attribute key=value pair from manifest" do
|
60
61
|
keys = @provider.managed_attribute_keys(existing_attributes)
|
@@ -79,6 +80,12 @@ guest id=100 pgrp=usr groups=usr home=/home/guest
|
|
79
80
|
all_symbols = keys.all? {|k| k.is_a? Symbol}
|
80
81
|
expect(all_symbols).to be_truthy
|
81
82
|
end
|
83
|
+
|
84
|
+
it "should allow a single attribute to be specified" do
|
85
|
+
@resource.stubs(:original_parameters).returns({ :attributes => single_attribute_array })
|
86
|
+
keys = @provider.managed_attribute_keys(existing_attributes)
|
87
|
+
keys.should be_include(:rlogin)
|
88
|
+
end
|
82
89
|
end
|
83
90
|
|
84
91
|
describe "invoked via RAL" do
|
@@ -350,6 +350,33 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
350
350
|
end
|
351
351
|
end
|
352
352
|
|
353
|
+
describe 'self#generate_attribute_hash empty shadowhashdata' do
|
354
|
+
let(:user_plist_resource) do
|
355
|
+
{
|
356
|
+
:ensure => :present,
|
357
|
+
:provider => :directoryservice,
|
358
|
+
:groups => 'testgroup,third',
|
359
|
+
:comment => username,
|
360
|
+
:password => '*',
|
361
|
+
:shadowhashdata => nil,
|
362
|
+
:name => username,
|
363
|
+
:uid => 1000,
|
364
|
+
:gid => 22,
|
365
|
+
:home => user_path
|
366
|
+
}
|
367
|
+
end
|
368
|
+
|
369
|
+
it 'should handle empty shadowhashdata' do
|
370
|
+
provider.class.stubs(:get_os_version).returns('10.7')
|
371
|
+
provider.class.stubs(:get_all_users).returns(testuser_hash)
|
372
|
+
provider.class.stubs(:get_attribute_from_dscl).with('Users', username, 'ShadowHashData').returns(nil)
|
373
|
+
provider.class.stubs(:get_list_of_groups).returns(group_plist_hash_guid)
|
374
|
+
provider.class.stubs(:convert_binary_to_hash).with(sha512_embedded_bplist).returns(sha512_embedded_bplist_hash)
|
375
|
+
provider.class.prefetch({})
|
376
|
+
expect(provider.class.generate_attribute_hash(user_plist_hash)).to eq(user_plist_resource)
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
353
380
|
describe '#exists?' do
|
354
381
|
# This test expects an error to be raised
|
355
382
|
# I'm PROBABLY doing this wrong...
|
@@ -849,13 +876,14 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
849
876
|
# This will also catch the edge-case where a 10.6-style user exists on
|
850
877
|
# a 10.8 system and Puppet attempts to set a password
|
851
878
|
it 'should not fail if shadow_hash_data is not a Hash' do
|
852
|
-
|
879
|
+
Puppet::Util::Plist.expects(:string_to_blob).with(provider.base64_decode_string(pbkdf2_password_hash)).returns('binary_string')
|
853
880
|
provider.class.expects(:convert_hash_to_binary).with(entropy_shadow_hash_data).returns('binary_plist')
|
854
881
|
provider.expects(:set_shadow_hash_data).with({'passwd' => '********'}, 'binary_plist')
|
855
882
|
provider.set_salted_pbkdf2({}, false, 'entropy', pbkdf2_password_hash)
|
856
883
|
end
|
857
884
|
|
858
885
|
it "should set the PBKDF2 password hash when the 'entropy' field is passed with a valid password hash" do
|
886
|
+
Puppet::Util::Plist.expects(:string_to_blob).with(provider.base64_decode_string(pbkdf2_password_hash))
|
859
887
|
provider.class.expects(:convert_hash_to_binary).with(pbkdf2_embedded_bplist_hash).returns(pbkdf2_embedded_plist)
|
860
888
|
provider.expects(:set_shadow_hash_data).with(users_plist, pbkdf2_embedded_plist)
|
861
889
|
users_plist.expects(:[]=).with('passwd', '********')
|
@@ -863,6 +891,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
863
891
|
end
|
864
892
|
|
865
893
|
it "should set the PBKDF2 password hash when the 'salt' field is passed with a valid password hash" do
|
894
|
+
Puppet::Util::Plist.expects(:string_to_blob).with(provider.base64_decode_string(pbkdf2_salt_value))
|
866
895
|
provider.class.expects(:convert_hash_to_binary).with(pbkdf2_embedded_bplist_hash).returns(pbkdf2_embedded_plist)
|
867
896
|
provider.expects(:set_shadow_hash_data).with(users_plist, pbkdf2_embedded_plist)
|
868
897
|
users_plist.expects(:[]=).with('passwd', '********')
|