puppet 3.4.3 → 3.5.0.rc1
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.
- data/CONTRIBUTING.md +6 -6
- data/Gemfile +22 -16
- data/LICENSE +1 -1
- data/README.md +33 -11
- data/Rakefile +1 -1
- data/conf/auth.conf +4 -0
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/control +6 -6
- data/ext/ips/transforms +1 -1
- data/ext/nagios/naggen +1 -1
- data/ext/project_data.yaml +21 -1
- data/ext/puppet-test +3 -3
- data/ext/redhat/puppet.spec.erb +28 -2
- data/ext/suse/puppet.spec +1 -1
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/service/daemon.rb +99 -20
- data/lib/hiera_puppet.rb +2 -2
- data/lib/puppet.rb +68 -5
- data/lib/puppet/agent.rb +5 -1
- data/lib/puppet/application.rb +20 -11
- data/lib/puppet/application/agent.rb +1 -1
- data/lib/puppet/application/apply.rb +61 -41
- data/lib/puppet/application/cert.rb +3 -3
- data/lib/puppet/application/device.rb +7 -8
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +3 -3
- data/lib/puppet/application/kick.rb +2 -2
- data/lib/puppet/application/master.rb +1 -1
- data/lib/puppet/application/queue.rb +9 -9
- data/lib/puppet/application/resource.rb +2 -2
- data/lib/puppet/bindings.rb +6 -6
- data/lib/puppet/configurer.rb +17 -14
- data/lib/puppet/configurer/fact_handler.rb +1 -1
- data/lib/puppet/confine/any.rb +26 -0
- data/lib/puppet/confine/exists.rb +1 -1
- data/lib/puppet/confiner.rb +1 -0
- data/lib/puppet/context.rb +55 -0
- data/lib/puppet/context/trusted_information.rb +56 -0
- data/lib/puppet/defaults.rb +97 -26
- data/lib/puppet/environments.rb +187 -0
- data/lib/puppet/error.rb +2 -1
- data/lib/puppet/external/pson/common.rb +1 -1
- data/lib/puppet/external/pson/pure/generator.rb +1 -1
- data/lib/puppet/external/pson/pure/parser.rb +1 -1
- data/lib/puppet/face/config.rb +73 -15
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/help.rb +2 -1
- data/lib/puppet/face/help/action.erb +1 -0
- data/lib/puppet/face/help/face.erb +1 -0
- data/lib/puppet/face/help/global.erb +1 -0
- data/lib/puppet/face/help/man.erb +9 -8
- data/lib/puppet/face/module/list.rb +13 -7
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/parser.rb +11 -5
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +2 -2
- data/lib/puppet/feature/libuser.rb +1 -1
- data/lib/puppet/feature/msgpack.rb +2 -0
- data/lib/puppet/feature/rails.rb +2 -2
- data/lib/puppet/file_bucket/dipper.rb +9 -9
- data/lib/puppet/file_bucket/file.rb +9 -5
- data/lib/puppet/file_serving/base.rb +1 -1
- data/lib/puppet/file_serving/configuration.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +3 -3
- data/lib/puppet/file_serving/content.rb +2 -2
- data/lib/puppet/file_serving/fileset.rb +4 -4
- data/lib/puppet/file_serving/metadata.rb +69 -15
- data/lib/puppet/file_serving/mount/file.rb +1 -1
- data/lib/puppet/file_system.rb +361 -1
- data/lib/puppet/file_system/file18.rb +3 -3
- data/lib/puppet/file_system/file19.rb +3 -3
- data/lib/puppet/file_system/file19windows.rb +18 -23
- data/lib/puppet/file_system/file_impl.rb +145 -0
- data/lib/puppet/file_system/memory_file.rb +23 -9
- data/lib/puppet/file_system/memory_impl.rb +64 -0
- data/lib/puppet/forge.rb +4 -3
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/graph/relationship_graph.rb +7 -7
- data/lib/puppet/indirector.rb +1 -0
- data/lib/puppet/indirector/catalog/compiler.rb +3 -30
- data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
- data/lib/puppet/indirector/catalog/static_compiler.rb +3 -7
- data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
- data/lib/puppet/indirector/direct_file_server.rb +2 -2
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/face.rb +3 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +25 -15
- data/lib/puppet/indirector/file_metadata/file.rb +1 -1
- data/lib/puppet/indirector/file_server.rb +1 -1
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +4 -4
- data/lib/puppet/indirector/key/file.rb +8 -5
- data/lib/puppet/indirector/ldap.rb +1 -1
- data/lib/puppet/indirector/memory.rb +4 -0
- data/lib/puppet/indirector/msgpack.rb +82 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +3 -3
- data/lib/puppet/indirector/node/msgpack.rb +7 -0
- data/lib/puppet/indirector/node/yaml.rb +15 -0
- data/lib/puppet/indirector/queue.rb +3 -2
- data/lib/puppet/indirector/report/msgpack.rb +11 -0
- data/lib/puppet/indirector/request.rb +17 -20
- data/lib/puppet/indirector/resource/rest.rb +1 -1
- data/lib/puppet/indirector/resource_type/parser.rb +3 -13
- data/lib/puppet/indirector/rest.rb +6 -7
- data/lib/puppet/indirector/ssl_file.rb +7 -7
- data/lib/puppet/indirector/yaml.rb +9 -13
- data/lib/puppet/metatype/manager.rb +12 -7
- data/lib/puppet/module.rb +14 -9
- data/lib/puppet/module_tool.rb +21 -26
- data/lib/puppet/module_tool/applications/application.rb +1 -1
- data/lib/puppet/module_tool/applications/generator.rb +2 -1
- data/lib/puppet/module_tool/applications/installer.rb +9 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +10 -7
- data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +11 -8
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/contents_description.rb +2 -0
- data/lib/puppet/module_tool/dependency.rb +4 -5
- data/lib/puppet/module_tool/errors.rb +2 -0
- data/lib/puppet/module_tool/install_directory.rb +3 -0
- data/lib/puppet/module_tool/metadata.rb +3 -5
- data/lib/puppet/module_tool/modulefile.rb +3 -0
- data/lib/puppet/module_tool/shared_behaviors.rb +6 -1
- data/lib/puppet/module_tool/skeleton.rb +3 -0
- data/lib/puppet/module_tool/tar.rb +3 -0
- data/lib/puppet/network/auth_config_parser.rb +1 -1
- data/lib/puppet/network/authconfig.rb +5 -2
- data/lib/puppet/network/authentication.rb +7 -2
- data/lib/puppet/network/authorization.rb +2 -2
- data/lib/puppet/network/format_support.rb +4 -0
- data/lib/puppet/network/formats.rb +9 -14
- data/lib/puppet/network/http.rb +11 -0
- data/lib/puppet/network/http/api.rb +0 -2
- data/lib/puppet/network/http/api/v1.rb +146 -11
- data/lib/puppet/network/http/api/v2.rb +32 -0
- data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
- data/lib/puppet/network/http/api/v2/environments.rb +21 -0
- data/lib/puppet/network/http/connection.rb +94 -37
- data/lib/puppet/network/http/error.rb +69 -0
- data/lib/puppet/network/http/handler.rb +28 -196
- data/lib/puppet/network/http/issues.rb +9 -0
- data/lib/puppet/network/http/memory_response.rb +13 -0
- data/lib/puppet/network/http/rack/rest.rb +10 -18
- data/lib/puppet/network/http/request.rb +56 -0
- data/lib/puppet/network/http/response.rb +11 -0
- data/lib/puppet/network/http/route.rb +91 -0
- data/lib/puppet/network/http/webrick.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +7 -12
- data/lib/puppet/network/http_pool.rb +3 -3
- data/lib/puppet/network/rights.rb +4 -4
- data/lib/puppet/node.rb +23 -14
- data/lib/puppet/node/environment.rb +149 -125
- data/lib/puppet/node/facts.rb +6 -5
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/block_expression.rb +1 -6
- data/lib/puppet/parser/ast/collexpr.rb +54 -2
- data/lib/puppet/parser/ast/lambda.rb +9 -0
- data/lib/puppet/parser/ast/leaf.rb +15 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
- data/lib/puppet/parser/code_merger.rb +13 -0
- data/lib/puppet/parser/collector.rb +1 -1
- data/lib/puppet/parser/compiler.rb +28 -30
- data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
- data/lib/puppet/parser/e_parser_adapter.rb +0 -1
- data/lib/puppet/parser/files.rb +12 -7
- data/lib/puppet/parser/functions.rb +36 -29
- data/lib/puppet/parser/functions/collect.rb +1 -1
- data/lib/puppet/parser/functions/defined.rb +40 -16
- data/lib/puppet/parser/functions/each.rb +55 -41
- data/lib/puppet/parser/functions/epp.rb +41 -0
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/file.rb +1 -1
- data/lib/puppet/parser/functions/filter.rb +68 -16
- data/lib/puppet/parser/functions/generate.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +3 -2
- data/lib/puppet/parser/functions/inline_epp.rb +79 -0
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +127 -27
- data/lib/puppet/parser/functions/map.rb +64 -12
- data/lib/puppet/parser/functions/reduce.rb +40 -16
- data/lib/puppet/parser/functions/select.rb +1 -1
- data/lib/puppet/parser/functions/slice.rb +42 -23
- data/lib/puppet/parser/grammar.ra +3 -0
- data/lib/puppet/parser/lexer.rb +10 -9
- data/lib/puppet/parser/parser.rb +15 -12
- data/lib/puppet/parser/parser_factory.rb +26 -1
- data/lib/puppet/parser/parser_support.rb +13 -4
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +246 -97
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +13 -2
- data/lib/puppet/pops.rb +15 -1
- data/lib/puppet/pops/adapters.rb +64 -32
- data/lib/puppet/pops/binder/binder.rb +122 -150
- data/lib/puppet/pops/binder/binder_issues.rb +1 -21
- data/lib/puppet/pops/binder/bindings_checker.rb +0 -20
- data/lib/puppet/pops/binder/bindings_composer.rb +4 -70
- data/lib/puppet/pops/binder/bindings_factory.rb +16 -58
- data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -3
- data/lib/puppet/pops/binder/bindings_loader.rb +13 -4
- data/lib/puppet/pops/binder/bindings_model.rb +17 -31
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +2 -20
- data/lib/puppet/pops/binder/config/binder_config.rb +8 -40
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +2 -43
- data/lib/puppet/pops/binder/config/issues.rb +1 -21
- data/lib/puppet/pops/binder/injector.rb +86 -7
- data/lib/puppet/pops/binder/injector_entry.rb +6 -2
- data/lib/puppet/pops/binder/key_factory.rb +7 -1
- data/lib/puppet/pops/binder/lookup.rb +191 -0
- data/lib/puppet/pops/binder/producers.rb +5 -5
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +2 -3
- data/lib/puppet/pops/binder/system_bindings.rb +4 -16
- data/lib/puppet/pops/containment.rb +72 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
- data/lib/puppet/pops/evaluator/closure.rb +57 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
- data/lib/puppet/pops/issue_reporter.rb +8 -4
- data/lib/puppet/pops/issues.rb +199 -4
- data/lib/puppet/pops/label_provider.rb +5 -0
- data/lib/puppet/pops/model/ast_transformer.rb +55 -31
- data/lib/puppet/pops/model/ast_tree_dumper.rb +9 -1
- data/lib/puppet/pops/model/factory.rb +265 -111
- data/lib/puppet/pops/model/model.rb +179 -140
- data/lib/puppet/pops/model/model_label_provider.rb +38 -9
- data/lib/puppet/pops/model/model_tree_dumper.rb +38 -13
- data/lib/puppet/pops/parser/code_merger.rb +17 -0
- data/lib/puppet/pops/parser/egrammar.ra +110 -61
- data/lib/puppet/pops/parser/eparser.rb +1415 -1092
- data/lib/puppet/pops/parser/epp_parser.rb +51 -0
- data/lib/puppet/pops/parser/epp_support.rb +247 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +53 -15
- data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
- data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
- data/lib/puppet/pops/parser/lexer.rb +83 -192
- data/lib/puppet/pops/parser/lexer2.rb +684 -0
- data/lib/puppet/pops/parser/lexer_support.rb +107 -0
- data/lib/puppet/pops/parser/locatable.rb +23 -0
- data/lib/puppet/pops/parser/locator.rb +291 -0
- data/lib/puppet/pops/parser/makefile +1 -8
- data/lib/puppet/pops/parser/parser_support.rb +76 -48
- data/lib/puppet/pops/parser/slurp_support.rb +95 -0
- data/lib/puppet/pops/patterns.rb +13 -4
- data/lib/puppet/pops/types/class_loader.rb +2 -2
- data/lib/puppet/pops/types/enumeration.rb +34 -0
- data/lib/puppet/pops/types/type_calculator.rb +983 -58
- data/lib/puppet/pops/types/type_factory.rb +203 -15
- data/lib/puppet/pops/types/type_parser.rb +355 -12
- data/lib/puppet/pops/types/types.rb +314 -24
- data/lib/puppet/pops/utils.rb +23 -7
- data/lib/puppet/pops/validation.rb +14 -8
- data/lib/puppet/pops/validation/checker3_1.rb +17 -12
- data/lib/puppet/pops/validation/checker4_0.rb +514 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
- data/lib/puppet/pops/visitor.rb +146 -4
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider.rb +47 -26
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/augeas/augeas.rb +11 -11
- data/lib/puppet/provider/cron/crontab.rb +10 -1
- data/lib/puppet/provider/exec.rb +1 -1
- data/lib/puppet/provider/exec/posix.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/file/posix.rb +2 -2
- data/lib/puppet/provider/file/windows.rb +15 -9
- data/lib/puppet/provider/group/aix.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +3 -3
- data/lib/puppet/provider/mount.rb +7 -0
- data/lib/puppet/provider/mount/parsed.rb +0 -1
- data/lib/puppet/provider/naginator.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +1 -1
- data/lib/puppet/provider/package/appdmg.rb +1 -4
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +1 -1
- data/lib/puppet/provider/package/blastwave.rb +1 -1
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +3 -3
- data/lib/puppet/provider/package/openbsd.rb +6 -4
- data/lib/puppet/provider/package/pacman.rb +58 -5
- data/lib/puppet/provider/package/pip.rb +2 -2
- data/lib/puppet/provider/package/pkgdmg.rb +25 -10
- data/lib/puppet/provider/package/pkgin.rb +48 -23
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/ports.rb +1 -1
- data/lib/puppet/provider/package/portupgrade.rb +7 -7
- data/lib/puppet/provider/package/rpm.rb +16 -8
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/selboolean/getsetsebool.rb +1 -1
- data/lib/puppet/provider/selmodule/semodule.rb +5 -5
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +3 -3
- data/lib/puppet/provider/service/daemontools.rb +20 -20
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/freebsd.rb +3 -3
- data/lib/puppet/provider/service/gentoo.rb +2 -2
- data/lib/puppet/provider/service/init.rb +5 -5
- data/lib/puppet/provider/service/launchd.rb +4 -4
- data/lib/puppet/provider/service/redhat.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +4 -4
- data/lib/puppet/provider/service/service.rb +3 -4
- data/lib/puppet/provider/service/smf.rb +1 -1
- data/lib/puppet/provider/service/src.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +4 -4
- data/lib/puppet/provider/service/upstart.rb +22 -7
- data/lib/puppet/provider/service/windows.rb +7 -7
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +3 -3
- data/lib/puppet/provider/user/aix.rb +5 -5
- data/lib/puppet/provider/user/directoryservice.rb +8 -5
- data/lib/puppet/provider/user/ldap.rb +1 -1
- data/lib/puppet/provider/user/pw.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +19 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
- data/lib/puppet/provider/zone/solaris.rb +4 -4
- data/lib/puppet/rails.rb +16 -11
- data/lib/puppet/rails/benchmark.rb +1 -1
- data/lib/puppet/rails/resource.rb +5 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/report.rb +1 -1
- data/lib/puppet/relationship.rb +10 -5
- data/lib/puppet/reports/http.rb +8 -2
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/store.rb +3 -3
- data/lib/puppet/reports/tagmail.rb +4 -4
- data/lib/puppet/resource.rb +37 -44
- data/lib/puppet/resource/catalog.rb +18 -20
- data/lib/puppet/resource/status.rb +7 -6
- data/lib/puppet/resource/type.rb +6 -5
- data/lib/puppet/resource/type_collection.rb +2 -2
- data/lib/puppet/run.rb +9 -8
- data/lib/puppet/settings.rb +395 -244
- data/lib/puppet/settings/base_setting.rb +10 -4
- data/lib/puppet/settings/config_file.rb +81 -44
- data/lib/puppet/settings/directory_setting.rb +1 -2
- data/lib/puppet/settings/file_setting.rb +12 -5
- data/lib/puppet/settings/ini_file.rb +171 -0
- data/lib/puppet/ssl/base.rb +4 -0
- data/lib/puppet/ssl/certificate_authority.rb +16 -11
- data/lib/puppet/ssl/certificate_authority/interface.rb +3 -2
- data/lib/puppet/ssl/certificate_factory.rb +50 -5
- data/lib/puppet/ssl/certificate_request.rb +2 -2
- data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
- data/lib/puppet/ssl/certificate_revocation_list.rb +3 -1
- data/lib/puppet/ssl/host.rb +9 -8
- data/lib/puppet/ssl/inventory.rb +1 -1
- data/lib/puppet/ssl/key.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/status.rb +8 -7
- data/lib/puppet/test/test_helper.rb +35 -4
- data/lib/puppet/transaction/event.rb +6 -5
- data/lib/puppet/transaction/report.rb +10 -10
- data/lib/puppet/type.rb +1 -3
- data/lib/puppet/type/augeas.rb +2 -1
- data/lib/puppet/type/cron.rb +41 -11
- data/lib/puppet/type/exec.rb +5 -5
- data/lib/puppet/type/file.rb +42 -4
- data/lib/puppet/type/file/content.rb +5 -6
- data/lib/puppet/type/file/ensure.rb +3 -3
- data/lib/puppet/type/file/source.rb +12 -6
- data/lib/puppet/type/file/target.rb +5 -5
- data/lib/puppet/type/k5login.rb +4 -4
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/package.rb +79 -3
- data/lib/puppet/type/resources.rb +34 -5
- data/lib/puppet/type/selboolean.rb +1 -1
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -1
- data/lib/puppet/type/sshkey.rb +2 -1
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +4 -1
- data/lib/puppet/type/yumrepo.rb +219 -344
- data/lib/puppet/type/zone.rb +15 -5
- data/lib/puppet/util.rb +14 -13
- data/lib/puppet/util/adsi.rb +19 -3
- data/lib/puppet/util/autoload.rb +27 -24
- data/lib/puppet/util/backups.rb +6 -6
- data/lib/puppet/util/checksums.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/colors.rb +4 -12
- data/lib/puppet/util/command_line.rb +2 -2
- data/lib/puppet/util/command_line/trollop.rb +3 -3
- data/lib/puppet/util/docs.rb +2 -2
- data/lib/puppet/util/errors.rb +8 -1
- data/lib/puppet/util/execution.rb +12 -5
- data/lib/puppet/util/filetype.rb +5 -5
- data/lib/puppet/util/inifile.rb +19 -4
- data/lib/puppet/util/instrumentation/data.rb +5 -0
- data/lib/puppet/util/instrumentation/indirection_probe.rb +6 -1
- data/lib/puppet/util/instrumentation/listener.rb +6 -1
- data/lib/puppet/util/json_lockfile.rb +4 -1
- data/lib/puppet/util/ldap/connection.rb +1 -1
- data/lib/puppet/util/lockfile.rb +10 -6
- data/lib/puppet/util/log.rb +6 -1
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/metric.rb +9 -4
- data/lib/puppet/util/nagios_maker.rb +26 -1
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/network_device/transport/ssh.rb +3 -3
- data/lib/puppet/util/plugins.rb +1 -1
- data/lib/puppet/util/profiler.rb +13 -1
- data/lib/puppet/util/pson.rb +1 -1
- data/lib/puppet/util/queue/stomp.rb +2 -2
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +19 -19
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/retryaction.rb +1 -1
- data/lib/puppet/util/selinux.rb +2 -2
- data/lib/puppet/util/storage.rb +3 -3
- data/lib/puppet/util/symbolic_file_mode.rb +1 -1
- data/lib/puppet/util/tag_set.rb +15 -3
- data/lib/puppet/util/tagging.rb +12 -17
- data/lib/puppet/util/watched_file.rb +1 -1
- data/lib/puppet/util/watcher.rb +1 -1
- data/lib/puppet/util/windows/error.rb +2 -2
- data/lib/puppet/util/windows/file.rb +20 -4
- data/lib/puppet/util/windows/registry.rb +2 -2
- data/lib/puppet/vendor/safe_yaml/CHANGES.md +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppetx.rb +1 -21
- data/lib/puppetx/puppet/syntax_checker.rb +1 -1
- data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +9 -11
- data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
- data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
- data/spec/fixtures/{unit/pops/binder/hiera2/yaml_backend/empty/common.yaml → integration/node/environment/sitedir/03_empty.pp} +0 -0
- data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
- data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
- data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +3 -12
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/{awesome/lib/puppetx/awesome → awesome2/lib/puppetx/awesome2}/echo_scheme_handler.rb +2 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
- data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +2 -2
- data/spec/fixtures/unit/provider/service/systemd/{list_units → list_units_services} +0 -1
- data/spec/integration/agent/logging_spec.rb +1 -1
- data/spec/integration/application/apply_spec.rb +78 -3
- data/spec/integration/application/doc_spec.rb +3 -2
- data/spec/integration/configurer_spec.rb +5 -3
- data/spec/integration/directory_environments_spec.rb +50 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +4 -5
- data/spec/integration/network/authconfig_spec.rb +4 -4
- data/spec/integration/network/formats_spec.rb +1 -1
- data/spec/integration/node/environment_spec.rb +67 -15
- data/spec/integration/node/facts_spec.rb +1 -1
- data/spec/integration/node_spec.rb +1 -1
- data/spec/integration/parser/catalog_spec.rb +100 -60
- data/spec/integration/parser/compiler_spec.rb +102 -13
- data/spec/integration/parser/future_compiler_spec.rb +416 -0
- data/spec/integration/parser/parser_spec.rb +44 -105
- data/spec/integration/parser/scope_spec.rb +614 -528
- data/spec/integration/provider/cron/crontab_spec.rb +21 -0
- data/spec/integration/provider/mount_spec.rb +15 -2
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +3 -4
- data/spec/integration/ssl/autosign_spec.rb +1 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
- data/spec/integration/ssl/host_spec.rb +1 -1
- data/spec/integration/transaction_spec.rb +13 -13
- data/spec/integration/type/exec_spec.rb +2 -2
- data/spec/integration/type/file_spec.rb +114 -41
- data/spec/integration/type/nagios_spec.rb +80 -0
- data/spec/integration/type/tidy_spec.rb +2 -2
- data/spec/integration/util/execution_spec.rb +17 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +27 -2
- data/spec/lib/matchers/include.rb +27 -0
- data/spec/lib/matchers/include_spec.rb +32 -0
- data/spec/lib/matchers/json.rb +135 -79
- data/spec/lib/matchers/match_tokens2.rb +74 -0
- data/spec/lib/matchers/resource.rb +35 -0
- data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
- data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
- data/spec/lib/puppet/indirector_testing.rb +12 -2
- data/spec/lib/puppet_spec/files.rb +1 -0
- data/spec/lib/puppet_spec/matchers.rb +5 -0
- data/spec/lib/puppet_spec/modules.rb +1 -1
- data/spec/lib/puppet_spec/scope.rb +14 -0
- data/spec/shared_behaviours/file_server_terminus.rb +2 -2
- data/spec/spec_helper.rb +47 -17
- data/spec/unit/agent_spec.rb +8 -1
- data/spec/unit/application/agent_spec.rb +5 -4
- data/spec/unit/application/apply_spec.rb +34 -15
- data/spec/unit/application/device_spec.rb +27 -32
- data/spec/unit/application/doc_spec.rb +4 -4
- data/spec/unit/application/filebucket_spec.rb +1 -1
- data/spec/unit/application/master_spec.rb +2 -2
- data/spec/unit/application_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +5 -16
- data/spec/unit/configurer_spec.rb +2 -2
- data/spec/unit/confine/exists_spec.rb +5 -5
- data/spec/unit/context/trusted_information_spec.rb +124 -0
- data/spec/unit/context_spec.rb +74 -0
- data/spec/unit/environments_spec.rb +126 -0
- data/spec/unit/face/config_spec.rb +31 -16
- data/spec/unit/face/module/build_spec.rb +1 -0
- data/spec/unit/face/module/install_spec.rb +21 -104
- data/spec/unit/face/module/list_spec.rb +52 -36
- data/spec/unit/face/module/uninstall_spec.rb +18 -25
- data/spec/unit/face/parser_spec.rb +39 -23
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/base_spec.rb +9 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -2
- data/spec/unit/file_serving/configuration_spec.rb +7 -7
- data/spec/unit/file_serving/content_spec.rb +7 -12
- data/spec/unit/file_serving/fileset_spec.rb +49 -53
- data/spec/unit/file_serving/metadata_spec.rb +83 -32
- data/spec/unit/file_serving/mount/file_spec.rb +10 -10
- data/spec/unit/file_system/tempfile_spec.rb +3 -3
- data/spec/unit/file_system_spec.rb +508 -0
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/hiera/scope_spec.rb +6 -2
- data/spec/unit/hiera_puppet_spec.rb +13 -6
- data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +42 -11
- data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
- data/spec/unit/indirector/facts/facter_spec.rb +5 -5
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
- data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
- data/spec/unit/indirector/file_server_spec.rb +4 -4
- data/spec/unit/indirector/json_spec.rb +6 -6
- data/spec/unit/indirector/key/file_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +191 -0
- data/spec/unit/indirector/node/active_record_spec.rb +1 -1
- data/spec/unit/indirector/node/ldap_spec.rb +16 -7
- data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
- data/spec/unit/indirector/node/plain_spec.rb +1 -1
- data/spec/unit/indirector/queue_spec.rb +1 -1
- data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
- data/spec/unit/indirector/request_spec.rb +16 -8
- data/spec/unit/indirector/rest_spec.rb +0 -4
- data/spec/unit/indirector/ssl_file_spec.rb +12 -11
- data/spec/unit/indirector/yaml_spec.rb +4 -4
- data/spec/unit/man_spec.rb +32 -0
- data/spec/unit/module_spec.rb +60 -46
- data/spec/unit/module_tool/applications/checksummer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +53 -16
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +26 -25
- data/spec/unit/module_tool/tar_spec.rb +1 -1
- data/spec/unit/module_tool_spec.rb +17 -90
- data/spec/unit/network/authconfig_spec.rb +3 -4
- data/spec/unit/network/authentication_spec.rb +20 -6
- data/spec/unit/network/authorization_spec.rb +11 -1
- data/spec/unit/network/formats_spec.rb +32 -9
- data/spec/unit/network/http/api/v1_spec.rb +365 -62
- data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
- data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
- data/spec/unit/network/http/api/v2_spec.rb +14 -0
- data/spec/unit/network/http/connection_spec.rb +39 -5
- data/spec/unit/network/http/error_spec.rb +30 -0
- data/spec/unit/network/http/handler_spec.rb +69 -419
- data/spec/unit/network/http/rack/rest_spec.rb +20 -28
- data/spec/unit/network/http/route_spec.rb +75 -0
- data/spec/unit/network/http/webrick/rest_spec.rb +21 -58
- data/spec/unit/network/http_pool_spec.rb +3 -3
- data/spec/unit/network/rights_spec.rb +2 -2
- data/spec/unit/node/environment_spec.rb +108 -89
- data/spec/unit/node/facts_spec.rb +5 -12
- data/spec/unit/node_spec.rb +22 -22
- data/spec/unit/parser/ast/collection_spec.rb +1 -1
- data/spec/unit/parser/ast/leaf_spec.rb +2 -0
- data/spec/unit/parser/ast/resource_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +5 -3
- data/spec/unit/parser/files_spec.rb +40 -50
- data/spec/unit/parser/functions/defined_spec.rb +80 -18
- data/spec/unit/parser/functions/epp_spec.rb +88 -0
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +4 -1
- data/spec/unit/parser/functions/generate_spec.rb +6 -2
- data/spec/unit/parser/functions/hiera_array_spec.rb +5 -2
- data/spec/unit/parser/functions/hiera_hash_spec.rb +4 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +6 -3
- data/spec/unit/parser/functions/hiera_spec.rb +5 -2
- data/spec/unit/parser/functions/include_spec.rb +0 -1
- data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
- data/spec/unit/parser/functions/lookup_spec.rb +66 -16
- data/spec/unit/parser/functions_spec.rb +25 -91
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/filter_spec.rb +56 -0
- data/spec/unit/parser/methods/map_spec.rb +94 -5
- data/spec/unit/parser/methods/reduce_spec.rb +10 -0
- data/spec/unit/parser/methods/shared.rb +2 -18
- data/spec/unit/parser/methods/slice_spec.rb +39 -1
- data/spec/unit/parser/parser_spec.rb +14 -10
- data/spec/unit/parser/resource_spec.rb +3 -9
- data/spec/unit/parser/scope_spec.rb +81 -78
- data/spec/unit/parser/type_loader_spec.rb +0 -4
- data/spec/unit/pops/benchmark_spec.rb +142 -0
- data/spec/unit/pops/binder/binder_spec.rb +15 -34
- data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -41
- data/spec/unit/pops/binder/bindings_composer_spec.rb +6 -31
- data/spec/unit/pops/binder/config/binder_config_spec.rb +5 -18
- data/spec/unit/pops/binder/injector_spec.rb +76 -81
- data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
- data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
- data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
- data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
- data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
- data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
- data/spec/unit/pops/factory_spec.rb +6 -29
- data/spec/unit/pops/issues_spec.rb +1 -1
- data/spec/unit/pops/model/ast_transformer_spec.rb +6 -9
- data/spec/unit/pops/model/model_spec.rb +2 -2
- data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +4 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
- data/spec/unit/pops/parser/lexer_spec.rb +25 -86
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +29 -4
- data/spec/unit/pops/parser/parse_calls_spec.rb +10 -6
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +0 -9
- data/spec/unit/pops/parser/parse_containers_spec.rb +43 -12
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
- data/spec/unit/pops/parser/parse_resource_spec.rb +14 -0
- data/spec/unit/pops/parser/parser_spec.rb +3 -1
- data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +4 -4
- data/spec/unit/pops/transformer/transform_calls_spec.rb +41 -6
- data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -9
- data/spec/unit/pops/transformer/transform_containers_spec.rb +12 -4
- data/spec/unit/pops/types/enumeration_spec.rb +50 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1171 -196
- data/spec/unit/pops/types/type_factory_spec.rb +108 -4
- data/spec/unit/pops/types/type_parser_spec.rb +114 -10
- data/spec/unit/pops/validator/validator_spec.rb +36 -1
- data/spec/unit/provider/augeas/augeas_spec.rb +39 -16
- data/spec/unit/provider/cron/parsed_spec.rb +27 -31
- data/spec/unit/provider/file/posix_spec.rb +2 -2
- data/spec/unit/provider/group/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/mount_spec.rb +12 -1
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
- data/spec/unit/provider/package/apt_spec.rb +1 -1
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/gem_spec.rb +12 -0
- data/spec/unit/provider/package/msi_spec.rb +4 -0
- data/spec/unit/provider/package/openbsd_spec.rb +10 -10
- data/spec/unit/provider/package/pacman_spec.rb +36 -7
- data/spec/unit/provider/package/pkgin_spec.rb +57 -55
- data/spec/unit/provider/package/rpm_spec.rb +51 -6
- data/spec/unit/provider/service/base_spec.rb +4 -4
- data/spec/unit/provider/service/daemontools_spec.rb +8 -13
- data/spec/unit/provider/service/freebsd_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_spec.rb +24 -24
- data/spec/unit/provider/service/init_spec.rb +15 -15
- data/spec/unit/provider/service/openbsd_spec.rb +16 -16
- data/spec/unit/provider/service/openrc_spec.rb +20 -20
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +5 -8
- data/spec/unit/provider/service/src_spec.rb +4 -4
- data/spec/unit/provider/service/systemd_spec.rb +24 -14
- data/spec/unit/provider/service/upstart_spec.rb +12 -4
- data/spec/unit/provider/service/windows_spec.rb +1 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +21 -23
- data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
- data/spec/unit/provider/user/useradd_spec.rb +43 -15
- data/spec/unit/provider/user/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
- data/spec/unit/provider/zone/solaris_spec.rb +1 -1
- data/spec/unit/provider_spec.rb +120 -62
- data/spec/unit/rails/host_spec.rb +1 -1
- data/spec/unit/rails/param_value_spec.rb +4 -0
- data/spec/unit/relationship_spec.rb +4 -4
- data/spec/unit/reports/http_spec.rb +14 -3
- data/spec/unit/reports/rrdgraph_spec.rb +0 -1
- data/spec/unit/reports/store_spec.rb +2 -2
- data/spec/unit/resource/catalog_spec.rb +17 -29
- data/spec/unit/resource/status_spec.rb +1 -1
- data/spec/unit/resource/type_collection_spec.rb +28 -47
- data/spec/unit/resource/type_spec.rb +12 -23
- data/spec/unit/resource_spec.rb +54 -93
- data/spec/unit/run_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/config_file_spec.rb +68 -15
- data/spec/unit/settings/file_setting_spec.rb +2 -2
- data/spec/unit/settings/ini_file_spec.rb +184 -0
- data/spec/unit/settings_spec.rb +137 -79
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +3 -1
- data/spec/unit/ssl/certificate_authority_spec.rb +11 -9
- data/spec/unit/ssl/certificate_factory_spec.rb +19 -4
- data/spec/unit/ssl/certificate_request_attributes_spec.rb +1 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +101 -72
- data/spec/unit/ssl/host_spec.rb +8 -20
- data/spec/unit/ssl/inventory_spec.rb +2 -2
- data/spec/unit/ssl/key_spec.rb +4 -4
- data/spec/unit/status_spec.rb +6 -4
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -11
- data/spec/unit/transaction/event_spec.rb +2 -2
- data/spec/unit/transaction/report_spec.rb +24 -15
- data/spec/unit/transaction/resource_harness_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +39 -1
- data/spec/unit/type/file/content_spec.rb +4 -5
- data/spec/unit/type/file/ctime_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +5 -4
- data/spec/unit/type/file/mtime_spec.rb +1 -1
- data/spec/unit/type/file/source_spec.rb +30 -7
- data/spec/unit/type/file_spec.rb +8 -8
- data/spec/unit/type/k5login_spec.rb +3 -3
- data/spec/unit/type/nagios_spec.rb +6 -0
- data/spec/unit/type/package/package_settings_spec.rb +135 -0
- data/spec/unit/type/package_spec.rb +13 -1
- data/spec/unit/type/resources_spec.rb +155 -0
- data/spec/unit/type/service_spec.rb +3 -3
- data/spec/unit/type/ssh_authorized_key_spec.rb +96 -93
- data/spec/unit/type/sshkey_spec.rb +39 -30
- data/spec/unit/type/tidy_spec.rb +19 -12
- data/spec/unit/type/user_spec.rb +47 -2
- data/spec/unit/type/whit_spec.rb +2 -2
- data/spec/unit/type/yumrepo_spec.rb +32 -177
- data/spec/unit/type/zone_spec.rb +2 -2
- data/spec/unit/type_spec.rb +11 -0
- data/spec/unit/util/adsi_spec.rb +48 -1
- data/spec/unit/util/autoload_spec.rb +24 -39
- data/spec/unit/util/backups_spec.rb +25 -28
- data/spec/unit/util/checksums_spec.rb +1 -3
- data/spec/unit/util/colors_spec.rb +14 -0
- data/spec/unit/util/docs_spec.rb +9 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/filetype_spec.rb +7 -7
- data/spec/unit/util/instrumentation/data_spec.rb +3 -1
- data/spec/unit/util/instrumentation/indirection_probe_spec.rb +2 -0
- data/spec/unit/util/instrumentation/listener_spec.rb +3 -2
- data/spec/unit/util/json_lockfile_spec.rb +25 -4
- data/spec/unit/util/lockfile_spec.rb +49 -7
- data/spec/unit/util/log/destinations_spec.rb +1 -0
- data/spec/unit/util/log_spec.rb +1 -1
- data/spec/unit/util/metric_spec.rb +1 -1
- data/spec/unit/util/pidlock_spec.rb +6 -6
- data/spec/unit/util/pson_spec.rb +2 -2
- data/spec/unit/util/rdoc/parser_spec.rb +32 -29
- data/spec/unit/util/resource_template_spec.rb +3 -3
- data/spec/unit/util/selinux_spec.rb +5 -5
- data/spec/unit/util/storage_spec.rb +4 -4
- data/spec/unit/util/tag_set_spec.rb +1 -1
- data/spec/unit/util/watcher_spec.rb +1 -4
- data/spec/unit/util/yaml_spec.rb +2 -2
- data/spec/unit/util_spec.rb +7 -7
- data/tasks/benchmark.rake +0 -1
- data/tasks/parallel.rake +408 -0
- data/tasks/yard.rake +59 -0
- metadata +2889 -2782
- checksums.yaml +0 -7
- data/README_DEVELOPER.md +0 -809
- data/lib/puppet/file_system/file.rb +0 -271
- data/lib/puppet/network/http/rack/httphandler.rb +0 -13
- data/lib/puppet/pops/binder/hiera2.rb +0 -10
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +0 -148
- data/lib/puppet/pops/binder/hiera2/config.rb +0 -69
- data/lib/puppet/pops/binder/hiera2/config_checker.rb +0 -68
- data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +0 -36
- data/lib/puppet/pops/binder/hiera2/issues.rb +0 -67
- data/lib/puppet/pops/binder/hiera2/json_backend.rb +0 -18
- data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +0 -21
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +0 -67
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +0 -92
- data/lib/puppet/pops/parser/grammar.ra +0 -746
- data/lib/puppet/provider/port/parsed.rb +0 -173
- data/lib/puppet/type/port.rb +0 -119
- data/lib/puppetx/puppet/hiera2_backend.rb +0 -31
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +0 -18
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +0 -13
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +0 -4
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +0 -5
- data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +0 -7
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +0 -4
- data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +0 -2
- data/spec/unit/file_system/file_spec.rb +0 -486
- data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +0 -74
- data/spec/unit/pops/binder/hiera2/config_spec.rb +0 -61
- data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +0 -33
@@ -1,68 +0,0 @@
|
|
1
|
-
module Puppet::Pops::Binder::Hiera2
|
2
|
-
|
3
|
-
# Validates the consistency of a Hiera2::Config
|
4
|
-
class ConfigChecker
|
5
|
-
|
6
|
-
# Create an instance with a diagnostic producer that will receive the result during validation
|
7
|
-
# @param diangostics [DiagnosticProducer] The producer that will receive the diagnostic
|
8
|
-
def initialize(diagnostics)
|
9
|
-
@diagnostics = diagnostics
|
10
|
-
end
|
11
|
-
|
12
|
-
# Validate the consistency of the given data. Diagnostics will be emitted to the DiagnosticProducer
|
13
|
-
# that was set when this checker was created
|
14
|
-
#
|
15
|
-
# @param data [Object] The data read from the config file
|
16
|
-
# @param config_file [String] The full path of the file. Used in error messages
|
17
|
-
def validate(data, config_file)
|
18
|
-
if data.is_a?(Hash)
|
19
|
-
# If the version is missing, it is not meaningful to continue
|
20
|
-
return unless check_version(data['version'], config_file)
|
21
|
-
check_hierarchy(data['hierarchy'], config_file)
|
22
|
-
check_backends(data['backends'], config_file)
|
23
|
-
else
|
24
|
-
@diagnostics.accept(Issues::CONFIG_IS_NOT_HASH, config_file)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
# Version is required and must be >= 2. A warning is issued if version > 2 as this checker is
|
31
|
-
# for version 2 only.
|
32
|
-
# @return [Boolean] false if it is meaningless to continue checking
|
33
|
-
def check_version(version, config_file)
|
34
|
-
if version.nil?
|
35
|
-
# This is not hiera2 compatible
|
36
|
-
@diagnostics.accept(Issues::MISSING_VERSION, config_file)
|
37
|
-
return false
|
38
|
-
end
|
39
|
-
unless version >= 2
|
40
|
-
@diagnostics.accept(Issues::WRONG_VERSION, config_file, :expected => 2, :actual => version)
|
41
|
-
return false
|
42
|
-
end
|
43
|
-
unless version == 2
|
44
|
-
# it may have a sane subset, hence a different error (configured as warning)
|
45
|
-
@diagnostics.accept(Issues::LATER_VERSION, config_file, :expected => 2, :actual => version)
|
46
|
-
end
|
47
|
-
return true
|
48
|
-
end
|
49
|
-
|
50
|
-
def check_hierarchy(hierarchy, config_file)
|
51
|
-
if !hierarchy.is_a?(Array) || hierarchy.empty?
|
52
|
-
@diagnostics.accept(Issues::MISSING_HIERARCHY, config_file)
|
53
|
-
else
|
54
|
-
hierarchy.each do |value|
|
55
|
-
unless value.is_a?(Array) && value.length() == 3
|
56
|
-
@diagnostics.accept(Issues::CATEGORY_MUST_BE_THREE_ELEMENT_ARRAY, config_file)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def check_backends(backends, config_file)
|
63
|
-
if !backends.is_a?(Array) || backends.empty?
|
64
|
-
@diagnostics.accept(Issues::MISSING_BACKENDS, config_file)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module Puppet::Pops::Binder::Hiera2
|
2
|
-
# Generates validation diagnostics
|
3
|
-
class Puppet::Pops::Binder::Hiera2::DiagnosticProducer
|
4
|
-
attr_reader :acceptor
|
5
|
-
def initialize(an_acceptor)
|
6
|
-
raise ArgumentError, "Not an acceptor" unless an_acceptor.is_a?(Puppet::Pops::Validation::Acceptor)
|
7
|
-
@acceptor = an_acceptor
|
8
|
-
@severity_producer = Puppet::Pops::Validation::SeverityProducer.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def accept(issue, semantic, arguments={})
|
12
|
-
arguments[:semantic] ||= semantic
|
13
|
-
severity = severity_producer.severity(issue)
|
14
|
-
acceptor.accept(Puppet::Pops::Validation::Diagnostic.new(severity, issue, nil, nil, arguments))
|
15
|
-
end
|
16
|
-
|
17
|
-
def errors?()
|
18
|
-
acceptor.errors?
|
19
|
-
end
|
20
|
-
|
21
|
-
def severity_producer
|
22
|
-
p = @severity_producer
|
23
|
-
p[Issues::UNRESOLVED_STRING_VARIABLE] = :warning
|
24
|
-
|
25
|
-
# Warning since if it does not blow up on anything else, a sane subset of later version was used
|
26
|
-
p[Issues::LATER_VERSION] = :warning
|
27
|
-
|
28
|
-
# Ignore MISSING_BACKENDS because a default will be provided
|
29
|
-
p[Issues::MISSING_BACKENDS] = :ignore
|
30
|
-
|
31
|
-
# Ignore MISSING_HIERARCHY because a default will be provided
|
32
|
-
p[Issues::MISSING_HIERARCHY] = :ignore
|
33
|
-
p
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
module Puppet::Pops::Binder::Hiera2::Issues
|
2
|
-
# (see Puppet::Pops::Issues#issue)
|
3
|
-
def self.issue (issue_code, *args, &block)
|
4
|
-
Puppet::Pops::Issues.issue(issue_code, *args, &block)
|
5
|
-
end
|
6
|
-
|
7
|
-
CONFIG_IS_NOT_HASH = issue :CONFIG_IS_NOT_HASH do
|
8
|
-
"The configuration file '#{semantic}' has no hash at the top level"
|
9
|
-
end
|
10
|
-
|
11
|
-
MISSING_HIERARCHY = issue :MISSING_HIERARCHY do
|
12
|
-
"The configuration file '#{semantic}' contains no hierarchy"
|
13
|
-
end
|
14
|
-
|
15
|
-
MISSING_BACKENDS = issue :MISSING_BACKENDS do
|
16
|
-
"The configuration file '#{semantic}' contains no backends"
|
17
|
-
end
|
18
|
-
|
19
|
-
CATEGORY_MUST_BE_THREE_ELEMENT_ARRAY = issue :CATEGORY_MUST_BE_THREE_ELEMENT_ARRAY do
|
20
|
-
"The configuration file '#{semantic}' has a malformed hierarchy (should consist of arrays with three string entries)"
|
21
|
-
end
|
22
|
-
|
23
|
-
CONFIG_FILE_NOT_FOUND = issue :CONFIG_FILE_NOT_FOUND do
|
24
|
-
"The configuration file '#{semantic}' does not exist"
|
25
|
-
end
|
26
|
-
|
27
|
-
CONFIG_FILE_SYNTAX_ERROR = issue :CONFIG_FILE_SYNTAX_ERROR do
|
28
|
-
"Unable to parse: #{semantic}"
|
29
|
-
end
|
30
|
-
|
31
|
-
CANNOT_LOAD_BACKEND = issue :CANNOT_LOAD_BACKEND, :key, :error do
|
32
|
-
"Backend '#{key}' in configuration file '#{semantic}' cannot be loaded: #{error}"
|
33
|
-
end
|
34
|
-
|
35
|
-
BACKEND_FILE_DOES_NOT_DEFINE_CLASS = issue :BACKEND_FILE_DOES_NOT_DEFINE_CLASS, :class_name do
|
36
|
-
"The file '#{semantic}' does not define class #{class_name}"
|
37
|
-
end
|
38
|
-
|
39
|
-
NOT_A_BACKEND_CLASS = issue :NOT_A_BACKEND_CLASS, :key, :class_name do
|
40
|
-
"Class #{class_name}, loaded using key #{key} in file '#{semantic}' is not a subclass of Backend"
|
41
|
-
end
|
42
|
-
|
43
|
-
METADATA_JSON_NOT_FOUND = issue :METADATA_JSON_NOT_FOUND do
|
44
|
-
"The metadata file '#{semantic}' does not exist"
|
45
|
-
end
|
46
|
-
|
47
|
-
UNSUPPORTED_STRING_EXPRESSION = issue :UNSUPPORTED_STRING_EXPRESSION, :expr do
|
48
|
-
"String '#{semantic}' contains an unsupported expression (type was #{expr.class.name})"
|
49
|
-
end
|
50
|
-
|
51
|
-
UNRESOLVED_STRING_VARIABLE = issue :UNRESOLVED_STRING_VARIABLE, :key do
|
52
|
-
"Variable '#{key}' found in string '#{semantic}' cannot be resolved"
|
53
|
-
end
|
54
|
-
|
55
|
-
MISSING_VERSION = issue :MISSING_VERSION do
|
56
|
-
"The configuration file '#{semantic}' does not have a version."
|
57
|
-
end
|
58
|
-
|
59
|
-
WRONG_VERSION = issue :WRONG_VERSION do
|
60
|
-
"The configuration file '#{semantic}' has the wrong version, expected: #{expected}, actual: #{actual}"
|
61
|
-
end
|
62
|
-
|
63
|
-
LATER_VERSION = issue :LATER_VERSION do
|
64
|
-
"The configuration file '#{semantic}' has a version that is newer (features may not work), expected: #{expected}, actual: #{actual}"
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
|
-
# A Backend implementation capable of reading JSON syntax
|
4
|
-
class Puppet::Pops::Binder::Hiera2::JsonBackend < Puppetx::Puppet::Hiera2Backend
|
5
|
-
def read_data(module_dir, source)
|
6
|
-
begin
|
7
|
-
source_file = File.join(module_dir, "#{source}.json")
|
8
|
-
JSON.parse(File.read(source_file))
|
9
|
-
rescue Errno::ENOTDIR
|
10
|
-
# This is OK, the file doesn't need to be present. Return an empty hash
|
11
|
-
{}
|
12
|
-
rescue Errno::ENOENT
|
13
|
-
# This is OK, the file doesn't need to be present. Return an empty hash
|
14
|
-
{}
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# A Backend implementation capable of reading YAML syntax
|
2
|
-
class Puppet::Pops::Binder::Hiera2::YamlBackend < Puppetx::Puppet::Hiera2Backend
|
3
|
-
def read_data(module_dir, source)
|
4
|
-
begin
|
5
|
-
source_file = File.join(module_dir, "#{source}.yaml")
|
6
|
-
# if file is present but empty or has only "---", YAML.load_file returns false,
|
7
|
-
# in which case fall back to returning an empty hash
|
8
|
-
YAML.load_file(source_file) || {}
|
9
|
-
rescue TypeError => e
|
10
|
-
# SafeYaml chokes when trying to load using utf-8 and the file is empty
|
11
|
-
raise e if File.size?(source_file)
|
12
|
-
{}
|
13
|
-
rescue Errno::ENOTDIR
|
14
|
-
# This is OK, the file doesn't need to be present. Return an empty hash
|
15
|
-
{}
|
16
|
-
rescue Errno::ENOENT
|
17
|
-
# This is OK, the file doesn't need to be present. Return an empty hash
|
18
|
-
{}
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# Similar to {Puppet::Pops::Binder::SchemeHandler::ModuleHieraScheme ModuleHieraScheme} but path is
|
2
|
-
# relative to the `$confdir` instead of relative to a module root.
|
3
|
-
#
|
4
|
-
# Does not handle wild-cards.
|
5
|
-
# @api public
|
6
|
-
class Puppet::Pops::Binder::SchemeHandler::ConfdirHieraScheme < Puppetx::Puppet::BindingsSchemeHandler
|
7
|
-
|
8
|
-
# (Puppetx::Puppet::BindingsSchemeHandler.contributed_bindings)
|
9
|
-
#
|
10
|
-
def contributed_bindings(uri, scope, composer)
|
11
|
-
split_path = uri.path.split('/')
|
12
|
-
name = split_path[1]
|
13
|
-
confdir = composer.confdir
|
14
|
-
provider = Puppet::Pops::Binder::Hiera2::BindingsProvider.new(uri.to_s, File.join(confdir, uri.path), composer.acceptor)
|
15
|
-
provider.load_bindings(scope)
|
16
|
-
end
|
17
|
-
|
18
|
-
# This handler does not support wildcards.
|
19
|
-
# The given uri is simply returned in an array.
|
20
|
-
# @param uri [URI] the uri to expand
|
21
|
-
# @return [Array<URI>] the uri wrapped in an array
|
22
|
-
# @todo Handle optional and possibly hiera-1 hiera.yaml config file in the expected location (the same as missing)
|
23
|
-
# @api public
|
24
|
-
#
|
25
|
-
def expand_included(uri, composer)
|
26
|
-
result = []
|
27
|
-
if config_exist?(uri, composer)
|
28
|
-
result << uri unless is_ignored_hiera_version?(uri, composer)
|
29
|
-
else
|
30
|
-
result << uri unless is_optional?(uri)
|
31
|
-
end
|
32
|
-
result
|
33
|
-
end
|
34
|
-
|
35
|
-
# This handler does not support wildcards.
|
36
|
-
# The given uri is simply returned in an array.
|
37
|
-
# @param uri [URI] the uri to expand
|
38
|
-
# @return [Array<URI>] the uri wrapped in an array
|
39
|
-
# @api public
|
40
|
-
#
|
41
|
-
def expand_excluded(uri, composer)
|
42
|
-
[uri]
|
43
|
-
end
|
44
|
-
|
45
|
-
def config_exist?(uri, composer)
|
46
|
-
Puppet::FileSystem::File.exist?(File.join(composer.confdir, uri.path, 'hiera.yaml'))
|
47
|
-
end
|
48
|
-
|
49
|
-
# A hiera.yaml that exists, is readable, can be loaded, and does not have version >= 2 set is ignored.
|
50
|
-
# All other conditions are reported as 'not ignored' even if there are errors; these will be handled later
|
51
|
-
# as if the hiera.yaml is a hiera-2 file.
|
52
|
-
# @api private
|
53
|
-
def is_ignored_hiera_version?(uri, composer)
|
54
|
-
config_file = File.join(composer.confdir, uri.path, 'hiera.yaml')
|
55
|
-
begin
|
56
|
-
data = YAML.load_file(config_file)
|
57
|
-
if data.is_a?(Hash)
|
58
|
-
ver = data[:version] || data['version']
|
59
|
-
return ver.nil? || ver < 2
|
60
|
-
end
|
61
|
-
rescue Errno::ENOENT
|
62
|
-
rescue Errno::ENOTDIR
|
63
|
-
rescue ::SyntaxError => e
|
64
|
-
end
|
65
|
-
return false
|
66
|
-
end
|
67
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
# The `module-hiera:` scheme uses the path to denote a directory relative to a module root
|
2
|
-
# The path starts with the name of the module, or '*' to denote *any module*.
|
3
|
-
#
|
4
|
-
# @example All root hiera.yaml from all modules.
|
5
|
-
# module-hiera:/*
|
6
|
-
#
|
7
|
-
# @example The hiera.yaml from the module `foo`'s relative path `<foo root>/bar`.
|
8
|
-
# module-hiera:/foo/bar
|
9
|
-
#
|
10
|
-
class Puppet::Pops::Binder::SchemeHandler::ModuleHieraScheme < Puppetx::Puppet::BindingsSchemeHandler
|
11
|
-
# (Puppetx::Puppet::BindingsSchemeHandler.contributed_bindings)
|
12
|
-
# @api public
|
13
|
-
def contributed_bindings(uri, scope, composer)
|
14
|
-
split_path = uri.path.split('/')
|
15
|
-
name = split_path[1]
|
16
|
-
mod = composer.name_to_module[name]
|
17
|
-
provider = Puppet::Pops::Binder::Hiera2::BindingsProvider.new(uri.to_s, File.join(mod.path, split_path[ 2..-1 ]), composer.acceptor)
|
18
|
-
provider.load_bindings(scope)
|
19
|
-
end
|
20
|
-
|
21
|
-
# Expands URIs with wildcards and checks optionality.
|
22
|
-
# @param uri [URI] the uri to possibly expand
|
23
|
-
# @return [Array<URI>] the URIs to include
|
24
|
-
# @api public
|
25
|
-
#
|
26
|
-
def expand_included(uri, composer)
|
27
|
-
result = []
|
28
|
-
split_path = uri.path.split('/')
|
29
|
-
if split_path.size > 1 && split_path[-1].empty?
|
30
|
-
split_path.delete_at(-1)
|
31
|
-
end
|
32
|
-
|
33
|
-
# 0 = "", since a URI with a path must start with '/'
|
34
|
-
# 1 = '*' or the module name
|
35
|
-
case split_path[ 1 ]
|
36
|
-
when '*'
|
37
|
-
# create new URIs, one per module name that has a hiera.yaml file relative to its root
|
38
|
-
composer.name_to_module.each_pair do | name, mod |
|
39
|
-
if Puppet::FileSystem::File.exist?(File.join(mod.path, split_path[ 2..-1 ], 'hiera.yaml' ))
|
40
|
-
path_parts =["", name] + split_path[2..-1]
|
41
|
-
result << URI.parse('module-hiera:'+File.join(path_parts))
|
42
|
-
end
|
43
|
-
end
|
44
|
-
when nil
|
45
|
-
raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
|
46
|
-
else
|
47
|
-
# If uri has query that is empty, or the text 'optional' skip this uri if it does not exist
|
48
|
-
if query = uri.query()
|
49
|
-
if query == '' || query == 'optional'
|
50
|
-
if Puppet::FileSystem::File.exist?(File.join(mod.path, split_path[ 2..-1 ], 'hiera.yaml' ))
|
51
|
-
result << URI.parse('module-hiera:' + uri.path)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
else
|
55
|
-
# assume it exists (do not give error since it may be excluded later)
|
56
|
-
result << URI.parse('module-hiera:' + File.join(split_path))
|
57
|
-
end
|
58
|
-
end
|
59
|
-
result
|
60
|
-
end
|
61
|
-
|
62
|
-
# Expands URIs with wildcards and checks optionality.
|
63
|
-
# @param uri [URI] the uri to possibly expand
|
64
|
-
# @return [Array<URI>] the URIs to exclude
|
65
|
-
# @api public
|
66
|
-
#
|
67
|
-
def expand_excluded(uri, composer)
|
68
|
-
result = []
|
69
|
-
split_path = uri.path.split('/')
|
70
|
-
if split_path.size > 1 && split_path[-1].empty?
|
71
|
-
split_path.delete_at(-1)
|
72
|
-
end
|
73
|
-
|
74
|
-
# 0 = "", since a URI with a path must start with '/'
|
75
|
-
# 1 = '*' or the module name
|
76
|
-
case split_path[ 1 ]
|
77
|
-
when '*'
|
78
|
-
# create new URIs, one per module name that has a hiera.yaml file relative to its root
|
79
|
-
composer.name_to_module.each_pair do | name, mod |
|
80
|
-
path_parts =["", mod.name] + split_path[2..-1]
|
81
|
-
result << URI.parse('module-hiera:'+File.join(path_parts))
|
82
|
-
end
|
83
|
-
|
84
|
-
when nil
|
85
|
-
raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
|
86
|
-
else
|
87
|
-
# create a clean copy (get rid of optional, fragments etc. and a trailing "/")
|
88
|
-
result << URI.parse('module-hiera:' + File.join(split_path))
|
89
|
-
end
|
90
|
-
result
|
91
|
-
end
|
92
|
-
end
|
@@ -1,746 +0,0 @@
|
|
1
|
-
# vim: syntax=ruby
|
2
|
-
|
3
|
-
# Parser using the Pops model
|
4
|
-
# This grammar is a half step between the current 3.1. grammar and egrammar.
|
5
|
-
# FIXME! Keep as reference until egrammar is proven to work.
|
6
|
-
|
7
|
-
class Puppet::Pops::Impl::Parser::Parser
|
8
|
-
|
9
|
-
token STRING DQPRE DQMID DQPOST
|
10
|
-
token LBRACK RBRACK LBRACE RBRACE SYMBOL FARROW COMMA TRUE
|
11
|
-
token FALSE EQUALS APPENDS LESSEQUAL NOTEQUAL DOT COLON LLCOLLECT RRCOLLECT
|
12
|
-
token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN
|
13
|
-
token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN
|
14
|
-
token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSREF
|
15
|
-
token NOT OR AND UNDEF PARROW PLUS MINUS TIMES DIV LSHIFT RSHIFT UMINUS
|
16
|
-
token MATCH NOMATCH REGEX IN_EDGE OUT_EDGE IN_EDGE_SUB OUT_EDGE_SUB
|
17
|
-
token IN UNLESS PIPE
|
18
|
-
token LAMBDA
|
19
|
-
|
20
|
-
prechigh
|
21
|
-
left DOT
|
22
|
-
# left LBRACE
|
23
|
-
# left LCOLLECT LLCOLLECT
|
24
|
-
right NOT
|
25
|
-
nonassoc UMINUS
|
26
|
-
left IN MATCH NOMATCH
|
27
|
-
left TIMES DIV
|
28
|
-
left MINUS PLUS
|
29
|
-
left LSHIFT RSHIFT
|
30
|
-
left NOTEQUAL ISEQUAL
|
31
|
-
left GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL
|
32
|
-
left AND
|
33
|
-
left OR
|
34
|
-
# left IN_EDGE OUT_EDGE IN_EDGE_SUB OUT_EDGE_SUB
|
35
|
-
preclow
|
36
|
-
|
37
|
-
rule
|
38
|
-
# Produces [Model::BlockExpression, Model::Expression, nil] depending on multiple statements, single statement or empty
|
39
|
-
program
|
40
|
-
: statements { result = Factory.block_or_expression(*val[0]) }
|
41
|
-
| nil
|
42
|
-
|
43
|
-
# Change may have issues with nil; i.e. program is a sequence of nils/nops
|
44
|
-
# Simplified from original which had validation for top level constructs - see statement rule
|
45
|
-
# Produces Array<Model::Expression>
|
46
|
-
statements
|
47
|
-
: statement { result = [val[0]]}
|
48
|
-
| statements statement { result = val[0].push val[1] }
|
49
|
-
|
50
|
-
# Removed validation construct regarding "top level statements" as it did not seem to catch all problems
|
51
|
-
# and relied on a "top-level-ness" encoded in the abstract syntax tree objects
|
52
|
-
#
|
53
|
-
# The main list of valid statements
|
54
|
-
# Produces Model::Expression
|
55
|
-
#
|
56
|
-
statement
|
57
|
-
: resource
|
58
|
-
| virtual_resource
|
59
|
-
| collection
|
60
|
-
| assignment
|
61
|
-
| casestatement
|
62
|
-
| if_expression
|
63
|
-
| unless_expression
|
64
|
-
| import
|
65
|
-
| call_named_function
|
66
|
-
| definition
|
67
|
-
| hostclass
|
68
|
-
| nodedef
|
69
|
-
| resource_override
|
70
|
-
| append
|
71
|
-
| relationship
|
72
|
-
| call_method_with_lambda
|
73
|
-
|
74
|
-
keyword
|
75
|
-
: AND
|
76
|
-
| CASE
|
77
|
-
| CLASS
|
78
|
-
| DEFAULT
|
79
|
-
| DEFINE
|
80
|
-
| ELSE
|
81
|
-
| ELSIF
|
82
|
-
| IF
|
83
|
-
| IN
|
84
|
-
| IMPORT
|
85
|
-
| INHERITS
|
86
|
-
| NODE
|
87
|
-
| OR
|
88
|
-
| UNDEF
|
89
|
-
| UNLESS
|
90
|
-
|
91
|
-
# Produces Model::RelationshipExpression
|
92
|
-
relationship
|
93
|
-
: relationship_side edge relationship_side { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
|
94
|
-
| relationship edge relationship_side { result = val[0].relop(val[1][:value], val[2]); loc result, val[1] }
|
95
|
-
|
96
|
-
# Produces Model::Expression
|
97
|
-
relationship_side
|
98
|
-
: resource
|
99
|
-
| resourceref
|
100
|
-
| collection
|
101
|
-
| variable
|
102
|
-
| quotedtext
|
103
|
-
| selector
|
104
|
-
| casestatement
|
105
|
-
| hasharrayaccesses
|
106
|
-
|
107
|
-
# Produces String
|
108
|
-
edge
|
109
|
-
: IN_EDGE
|
110
|
-
| OUT_EDGE
|
111
|
-
| IN_EDGE_SUB
|
112
|
-
| OUT_EDGE_SUB
|
113
|
-
|
114
|
-
# Produces Model::CallNamedFunctionExpression
|
115
|
-
call_named_function
|
116
|
-
: NAME LPAREN expressions RPAREN { result = Factory.CALL_NAMED(val[0][:value], false, val[2]) ; loc result, val[0], val[3] }
|
117
|
-
| NAME LPAREN expressions COMMA RPAREN { result = Factory.CALL_NAMED(val[0][:value], false, val[2]) ; loc result, val[0], val[4] }
|
118
|
-
| NAME LPAREN RPAREN { result = Factory.CALL_NAMED(val[0][:value], false, []) ; loc result, val[0], val[2] }
|
119
|
-
| NAME func_call_args { result = Factory.CALL_NAMED(val[0][:value], false, val[1]) ; loc result, val[0] }
|
120
|
-
|
121
|
-
call_method_with_lambda
|
122
|
-
: call_method { result = val[0] }
|
123
|
-
| call_method lambda { result = val[0]; val[0].lambda = val[1] }
|
124
|
-
|
125
|
-
call_method
|
126
|
-
: named_access LPAREN expressions RPAREN { result = Factory.CALL_METHOD(val[0], val[2]); loc result, val[1], val[3] }
|
127
|
-
| named_access LPAREN RPAREN { result = Factory.CALL_METHOD(val[0], []); loc result, val[1], val[3] }
|
128
|
-
| named_access { result = Factory.CALL_METHOD(val[0], []); loc result, val[0] }
|
129
|
-
|
130
|
-
named_access
|
131
|
-
: named_access_lval DOT NAME {
|
132
|
-
result = val[0].dot(Factory.fqn(val[2][:value]))
|
133
|
-
loc result, val[1], val[2]
|
134
|
-
}
|
135
|
-
|
136
|
-
# Obviously not ideal, it is not possible to use literal array or hash as lhs
|
137
|
-
# These must be assigned to a variable - this is also an issue in other places
|
138
|
-
#
|
139
|
-
named_access_lval
|
140
|
-
: variable
|
141
|
-
| hasharrayaccesses
|
142
|
-
| selector
|
143
|
-
| quotedtext
|
144
|
-
| call_named_rval_function
|
145
|
-
|
146
|
-
lambda
|
147
|
-
: LAMBDA lambda_parameter_list statements RBRACE {
|
148
|
-
result = Factory.LAMBDA(val[1], val[2])
|
149
|
-
loc result, val[0], val[3]
|
150
|
-
}
|
151
|
-
| LAMBDA lambda_parameter_list RBRACE {
|
152
|
-
result = Factory.LAMBDA(val[1], nil)
|
153
|
-
loc result, val[0], val[2]
|
154
|
-
}
|
155
|
-
# Produces Array<Model::Parameter>
|
156
|
-
lambda_parameter_list
|
157
|
-
: PIPE PIPE { result = [] }
|
158
|
-
| PIPE parameters endcomma PIPE { result = val[1] }
|
159
|
-
|
160
|
-
# Produces Array<Model::Expression>
|
161
|
-
func_call_args
|
162
|
-
: rvalue { result = [val[0]] }
|
163
|
-
| func_call_args COMMA rvalue { result = val[0].push(val[2]) }
|
164
|
-
|
165
|
-
# Produces Array<Model::Expression>
|
166
|
-
expressions
|
167
|
-
: expression { result = [val[0]] }
|
168
|
-
| expressions comma expression { result = val[0].push(val[2]) }
|
169
|
-
|
170
|
-
|
171
|
-
# Produces [Model::ResourceExpression, Model::ResourceDefaultsExpression]
|
172
|
-
resource
|
173
|
-
: classname LBRACE resourceinstances endsemi RBRACE {
|
174
|
-
result = Factory.RESOURCE(Factory.fqn(token_text(val[0])), val[2])
|
175
|
-
loc result, val[0], val[4]
|
176
|
-
}
|
177
|
-
| classname LBRACE attribute_operations endcomma RBRACE {
|
178
|
-
# This is a deprecated syntax.
|
179
|
-
# It also fails hard - TODO: create model and validate this case
|
180
|
-
error "All resource specifications require names"
|
181
|
-
}
|
182
|
-
| type LBRACE attribute_operations endcomma RBRACE {
|
183
|
-
# a defaults setting for a type
|
184
|
-
result = Factory.RESOURCE_DEFAULTS(val[0], val[2])
|
185
|
-
loc result, val[0], val[4]
|
186
|
-
}
|
187
|
-
|
188
|
-
# Override a value set elsewhere in the configuration.
|
189
|
-
# Produces Model::ResourceOverrideExpression
|
190
|
-
resource_override
|
191
|
-
: resourceref LBRACE attribute_operations endcomma RBRACE {
|
192
|
-
@lexer.commentpop
|
193
|
-
result = Factory.RESOURCE_OVERRIDE(val[0], val[2])
|
194
|
-
loc result, val[0], val[4]
|
195
|
-
}
|
196
|
-
|
197
|
-
# Exported and virtual resources; these don't get sent to the client
|
198
|
-
# unless they get collected elsewhere in the db.
|
199
|
-
# The original had validation here; checking if storeconfigs is on; this is moved to a validation step
|
200
|
-
# Also, validation was performed if an attempt was made to virtualize or export a resource defaults
|
201
|
-
# this is also now deferred to validation
|
202
|
-
# Produces [Model::ResourceExpression, Model::ResourceDefaultsExpression]
|
203
|
-
virtual_resource
|
204
|
-
: at resource {
|
205
|
-
val[1].form = val[0] # :virtual, :exported, (or :regular)
|
206
|
-
result = val[1]
|
207
|
-
}
|
208
|
-
|
209
|
-
# Produces Symbol corresponding to resource form
|
210
|
-
at
|
211
|
-
: AT { result = :virtual }
|
212
|
-
| AT AT { result = :exported }
|
213
|
-
|
214
|
-
# A collection statement. Currently supports no arguments at all, but eventually
|
215
|
-
# will, I assume.
|
216
|
-
#
|
217
|
-
# Produces Model::CollectExpression
|
218
|
-
#
|
219
|
-
collection
|
220
|
-
: type collect_query LBRACE attribute_operations endcomma RBRACE {
|
221
|
-
@lexer.commentpop
|
222
|
-
result = Factory.COLLECT(val[0].value.downcase, val[1], val[3])
|
223
|
-
loc result, val[0], val[5]
|
224
|
-
}
|
225
|
-
| type collect_query {
|
226
|
-
result = Factory.COLLECT(val[0].value.downcase, val[1], [])
|
227
|
-
loc result, val[0], val[1]
|
228
|
-
}
|
229
|
-
|
230
|
-
collect_query
|
231
|
-
: LCOLLECT optional_query RCOLLECT { result = Factory.VIRTUAL_QUERY(val[1]) ; loc result, val[0], val[2] }
|
232
|
-
| LLCOLLECT optional_query RRCOLLECT { result = Factory.EXPORTED_QUERY(val[1]) ; loc result, val[0], val[2] }
|
233
|
-
|
234
|
-
# ORIGINAL COMMENT: A mini-language for handling collection comparisons. This is organized
|
235
|
-
# to avoid the need for precedence indications.
|
236
|
-
# (New implementation is slightly different; and when finished, it may be possible to streamline the
|
237
|
-
# grammar - the difference is mostly in evaluation, not in grammar)
|
238
|
-
#
|
239
|
-
optional_query
|
240
|
-
: nil
|
241
|
-
| query
|
242
|
-
|
243
|
-
# ORIGINAL: Had a weird list structure where AND and OR where at the same level, and hence, there was the
|
244
|
-
# need to keep track of where parenthesis were (to get order correct).
|
245
|
-
#
|
246
|
-
# This is now not needed as AND has higher precedence than OR, and parenthesis are low in precedence
|
247
|
-
|
248
|
-
query
|
249
|
-
: predicate_lval ISEQUAL expression { result = (val[0] == val[2]) ; loc result, val[1] }
|
250
|
-
| predicate_lval NOTEQUAL expression { result = (val[0].ne(val[2])) ; loc result, val[1] }
|
251
|
-
| LPAREN query RPAREN { result = val[1] }
|
252
|
-
| query AND query { result = val[0].and(val[2]) ; loc result, val[1] }
|
253
|
-
| query OR query { result = val[0].or(val[2]) ; loc result, val[1] }
|
254
|
-
|
255
|
-
|
256
|
-
# Produces Model::VariableExpression, or Model::QualifiedName
|
257
|
-
predicate_lval
|
258
|
-
: variable
|
259
|
-
| name
|
260
|
-
|
261
|
-
resourceinst
|
262
|
-
: resourcename COLON attribute_operations endcomma { result = Factory.RESOURCE_BODY(val[0], val[2]) }
|
263
|
-
|
264
|
-
resourceinstances
|
265
|
-
: resourceinst { result = [val[0]] }
|
266
|
-
| resourceinstances SEMIC resourceinst { result = val[0].push val[2] }
|
267
|
-
|
268
|
-
|
269
|
-
resourcename
|
270
|
-
: quotedtext
|
271
|
-
| name
|
272
|
-
| type
|
273
|
-
| selector
|
274
|
-
| variable
|
275
|
-
| array
|
276
|
-
| hasharrayaccesses
|
277
|
-
|
278
|
-
# Assignment, only assignment to variable is legal, but parser builds expression for [] = anyway to
|
279
|
-
# enable a better error message
|
280
|
-
assignment
|
281
|
-
: VARIABLE EQUALS expression { result = Factory.var(Factory.fqn(val[0][:value])).set(val[2]) ; loc result, val[1] }
|
282
|
-
| hasharrayaccess EQUALS expression { result val[0].set(val[2]); loc result, val[1] }
|
283
|
-
|
284
|
-
append
|
285
|
-
: VARIABLE APPENDS expression { result = Factory.var(val[0][:value]).plus_set(val[1]) ; loc result, val[1] }
|
286
|
-
|
287
|
-
# Produces Array<Model::AttributeOperation>
|
288
|
-
attribute_operations
|
289
|
-
: { result = [] }
|
290
|
-
| attribute_operation { result = [val[0]] }
|
291
|
-
| attribute_operations COMMA attribute_operation { result = val[0].push(val[2]) }
|
292
|
-
|
293
|
-
# Produces String
|
294
|
-
attribute_name
|
295
|
-
: NAME
|
296
|
-
| keyword
|
297
|
-
| BOOLEAN
|
298
|
-
|
299
|
-
# Several grammar issues here: the addparam did not allow keyword and booleans as names.
|
300
|
-
# In this version, the wrong combinations are validated instead of producing syntax errors
|
301
|
-
# (Can give nicer error message +> is not applicable to...)
|
302
|
-
# WAT - Boolean as attribute name?
|
303
|
-
# Produces Model::AttributeOperation
|
304
|
-
#
|
305
|
-
attribute_operation
|
306
|
-
: attribute_name FARROW expression {
|
307
|
-
result = Factory.ATTRIBUTE_OP(val[0][:value], :'=>', val[2])
|
308
|
-
loc result, val[0], val[2]
|
309
|
-
}
|
310
|
-
| attribute_name PARROW expression {
|
311
|
-
result = Factory.ATTRIBUTE_OP(val[0][:value], :'+>', val[2])
|
312
|
-
loc result, val[0], val[2]
|
313
|
-
}
|
314
|
-
|
315
|
-
# Produces Model::CallNamedFunction
|
316
|
-
call_named_rval_function
|
317
|
-
: NAME LPAREN expressions RPAREN { result = Factory.CALL_NAMED(val[0][:value], true, val[2]) ; loc result, val[0], val[3] }
|
318
|
-
| NAME LPAREN RPAREN { result = Factory.CALL_NAMED(val[0][:value], true, []) ; loc result, val[0], val[2] }
|
319
|
-
|
320
|
-
quotedtext
|
321
|
-
: STRING { result = Factory.literal(val[0][:value]) ; loc result, val[0] }
|
322
|
-
| dqpre dqrval { result = Factory.string(val[0], *val[1]) ; loc result, val[0], val[1][-1] }
|
323
|
-
|
324
|
-
dqpre : DQPRE { result = Factory.literal(val[0][:value]); loc result, val[0] }
|
325
|
-
dqpost : DQPOST { result = Factory.literal(val[0][:value]); loc result, val[0] }
|
326
|
-
dqmid : DQMID { result = Factory.literal(val[0][:value]); loc result, val[0] }
|
327
|
-
text_expression : expression { result = Factory.TEXT(val[0]) }
|
328
|
-
|
329
|
-
dqrval
|
330
|
-
: text_expression dqtail { result = [val[0]] + val[1] }
|
331
|
-
|
332
|
-
dqtail
|
333
|
-
: dqpost { result = [val[0]] }
|
334
|
-
| dqmid dqrval { result = [val[0]] + val[1] }
|
335
|
-
|
336
|
-
|
337
|
-
# Reference to Resource (future also reference to other instances of other types than Resources).
|
338
|
-
# First form (lower case name) is deprecated (deprecation message handled in validation). Note that
|
339
|
-
# this requires use of token NAME since a rule call to name causes shift reduce conflict with
|
340
|
-
# a function call NAME NAME (calling function with NAME as argument e.g. foo bar).
|
341
|
-
#
|
342
|
-
# Produces InstanceReference
|
343
|
-
resourceref
|
344
|
-
: NAME LBRACK expressions RBRACK {
|
345
|
-
# Would want to use rule name here, but can't (need a NAME with higher precedence), so must
|
346
|
-
# create a QualifiedName instance here for NAME
|
347
|
-
result = Factory.INSTANCE(Factory.QNAME_OR_NUMBER(val[0][:value]), val[2]);
|
348
|
-
loc result, val[0], val[2][-1]
|
349
|
-
}
|
350
|
-
| type LBRACK expressions RBRACK {
|
351
|
-
result = Factory.INSTANCE(val[0], val[2]);
|
352
|
-
loc result, val[0], val[2][-1]
|
353
|
-
}
|
354
|
-
|
355
|
-
# Changed from Puppet 3x where there is no else part on unless
|
356
|
-
#
|
357
|
-
unless_expression
|
358
|
-
: UNLESS expression LBRACE statements RBRACE unless_else {
|
359
|
-
@lexer.commentpop
|
360
|
-
result = Factory.UNLESS(val[1], Factory.block_or_expression(*val[3]), val[5])
|
361
|
-
loc result, val[0], val[4]
|
362
|
-
}
|
363
|
-
| UNLESS expression LBRACE RBRACE unless_else {
|
364
|
-
@lexer.commentpop
|
365
|
-
result = Factory.UNLESS(val[1], nil, nil)
|
366
|
-
loc result, val[0], val[4]
|
367
|
-
}
|
368
|
-
|
369
|
-
# Different from else part of if, since "elsif" is not supported, but else is
|
370
|
-
#
|
371
|
-
# Produces [Model::Expression, nil] - nil if there is no else or elsif part
|
372
|
-
unless_else
|
373
|
-
: # nothing
|
374
|
-
| ELSE LBRACE statements RBRACE {
|
375
|
-
@lexer.commentpop
|
376
|
-
result = Factory.block_or_expression(*val[2])
|
377
|
-
loc result, val[0], val[3]
|
378
|
-
}
|
379
|
-
| ELSE LBRACE RBRACE {
|
380
|
-
@lexer.commentpop
|
381
|
-
result = nil # don't think a nop is needed here either
|
382
|
-
}
|
383
|
-
|
384
|
-
# Produces Model::IfExpression
|
385
|
-
if_expression
|
386
|
-
: IF if_expression_part {
|
387
|
-
result = val[1]
|
388
|
-
}
|
389
|
-
|
390
|
-
# Produces Model::IfExpression
|
391
|
-
if_expression_part
|
392
|
-
: expression LBRACE statements RBRACE else {
|
393
|
-
@lexer.commentpop
|
394
|
-
result = Factory.IF(val[0], Factory.block_or_expression(*val[2]), val[4])
|
395
|
-
loc(result, val[0], (val[4] ? val[4] : val[3]))
|
396
|
-
}
|
397
|
-
| expression LBRACE RBRACE else {
|
398
|
-
result = Factory.IF(val[0], nil, val[3])
|
399
|
-
loc(result, val[0], (val[3] ? val[3] : val[2]))
|
400
|
-
}
|
401
|
-
|
402
|
-
# Produces [Model::Expression, nil] - nil if there is no else or elsif part
|
403
|
-
else
|
404
|
-
: # nothing
|
405
|
-
| ELSIF if_expression_part { result = val[1] }
|
406
|
-
| ELSE LBRACE statements RBRACE {
|
407
|
-
@lexer.commentpop
|
408
|
-
result = Factory.block_or_expression(*val[2])
|
409
|
-
loc result, val[0], val[3]
|
410
|
-
}
|
411
|
-
| ELSE LBRACE RBRACE {
|
412
|
-
@lexer.commentpop
|
413
|
-
result = nil # don't think a nop is needed here either
|
414
|
-
}
|
415
|
-
|
416
|
-
# Produces Model::Expression
|
417
|
-
expression
|
418
|
-
: rvalue
|
419
|
-
| hash
|
420
|
-
| expression IN expression { result = val[0].in val[2] ; loc result, val[1] }
|
421
|
-
| expression MATCH match_rvalue { result = val[0] =~ val[2] ; loc result, val[1] }
|
422
|
-
| expression NOMATCH match_rvalue { result = val[0].mne val[2] ; loc result, val[1] }
|
423
|
-
| expression PLUS expression { result = val[0] + val[2] ; loc result, val[1] }
|
424
|
-
| expression MINUS expression { result = val[0] - val[2] ; loc result, val[1] }
|
425
|
-
| expression DIV expression { result = val[0] / val[2] ; loc result, val[1] }
|
426
|
-
| expression TIMES expression { result = val[0] * val[2] ; loc result, val[1] }
|
427
|
-
| expression LSHIFT expression { result = val[0] << val[2] ; loc result, val[1] }
|
428
|
-
| expression RSHIFT expression { result = val[0] >> val[2] ; loc result, val[1] }
|
429
|
-
| MINUS expression =UMINUS { result = val[1].minus() ; loc result, val[0] }
|
430
|
-
| expression NOTEQUAL expression { result = val[0].ne val[2] ; loc result, val[1] }
|
431
|
-
| expression ISEQUAL expression { result = val[0] == val[2] ; loc result, val[1] }
|
432
|
-
| expression GREATERTHAN expression { result = val[0] > val[2] ; loc result, val[1] }
|
433
|
-
| expression GREATEREQUAL expression { result = val[0] >= val[2] ; loc result, val[1] }
|
434
|
-
| expression LESSTHAN expression { result = val[0] < val[2] ; loc result, val[1] }
|
435
|
-
| expression LESSEQUAL expression { result = val[0] <= val[2] ; loc result, val[1] }
|
436
|
-
| NOT expression { result = val[1].not ; loc result, val[0] }
|
437
|
-
| expression AND expression { result = val[0].and val[2] ; loc result, val[1] }
|
438
|
-
| expression OR expression { result = val[0].or val[2] ; loc result, val[1] }
|
439
|
-
| LPAREN expression RPAREN { result = val[1] ; }
|
440
|
-
| call_method_with_lambda
|
441
|
-
|
442
|
-
match_rvalue
|
443
|
-
: regex
|
444
|
-
| quotedtext
|
445
|
-
|
446
|
-
# Produces Model::CaseExpression
|
447
|
-
casestatement
|
448
|
-
: CASE expression LBRACE case_options RBRACE {
|
449
|
-
@lexer.commentpop
|
450
|
-
result = Factory.CASE(val[1], *val[3])
|
451
|
-
loc result, val[0], val[4]
|
452
|
-
}
|
453
|
-
|
454
|
-
# Produces Array<Model::CaseOption>
|
455
|
-
case_options
|
456
|
-
: case_option { result = [val[0]] }
|
457
|
-
| case_options case_option { result = val[0].push val[1] }
|
458
|
-
|
459
|
-
# Produced Model::CaseOption (aka When)
|
460
|
-
case_option
|
461
|
-
: case_values COLON LBRACE statements RBRACE {
|
462
|
-
@lexer.commentpop
|
463
|
-
result = Factory.WHEN(val[0], val[3])
|
464
|
-
loc result, val[1], val[4]
|
465
|
-
}
|
466
|
-
| case_values COLON LBRACE RBRACE {
|
467
|
-
@lexer.commentpop
|
468
|
-
result = Factory.WHEN(val[0], nil)
|
469
|
-
loc result, val[1], val[3]
|
470
|
-
}
|
471
|
-
|
472
|
-
# Produces Array<Expression> mostly literals
|
473
|
-
case_values
|
474
|
-
: selectable { result = [val[0]] }
|
475
|
-
| case_values COMMA selectable { result = val[0].push val[2] }
|
476
|
-
|
477
|
-
# Produces Model::SelectorExpression
|
478
|
-
selector
|
479
|
-
: selectable QMARK selector_entries { result = val[0].select(*val[2]) ; loc result, val[1] }
|
480
|
-
|
481
|
-
# Produces Array<Model::SelectorEntry>
|
482
|
-
selector_entries
|
483
|
-
: selector_entry { result = [val[0]] }
|
484
|
-
| LBRACE selector_entry_list endcomma RBRACE {
|
485
|
-
@lexer.commentpop
|
486
|
-
result = val[1]
|
487
|
-
}
|
488
|
-
|
489
|
-
# Produces Array<Model::SelectorEntry>
|
490
|
-
selector_entry_list
|
491
|
-
: selector_entry { result = [val[0]] }
|
492
|
-
| selector_entry_list COMMA selector_entry { result = val[0].push val[2] }
|
493
|
-
|
494
|
-
# Produces a Model::SelectorEntry
|
495
|
-
selector_entry
|
496
|
-
: selectable FARROW rvalue { result = Factory.MAP(val[0], val[2]) ; loc result, val[1] }
|
497
|
-
|
498
|
-
# Produces Model::Expression (most of the literals)
|
499
|
-
selectable
|
500
|
-
: name
|
501
|
-
| type
|
502
|
-
| quotedtext
|
503
|
-
| variable
|
504
|
-
| call_named_rval_function
|
505
|
-
| boolean
|
506
|
-
| undef
|
507
|
-
| hasharrayaccess
|
508
|
-
| default
|
509
|
-
| regex
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
# Produces nil (noop)
|
514
|
-
import
|
515
|
-
: IMPORT strings {
|
516
|
-
error "Import not supported in this version of the parser", \
|
517
|
-
:line => stmt.context[:line], :file => stmt.context[:file]
|
518
|
-
result = nil
|
519
|
-
}
|
520
|
-
|
521
|
-
# IMPORT (T.B DEPRECATED IN PUPPET WHEN IT HAS BEEN FIGURED OUT HOW TO SUPPORT
|
522
|
-
# THE THINGS IMPORTS ARE USED FOR.
|
523
|
-
# BOLDLY DECIDED TO SKIP THIS COMPLETELY IN THIS IMPLEMENTATION - will trigger an error
|
524
|
-
#
|
525
|
-
# These are only used for importing, no interpolation
|
526
|
-
string
|
527
|
-
: STRING { result = [val[0][:value]] }
|
528
|
-
|
529
|
-
strings
|
530
|
-
: string
|
531
|
-
| strings COMMA string { result = val[0].push val[2] }
|
532
|
-
|
533
|
-
# Produces Model::Definition
|
534
|
-
definition
|
535
|
-
: DEFINE classname parameter_list LBRACE statements RBRACE {
|
536
|
-
@lexer.commentpop
|
537
|
-
result = Factory.DEFINITION(classname(val[1][:value]), val[2], val[4])
|
538
|
-
loc result, val[0], val[5]
|
539
|
-
@lexer.indefine = false
|
540
|
-
}
|
541
|
-
| DEFINE classname parameter_list LBRACE RBRACE {
|
542
|
-
@lexer.commentpop
|
543
|
-
result = Factory.DEFINITION(classname(val[1][:value]), val[2], nil)
|
544
|
-
loc result, val[0], val[4]
|
545
|
-
@lexer.indefine = false
|
546
|
-
}
|
547
|
-
|
548
|
-
# ORIGINAL COMMENT: Our class gets defined in the parent namespace, not our own.
|
549
|
-
# WAT ??! This is way odd; should get its complete name, classnames do not nest
|
550
|
-
# Seems like the call to classname makes use of the name scope
|
551
|
-
# (This is uneccesary, since the parent name is known when evaluating)
|
552
|
-
#
|
553
|
-
# Produces Model::HostClassDefinition
|
554
|
-
#
|
555
|
-
hostclass
|
556
|
-
: CLASS classname parameter_list classparent LBRACE statements RBRACE {
|
557
|
-
@lexer.commentpop
|
558
|
-
@lexer.namepop
|
559
|
-
result = Factory.HOSTCLASS(classname(val[1][:value]), val[2], token_text(val[3]), val[5])
|
560
|
-
loc result, val[0], val[6]
|
561
|
-
}
|
562
|
-
| CLASS classname parameter_list classparent LBRACE RBRACE {
|
563
|
-
@lexer.commentpop
|
564
|
-
@lexer.namepop
|
565
|
-
result = Factory.HOSTCLASS(classname(val[1][:value]), val[2], token_text(val[3]), nil)
|
566
|
-
loc result, val[0], val[5]
|
567
|
-
}
|
568
|
-
|
569
|
-
# Produces Model::NodeDefinition
|
570
|
-
nodedef
|
571
|
-
: NODE hostnames nodeparent LBRACE statements RBRACE {
|
572
|
-
@lexer.commentpop
|
573
|
-
result = Factory.NODE(val[1], val[2], val[4])
|
574
|
-
loc result, val[0], val[5]
|
575
|
-
}
|
576
|
-
| NODE hostnames nodeparent LBRACE RBRACE {
|
577
|
-
@lexer.commentpop
|
578
|
-
result = Factory.NODE(val[1], val[2], nil)
|
579
|
-
loc result, val[0], val[4]
|
580
|
-
}
|
581
|
-
|
582
|
-
# String result
|
583
|
-
classname
|
584
|
-
: NAME { result = val[0] }
|
585
|
-
| CLASS { result = val[0] }
|
586
|
-
|
587
|
-
# Hostnames is not a list of names, it is a list of name matchers (including a Regexp).
|
588
|
-
# (The old implementation had a special "Hostname" object with some minimal validation)
|
589
|
-
#
|
590
|
-
# Produces Array<Model::LiteralExpression>
|
591
|
-
#
|
592
|
-
hostnames
|
593
|
-
: nodename { result = [result] }
|
594
|
-
| hostnames COMMA nodename { result = val[0].push(val[2]) }
|
595
|
-
|
596
|
-
# Produces Model::LiteralExpression
|
597
|
-
#
|
598
|
-
nodename
|
599
|
-
: hostname
|
600
|
-
|
601
|
-
# Produces a LiteralExpression (string, :default, or regexp)
|
602
|
-
hostname
|
603
|
-
: NAME { result = Factory.fqn(val[0][:value]); loc result, val[0] }
|
604
|
-
| STRING { result = Factory.literal(val[0][:value]); loc result, val[0] }
|
605
|
-
| DEFAULT { result = Factory.literal(:default); loc result, val[0] }
|
606
|
-
| regex
|
607
|
-
|
608
|
-
|
609
|
-
# Produces Array<Model::Parameter>
|
610
|
-
parameter_list
|
611
|
-
: nil { result = [] }
|
612
|
-
| LPAREN RPAREN { result = [] }
|
613
|
-
| LPAREN parameters endcomma RPAREN { result = val[1] }
|
614
|
-
|
615
|
-
# Produces Array<Model::Parameter>
|
616
|
-
parameters
|
617
|
-
: parameter { result = [val[0]] }
|
618
|
-
| parameters COMMA parameter { result = val[0].push(val[2]) }
|
619
|
-
|
620
|
-
# Produces Model::Parameter
|
621
|
-
parameter
|
622
|
-
: VARIABLE EQUALS expression { result = Factory.PARAM(val[0][:value], val[2]) ; loc result, val[0] }
|
623
|
-
| VARIABLE { result = Factory.PARAM(val[0][:value]); loc result, val[0] }
|
624
|
-
|
625
|
-
# Produces Expression, since hostname is an Expression
|
626
|
-
nodeparent
|
627
|
-
: nil
|
628
|
-
| INHERITS hostname { result = val[1] }
|
629
|
-
|
630
|
-
# Produces String, name or nil result
|
631
|
-
classparent
|
632
|
-
: nil
|
633
|
-
| INHERITS classnameordefault { result = val[1] }
|
634
|
-
|
635
|
-
# Produces String (this construct allows a class to be named "default" and to be referenced as
|
636
|
-
# the parent class.
|
637
|
-
# TODO: Investigate the validity
|
638
|
-
# Produces a String (classname), or a token (DEFAULT).
|
639
|
-
#
|
640
|
-
classnameordefault
|
641
|
-
: classname
|
642
|
-
| DEFAULT
|
643
|
-
|
644
|
-
rvalue
|
645
|
-
: quotedtext
|
646
|
-
| name
|
647
|
-
| type
|
648
|
-
| boolean
|
649
|
-
| selector
|
650
|
-
| variable
|
651
|
-
| array
|
652
|
-
| hasharrayaccesses
|
653
|
-
| resourceref
|
654
|
-
| call_named_rval_function
|
655
|
-
| undef
|
656
|
-
|
657
|
-
array
|
658
|
-
: LBRACK expressions RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[2] }
|
659
|
-
| LBRACK expressions COMMA RBRACK { result = Factory.LIST(val[1]); loc result, val[0], val[3] }
|
660
|
-
| LBRACK RBRACK { result = Factory.literal([]) ; loc result, val[0] }
|
661
|
-
|
662
|
-
|
663
|
-
hash
|
664
|
-
: LBRACE hashpairs RBRACE { result = Factory.HASH(val[1]); loc result, val[0], val[2] }
|
665
|
-
| LBRACE hashpairs COMMA RBRACE { result = Factory.HASH(val[1]); loc result, val[0], val[3] }
|
666
|
-
| LBRACE RBRACE { result = Factory.literal({}) ; loc result, val[0], val[3] }
|
667
|
-
|
668
|
-
hashpairs
|
669
|
-
: hashpair { result = [val[0]] }
|
670
|
-
| hashpairs COMMA hashpair { result = val[0].push val[2] }
|
671
|
-
|
672
|
-
hashpair
|
673
|
-
: key FARROW expression { result = Factory.KEY_ENTRY(val[0], val[2]); loc result, val[1] }
|
674
|
-
|
675
|
-
key
|
676
|
-
: NAME { result = Factory.literal(val[0][:value]) ; loc result, val[0] }
|
677
|
-
| quotedtext { result = val[0] }
|
678
|
-
|
679
|
-
# NOTE: Limitation that LHS is a variable, means that it is not possible to do foo(10)[2] without
|
680
|
-
# using an intermediate variable
|
681
|
-
#
|
682
|
-
hasharrayaccess
|
683
|
-
: variable LBRACK expression RBRACK { result = val[0][val[2]]; loc result, val[0], val[3] }
|
684
|
-
|
685
|
-
hasharrayaccesses
|
686
|
-
: hasharrayaccess
|
687
|
-
| hasharrayaccesses LBRACK expression RBRACK { result = val[0][val[2]] ; loc result, val[1], val[3] }
|
688
|
-
|
689
|
-
# Produces Model::VariableExpression
|
690
|
-
variable : VARIABLE { result = Factory.fqn(val[0][:value]).var ; loc result, val[0] }
|
691
|
-
undef : UNDEF { result = Factory.literal(:undef); loc result, val[0] }
|
692
|
-
name : NAME { result = Factory.QNAME_OR_NUMBER(val[0][:value]) ; loc result, val[0] }
|
693
|
-
type : CLASSREF { result = Factory.QREF(val[0][:value]) ; loc result, val[0] }
|
694
|
-
|
695
|
-
default
|
696
|
-
: DEFAULT { result = Factory.literal(:default); loc result, val[0] }
|
697
|
-
|
698
|
-
boolean
|
699
|
-
# Assumes lexer produces a Boolean value for booleans, or this will go wrong (e.g. produce. LiteralString)
|
700
|
-
: BOOLEAN { result = Factory.literal(val[0][:value]) ; loc result, val[0] }
|
701
|
-
|
702
|
-
regex
|
703
|
-
: REGEX { result = Factory.literal(val[0][:value]); loc result, val[0] }
|
704
|
-
|
705
|
-
# ---Special markers & syntactic sugar
|
706
|
-
|
707
|
-
# WAT !!!! this means array can be [1=>2=>3], func (1=>2=>3), and other retarded constructs
|
708
|
-
# TODO: Remove the FARROW (investigate if there is any validity)
|
709
|
-
comma
|
710
|
-
: FARROW
|
711
|
-
| COMMA
|
712
|
-
|
713
|
-
endcomma
|
714
|
-
: #
|
715
|
-
| COMMA { result = nil }
|
716
|
-
|
717
|
-
endsemi
|
718
|
-
: #
|
719
|
-
| SEMIC
|
720
|
-
|
721
|
-
nil
|
722
|
-
: { result = nil}
|
723
|
-
|
724
|
-
## Empty list - not really needed? TODO: Check if this can be removed
|
725
|
-
#empty_list
|
726
|
-
# : { result = [] }
|
727
|
-
|
728
|
-
end
|
729
|
-
|
730
|
-
---- header ----
|
731
|
-
require 'puppet'
|
732
|
-
require 'puppet/util/loadedfile'
|
733
|
-
require 'puppet/pops'
|
734
|
-
|
735
|
-
module Puppet
|
736
|
-
class ParseError < Puppet::Error; end
|
737
|
-
class ImportError < Racc::ParseError; end
|
738
|
-
class AlreadyImportedError < ImportError; end
|
739
|
-
end
|
740
|
-
|
741
|
-
---- inner ----
|
742
|
-
|
743
|
-
# Make emacs happy
|
744
|
-
# Local Variables:
|
745
|
-
# mode: ruby
|
746
|
-
# End:
|