puppet 4.5.3-universal-darwin → 4.6.1-universal-darwin
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 +89 -34
- 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,19 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Serialization
|
3
|
+
# An InstanceReader is responsible for reading an instance of a complex object using a deserializer. The read involves creating the
|
4
|
+
# instance, register it with the deserializer (so that self references can be resolved) and then read the instance data (which normally
|
5
|
+
# amounts to all attribute values).
|
6
|
+
# Instance readers are registered with of {Types::PObjectType}s to aid the type when reading instances.
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
module InstanceReader
|
10
|
+
# @param [Class] impl_class the class of the instance to be created and initialized
|
11
|
+
# @param [Integer] value_count the expected number of objects that forms the initialization data
|
12
|
+
# @param [Deserializer] deserializer the deserializer to read from, and to register the instance with
|
13
|
+
# @return [Object] the instance that has been read
|
14
|
+
def read(impl_class, value_count, deserializer)
|
15
|
+
Serialization.not_implemented(self, 'read')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Serialization
|
3
|
+
# An instance writer is responsible for writing complex objects using a {Serializer}
|
4
|
+
# @api private
|
5
|
+
module InstanceWriter
|
6
|
+
# @param [Types::PObjectType] type the type of instance to write
|
7
|
+
# @param [Object] value the instance
|
8
|
+
# @param [Serializer] serializer the serializer that will receive the written instance
|
9
|
+
def write(type, value, serializer)
|
10
|
+
Serialization.not_implemented(self, 'write')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Puppet::Pops
|
4
|
+
module Serialization
|
5
|
+
|
6
|
+
require_relative 'time_factory'
|
7
|
+
require_relative 'abstract_reader'
|
8
|
+
require_relative 'abstract_writer'
|
9
|
+
|
10
|
+
module JSON
|
11
|
+
# A Writer that writes output in JSON format
|
12
|
+
# @api private
|
13
|
+
class Writer < AbstractWriter
|
14
|
+
def initialize(io, options = {})
|
15
|
+
super(Packer.new(io, options), options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def extension_packer
|
19
|
+
@packer
|
20
|
+
end
|
21
|
+
|
22
|
+
def packer
|
23
|
+
@packer
|
24
|
+
end
|
25
|
+
|
26
|
+
def build_payload
|
27
|
+
yield(@packer)
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_json
|
31
|
+
@packer.to_json
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# A Reader that reads JSON formatted input
|
36
|
+
# @api private
|
37
|
+
class Reader < AbstractReader
|
38
|
+
def initialize(io)
|
39
|
+
super(Unpacker.new(io))
|
40
|
+
end
|
41
|
+
|
42
|
+
def read_payload(data)
|
43
|
+
yield(@unpacker)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# The JSON Packer. Modeled after the MessagePack::Packer
|
48
|
+
# @api private
|
49
|
+
class Packer
|
50
|
+
def initialize(io, options = {})
|
51
|
+
@io = io
|
52
|
+
@type_registry = {}
|
53
|
+
@nested = []
|
54
|
+
@verbose = options[:verbose]
|
55
|
+
@verbose = false if @verbose.nil?
|
56
|
+
@indent = options[:indent] || 0
|
57
|
+
end
|
58
|
+
|
59
|
+
def register_type(type, klass, &block)
|
60
|
+
@type_registry[klass] = [type, klass, block]
|
61
|
+
end
|
62
|
+
|
63
|
+
def empty?
|
64
|
+
@io.pos == 0
|
65
|
+
end
|
66
|
+
|
67
|
+
def flush
|
68
|
+
pos = @io.pos
|
69
|
+
case pos
|
70
|
+
when 1
|
71
|
+
# Just start marker present.
|
72
|
+
when 0
|
73
|
+
@io << '['
|
74
|
+
else
|
75
|
+
# Drop last comma
|
76
|
+
@io.pos = pos - 1
|
77
|
+
end
|
78
|
+
@io << ']'
|
79
|
+
@io.flush
|
80
|
+
end
|
81
|
+
|
82
|
+
def write(obj)
|
83
|
+
assert_started
|
84
|
+
case obj
|
85
|
+
when Array
|
86
|
+
write_array_header(obj.size)
|
87
|
+
obj.each { |x| write(x) }
|
88
|
+
when Hash
|
89
|
+
write_map_header(obj.size)
|
90
|
+
obj.each_pair {|k, v| write(k); write(v) }
|
91
|
+
when nil
|
92
|
+
write_nil
|
93
|
+
else
|
94
|
+
write_scalar(obj)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
alias pack write
|
98
|
+
|
99
|
+
def write_array_header(n)
|
100
|
+
assert_started
|
101
|
+
if n < 1
|
102
|
+
@io << '[]'
|
103
|
+
else
|
104
|
+
@io << '['
|
105
|
+
@nested << [false, n]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def write_map_header(n)
|
110
|
+
assert_started
|
111
|
+
if n < 1
|
112
|
+
@io << '{}'
|
113
|
+
else
|
114
|
+
@io << '{'
|
115
|
+
@nested << [true, n * 2]
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def write_nil
|
120
|
+
assert_started
|
121
|
+
@io << 'null'
|
122
|
+
write_delim
|
123
|
+
end
|
124
|
+
|
125
|
+
def to_s
|
126
|
+
to_json
|
127
|
+
end
|
128
|
+
|
129
|
+
def to_json
|
130
|
+
string = @io.string
|
131
|
+
if @indent > 0
|
132
|
+
options = { :indent => ' ' * @indent }
|
133
|
+
string = ::JSON.pretty_unparse(::JSON.parse(string), options)
|
134
|
+
end
|
135
|
+
string
|
136
|
+
end
|
137
|
+
|
138
|
+
# Write a payload object. Not subject to extensions
|
139
|
+
def write_pl(obj)
|
140
|
+
@io << obj.to_json << ','
|
141
|
+
end
|
142
|
+
|
143
|
+
def assert_started
|
144
|
+
@io << '[' if @io.pos == 0
|
145
|
+
end
|
146
|
+
private :assert_started
|
147
|
+
|
148
|
+
def write_delim
|
149
|
+
nesting = @nested.last
|
150
|
+
cnt = nesting.nil? ? nil : nesting[1]
|
151
|
+
case cnt
|
152
|
+
when 1
|
153
|
+
@io << (nesting[0] ? '}' : ']')
|
154
|
+
@nested.pop
|
155
|
+
write_delim
|
156
|
+
when Integer
|
157
|
+
if (cnt % 2) == 0 || !nesting[0]
|
158
|
+
@io << ','
|
159
|
+
else
|
160
|
+
@io << ':'
|
161
|
+
end
|
162
|
+
nesting[1] = cnt - 1
|
163
|
+
else
|
164
|
+
@io << ','
|
165
|
+
end
|
166
|
+
end
|
167
|
+
private :write_delim
|
168
|
+
|
169
|
+
def write_scalar(obj)
|
170
|
+
ext = @type_registry[obj.class]
|
171
|
+
if ext.nil?
|
172
|
+
case obj
|
173
|
+
when Numeric, String, true, false, nil
|
174
|
+
@io << obj.to_json
|
175
|
+
write_delim
|
176
|
+
else
|
177
|
+
raise SerializationError, "Unable to serialize a #{obj.class.name}"
|
178
|
+
end
|
179
|
+
else
|
180
|
+
write_extension(ext, obj)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
private :write_scalar
|
184
|
+
|
185
|
+
def write_extension(ext, obj)
|
186
|
+
@io << '[' << extension_indicator(ext).to_json << ','
|
187
|
+
write_extension_payload(ext, obj)
|
188
|
+
if obj.is_a?(Extension::SequenceStart) && obj.sequence_size > 0
|
189
|
+
@nested << [false, obj.sequence_size]
|
190
|
+
else
|
191
|
+
@io.pos -= 1
|
192
|
+
@io << ']'
|
193
|
+
write_delim
|
194
|
+
end
|
195
|
+
end
|
196
|
+
private :write_extension
|
197
|
+
|
198
|
+
def write_extension_payload(ext, obj)
|
199
|
+
ext[2].call(obj)
|
200
|
+
end
|
201
|
+
private :write_extension_payload
|
202
|
+
|
203
|
+
def extension_indicator(ext)
|
204
|
+
@verbose ? ext[1].name.sub(/^Puppet::Pops::Serialization::\w+::(.+)$/, '\1') : ext[0]
|
205
|
+
end
|
206
|
+
private :extension_indicator
|
207
|
+
end
|
208
|
+
|
209
|
+
class Unpacker
|
210
|
+
def initialize(io)
|
211
|
+
parsed = ::JSON.parse(io.read(nil))
|
212
|
+
raise SerializationError, "JSON stream is not an array" unless parsed.is_a?(Array)
|
213
|
+
@etor_stack = [parsed.each]
|
214
|
+
@type_registry = {}
|
215
|
+
@nested = []
|
216
|
+
end
|
217
|
+
|
218
|
+
def read
|
219
|
+
obj = nil
|
220
|
+
loop do
|
221
|
+
raise SerializationError, 'Unexpected end of input' if @etor_stack.empty?
|
222
|
+
etor = @etor_stack.last
|
223
|
+
begin
|
224
|
+
obj = etor.next
|
225
|
+
break
|
226
|
+
rescue StopIteration
|
227
|
+
@etor_stack.pop
|
228
|
+
end
|
229
|
+
end
|
230
|
+
if obj.is_a?(Array)
|
231
|
+
ext_etor = obj.each
|
232
|
+
@etor_stack << ext_etor
|
233
|
+
ext_no = ext_etor.next
|
234
|
+
ext_block = @type_registry[ext_no]
|
235
|
+
raise SerializationError, "Invalid input. #{ext_no} is not a valid extension number" if ext_block.nil?
|
236
|
+
obj = ext_block.call(nil)
|
237
|
+
end
|
238
|
+
obj
|
239
|
+
end
|
240
|
+
|
241
|
+
def register_type(extension_number, &block)
|
242
|
+
@type_registry[extension_number] = block
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative 'instance_reader'
|
2
|
+
require_relative 'instance_writer'
|
3
|
+
|
4
|
+
module Puppet::Pops
|
5
|
+
module Serialization
|
6
|
+
|
7
|
+
# Instance reader for objects that implement {Types::PuppetObject}
|
8
|
+
# @api private
|
9
|
+
class ObjectReader
|
10
|
+
include InstanceReader
|
11
|
+
|
12
|
+
def read(impl_class, value_count, deserializer)
|
13
|
+
type = impl_class._ptype
|
14
|
+
(names, types, required_count) = type.parameter_info
|
15
|
+
max = names.size
|
16
|
+
unless value_count >= required_count && value_count <= max
|
17
|
+
raise Serialization::SerializationError, "Feature count mismatch for #{impl_class.name}. Expected #{min} - #{max}, actual #{value_count}"
|
18
|
+
end
|
19
|
+
# Deserializer must know about this instance before we read its attributes
|
20
|
+
val = deserializer.remember(impl_class.allocate)
|
21
|
+
args = Array.new(value_count) { deserializer.read }
|
22
|
+
types.each_with_index do |ptype, index|
|
23
|
+
if index < args.size
|
24
|
+
arg = args[index]
|
25
|
+
Types::TypeAsserter.assert_instance_of(nil, ptype, arg) { "#{type.name}[#{names[index]}]" } unless arg == :default
|
26
|
+
else
|
27
|
+
attr = type[names[index]]
|
28
|
+
raise Serialization::SerializationError, "Missing default value for #{type.name}[#{names[index]}]" unless attr.value?
|
29
|
+
args << attr.value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
val.send(:initialize, *args)
|
33
|
+
val
|
34
|
+
end
|
35
|
+
|
36
|
+
INSTANCE = ObjectReader.new
|
37
|
+
end
|
38
|
+
|
39
|
+
# Instance writer for objects that implement {Types::PuppetObject}
|
40
|
+
# @api private
|
41
|
+
class ObjectWriter
|
42
|
+
include InstanceWriter
|
43
|
+
|
44
|
+
def write(type, value, serializer)
|
45
|
+
impl_class = value.class
|
46
|
+
(names, types, required_count) = type.parameter_info(true)
|
47
|
+
args = names.map { |name| value.send(name) }
|
48
|
+
|
49
|
+
# Pop optional arguments that are nil
|
50
|
+
while args.size > required_count
|
51
|
+
break unless args.last.nil?
|
52
|
+
args.pop
|
53
|
+
end
|
54
|
+
|
55
|
+
serializer.start_object(type.name, args.size)
|
56
|
+
args.each { |arg| serializer.write(arg) }
|
57
|
+
end
|
58
|
+
|
59
|
+
INSTANCE = ObjectWriter.new
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,151 @@
|
|
1
|
+
require_relative 'instance_reader'
|
2
|
+
require_relative 'instance_writer'
|
3
|
+
|
4
|
+
module Puppet::Pops
|
5
|
+
module Serialization
|
6
|
+
|
7
|
+
# @api private
|
8
|
+
module RGen
|
9
|
+
class Base
|
10
|
+
def features(impl_class)
|
11
|
+
impl_class.ecore.eAllStructuralFeatures.reject {|feature| feature.derived }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Instance reader for RGen::Ecore objects
|
16
|
+
# @api private
|
17
|
+
class RGenReader < Base
|
18
|
+
include InstanceReader
|
19
|
+
|
20
|
+
def read(impl_class, value_count, deserializer)
|
21
|
+
features = features(impl_class)
|
22
|
+
raise SerializationError, "Feature count mismatch for #{impl_class}" unless value_count == features.size
|
23
|
+
# Deserializer must know about this instance before we read its attributes
|
24
|
+
obj = deserializer.remember(impl_class.new)
|
25
|
+
features.each { |feature| obj.setGeneric(feature.name, deserializer.read) }
|
26
|
+
obj
|
27
|
+
end
|
28
|
+
|
29
|
+
INSTANCE = RGenReader.new
|
30
|
+
end
|
31
|
+
|
32
|
+
# Instance writer for RGen::Ecore objects
|
33
|
+
# @api private
|
34
|
+
class RGenWriter < Base
|
35
|
+
include InstanceWriter
|
36
|
+
|
37
|
+
def write(type, value, serializer)
|
38
|
+
impl_class = value.class
|
39
|
+
features = features(impl_class)
|
40
|
+
serializer.start_object(type.name, features.size)
|
41
|
+
features.each { |feature| serializer.write(value.getGeneric(feature.name)) }
|
42
|
+
end
|
43
|
+
|
44
|
+
INSTANCE = RGenWriter.new
|
45
|
+
end
|
46
|
+
|
47
|
+
# A generator that produces a {Types::PTypeSetType} instance based on an ruby {Module}
|
48
|
+
# that represents an RGen::ECore::EPackage.
|
49
|
+
#
|
50
|
+
# The generator is not complete. In particular, it does not deal with:
|
51
|
+
# - references that extend beyond eCore and the given ePackage
|
52
|
+
# - sub packages
|
53
|
+
# - methods
|
54
|
+
# - annotations
|
55
|
+
#
|
56
|
+
class TypeGenerator
|
57
|
+
|
58
|
+
ECore = ::RGen::ECore
|
59
|
+
|
60
|
+
def generate_type_set(namespace, package, loader)
|
61
|
+
types = {}
|
62
|
+
package.constants.each do |c|
|
63
|
+
cls = package.const_get(c)
|
64
|
+
next unless cls.is_a?(Class) && cls.respond_to?(:ecore)
|
65
|
+
e_class = cls.ecore
|
66
|
+
types[e_class.name] = generate_type_hash(e_class)
|
67
|
+
end
|
68
|
+
type_set = Types::PTypeSetType.new(namespace, {
|
69
|
+
Pcore::KEY_PCORE_VERSION => Pcore::PCORE_VERSION,
|
70
|
+
Types::KEY_VERSION => '0.1.0',
|
71
|
+
Types::KEY_TYPES => types
|
72
|
+
}, Pcore::RUNTIME_NAME_AUTHORITY).resolve(Types::TypeParser.singleton, loader)
|
73
|
+
|
74
|
+
type_set.types.values.each do |type|
|
75
|
+
type.reader = RGenReader::INSTANCE
|
76
|
+
type.writer = RGenWriter::INSTANCE
|
77
|
+
end
|
78
|
+
type_set
|
79
|
+
end
|
80
|
+
|
81
|
+
def generate_type_hash(e_class)
|
82
|
+
attributes = {}
|
83
|
+
e_class.eStructuralFeatures.each do |feature|
|
84
|
+
attr = {}
|
85
|
+
attributes[feature.name] = attr
|
86
|
+
type = feature_type(feature)
|
87
|
+
value = feature.defaultValue
|
88
|
+
if value.nil?
|
89
|
+
if feature.lowerBound == 0
|
90
|
+
if feature.upperBound == -1 || feature.upperBound > 1
|
91
|
+
attr[Types::KEY_VALUE] = []
|
92
|
+
elsif !feature.derived
|
93
|
+
type = Types::POptionalType.new(type)
|
94
|
+
attr[Types::KEY_VALUE] = nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
else
|
98
|
+
value = value.to_s if value.is_a?(Symbol)
|
99
|
+
attr['value'] = value
|
100
|
+
end
|
101
|
+
attr[Types::KEY_TYPE] = type
|
102
|
+
if feature.derived
|
103
|
+
attr[Types::KEY_KIND] = Types::PObjectType::ATTRIBUTE_KIND_DERIVED
|
104
|
+
elsif feature.unsettable
|
105
|
+
attr[Types::KEY_KIND] = Types::PObjectType::ATTRIBUTE_KIND_CONSTANT
|
106
|
+
end
|
107
|
+
end
|
108
|
+
result = { Types::KEY_ATTRIBUTES => attributes }
|
109
|
+
supers = e_class.eSuperTypes
|
110
|
+
case supers.size
|
111
|
+
when 0
|
112
|
+
when 1
|
113
|
+
result['parent'] = Types::PTypeReferenceType.new(supers[0].name)
|
114
|
+
else
|
115
|
+
raise SerializationError, "Multiple inheritance is not supported. #{e_class.name} has #{supers.size} super types"
|
116
|
+
end
|
117
|
+
result
|
118
|
+
end
|
119
|
+
|
120
|
+
def feature_type(feature)
|
121
|
+
eType = feature.eType
|
122
|
+
type = case eType
|
123
|
+
when ECore::EInt, ECore::ELong
|
124
|
+
Types::PIntegerType::DEFAULT
|
125
|
+
when ECore::EFloat
|
126
|
+
Types::PFloatType::DEFAULT
|
127
|
+
when ECore::EEnum
|
128
|
+
Types::PEnumType.new(eType.eLiterals.map { |e| e.name })
|
129
|
+
when ECore::EBoolean
|
130
|
+
Types::PBooleanType::DEFAULT
|
131
|
+
when ECore::EString
|
132
|
+
Types::PStringType::DEFAULT
|
133
|
+
when ECore::EClass
|
134
|
+
Types::PTypeReferenceType.new(eType.name)
|
135
|
+
else
|
136
|
+
Types::PAnyType::DEFAULT
|
137
|
+
end
|
138
|
+
|
139
|
+
case feature.upperBound
|
140
|
+
when 1
|
141
|
+
type
|
142
|
+
when -1
|
143
|
+
Types::PArrayType.new(type, Types::PIntegerType.new(feature.lowerBound))
|
144
|
+
else
|
145
|
+
Types::PArrayType.new(type, Types::PIntegerType.new(feature.lowerBound, feature.upperBound))
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|