puppet 4.5.3-x86-mingw32 → 4.6.1-x86-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
@@ -0,0 +1,239 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'puppet/util/autoload'
|
4
|
+
require 'puppet/generate/models/type/type'
|
5
|
+
|
6
|
+
module Puppet
|
7
|
+
module Generate
|
8
|
+
# Reponsible for generating type definitions in Puppet
|
9
|
+
class Type
|
10
|
+
# Represents an input to the type generator
|
11
|
+
class Input
|
12
|
+
# Gets the path to the input.
|
13
|
+
attr_reader :path
|
14
|
+
|
15
|
+
# Gets the format to use for generating the output file.
|
16
|
+
attr_reader :format
|
17
|
+
|
18
|
+
# Initializes an input.
|
19
|
+
# @param base [String] The base path where the input is located.
|
20
|
+
# @param path [String] The path to the input file.
|
21
|
+
# @param format [Symbol] The format to use for generation.
|
22
|
+
# @return [void]
|
23
|
+
def initialize(base, path, format)
|
24
|
+
@base = base
|
25
|
+
@path = path
|
26
|
+
self.format = format
|
27
|
+
end
|
28
|
+
|
29
|
+
# Gets the expected resource type name for the input.
|
30
|
+
# @return [Symbol] Returns the expected resource type name for the input.
|
31
|
+
def type_name
|
32
|
+
File.basename(@path, '.rb').to_sym
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sets the format to use for this input.
|
36
|
+
# @param format [Symbol] The format to use for generation.
|
37
|
+
# @return [Symbol] Returns the new format.
|
38
|
+
def format=(format)
|
39
|
+
format = format.to_sym
|
40
|
+
raise "unsupported format '#{format}'." unless self.class.supported_format?(format)
|
41
|
+
@format = format
|
42
|
+
end
|
43
|
+
|
44
|
+
# Determines if the output file is up-to-date with respect to the input file.
|
45
|
+
# @param [String, nil] The path to output to, or nil if determined by input
|
46
|
+
# @return [Boolean] Returns true if the output is up-to-date or false if not.
|
47
|
+
def up_to_date?(outputdir)
|
48
|
+
f = effective_output_path(outputdir)
|
49
|
+
Puppet::FileSystem::exist?(f) && (Puppet::FileSystem::stat(@path) <=> Puppet::FileSystem::stat(f)) <= 0
|
50
|
+
end
|
51
|
+
|
52
|
+
# Gets the filename of the output file.
|
53
|
+
# @return [String] Returns the name to the output file.
|
54
|
+
def output_name
|
55
|
+
@output_name ||=
|
56
|
+
case @format
|
57
|
+
when :pcore
|
58
|
+
"#{File.basename(@path, '.rb')}.pp"
|
59
|
+
else
|
60
|
+
raise "unsupported format '#{@format}'."
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Gets the path to the output file.
|
65
|
+
# @return [String] Returns the path to the output file.
|
66
|
+
def output_path
|
67
|
+
@output_path ||=
|
68
|
+
case @format
|
69
|
+
when :pcore
|
70
|
+
File.join(@base, 'pcore', 'types', output_name)
|
71
|
+
else
|
72
|
+
raise "unsupported format '#{@format}'."
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Sets the path to the output file.
|
77
|
+
# @param path [String] The new path to the output file.
|
78
|
+
# @return [String] Returns the new path to the output file.
|
79
|
+
def output_path=(path)
|
80
|
+
@output_path = path
|
81
|
+
end
|
82
|
+
|
83
|
+
# Returns the outputpath to use given an outputdir that may be nil
|
84
|
+
# If outputdir is not nil, the returned path is relative to that outpudir
|
85
|
+
# otherwise determined by this input.
|
86
|
+
# @param [String, nil] The outputdirectory to use, or nil if to be determined by this Input
|
87
|
+
def effective_output_path(outputdir)
|
88
|
+
outputdir ? File.join(outputdir, output_name) : output_path
|
89
|
+
end
|
90
|
+
|
91
|
+
# Gets the path to the template to use for this input.
|
92
|
+
# @return [String] Returns the path to the template.
|
93
|
+
def template_path
|
94
|
+
File.join(File.dirname(__FILE__), 'templates', 'type', "#{@format}.erb")
|
95
|
+
end
|
96
|
+
|
97
|
+
# Gets the string representation of the input.
|
98
|
+
# @return [String] Returns the string representation of the input.
|
99
|
+
def to_s
|
100
|
+
@path
|
101
|
+
end
|
102
|
+
|
103
|
+
# Determines if the given format is supported
|
104
|
+
# @param format [Symbol] The format to use for generation.
|
105
|
+
# @return [Boolean] Returns true if the format is supported or false if not.
|
106
|
+
def self.supported_format?(format)
|
107
|
+
[:pcore].include?(format)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Finds the inputs for the generator.
|
112
|
+
# @param format [Symbol] The format to use.
|
113
|
+
# @param environment [Puppet::Node::Environment] The environment to search for inputs. Defaults to the current environment.
|
114
|
+
# @return [Array<Input>] Returns the array of inputs.
|
115
|
+
def self.find_inputs(format = :pcore, environment = Puppet.lookup(:current_environment))
|
116
|
+
Puppet.debug "Searching environment '#{environment.name}' for custom types."
|
117
|
+
inputs = []
|
118
|
+
environment.modules.each do |mod|
|
119
|
+
directory = File.join(Puppet::Util::Autoload.cleanpath(mod.plugin_directory), 'puppet', 'type')
|
120
|
+
unless Puppet::FileSystem.exist?(directory)
|
121
|
+
Puppet.debug "Skipping '#{mod.name}' module because it contains no custom types."
|
122
|
+
next
|
123
|
+
end
|
124
|
+
|
125
|
+
Puppet.debug "Searching '#{mod.name}' module for custom types."
|
126
|
+
Dir.glob("#{directory}/*.rb") do |file|
|
127
|
+
next unless Puppet::FileSystem.file?(file)
|
128
|
+
Puppet.debug "Found custom type source file '#{file}'."
|
129
|
+
inputs << Input.new(mod.path, file, format)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# Sort the inputs by path
|
134
|
+
inputs.sort_by! { |input| input.path }
|
135
|
+
end
|
136
|
+
|
137
|
+
# Generates files for the given inputs.
|
138
|
+
# If a file is up to date (newer than input) it is kept.
|
139
|
+
# If a file is out of date it is regenerated.
|
140
|
+
# If there is a file for a non existing output in a given output directory it is removed.
|
141
|
+
# If using input specific output removal must be made by hand if input is removed.
|
142
|
+
#
|
143
|
+
# @param inputs [Array<Input>] The inputs to generate files for.
|
144
|
+
# @param outputdir [String, nil] the outputdir where all output should be generated, or nil if next to input
|
145
|
+
# @param force [Boolean] True to force the generation of the output files (skip up-to-date checks) or false if not.
|
146
|
+
# @return [void]
|
147
|
+
def self.generate(inputs, outputdir = nil, force = false)
|
148
|
+
# remove files for non existing inputs
|
149
|
+
unless outputdir.nil?
|
150
|
+
filenames_to_keep = inputs.map {|i| i.output_name }
|
151
|
+
existing_files = Puppet::FileSystem.children(outputdir).map {|f| Puppet::FileSystem.basename(f) }
|
152
|
+
files_to_remove = existing_files - filenames_to_keep
|
153
|
+
files_to_remove.each do |f|
|
154
|
+
Puppet::FileSystem.unlink(File.join(outputdir, f))
|
155
|
+
end
|
156
|
+
Puppet.notice("Removed output '#{files_to_remove}' for non existing inputs") unless files_to_remove.empty?
|
157
|
+
end
|
158
|
+
|
159
|
+
if inputs.empty?
|
160
|
+
Puppet.notice 'No custom types were found.'
|
161
|
+
return nil
|
162
|
+
end
|
163
|
+
|
164
|
+
templates = {}
|
165
|
+
templates.default_proc = lambda { |hash, key|
|
166
|
+
raise "template was not found at '#{key}'." unless Puppet::FileSystem.file?(key)
|
167
|
+
template = ERB.new(File.read(key), nil, '-')
|
168
|
+
template.filename = key
|
169
|
+
template
|
170
|
+
}
|
171
|
+
|
172
|
+
up_to_date = true
|
173
|
+
Puppet.notice 'Generating Puppet resource types.'
|
174
|
+
inputs.each do |input|
|
175
|
+
if !force && input.up_to_date?(outputdir)
|
176
|
+
Puppet.debug "Skipping '#{input}' because it is up-to-date."
|
177
|
+
next
|
178
|
+
end
|
179
|
+
|
180
|
+
up_to_date = false
|
181
|
+
|
182
|
+
type_name = input.type_name
|
183
|
+
Puppet.debug "Loading custom type '#{type_name}' in '#{input}'."
|
184
|
+
begin
|
185
|
+
require input.path
|
186
|
+
rescue SystemExit
|
187
|
+
raise
|
188
|
+
rescue Exception => e
|
189
|
+
# Log the exception and move on to the next input
|
190
|
+
Puppet.log_exception(e, "Failed to load custom type '#{type_name}' from '#{input}': #{e.message}")
|
191
|
+
next
|
192
|
+
end
|
193
|
+
|
194
|
+
# HACK: there's no way to get a type without loading it (sigh); for now, just get the types hash directly
|
195
|
+
types ||= Puppet::Type.instance_variable_get('@types')
|
196
|
+
|
197
|
+
# Assume the type follows the naming convention
|
198
|
+
unless type = types[type_name]
|
199
|
+
Puppet.err "Custom type '#{type_name}' was not defined in '#{input}'."
|
200
|
+
next
|
201
|
+
end
|
202
|
+
|
203
|
+
# Create the model
|
204
|
+
begin
|
205
|
+
model = Models::Type::Type.new(type)
|
206
|
+
rescue Exception => e
|
207
|
+
# Move on to the next input
|
208
|
+
Puppet.log_exception(e, "#{input}: #{e.message}")
|
209
|
+
next
|
210
|
+
end
|
211
|
+
|
212
|
+
# Render the template
|
213
|
+
begin
|
214
|
+
result = model.render(templates[input.template_path])
|
215
|
+
rescue Exception => e
|
216
|
+
Puppet.log_exception(e)
|
217
|
+
raise
|
218
|
+
end
|
219
|
+
|
220
|
+
# Write the output file
|
221
|
+
begin
|
222
|
+
effective_output_path = input.effective_output_path(outputdir)
|
223
|
+
Puppet.notice "Generating '#{effective_output_path}' using '#{input.format}' format."
|
224
|
+
FileUtils.mkdir_p(File.dirname(effective_output_path))
|
225
|
+
File.open(effective_output_path, 'w') do |file|
|
226
|
+
file.write(result)
|
227
|
+
end
|
228
|
+
rescue Exception => e
|
229
|
+
Puppet.log_exception(e, "Failed to generate '#{effective_output_path}': #{e.message}")
|
230
|
+
# Move on to the next input
|
231
|
+
next
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
Puppet.notice 'No files were generated because all inputs were up-to-date.' if up_to_date
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
@@ -246,8 +246,6 @@ class Puppet::Graph::SimpleGraph
|
|
246
246
|
# This does not use the DOT graph library, just writes the content
|
247
247
|
# directly. Given the complexity of this, there didn't seem much point
|
248
248
|
# using a heavy library to generate exactly the same content. --daniel 2011-01-27
|
249
|
-
Puppet.settings.use(:graphing)
|
250
|
-
|
251
249
|
graph = ["digraph Resource_Cycles {"]
|
252
250
|
graph << ' label = "Resource Cycles"'
|
253
251
|
|
@@ -401,7 +399,7 @@ class Puppet::Graph::SimpleGraph
|
|
401
399
|
end
|
402
400
|
|
403
401
|
# Return an array of the edge-sets between a series of n+1 vertices (f=v0,v1,v2...t=vn)
|
404
|
-
# connecting the two given
|
402
|
+
# connecting the two given vertices. The ith edge set is an array containing all the
|
405
403
|
# edges between v(i) and v(i+1); these are (by definition) never empty.
|
406
404
|
#
|
407
405
|
# * if f == t, the list is empty
|
@@ -464,15 +462,13 @@ class Puppet::Graph::SimpleGraph
|
|
464
462
|
def write_graph(name)
|
465
463
|
return unless Puppet[:graph]
|
466
464
|
|
467
|
-
Puppet.settings.use(:graphing)
|
468
|
-
|
469
465
|
file = File.join(Puppet[:graphdir], "#{name}.dot")
|
470
466
|
File.open(file, "w") { |f|
|
471
467
|
f.puts to_dot("name" => name.to_s.capitalize)
|
472
468
|
}
|
473
469
|
end
|
474
470
|
|
475
|
-
# This flag may be set to true to use the new YAML
|
471
|
+
# This flag may be set to true to use the new YAML serialization
|
476
472
|
# format (where @vertices is a simple list of vertices rather than a
|
477
473
|
# list of VertexWrapper objects). Deserialization supports both
|
478
474
|
# formats regardless of the setting of this flag.
|
@@ -97,14 +97,17 @@ class Puppet::Resource::Catalog::StaticCompiler < Puppet::Resource::Catalog::Com
|
|
97
97
|
resource[:mode] ||= metadata.send(:mode).to_s(8)
|
98
98
|
|
99
99
|
resource[:ensure] = metadata.ftype
|
100
|
-
|
100
|
+
case resource[:ensure]
|
101
|
+
when 'file'
|
101
102
|
unless resource[:content]
|
102
103
|
resource[:content] = metadata.checksum
|
103
104
|
resource[:checksum] = metadata.checksum_type
|
104
105
|
end
|
106
|
+
store_content(request, resource)
|
107
|
+
when 'link'
|
108
|
+
resource[:target] = metadata.destination
|
105
109
|
end
|
106
110
|
|
107
|
-
store_content(request, resource) if resource[:ensure] == "file"
|
108
111
|
old_source = resource.delete(:source)
|
109
112
|
Puppet.info "Metadata for #{resource} in catalog for '#{request.key}' added from '#{old_source}'"
|
110
113
|
end
|
@@ -26,7 +26,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
|
|
26
26
|
# fact. This is because in Facter 2.x, the first `Facter.add` causes Facter to create
|
27
27
|
# its directory loaders which cannot be changed, meaning other external facts won't
|
28
28
|
# be resolved. (PUP-4607)
|
29
|
-
self.class.setup_external_search_paths(request)
|
29
|
+
self.class.setup_external_search_paths(request)
|
30
30
|
self.class.setup_search_paths(request)
|
31
31
|
|
32
32
|
# Initialize core Puppet facts, such as puppetversion
|
@@ -2,8 +2,8 @@ require 'puppet/indirector/ssl_file'
|
|
2
2
|
require 'puppet/ssl/key'
|
3
3
|
|
4
4
|
class Puppet::SSL::Key::Ca < Puppet::Indirector::SslFile
|
5
|
-
desc "Manage the CA's private on disk.
|
6
|
-
|
5
|
+
desc "Manage the CA's private key on disk. This terminus works with the
|
6
|
+
CA key *only*, because that's the only key that the CA ever interacts
|
7
7
|
with."
|
8
8
|
|
9
9
|
store_in :privatekeydir
|
@@ -178,7 +178,7 @@ class Puppet::Indirector::Request
|
|
178
178
|
return(uri ? uri : "/#{indirection_name}/#{key}")
|
179
179
|
end
|
180
180
|
|
181
|
-
def do_request(srv_service=:puppet, default_server=
|
181
|
+
def do_request(srv_service=:puppet, default_server=nil, default_port=nil, &block)
|
182
182
|
# We were given a specific server to use, so just use that one.
|
183
183
|
# This happens if someone does something like specifying a file
|
184
184
|
# source using a puppet:// URI with a specific server.
|
@@ -197,9 +197,30 @@ class Puppet::Indirector::Request
|
|
197
197
|
end
|
198
198
|
|
199
199
|
# ... Fall back onto the default server.
|
200
|
-
|
201
|
-
|
202
|
-
|
200
|
+
begin
|
201
|
+
bound_server = Puppet.lookup(:server)
|
202
|
+
rescue
|
203
|
+
if primary_server = Puppet.settings[:server_list][0]
|
204
|
+
bound_server = primary_server[0]
|
205
|
+
else
|
206
|
+
bound_server = nil
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
begin
|
211
|
+
bound_port = Puppet.lookup(:serverport)
|
212
|
+
rescue
|
213
|
+
if primary_server = Puppet.settings[:server_list][0]
|
214
|
+
bound_port = primary_server[1]
|
215
|
+
else
|
216
|
+
bound_port = nil
|
217
|
+
end
|
218
|
+
end
|
219
|
+
self.server = default_server || bound_server || Puppet.settings[:server]
|
220
|
+
self.port = default_port || bound_port || Puppet.settings[:masterport]
|
221
|
+
|
222
|
+
Puppet.debug "No more servers left, falling back to #{self.server}:#{self.port}" if Puppet.settings[:use_srv_records]
|
223
|
+
|
203
224
|
return yield(self)
|
204
225
|
end
|
205
226
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'uri'
|
3
|
+
require 'json'
|
3
4
|
|
4
5
|
require 'puppet/network/http'
|
5
6
|
require 'puppet/network/http_pool'
|
@@ -33,12 +34,68 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
|
|
33
34
|
@srv_service || :puppet
|
34
35
|
end
|
35
36
|
|
37
|
+
# The logic for server and port is kind of gross. In summary:
|
38
|
+
# IF an endpoint-specific setting is requested AND that setting has been set by the user
|
39
|
+
# Use that setting.
|
40
|
+
# The defaults for these settings are the "normal" server/masterport settings, so
|
41
|
+
# when they are unset we instead want to "fall back" to the failover-selected
|
42
|
+
# host/port pair.
|
43
|
+
# ELSE IF we have a failover-selected host/port
|
44
|
+
# Use what the failover logic came up with
|
45
|
+
# ELSE IF the server_list setting is in use
|
46
|
+
# Use the first entry - failover hasn't happened yet, but that
|
47
|
+
# setting is still authoritative
|
48
|
+
# ELSE
|
49
|
+
# Go for the legacy server/masterport settings, and hope for the best
|
36
50
|
def self.server
|
37
|
-
|
51
|
+
setting = server_setting()
|
52
|
+
if setting && setting != :server && Puppet.settings.set_by_config?(setting)
|
53
|
+
Puppet.settings[setting]
|
54
|
+
else
|
55
|
+
begin
|
56
|
+
Puppet.lookup(:server)
|
57
|
+
rescue
|
58
|
+
if primary_server = Puppet.settings[:server_list][0]
|
59
|
+
Puppet.debug "Dynamically-bound server lookup failed; using first entry"
|
60
|
+
primary_server[0]
|
61
|
+
else
|
62
|
+
setting ||= :server
|
63
|
+
Puppet.debug "Dynamically-bound server lookup failed, falling back to #{setting} setting"
|
64
|
+
Puppet.settings[setting]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
38
68
|
end
|
39
69
|
|
70
|
+
# For port there's a little bit of an extra snag: setting a specific
|
71
|
+
# server setting and relying on the default port for that server is
|
72
|
+
# common, so we also want to check if the assocaited SERVER setting
|
73
|
+
# has been set by the user. If either of those are set we ignore the
|
74
|
+
# failover-selected port.
|
40
75
|
def self.port
|
41
|
-
|
76
|
+
setting = port_setting()
|
77
|
+
srv_setting = server_setting()
|
78
|
+
if (setting && setting != :masterport && Puppet.settings.set_by_config?(setting)) ||
|
79
|
+
(srv_setting && srv_setting != :server && Puppet.settings.set_by_config?(srv_setting))
|
80
|
+
Puppet.settings[setting].to_i
|
81
|
+
else
|
82
|
+
begin
|
83
|
+
Puppet.lookup(:serverport).to_i
|
84
|
+
rescue
|
85
|
+
if primary_server = Puppet.settings[:server_list][0]
|
86
|
+
Puppet.debug "Dynamically-bound port lookup failed; using first entry"
|
87
|
+
|
88
|
+
# Port might not be set, so we want to fallback in that
|
89
|
+
# case. We know we don't need to use `setting` here, since
|
90
|
+
# the default value of every port setting is `masterport`
|
91
|
+
(primary_server[1] || Puppet.settings[:masterport]).to_i
|
92
|
+
else
|
93
|
+
setting ||= :masterport
|
94
|
+
Puppet.debug "Dynamically-bound port lookup failed; falling back to #{setting} setting"
|
95
|
+
Puppet.settings[setting].to_i
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
42
99
|
end
|
43
100
|
|
44
101
|
# Provide appropriate headers.
|
@@ -218,7 +275,20 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
|
|
218
275
|
end
|
219
276
|
|
220
277
|
def convert_to_http_error(response)
|
221
|
-
|
278
|
+
if response.body.to_s.empty? && response.respond_to?(:message)
|
279
|
+
returned_message = response.message
|
280
|
+
elsif response['content-type'].is_a?(String)
|
281
|
+
content_type, body = parse_response(response)
|
282
|
+
if content_type =~ /[pj]son/
|
283
|
+
returned_message = JSON.parse(body)["message"]
|
284
|
+
else
|
285
|
+
returned_message = uncompress_body(response)
|
286
|
+
end
|
287
|
+
else
|
288
|
+
returned_message = uncompress_body(response)
|
289
|
+
end
|
290
|
+
|
291
|
+
message = "Error #{response.code} on SERVER: #{returned_message}"
|
222
292
|
Net::HTTPError.new(message, response)
|
223
293
|
end
|
224
294
|
|