puppet 4.2.0 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +5 -7
- data/README.md +1 -1
- data/Rakefile +20 -0
- data/ext/debian/puppet.init +0 -1
- data/ext/debian/puppet.logrotate +14 -5
- data/ext/osx/puppet.plist +2 -4
- data/ext/project_data.yaml +1 -1
- data/ext/redhat/client.init +65 -12
- data/ext/redhat/logrotate +15 -3
- data/ext/redhat/puppet.spec.erb +5 -1
- data/ext/redhat/server.init +1 -1
- data/ext/solaris/smf/puppet +44 -0
- data/ext/solaris/smf/puppet.xml +44 -0
- data/ext/suse/client.init +27 -27
- data/ext/suse/server.init +2 -2
- data/ext/systemd/puppet.service +1 -0
- data/install.rb +21 -39
- data/lib/hiera/puppet_function.rb +5 -5
- data/lib/puppet/agent/locker.rb +11 -2
- data/lib/puppet/agent.rb +4 -4
- data/lib/puppet/application/agent.rb +28 -14
- data/lib/puppet/application/apply.rb +17 -4
- data/lib/puppet/application/cert.rb +16 -0
- data/lib/puppet/application/filebucket.rb +78 -4
- data/lib/puppet/application/lookup.rb +356 -0
- data/lib/puppet/application/master.rb +5 -1
- data/lib/puppet/configurer.rb +9 -5
- data/lib/puppet/context/trusted_information.rb +21 -1
- data/lib/puppet/context.rb +16 -1
- data/lib/puppet/daemon.rb +17 -13
- data/lib/puppet/data_binding.rb +4 -2
- data/lib/puppet/data_providers/data_adapter.rb +7 -68
- data/lib/puppet/data_providers/data_function_support.rb +5 -26
- data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
- data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
- data/lib/puppet/data_providers/hiera_config.rb +106 -0
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +97 -0
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
- data/lib/puppet/data_providers/hiera_support.rb +37 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +31 -0
- data/lib/puppet/data_providers/lookup_adapter.rb +200 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +32 -0
- data/lib/puppet/data_providers.rb +12 -13
- data/lib/puppet/defaults.rb +14 -3
- data/lib/puppet/environments.rb +94 -6
- data/lib/puppet/error.rb +4 -0
- data/lib/puppet/face/module/changes.rb +2 -1
- data/lib/puppet/feature/cfacter.rb +1 -0
- data/lib/puppet/file_bucket/dipper.rb +58 -2
- data/lib/puppet/file_system/windows.rb +3 -1
- data/lib/puppet/functions/assert_type.rb +48 -12
- data/lib/puppet/functions/defined.rb +79 -48
- data/lib/puppet/functions/each.rb +85 -27
- data/lib/puppet/functions/epp.rb +29 -37
- data/lib/puppet/functions/filter.rb +60 -25
- data/lib/puppet/functions/hiera.rb +76 -3
- data/lib/puppet/functions/hiera_array.rb +65 -3
- data/lib/puppet/functions/hiera_hash.rb +74 -2
- data/lib/puppet/functions/hiera_include.rb +77 -4
- data/lib/puppet/functions/inline_epp.rb +44 -71
- data/lib/puppet/functions/lookup.rb +19 -17
- data/lib/puppet/functions/map.rb +56 -21
- data/lib/puppet/functions/match.rb +29 -12
- data/lib/puppet/functions/reduce.rb +95 -58
- data/lib/puppet/functions/versioncmp.rb +36 -0
- data/lib/puppet/functions/with.rb +15 -7
- data/lib/puppet/functions.rb +2 -4
- data/lib/puppet/indirector/catalog/compiler.rb +3 -3
- data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
- data/lib/puppet/indirector/data_binding/none.rb +4 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +6 -1
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/request.rb +7 -8
- data/lib/puppet/indirector/resource_type/parser.rb +5 -3
- data/lib/puppet/info_service/class_information_service.rb +111 -0
- data/lib/puppet/info_service.rb +7 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
- data/lib/puppet/module_tool/metadata.rb +32 -9
- data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
- data/lib/puppet/network/authconfig.rb +21 -1
- data/lib/puppet/network/authorization.rb +8 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
- data/lib/puppet/network/http/api/master/v3.rb +7 -1
- data/lib/puppet/node/environment.rb +9 -2
- data/lib/puppet/node.rb +11 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +38 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
- data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
- data/lib/puppet/parser/compiler.rb +300 -12
- data/lib/puppet/parser/environment_compiler.rb +165 -0
- data/lib/puppet/parser/functions/assert_type.rb +46 -16
- data/lib/puppet/parser/functions/defined.rb +105 -68
- data/lib/puppet/parser/functions/each.rb +85 -27
- data/lib/puppet/parser/functions/epp.rb +29 -37
- data/lib/puppet/parser/functions/filter.rb +59 -23
- data/lib/puppet/parser/functions/hiera.rb +83 -27
- data/lib/puppet/parser/functions/hiera_array.rb +71 -28
- data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
- data/lib/puppet/parser/functions/hiera_include.rb +81 -40
- data/lib/puppet/parser/functions/inline_epp.rb +35 -60
- data/lib/puppet/parser/functions/inline_template.rb +2 -2
- data/lib/puppet/parser/functions/map.rb +55 -20
- data/lib/puppet/parser/functions/match.rb +27 -12
- data/lib/puppet/parser/functions/reduce.rb +97 -60
- data/lib/puppet/parser/functions/with.rb +16 -8
- data/lib/puppet/parser/resource.rb +103 -21
- data/lib/puppet/parser.rb +3 -0
- data/lib/puppet/plugins/configuration.rb +3 -2
- data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
- data/lib/puppet/plugins/data_providers/registry.rb +84 -0
- data/lib/puppet/plugins/data_providers.rb +12 -60
- data/lib/puppet/pops/adapters.rb +12 -0
- data/lib/puppet/pops/binder/binder.rb +2 -2
- data/lib/puppet/pops/binder/bindings_checker.rb +1 -1
- data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
- data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
- data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
- data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
- data/lib/puppet/pops/binder/injector.rb +4 -4
- data/lib/puppet/pops/binder/key_factory.rb +3 -9
- data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
- data/lib/puppet/pops/evaluator/access_operator.rb +27 -60
- data/lib/puppet/pops/evaluator/closure.rb +8 -8
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +10 -6
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +7 -1
- data/lib/puppet/pops/functions/dispatcher.rb +3 -3
- data/lib/puppet/pops/issues.rb +11 -3
- data/lib/puppet/pops/label_provider.rb +1 -1
- data/lib/puppet/pops/lookup/explainer.rb +402 -0
- data/lib/puppet/pops/lookup/invocation.rb +117 -0
- data/lib/puppet/pops/lookup.rb +25 -47
- data/lib/puppet/pops/merge_strategy.rb +73 -5
- data/lib/puppet/pops/model/factory.rb +38 -3
- data/lib/puppet/pops/model/model_label_provider.rb +10 -1
- data/lib/puppet/pops/model/model_meta.rb +19 -1
- data/lib/puppet/pops/model/model_tree_dumper.rb +18 -0
- data/lib/puppet/pops/parser/code_merger.rb +13 -1
- data/lib/puppet/pops/parser/egrammar.ra +65 -2
- data/lib/puppet/pops/parser/eparser.rb +1569 -1241
- data/lib/puppet/pops/parser/lexer2.rb +32 -1
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/parser_support.rb +25 -13
- data/lib/puppet/pops/patterns.rb +3 -0
- data/lib/puppet/pops/types/enumeration.rb +1 -2
- data/lib/puppet/pops/types/type_asserter.rb +16 -15
- data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
- data/lib/puppet/pops/types/type_calculator.rb +171 -1020
- data/lib/puppet/pops/types/type_factory.rb +87 -148
- data/lib/puppet/pops/types/type_mismatch_describer.rb +743 -0
- data/lib/puppet/pops/types/type_parser.rb +118 -129
- data/lib/puppet/pops/types/types.rb +1394 -255
- data/lib/puppet/pops/types/types_meta.rb +0 -234
- data/lib/puppet/pops/validation/checker4_0.rb +49 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +3 -1
- data/lib/puppet/pops/validation.rb +7 -2
- data/lib/puppet/pops.rb +19 -17
- data/lib/puppet/provider/augeas/augeas.rb +50 -0
- data/lib/puppet/provider/exec.rb +6 -1
- data/lib/puppet/provider/group/directoryservice.rb +10 -0
- data/lib/puppet/provider/package/dnf.rb +41 -0
- data/lib/puppet/provider/package/gem.rb +7 -2
- data/lib/puppet/provider/package/nim.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +1 -0
- data/lib/puppet/provider/package/windows/exe_package.rb +10 -8
- data/lib/puppet/provider/package/windows/msi_package.rb +4 -3
- data/lib/puppet/provider/package/windows/package.rb +9 -1
- data/lib/puppet/provider/package/yum.rb +20 -9
- data/lib/puppet/provider/service/bsd.rb +1 -1
- data/lib/puppet/provider/service/debian.rb +21 -0
- data/lib/puppet/provider/service/init.rb +6 -0
- data/lib/puppet/provider/service/launchd.rb +36 -7
- data/lib/puppet/provider/service/rcng.rb +51 -0
- data/lib/puppet/provider/service/redhat.rb +2 -1
- data/lib/puppet/provider/service/smf.rb +43 -2
- data/lib/puppet/provider/service/src.rb +27 -0
- data/lib/puppet/provider/service/systemd.rb +25 -5
- data/lib/puppet/provider/sshkey/parsed.rb +19 -9
- data/lib/puppet/provider/zone/solaris.rb +2 -2
- data/lib/puppet/reference/configuration.rb +10 -4
- data/lib/puppet/reference/report.rb +9 -12
- data/lib/puppet/reports.rb +5 -1
- data/lib/puppet/resource/capability_finder.rb +95 -0
- data/lib/puppet/resource/catalog.rb +47 -7
- data/lib/puppet/resource/status.rb +0 -2
- data/lib/puppet/resource/type.rb +238 -44
- data/lib/puppet/resource/type_collection.rb +60 -2
- data/lib/puppet/resource.rb +50 -73
- data/lib/puppet/settings/file_setting.rb +10 -9
- data/lib/puppet/settings.rb +2 -2
- data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
- data/lib/puppet/ssl/oids.rb +9 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
- data/lib/puppet/transaction/resource_harness.rb +9 -4
- data/lib/puppet/transaction.rb +8 -1
- data/lib/puppet/type/augeas.rb +8 -0
- data/lib/puppet/type/file/source.rb +14 -12
- data/lib/puppet/type/package.rb +9 -6
- data/lib/puppet/type/user.rb +4 -2
- data/lib/puppet/type.rb +78 -7
- data/lib/puppet/util/command_line.rb +4 -0
- data/lib/puppet/util/execution.rb +18 -2
- data/lib/puppet/util/tagging.rb +7 -1
- data/lib/puppet/util/windows/adsi.rb +5 -2
- data/lib/puppet/util/windows/security.rb +4 -1
- data/lib/puppet/util/windows/taskscheduler.rb +1 -1
- data/lib/puppet/util.rb +9 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +12 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +3 -0
- data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +18 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
- data/spec/integration/data_binding_spec.rb +229 -0
- data/spec/integration/file_bucket/file_spec.rb +2 -2
- data/spec/integration/parser/compiler_spec.rb +30 -24
- data/spec/integration/parser/resource_expressions_spec.rb +4 -4
- data/spec/integration/parser/undef_param_spec.rb +1 -1
- data/spec/integration/provider/package_spec.rb +3 -1
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
- data/spec/integration/ssl/certificate_request_spec.rb +0 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
- data/spec/integration/ssl/host_spec.rb +0 -1
- data/spec/integration/type/package_spec.rb +2 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +18 -0
- data/spec/lib/matchers/include_in_order.rb +2 -2
- data/spec/shared_behaviours/iterative_functions.rb +8 -8
- data/spec/spec_helper.rb +7 -0
- data/spec/unit/agent/locker_spec.rb +4 -4
- data/spec/unit/agent_spec.rb +0 -8
- data/spec/unit/application/agent_spec.rb +5 -0
- data/spec/unit/application/apply_spec.rb +9 -1
- data/spec/unit/application/filebucket_spec.rb +88 -2
- data/spec/unit/application/lookup_spec.rb +195 -0
- data/spec/unit/application/master_spec.rb +2 -2
- data/spec/unit/application_spec.rb +3 -3
- data/spec/unit/appmgmt_spec.rb +657 -0
- data/spec/unit/capability_spec.rb +414 -0
- data/spec/unit/configurer_spec.rb +7 -1
- data/spec/unit/context/trusted_information_spec.rb +24 -1
- data/spec/unit/daemon_spec.rb +18 -8
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +201 -0
- data/spec/unit/environments_spec.rb +2 -0
- data/spec/unit/face/node_spec.rb +1 -1
- data/spec/unit/file_bucket/dipper_spec.rb +210 -1
- data/spec/unit/file_serving/configuration_spec.rb +1 -1
- data/spec/unit/file_system_spec.rb +20 -0
- data/spec/unit/functions/assert_type_spec.rb +5 -7
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +2 -2
- data/spec/unit/functions/filter_spec.rb +18 -0
- data/spec/unit/functions/hiera_spec.rb +2 -2
- data/spec/unit/functions/lookup_spec.rb +200 -9
- data/spec/unit/functions/regsubst_spec.rb +17 -8
- data/spec/unit/functions/scanf_spec.rb +1 -1
- data/spec/unit/functions/split_spec.rb +2 -2
- data/spec/unit/functions/versioncmp_spec.rb +36 -0
- data/spec/unit/functions4_spec.rb +58 -72
- data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
- data/spec/unit/indirector/catalog/compiler_spec.rb +28 -8
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
- data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +52 -1
- data/spec/unit/indirector/indirection_spec.rb +13 -2
- data/spec/unit/indirector/request_spec.rb +8 -8
- data/spec/unit/indirector/ssl_file_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +236 -0
- data/spec/unit/module_tool/application_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
- data/spec/unit/module_tool/metadata_spec.rb +31 -2
- data/spec/unit/network/authconfig_spec.rb +62 -32
- data/spec/unit/network/authorization_spec.rb +30 -2
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/compression_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +14 -19
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/network/rights_spec.rb +3 -3
- data/spec/unit/node_spec.rb +27 -0
- data/spec/unit/parser/ast/leaf_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +86 -2
- data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
- data/spec/unit/parser/resource_spec.rb +2 -20
- data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
- data/spec/unit/pops/binder/injector_spec.rb +3 -3
- data/spec/unit/pops/evaluator/access_ops_spec.rb +13 -11
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +20 -11
- data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
- data/spec/unit/pops/label_provider_spec.rb +5 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +39 -0
- data/spec/unit/pops/parser/parse_application_spec.rb +40 -0
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -0
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +47 -0
- data/spec/unit/pops/parser/parse_site_spec.rb +38 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +18 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +427 -444
- data/spec/unit/pops/types/type_factory_spec.rb +12 -12
- data/spec/unit/pops/types/type_parser_spec.rb +15 -12
- data/spec/unit/pops/validator/validator_spec.rb +68 -0
- data/spec/unit/property_spec.rb +1 -1
- data/spec/unit/provider/augeas/augeas_spec.rb +50 -0
- data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +3 -0
- data/spec/unit/provider/package/dnf_spec.rb +92 -0
- data/spec/unit/provider/package/gem_spec.rb +7 -0
- data/spec/unit/provider/package/nim_spec.rb +6 -6
- data/spec/unit/provider/package/rpm_spec.rb +25 -2
- data/spec/unit/provider/package/windows/package_spec.rb +41 -0
- data/spec/unit/provider/package/yum_spec.rb +35 -12
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
- data/spec/unit/provider/service/debian_spec.rb +28 -0
- data/spec/unit/provider/service/gentoo_spec.rb +1 -0
- data/spec/unit/provider/service/init_spec.rb +6 -0
- data/spec/unit/provider/service/launchd_spec.rb +85 -10
- data/spec/unit/provider/service/openrc_spec.rb +1 -0
- data/spec/unit/provider/service/rcng_spec.rb +41 -0
- data/spec/unit/provider/service/redhat_spec.rb +8 -1
- data/spec/unit/provider/service/smf_spec.rb +30 -5
- data/spec/unit/provider/service/src_spec.rb +20 -4
- data/spec/unit/provider/service/systemd_spec.rb +79 -29
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -1
- data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +2 -1
- data/spec/unit/provider/zone/solaris_spec.rb +19 -0
- data/spec/unit/reports_spec.rb +10 -0
- data/spec/unit/resource/capability_finder_spec.rb +56 -0
- data/spec/unit/resource/catalog_spec.rb +31 -8
- data/spec/unit/resource/type_collection_spec.rb +23 -2
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +23 -5
- data/spec/unit/settings/file_setting_spec.rb +31 -0
- data/spec/unit/settings_spec.rb +91 -2
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
- data/spec/unit/ssl/certificate_authority_spec.rb +5 -3
- data/spec/unit/ssl/host_spec.rb +2 -2
- data/spec/unit/ssl/oids_spec.rb +8 -0
- data/spec/unit/transaction/additional_resource_generator_spec.rb +78 -5
- data/spec/unit/transaction/report_spec.rb +24 -1
- data/spec/unit/transaction_spec.rb +7 -0
- data/spec/unit/type/exec_spec.rb +16 -8
- data/spec/unit/type/host_spec.rb +4 -4
- data/spec/unit/type/package_spec.rb +1 -0
- data/spec/unit/type/tidy_spec.rb +4 -4
- data/spec/unit/type/user_spec.rb +14 -7
- data/spec/unit/type/vlan_spec.rb +1 -1
- data/spec/unit/type_spec.rb +1 -1
- data/spec/unit/util/ldap/generator_spec.rb +1 -1
- data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
- data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
- data/spec/unit/util/network_device_spec.rb +1 -1
- data/spec/unit/util/storage_spec.rb +5 -1
- data/spec/unit/util/windows/adsi_spec.rb +13 -0
- data/spec/unit/util_spec.rb +21 -2
- metadata +173 -7
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
- data/spec/integration/data_binding.rb +0 -104
|
@@ -4,6 +4,8 @@ module Puppet::Pops
|
|
|
4
4
|
# Merges to objects into one based on an implemented strategy.
|
|
5
5
|
#
|
|
6
6
|
class MergeStrategy
|
|
7
|
+
NOT_FOUND = Object.new.freeze
|
|
8
|
+
|
|
7
9
|
TypeAsserter = Puppet::Pops::Types::TypeAsserter
|
|
8
10
|
TypeParser = Puppet::Pops::Types::TypeParser
|
|
9
11
|
|
|
@@ -20,12 +22,14 @@ module Puppet::Pops
|
|
|
20
22
|
|
|
21
23
|
# Finds the merge strategy for the given _merge_, creates an instance of it and returns that instance.
|
|
22
24
|
#
|
|
23
|
-
# @param merge [String
|
|
25
|
+
# @param merge [Puppet::Pops::MergeStrategy,String,Hash<String,Object>,nil] The merge strategy. Can be a string or symbol denoting the key
|
|
24
26
|
# identifier or a hash with options where the key 'strategy' denotes the key
|
|
25
27
|
# @return [MergeStrategy] The matching merge strategy
|
|
26
28
|
#
|
|
27
29
|
def self.strategy(merge)
|
|
28
|
-
|
|
30
|
+
return merge if merge.is_a?(MergeStrategy)
|
|
31
|
+
merge = :first if merge.nil?
|
|
32
|
+
TypeAsserter.assert_instance_of("MergeStrategy 'merge' parameter", merge_t, merge)
|
|
29
33
|
if merge.is_a?(Hash)
|
|
30
34
|
merge_strategy = merge['strategy']
|
|
31
35
|
if merge_strategy.nil?
|
|
@@ -82,7 +86,7 @@ module Puppet::Pops
|
|
|
82
86
|
@options = options
|
|
83
87
|
end
|
|
84
88
|
|
|
85
|
-
# Merges the elements of _e1_ and _e2_
|
|
89
|
+
# Merges the elements of _e1_ and _e2_ according to the rules of this strategy and options given when this
|
|
86
90
|
# instance was created
|
|
87
91
|
#
|
|
88
92
|
# @param e1 [Object] The first element
|
|
@@ -95,6 +99,33 @@ module Puppet::Pops
|
|
|
95
99
|
assert_type('e2', value_t, e2))
|
|
96
100
|
end
|
|
97
101
|
|
|
102
|
+
# Merges the result of yielding the given _lookup_variants_ to a given block.
|
|
103
|
+
#
|
|
104
|
+
# @param lookup_variants [Array] The variants to pass as second argument to the given block
|
|
105
|
+
# @return [Object] the merged value.
|
|
106
|
+
# @yield [} ]
|
|
107
|
+
# @yieldparam variant [Object] each variant given in the _lookup_variants_ array.
|
|
108
|
+
# @yieldreturn [Object] the value to merge with other values
|
|
109
|
+
# @throws :no_such_key if the lookup was unsuccessful
|
|
110
|
+
#
|
|
111
|
+
def merge_lookup(lookup_variants)
|
|
112
|
+
result = lookup_variants.reduce(NOT_FOUND) do |memo, lookup_variant|
|
|
113
|
+
not_found = true
|
|
114
|
+
value = catch(:no_such_key) do
|
|
115
|
+
v = yield(lookup_variant)
|
|
116
|
+
not_found = false
|
|
117
|
+
v
|
|
118
|
+
end
|
|
119
|
+
if not_found
|
|
120
|
+
memo
|
|
121
|
+
else
|
|
122
|
+
memo.equal?(NOT_FOUND) ? convert_value(value) : merge(memo, value)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
throw :no_such_key if result == NOT_FOUND
|
|
126
|
+
result
|
|
127
|
+
end
|
|
128
|
+
|
|
98
129
|
# Converts a single value to the type expeced when peforming a merge of two elements
|
|
99
130
|
# @param value [Object] the value to convert
|
|
100
131
|
# @return [Object] the converted value
|
|
@@ -102,12 +133,20 @@ module Puppet::Pops
|
|
|
102
133
|
value
|
|
103
134
|
end
|
|
104
135
|
|
|
105
|
-
protected
|
|
106
|
-
|
|
107
136
|
def options
|
|
108
137
|
@options
|
|
109
138
|
end
|
|
110
139
|
|
|
140
|
+
def configuration
|
|
141
|
+
if @options.nil? || @options.empty?
|
|
142
|
+
self.class.key.to_s
|
|
143
|
+
else
|
|
144
|
+
@options.include?('strategy') ? @options : { 'strategy' => self.class.key.to_s }.merge(@options)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
protected
|
|
149
|
+
|
|
111
150
|
# Returns the type used to validate the options hash
|
|
112
151
|
#
|
|
113
152
|
# @return [Puppet::Pops::Types::PStructType] the puppet type
|
|
@@ -133,6 +172,35 @@ module Puppet::Pops
|
|
|
133
172
|
end
|
|
134
173
|
end
|
|
135
174
|
|
|
175
|
+
# Simple strategy that returns the first value found. It never merges any values.
|
|
176
|
+
#
|
|
177
|
+
class FirstFoundStrategy < MergeStrategy
|
|
178
|
+
def self.key
|
|
179
|
+
:first
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Returns the first value found
|
|
183
|
+
#
|
|
184
|
+
# @param lookup_variants [Array] The variants to pass as second argument to the given block
|
|
185
|
+
# @return [Object] the merged value
|
|
186
|
+
# @throws :no_such_key unless the lookup was successful
|
|
187
|
+
#
|
|
188
|
+
def merge_lookup(lookup_variants)
|
|
189
|
+
lookup_variants.each do |lookup_variant|
|
|
190
|
+
catch(:no_such_key) { return yield(lookup_variant) }
|
|
191
|
+
end
|
|
192
|
+
throw :no_such_key
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
protected
|
|
196
|
+
|
|
197
|
+
def value_t
|
|
198
|
+
@value_t ||= Puppet::Pops::Types::PAnyType::DEFAULT
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
MergeStrategy.add_strategy(self)
|
|
202
|
+
end
|
|
203
|
+
|
|
136
204
|
# Produces a new hash by merging hash e1 with hash e2 in such a way that the values of duplicate keys
|
|
137
205
|
# will be those of e1
|
|
138
206
|
#
|
|
@@ -53,6 +53,14 @@ class Puppet::Pops::Model::Factory
|
|
|
53
53
|
|
|
54
54
|
# Building of Model classes
|
|
55
55
|
|
|
56
|
+
def build_Application(o, n, ps, body)
|
|
57
|
+
o.name = n
|
|
58
|
+
ps.each { |p| o.addParameters(build(p)) }
|
|
59
|
+
b = f_build_body(body)
|
|
60
|
+
o.body = b.current if b
|
|
61
|
+
o
|
|
62
|
+
end
|
|
63
|
+
|
|
56
64
|
def build_ArithmeticExpression(o, op, a, b)
|
|
57
65
|
o.operator = op
|
|
58
66
|
build_BinaryExpression(o, a, b)
|
|
@@ -151,8 +159,9 @@ class Puppet::Pops::Model::Factory
|
|
|
151
159
|
o
|
|
152
160
|
end
|
|
153
161
|
|
|
154
|
-
def build_ReservedWord(o, name)
|
|
162
|
+
def build_ReservedWord(o, name, future)
|
|
155
163
|
o.word = name
|
|
164
|
+
o.future = future
|
|
156
165
|
o
|
|
157
166
|
end
|
|
158
167
|
|
|
@@ -230,6 +239,15 @@ class Puppet::Pops::Model::Factory
|
|
|
230
239
|
o
|
|
231
240
|
end
|
|
232
241
|
|
|
242
|
+
def build_CapabilityMapping(o, kind, component, capability, mappings)
|
|
243
|
+
o.kind = kind
|
|
244
|
+
component = component.current if component.is_a?(Puppet::Pops::Model::Factory)
|
|
245
|
+
o.component = component
|
|
246
|
+
o.capability = capability
|
|
247
|
+
o.mappings = mappings.map { |m| build(m) }
|
|
248
|
+
o
|
|
249
|
+
end
|
|
250
|
+
|
|
233
251
|
# @param o [Model::NodeDefinition]
|
|
234
252
|
# @param hosts [Array<Expression>] host matches
|
|
235
253
|
# @param parent [Expression] parent node matcher
|
|
@@ -242,6 +260,14 @@ class Puppet::Pops::Model::Factory
|
|
|
242
260
|
o
|
|
243
261
|
end
|
|
244
262
|
|
|
263
|
+
# @param o [Model::SiteDefinition]
|
|
264
|
+
# @param body [Object] see {#f_build_body}
|
|
265
|
+
def build_SiteDefinition(o, body)
|
|
266
|
+
b = f_build_body(body)
|
|
267
|
+
o.body = b.current if b
|
|
268
|
+
o
|
|
269
|
+
end
|
|
270
|
+
|
|
245
271
|
def build_Parameter(o, name, expr)
|
|
246
272
|
o.name = name
|
|
247
273
|
o.value = build(expr) if expr # don't build a nil/nop
|
|
@@ -583,6 +609,7 @@ class Puppet::Pops::Model::Factory
|
|
|
583
609
|
|
|
584
610
|
def self.NODE(hosts, parent, body); new(Model::NodeDefinition, hosts, parent, body); end
|
|
585
611
|
|
|
612
|
+
def self.SITE(body); new(Model::SiteDefinition, body); end
|
|
586
613
|
|
|
587
614
|
# Parameters
|
|
588
615
|
|
|
@@ -638,8 +665,8 @@ class Puppet::Pops::Model::Factory
|
|
|
638
665
|
LAMBDA(params, new(Model::EppExpression, parameters_specified, body))
|
|
639
666
|
end
|
|
640
667
|
|
|
641
|
-
def self.RESERVED(name)
|
|
642
|
-
new(Model::ReservedWord, name)
|
|
668
|
+
def self.RESERVED(name, future=false)
|
|
669
|
+
new(Model::ReservedWord, name, future)
|
|
643
670
|
end
|
|
644
671
|
|
|
645
672
|
# TODO: This is the same a fqn factory method, don't know if callers to fqn and QNAME can live with the
|
|
@@ -754,6 +781,14 @@ class Puppet::Pops::Model::Factory
|
|
|
754
781
|
new(Model::ResourceTypeDefinition, name, parameters, body)
|
|
755
782
|
end
|
|
756
783
|
|
|
784
|
+
def self.CAPABILITY_MAPPING(kind, component, cap_name, mappings)
|
|
785
|
+
new(Model::CapabilityMapping, kind, component, cap_name, mappings)
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
def self.APPLICATION(name, parameters, body)
|
|
789
|
+
new(Model::Application, name, parameters, body)
|
|
790
|
+
end
|
|
791
|
+
|
|
757
792
|
def self.FUNCTION(name, parameters, body)
|
|
758
793
|
new(Model::FunctionDefinition, name, parameters, body)
|
|
759
794
|
end
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
# As an example, if object is an ArithmeticExpression with operator +, `#a_an(o)` produces "a '+' Expression",
|
|
3
3
|
# #the(o) produces "the + Expression", and #label produces "+ Expression".
|
|
4
4
|
#
|
|
5
|
-
class Puppet::Pops::Model::ModelLabelProvider
|
|
5
|
+
class Puppet::Pops::Model::ModelLabelProvider
|
|
6
|
+
include Puppet::Pops::LabelProvider
|
|
7
|
+
|
|
6
8
|
def initialize
|
|
7
9
|
@@label_visitor ||= Puppet::Pops::Visitor.new(self,"label",0,0)
|
|
8
10
|
end
|
|
@@ -56,6 +58,7 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
|
|
|
56
58
|
def label_HeredocExpression o ; "'@(#{o.syntax})' expression" end
|
|
57
59
|
def label_HostClassDefinition o ; "Host Class Definition" end
|
|
58
60
|
def label_NodeDefinition o ; "Node Definition" end
|
|
61
|
+
def label_SiteDefinition o ; "Site Definition" end
|
|
59
62
|
def label_ResourceTypeDefinition o ; "'define' expression" end
|
|
60
63
|
def label_ResourceOverrideExpression o ; "Resource Override" end
|
|
61
64
|
def label_Parameter o ; "Parameter Definition" end
|
|
@@ -64,6 +67,7 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
|
|
|
64
67
|
def label_UnlessExpression o ; "'unless' Statement" end
|
|
65
68
|
def label_CallNamedFunctionExpression o ; "Function Call" end
|
|
66
69
|
def label_CallMethodExpression o ; "Method call" end
|
|
70
|
+
def label_CapabilityMapping o ; "Capability Mapping" end
|
|
67
71
|
def label_CaseExpression o ; "'case' statement" end
|
|
68
72
|
def label_CaseOption o ; "Case Option" end
|
|
69
73
|
def label_RenderStringExpression o ; "Epp Text" end
|
|
@@ -97,6 +101,11 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
|
|
|
97
101
|
end
|
|
98
102
|
end
|
|
99
103
|
|
|
104
|
+
def label_Resource o
|
|
105
|
+
'Resource Statement'
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
|
|
100
109
|
def label_Class o
|
|
101
110
|
if o <= Puppet::Pops::Types::PAnyType
|
|
102
111
|
simple_name = o.name.split('::').last
|
|
@@ -291,6 +291,9 @@ module Puppet::Pops::Model
|
|
|
291
291
|
class ResourceTypeDefinition < NamedDefinition
|
|
292
292
|
end
|
|
293
293
|
|
|
294
|
+
class Application < NamedDefinition
|
|
295
|
+
end
|
|
296
|
+
|
|
294
297
|
# A node definition matches hosts using Strings, or Regular expressions. It may inherit from
|
|
295
298
|
# a parent node (also using a String or Regular expression).
|
|
296
299
|
#
|
|
@@ -300,6 +303,10 @@ module Puppet::Pops::Model
|
|
|
300
303
|
contains_one_uni 'body', Expression
|
|
301
304
|
end
|
|
302
305
|
|
|
306
|
+
class SiteDefinition < Definition
|
|
307
|
+
contains_one_uni 'body', Expression
|
|
308
|
+
end
|
|
309
|
+
|
|
303
310
|
class LocatableExpression < Expression
|
|
304
311
|
has_many_attr 'line_offsets', Integer
|
|
305
312
|
has_attr 'locator', Object, :lowerBound => 1, :transient => true
|
|
@@ -467,9 +474,12 @@ module Puppet::Pops::Model
|
|
|
467
474
|
has_attr 'value', String, :lowerBound => 1
|
|
468
475
|
end
|
|
469
476
|
|
|
470
|
-
# Represents a parsed reserved word
|
|
477
|
+
# Represents a parsed reserved word. If the 'future' attribute is true
|
|
478
|
+
# the ReserwedWord functions as a deprecation warning + string value
|
|
479
|
+
#
|
|
471
480
|
class ReservedWord < LiteralValue
|
|
472
481
|
has_attr 'word', String, :lowerBound => 1
|
|
482
|
+
has_attr 'future', Boolean
|
|
473
483
|
end
|
|
474
484
|
|
|
475
485
|
# A DSL CLASSREF (one or multiple parts separated by '::' where (at least) the first part starts with an upper case letter).
|
|
@@ -531,6 +541,14 @@ module Puppet::Pops::Model
|
|
|
531
541
|
contains_many_uni 'bodies', ResourceBody
|
|
532
542
|
end
|
|
533
543
|
|
|
544
|
+
class CapabilityMapping < Definition
|
|
545
|
+
# 'produces' or 'consumes'
|
|
546
|
+
has_attr 'kind', String, :lowerBound => 1
|
|
547
|
+
has_attr 'capability', String, :lowerBound => 1
|
|
548
|
+
contains_one_uni 'component', Expression, :lowerBound => 1
|
|
549
|
+
contains_many_uni 'mappings', AbstractAttributeOperation
|
|
550
|
+
end
|
|
551
|
+
|
|
534
552
|
# A resource defaults sets defaults for a resource type. This class inherits from AbstractResource
|
|
535
553
|
# but does only support the :regular form (this is intentional to be able to produce better error messages
|
|
536
554
|
# when illegal forms are applied to a model.
|
|
@@ -32,6 +32,10 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
|
|
|
32
32
|
do_dump(o.current)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
+
def dump_Application o
|
|
36
|
+
["application", o.name, do_dump(o.parameters), do_dump(o.body)]
|
|
37
|
+
end
|
|
38
|
+
|
|
35
39
|
def dump_ArithmeticExpression o
|
|
36
40
|
[o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
|
|
37
41
|
end
|
|
@@ -230,6 +234,16 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
|
|
|
230
234
|
result
|
|
231
235
|
end
|
|
232
236
|
|
|
237
|
+
def dump_SiteDefinition o
|
|
238
|
+
result = ["site"]
|
|
239
|
+
if o.body
|
|
240
|
+
result << do_dump(o.body)
|
|
241
|
+
else
|
|
242
|
+
result << []
|
|
243
|
+
end
|
|
244
|
+
result
|
|
245
|
+
end
|
|
246
|
+
|
|
233
247
|
def dump_NamedDefinition o
|
|
234
248
|
# the nil must be replaced with a string
|
|
235
249
|
result = [nil, o.name]
|
|
@@ -248,6 +262,10 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
|
|
|
248
262
|
result
|
|
249
263
|
end
|
|
250
264
|
|
|
265
|
+
def dump_CapabilityMapping o
|
|
266
|
+
[o.kind, do_dump(o.component), o.capability, do_dump(o.mappings)]
|
|
267
|
+
end
|
|
268
|
+
|
|
251
269
|
def dump_ResourceOverrideExpression o
|
|
252
270
|
form = o.form == :regular ? '' : o.form.to_s + "-"
|
|
253
271
|
result = [form+"override", do_dump(o.resources), :indent]
|
|
@@ -8,9 +8,21 @@ class Puppet::Pops::Parser::CodeMerger
|
|
|
8
8
|
# this is a bit brute force as the result is already 3x ast with wrapped 4x content
|
|
9
9
|
# this could be combined in a more elegant way, but it is only used to process a handful of files
|
|
10
10
|
# at the beginning of a puppet run. TODO: Revisit for Puppet 4x when there is no 3x ast at the top.
|
|
11
|
+
# PUP-5299, some sites have thousands of entries, and run out of stack when evaluating - the logic
|
|
12
|
+
# below maps the logic as flatly as possible.
|
|
11
13
|
#
|
|
12
14
|
children = parse_results.select {|x| !x.nil? && x.code}.reduce([]) do |memo, parsed_class|
|
|
13
|
-
|
|
15
|
+
case parsed_class.code
|
|
16
|
+
when Puppet::Parser::AST::BlockExpression
|
|
17
|
+
# the BlockExpression wraps a single 4x instruction that is most likely wrapped in a Factory
|
|
18
|
+
memo += parsed_class.code.children.map {|c| c.is_a?(Puppet::Pops::Model::Factory) ? c.model : c }
|
|
19
|
+
when Puppet::Pops::Model::Factory
|
|
20
|
+
# If it is a 4x instruction wrapped in a Factory
|
|
21
|
+
memo += parsed_class.code.model
|
|
22
|
+
else
|
|
23
|
+
# It is the instruction directly
|
|
24
|
+
memo << parsed_class.code
|
|
25
|
+
end
|
|
14
26
|
end
|
|
15
27
|
Puppet::Parser::AST::BlockExpression.new(:children => children)
|
|
16
28
|
end
|
|
@@ -22,6 +22,8 @@ token RENDER_STRING RENDER_EXPR EPP_START EPP_END EPP_END_TRIM
|
|
|
22
22
|
token FUNCTION
|
|
23
23
|
token PRIVATE ATTR TYPE
|
|
24
24
|
token FUNCTION
|
|
25
|
+
token APPLICATION_R CONSUMES_R PRODUCES_R SITE_R
|
|
26
|
+
token APPLICATION PRODUCES CONSUMES SITE
|
|
25
27
|
token LOW
|
|
26
28
|
|
|
27
29
|
prechigh
|
|
@@ -192,8 +194,9 @@ resource
|
|
|
192
194
|
#
|
|
193
195
|
expression
|
|
194
196
|
: primary_expression
|
|
197
|
+
| capability_mapping
|
|
195
198
|
| call_function_expression
|
|
196
|
-
|
|
|
199
|
+
| bracketed_expression
|
|
197
200
|
| expression IN expression { result = val[0].in val[2] ; loc result, val[1] }
|
|
198
201
|
| expression MATCH expression { result = val[0] =~ val[2] ; loc result, val[1] }
|
|
199
202
|
| expression NOMATCH expression { result = val[0].mne val[2] ; loc result, val[1] }
|
|
@@ -218,6 +221,8 @@ expression
|
|
|
218
221
|
| expression QMARK selector_entries { result = val[0].select(*val[2]) ; loc result, val[0] }
|
|
219
222
|
| LPAREN assignment RPAREN { result = val[1].paren() ; loc result, val[0] }
|
|
220
223
|
|
|
224
|
+
bracketed_expression
|
|
225
|
+
: expression LBRACK expressions endcomma RBRACK =LBRACK { result = val[0][*val[2]] ; loc result, val[0], val[4] }
|
|
221
226
|
|
|
222
227
|
#---EXPRESSIONS
|
|
223
228
|
# (i.e. "argument list")
|
|
@@ -237,8 +242,12 @@ primary_expression
|
|
|
237
242
|
| if_expression
|
|
238
243
|
| unless_expression
|
|
239
244
|
| definition_expression
|
|
245
|
+
# @todo lutter 2014-09-03: application declarations must be at the toplevel
|
|
246
|
+
# in a manifest - Should be validated, not handled here. helindbe 2015-09-10
|
|
247
|
+
| application_expression
|
|
240
248
|
| hostclass_expression
|
|
241
249
|
| node_definition_expression
|
|
250
|
+
| site_definition_expression
|
|
242
251
|
| epp_render_expression
|
|
243
252
|
| function_definition
|
|
244
253
|
| reserved_word
|
|
@@ -455,7 +464,10 @@ attribute_operations
|
|
|
455
464
|
attribute_name
|
|
456
465
|
: NAME
|
|
457
466
|
| keyword
|
|
458
|
-
|
|
467
|
+
| APPLICATION_R
|
|
468
|
+
| CONSUMES_R
|
|
469
|
+
| PRODUCES_R
|
|
470
|
+
| SITE_R
|
|
459
471
|
|
|
460
472
|
# In this version, illegal combinations are validated instead of producing syntax errors
|
|
461
473
|
# (Can give nicer error message "+> is not applicable to...")
|
|
@@ -488,6 +500,33 @@ definition_expression
|
|
|
488
500
|
end
|
|
489
501
|
}
|
|
490
502
|
|
|
503
|
+
#---APPLICATION
|
|
504
|
+
application_expression
|
|
505
|
+
: APPLICATION classname parameter_list LBRACE opt_statements RBRACE {
|
|
506
|
+
result = add_definition(Factory.APPLICATION(classname(val[1][:value]), val[2], val[4]))
|
|
507
|
+
loc result, val[0], val[5]
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
capability_mapping
|
|
511
|
+
: classname capability_kw classname LBRACE attribute_operations endcomma RBRACE {
|
|
512
|
+
result = Factory.CAPABILITY_MAPPING(val[1][:value],
|
|
513
|
+
Factory.QNAME(classname(val[0][:value])),
|
|
514
|
+
classname(val[2][:value]), val[4])
|
|
515
|
+
loc result, val[0], val[6]
|
|
516
|
+
add_mapping(result)
|
|
517
|
+
}
|
|
518
|
+
| bracketed_expression capability_kw classname LBRACE attribute_operations endcomma RBRACE {
|
|
519
|
+
result = Factory.CAPABILITY_MAPPING(val[1][:value],
|
|
520
|
+
val[0],
|
|
521
|
+
classname(val[2][:value]), val[4])
|
|
522
|
+
loc result, val[0], val[6]
|
|
523
|
+
add_mapping(result)
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
capability_kw
|
|
527
|
+
: PRODUCES
|
|
528
|
+
| CONSUMES
|
|
529
|
+
|
|
491
530
|
#---HOSTCLASS
|
|
492
531
|
#
|
|
493
532
|
# Produces Model::HostClassDefinition
|
|
@@ -524,6 +563,20 @@ hostclass_expression
|
|
|
524
563
|
: classname
|
|
525
564
|
| DEFAULT
|
|
526
565
|
|
|
566
|
+
#---SITE
|
|
567
|
+
#
|
|
568
|
+
# Produces Model::SiteDefinition
|
|
569
|
+
#
|
|
570
|
+
site_definition_expression
|
|
571
|
+
: SITE LBRACE statements RBRACE {
|
|
572
|
+
result = add_definition(Factory.SITE(val[2]))
|
|
573
|
+
loc result, val[0], val[3]
|
|
574
|
+
}
|
|
575
|
+
| SITE LBRACE RBRACE {
|
|
576
|
+
result = add_definition(Factory.SITE(nil))
|
|
577
|
+
loc result, val[0], val[2]
|
|
578
|
+
}
|
|
579
|
+
|
|
527
580
|
#---NODE
|
|
528
581
|
#
|
|
529
582
|
# Produces Model::NodeDefinition
|
|
@@ -583,6 +636,10 @@ classname
|
|
|
583
636
|
: NAME
|
|
584
637
|
| WORD
|
|
585
638
|
| CLASSREF
|
|
639
|
+
| APPLICATION_R
|
|
640
|
+
| CONSUMES_R
|
|
641
|
+
| PRODUCES_R
|
|
642
|
+
| SITE_R
|
|
586
643
|
| CLASS { error val[0], "'class' is not a valid classname" }
|
|
587
644
|
|
|
588
645
|
# Produces Array<Model::Parameter>
|
|
@@ -630,6 +687,10 @@ reserved_word
|
|
|
630
687
|
: PRIVATE { result = Factory.RESERVED(val[0][:value]) ; loc result, val[0] }
|
|
631
688
|
| TYPE { result = Factory.RESERVED(val[0][:value]) ; loc result, val[0] }
|
|
632
689
|
| ATTR { result = Factory.RESERVED(val[0][:value]) ; loc result, val[0] }
|
|
690
|
+
| APPLICATION_R { result = Factory.RESERVED(val[0][:value], true) ; loc result, val[0] }
|
|
691
|
+
| CONSUMES_R { result = Factory.RESERVED(val[0][:value], true) ; loc result, val[0] }
|
|
692
|
+
| PRODUCES_R { result = Factory.RESERVED(val[0][:value], true) ; loc result, val[0] }
|
|
693
|
+
| SITE_R { result = Factory.RESERVED(val[0][:value], true) ; loc result, val[0] }
|
|
633
694
|
|
|
634
695
|
#---LITERALS (dynamic and static)
|
|
635
696
|
#
|
|
@@ -734,6 +795,8 @@ keyword
|
|
|
734
795
|
| ATTR
|
|
735
796
|
| FUNCTION
|
|
736
797
|
| PRIVATE
|
|
798
|
+
| APPLICATION
|
|
799
|
+
| PRODUCES
|
|
737
800
|
|
|
738
801
|
nil
|
|
739
802
|
: { result = nil}
|