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
@@ -90,6 +90,7 @@ module Puppet::Pops::Validation
|
|
90
90
|
# @api public
|
91
91
|
#
|
92
92
|
class SeverityProducer
|
93
|
+
@@severity_hash = {:ignore => true, :warning => true, :error => true, :deprecation => true }
|
93
94
|
|
94
95
|
# Creates a new instance where all issues are diagnosed as :error unless overridden.
|
95
96
|
# @api public
|
@@ -122,8 +123,8 @@ module Puppet::Pops::Validation
|
|
122
123
|
# @api public
|
123
124
|
#
|
124
125
|
def []=(issue, level)
|
125
|
-
|
126
|
-
|
126
|
+
raise Puppet::DevError.new("Attempt to set validation severity for something that is not an Issue. (Got #{issue.class})") unless issue.is_a? Puppet::Pops::Issues::Issue
|
127
|
+
raise Puppet::DevError.new("Illegal severity level: #{option}") unless @@severity_hash[level]
|
127
128
|
raise Puppet::DevError.new("Attempt to demote the hard issue '#{issue.issue_code}' to #{level}") unless issue.demotable? || level == :error
|
128
129
|
@severities[issue] = level
|
129
130
|
end
|
@@ -134,7 +135,7 @@ module Puppet::Pops::Validation
|
|
134
135
|
# @api public
|
135
136
|
#
|
136
137
|
def should_report? issue
|
137
|
-
diagnose =
|
138
|
+
diagnose = @severities[issue]
|
138
139
|
diagnose == :error || diagnose == :warning || diagnose == :deprecation
|
139
140
|
end
|
140
141
|
|
@@ -149,7 +150,7 @@ module Puppet::Pops::Validation
|
|
149
150
|
# @api private
|
150
151
|
#
|
151
152
|
def assert_severity level
|
152
|
-
raise Puppet::DevError.new("Illegal severity level: #{option}") unless [
|
153
|
+
raise Puppet::DevError.new("Illegal severity level: #{option}") unless @@severity_hash[level]
|
153
154
|
end
|
154
155
|
end
|
155
156
|
|
@@ -194,13 +195,14 @@ module Puppet::Pops::Validation
|
|
194
195
|
arguments[:semantic] ||= semantic
|
195
196
|
|
196
197
|
# A detail message is always provided, but is blank by default.
|
198
|
+
# TODO: this support is questionable, it requires knowledge that :detail is special
|
197
199
|
arguments[:detail] ||= ''
|
198
200
|
|
199
|
-
|
200
|
-
file =
|
201
|
-
|
201
|
+
source_pos = Puppet::Pops::Utils.find_closest_positioned(semantic)
|
202
|
+
file = source_pos ? source_pos.locator.file : nil
|
203
|
+
|
202
204
|
severity = @severity_producer.severity(issue)
|
203
|
-
@acceptor.accept(Diagnostic.new(severity, issue, file, source_pos, arguments))
|
205
|
+
@acceptor.accept(Diagnostic.new(severity, issue, file, source_pos, arguments, except))
|
204
206
|
end
|
205
207
|
|
206
208
|
def will_accept? issue
|
@@ -221,6 +223,8 @@ module Puppet::Pops::Validation
|
|
221
223
|
@file = file
|
222
224
|
@source_pos = source_pos
|
223
225
|
@arguments = arguments
|
226
|
+
# TODO: Currently unused, the intention is to provide more information (stack backtrace, etc.) when
|
227
|
+
# debugging or similar - this to catch internal problems reported as higher level issues.
|
224
228
|
@exception = exception
|
225
229
|
end
|
226
230
|
end
|
@@ -250,6 +254,7 @@ module Puppet::Pops::Validation
|
|
250
254
|
|
251
255
|
def format_location diagnostic
|
252
256
|
file = diagnostic.file
|
257
|
+
file = (file.is_a?(String) && file.empty?) ? nil : file
|
253
258
|
line = pos = nil
|
254
259
|
if diagnostic.source_pos
|
255
260
|
line = diagnostic.source_pos.line
|
@@ -283,6 +288,7 @@ module Puppet::Pops::Validation
|
|
283
288
|
# have to be used here for backwards compatibility.
|
284
289
|
def format_location diagnostic
|
285
290
|
file = diagnostic.file
|
291
|
+
file = (file.is_a?(String) && file.empty?) ? nil : file
|
286
292
|
line = pos = nil
|
287
293
|
if diagnostic.source_pos
|
288
294
|
line = diagnostic.source_pos.line
|
@@ -41,45 +41,45 @@ class Puppet::Pops::Validation::Checker3_1
|
|
41
41
|
|
42
42
|
# Performs regular validity check
|
43
43
|
def check(o)
|
44
|
-
@@check_visitor.
|
44
|
+
@@check_visitor.visit_this_0(self, o)
|
45
45
|
end
|
46
46
|
|
47
47
|
# Performs check if this is a vaid hostname expression
|
48
48
|
# @param single_feature_name [String, nil] the name of a single valued hostname feature of the value's container. e.g. 'parent'
|
49
49
|
def hostname(o, semantic, single_feature_name = nil)
|
50
|
-
@@hostname_visitor.
|
50
|
+
@@hostname_visitor.visit_this_2(self, o, semantic, single_feature_name)
|
51
51
|
end
|
52
52
|
|
53
53
|
# Performs check if this is valid as a query
|
54
54
|
def query(o)
|
55
|
-
@@query_visitor.
|
55
|
+
@@query_visitor.visit_this_0(self, o)
|
56
56
|
end
|
57
57
|
|
58
58
|
# Performs check if this is valid as a relationship side
|
59
59
|
def relation(o, container)
|
60
|
-
@@relation_visitor.
|
60
|
+
@@relation_visitor.visit_this_1(self, o, container)
|
61
61
|
end
|
62
62
|
|
63
63
|
# Performs check if this is valid as a rvalue
|
64
64
|
def rvalue(o)
|
65
|
-
@@rvalue_visitor.
|
65
|
+
@@rvalue_visitor.visit_this_0(self, o)
|
66
66
|
end
|
67
67
|
|
68
68
|
# Performs check if this is valid as a container of a definition (class, define, node)
|
69
69
|
def top(o, definition)
|
70
|
-
@@top_visitor.
|
70
|
+
@@top_visitor.visit_this_1(self, o, definition)
|
71
71
|
end
|
72
72
|
|
73
73
|
# Checks the LHS of an assignment (is it assignable?).
|
74
74
|
# If args[0] is true, assignment via index is checked.
|
75
75
|
#
|
76
|
-
def assign(o,
|
77
|
-
@@assignment_visitor.
|
76
|
+
def assign(o, via_index = false)
|
77
|
+
@@assignment_visitor.visit_this_1(self, o, via_index)
|
78
78
|
end
|
79
79
|
|
80
80
|
#---ASSIGNMENT CHECKS
|
81
81
|
|
82
|
-
def assign_VariableExpression(o,
|
82
|
+
def assign_VariableExpression(o, via_index)
|
83
83
|
varname_string = varname_to_s(o.expr)
|
84
84
|
if varname_string =~ /^[0-9]+$/
|
85
85
|
acceptor.accept(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o, :varname => varname_string)
|
@@ -95,7 +95,7 @@ class Puppet::Pops::Validation::Checker3_1
|
|
95
95
|
# TODO: Investigate if there are invalid cases for += assignment
|
96
96
|
end
|
97
97
|
|
98
|
-
def assign_AccessExpression(o,
|
98
|
+
def assign_AccessExpression(o, via_index)
|
99
99
|
# Are indexed assignments allowed at all ? $x[x] = '...'
|
100
100
|
if acceptor.will_accept? Issues::ILLEGAL_INDEXED_ASSIGNMENT
|
101
101
|
acceptor.accept(Issues::ILLEGAL_INDEXED_ASSIGNMENT, o)
|
@@ -105,11 +105,11 @@ class Puppet::Pops::Validation::Checker3_1
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
def assign_Object(o,
|
108
|
+
def assign_Object(o, via_index)
|
109
109
|
# Can not assign to anything else (differentiate if this is via index or not)
|
110
110
|
# i.e. 10 = 'hello' vs. 10['x'] = 'hello' (the root is reported as being in error in both cases)
|
111
111
|
#
|
112
|
-
acceptor.accept(
|
112
|
+
acceptor.accept(via_index ? Issues::ILLEGAL_ASSIGNMENT_VIA_INDEX : Issues::ILLEGAL_ASSIGNMENT, o)
|
113
113
|
end
|
114
114
|
|
115
115
|
#---CHECKS
|
@@ -142,6 +142,7 @@ class Puppet::Pops::Validation::Checker3_1
|
|
142
142
|
end
|
143
143
|
|
144
144
|
def check_AssignmentExpression(o)
|
145
|
+
acceptor.accept(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator}) unless [:'=', :'+='].include? o.operator
|
145
146
|
assign(o.left_expr)
|
146
147
|
rvalue(o.right_expr)
|
147
148
|
end
|
@@ -527,6 +528,10 @@ class Puppet::Pops::Validation::Checker3_1
|
|
527
528
|
# ok, stop scanning parents
|
528
529
|
end
|
529
530
|
|
531
|
+
def top_Program(o, definition)
|
532
|
+
# ok
|
533
|
+
end
|
534
|
+
|
530
535
|
# A LambdaExpression is a BlockExpression, and this method is needed to prevent the polymorph method for BlockExpression
|
531
536
|
# to accept a lambda.
|
532
537
|
# A lambda can not iteratively create classes, nodes or defines as the lambda does not have a closure.
|
@@ -0,0 +1,514 @@
|
|
1
|
+
# A Validator validates a model.
|
2
|
+
#
|
3
|
+
# Validation is performed on each model element in isolation. Each method should validate the model element's state
|
4
|
+
# but not validate its referenced/contained elements except to check their validity in their respective role.
|
5
|
+
# The intent is to drive the validation with a tree iterator that visits all elements in a model.
|
6
|
+
#
|
7
|
+
#
|
8
|
+
# TODO: Add validation of multiplicities - this is a general validation that can be checked for all
|
9
|
+
# Model objects via their metamodel. (I.e an extra call to multiplicity check in polymorph check).
|
10
|
+
# This is however mostly valuable when validating model to model transformations, and is therefore T.B.D
|
11
|
+
#
|
12
|
+
class Puppet::Pops::Validation::Checker4_0
|
13
|
+
Issues = Puppet::Pops::Issues
|
14
|
+
Model = Puppet::Pops::Model
|
15
|
+
|
16
|
+
attr_reader :acceptor
|
17
|
+
# Initializes the validator with a diagnostics producer. This object must respond to
|
18
|
+
# `:will_accept?` and `:accept`.
|
19
|
+
#
|
20
|
+
def initialize(diagnostics_producer)
|
21
|
+
@@check_visitor ||= Puppet::Pops::Visitor.new(nil, "check", 0, 0)
|
22
|
+
@@rvalue_visitor ||= Puppet::Pops::Visitor.new(nil, "rvalue", 0, 0)
|
23
|
+
@@hostname_visitor ||= Puppet::Pops::Visitor.new(nil, "hostname", 1, 2)
|
24
|
+
@@assignment_visitor ||= Puppet::Pops::Visitor.new(nil, "assign", 0, 1)
|
25
|
+
@@query_visitor ||= Puppet::Pops::Visitor.new(nil, "query", 0, 0)
|
26
|
+
@@top_visitor ||= Puppet::Pops::Visitor.new(nil, "top", 1, 1)
|
27
|
+
@@relation_visitor ||= Puppet::Pops::Visitor.new(nil, "relation", 0, 0)
|
28
|
+
|
29
|
+
@acceptor = diagnostics_producer
|
30
|
+
end
|
31
|
+
|
32
|
+
# Validates the entire model by visiting each model element and calling `check`.
|
33
|
+
# The result is collected (or acted on immediately) by the configured diagnostic provider/acceptor
|
34
|
+
# given when creating this Checker.
|
35
|
+
#
|
36
|
+
def validate(model)
|
37
|
+
# tree iterate the model, and call check for each element
|
38
|
+
check(model)
|
39
|
+
model.eAllContents.each {|m| check(m) }
|
40
|
+
end
|
41
|
+
|
42
|
+
# Performs regular validity check
|
43
|
+
def check(o)
|
44
|
+
@@check_visitor.visit_this_0(self, o)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Performs check if this is a vaid hostname expression
|
48
|
+
# @param single_feature_name [String, nil] the name of a single valued hostname feature of the value's container. e.g. 'parent'
|
49
|
+
def hostname(o, semantic, single_feature_name = nil)
|
50
|
+
@@hostname_visitor.visit_this_2(self, o, semantic, single_feature_name)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Performs check if this is valid as a query
|
54
|
+
def query(o)
|
55
|
+
@@query_visitor.visit_this_0(self, o)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Performs check if this is valid as a relationship side
|
59
|
+
def relation(o)
|
60
|
+
@@relation_visitor.visit_this_0(self, o)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Performs check if this is valid as a rvalue
|
64
|
+
def rvalue(o)
|
65
|
+
@@rvalue_visitor.visit_this_0(self, o)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Performs check if this is valid as a container of a definition (class, define, node)
|
69
|
+
def top(o, definition)
|
70
|
+
@@top_visitor.visit_this_1(self, o, definition)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Checks the LHS of an assignment (is it assignable?).
|
74
|
+
# If args[0] is true, assignment via index is checked.
|
75
|
+
#
|
76
|
+
def assign(o, via_index = false)
|
77
|
+
@@assignment_visitor.visit_this_1(self, o, via_index)
|
78
|
+
end
|
79
|
+
|
80
|
+
#---ASSIGNMENT CHECKS
|
81
|
+
|
82
|
+
def assign_VariableExpression(o, via_index)
|
83
|
+
varname_string = varname_to_s(o.expr)
|
84
|
+
if varname_string =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
|
85
|
+
acceptor.accept(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o, :varname => varname_string)
|
86
|
+
end
|
87
|
+
# Can not assign to something in another namespace (i.e. a '::' in the name is not legal)
|
88
|
+
if acceptor.will_accept? Issues::CROSS_SCOPE_ASSIGNMENT
|
89
|
+
if varname_string =~ /::/
|
90
|
+
acceptor.accept(Issues::CROSS_SCOPE_ASSIGNMENT, o, :name => varname_string)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
# TODO: Could scan for reassignment of the same variable if done earlier in the same container
|
94
|
+
# Or if assigning to a parameter (more work).
|
95
|
+
# TODO: Investigate if there are invalid cases for += assignment
|
96
|
+
end
|
97
|
+
|
98
|
+
def assign_AccessExpression(o, via_index)
|
99
|
+
# Are indexed assignments allowed at all ? $x[x] = '...'
|
100
|
+
if acceptor.will_accept? Issues::ILLEGAL_INDEXED_ASSIGNMENT
|
101
|
+
acceptor.accept(Issues::ILLEGAL_INDEXED_ASSIGNMENT, o)
|
102
|
+
else
|
103
|
+
# Then the left expression must be assignable-via-index
|
104
|
+
assign(o.left_expr, true)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def assign_Object(o, via_index)
|
109
|
+
# Can not assign to anything else (differentiate if this is via index or not)
|
110
|
+
# i.e. 10 = 'hello' vs. 10['x'] = 'hello' (the root is reported as being in error in both cases)
|
111
|
+
#
|
112
|
+
acceptor.accept(via_index ? Issues::ILLEGAL_ASSIGNMENT_VIA_INDEX : Issues::ILLEGAL_ASSIGNMENT, o)
|
113
|
+
end
|
114
|
+
|
115
|
+
#---CHECKS
|
116
|
+
|
117
|
+
def check_Object(o)
|
118
|
+
end
|
119
|
+
|
120
|
+
def check_Factory(o)
|
121
|
+
check(o.current)
|
122
|
+
end
|
123
|
+
|
124
|
+
def check_AccessExpression(o)
|
125
|
+
# Only min range is checked, all other checks are RT checks as they depend on the resulting type
|
126
|
+
# of the LHS.
|
127
|
+
if o.keys.size < 1
|
128
|
+
acceptor.accept(Issues::MISSING_INDEX, o)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def check_AssignmentExpression(o)
|
133
|
+
acceptor.accept(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator}) unless [:'=', :'+=', :'-='].include? o.operator
|
134
|
+
assign(o.left_expr)
|
135
|
+
rvalue(o.right_expr)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Checks that operation with :+> is contained in a ResourceOverride or Collector.
|
139
|
+
#
|
140
|
+
# Parent of an AttributeOperation can be one of:
|
141
|
+
# * CollectExpression
|
142
|
+
# * ResourceOverride
|
143
|
+
# * ResourceBody (ILLEGAL this is a regular resource expression)
|
144
|
+
# * ResourceDefaults (ILLEGAL)
|
145
|
+
#
|
146
|
+
def check_AttributeOperation(o)
|
147
|
+
if o.operator == :'+>'
|
148
|
+
# Append operator use is constrained
|
149
|
+
parent = o.eContainer
|
150
|
+
unless parent.is_a?(Model::CollectExpression) || parent.is_a?(Model::ResourceOverrideExpression)
|
151
|
+
acceptor.accept(Issues::ILLEGAL_ATTRIBUTE_APPEND, o, {:name=>o.attribute_name, :parent=>parent})
|
152
|
+
end
|
153
|
+
end
|
154
|
+
rvalue(o.value_expr)
|
155
|
+
end
|
156
|
+
|
157
|
+
def check_BinaryExpression(o)
|
158
|
+
rvalue(o.left_expr)
|
159
|
+
rvalue(o.right_expr)
|
160
|
+
end
|
161
|
+
|
162
|
+
def check_CallNamedFunctionExpression(o)
|
163
|
+
case o.functor_expr
|
164
|
+
when Puppet::Pops::Model::QualifiedName
|
165
|
+
# ok
|
166
|
+
nil
|
167
|
+
when Puppet::Pops::Model::RenderStringExpression
|
168
|
+
# helpful to point out this easy to make Epp error
|
169
|
+
acceptor.accept(Issues::ILLEGAL_EPP_PARAMETERS, o)
|
170
|
+
else
|
171
|
+
acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function name', :container => o})
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def check_MethodCallExpression(o)
|
176
|
+
unless o.functor_expr.is_a? Model::QualifiedName
|
177
|
+
acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.functor_expr, :feature => 'function name', :container => o)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def check_CaseExpression(o)
|
182
|
+
rvalue(o.test)
|
183
|
+
# There should only be one LiteralDefault case option value
|
184
|
+
# TODO: Implement this check
|
185
|
+
end
|
186
|
+
|
187
|
+
def check_CaseOption(o)
|
188
|
+
o.values.each { |v| rvalue(v) }
|
189
|
+
end
|
190
|
+
|
191
|
+
def check_CollectExpression(o)
|
192
|
+
unless o.type_expr.is_a? Model::QualifiedReference
|
193
|
+
acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.type_expr, :feature=> 'type name', :container => o)
|
194
|
+
end
|
195
|
+
|
196
|
+
# If a collect expression tries to collect exported resources and storeconfigs is not on
|
197
|
+
# then it will not work... This was checked in the parser previously. This is a runtime checking
|
198
|
+
# thing as opposed to a language thing.
|
199
|
+
if acceptor.will_accept?(Issues::RT_NO_STORECONFIGS) && o.query.is_a?(Model::ExportedQuery)
|
200
|
+
acceptor.accept(Issues::RT_NO_STORECONFIGS, o)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
# Only used for function names, grammar should not be able to produce something faulty, but
|
205
|
+
# check anyway if model is created programatically (it will fail in transformation to AST for sure).
|
206
|
+
def check_NamedAccessExpression(o)
|
207
|
+
name = o.right_expr
|
208
|
+
unless name.is_a? Model::QualifiedName
|
209
|
+
acceptor.accept(Issues::ILLEGAL_EXPRESSION, name, :feature=> 'function name', :container => o.eContainer)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
# for 'class' and 'define'
|
214
|
+
def check_NamedDefinition(o)
|
215
|
+
top(o.eContainer, o)
|
216
|
+
if o.name !~ Puppet::Pops::Patterns::CLASSREF
|
217
|
+
acceptor.accept(Issues::ILLEGAL_DEFINITION_NAME, o, {:name=>o.name})
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def check_IfExpression(o)
|
222
|
+
rvalue(o.test)
|
223
|
+
end
|
224
|
+
|
225
|
+
def check_KeyedEntry(o)
|
226
|
+
rvalue(o.key)
|
227
|
+
rvalue(o.value)
|
228
|
+
# In case there are additional things to forbid than non-rvalues
|
229
|
+
# acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.key, :feature => 'hash key', :container => o.eContainer)
|
230
|
+
end
|
231
|
+
|
232
|
+
# A Lambda is a Definition, but it may appear in other scopes than top scope (Which check_Definition asserts).
|
233
|
+
#
|
234
|
+
def check_LambdaExpression(o)
|
235
|
+
end
|
236
|
+
|
237
|
+
def check_LiteralList(o)
|
238
|
+
o.values.each {|v| rvalue(v) }
|
239
|
+
end
|
240
|
+
|
241
|
+
def check_NodeDefinition(o)
|
242
|
+
# Check that hostnames are valid hostnames (or regular expressions)
|
243
|
+
hostname(o.host_matches, o)
|
244
|
+
hostname(o.parent, o, 'parent') unless o.parent.nil?
|
245
|
+
top(o.eContainer, o)
|
246
|
+
end
|
247
|
+
|
248
|
+
# No checking takes place - all expressions using a QualifiedName need to check. This because the
|
249
|
+
# rules are slightly different depending on the container (A variable allows a numeric start, but not
|
250
|
+
# other names). This means that (if the lexer/parser so chooses) a QualifiedName
|
251
|
+
# can be anything when it represents a Bare Word and evaluates to a String.
|
252
|
+
#
|
253
|
+
def check_QualifiedName(o)
|
254
|
+
end
|
255
|
+
|
256
|
+
# Checks that the value is a valid UpperCaseWord (a CLASSREF), and optionally if it contains a hypen.
|
257
|
+
# DOH: QualifiedReferences are created with LOWER CASE NAMES at parse time
|
258
|
+
def check_QualifiedReference(o)
|
259
|
+
# Is this a valid qualified name?
|
260
|
+
if o.value !~ Puppet::Pops::Patterns::CLASSREF
|
261
|
+
acceptor.accept(Issues::ILLEGAL_CLASSREF, o, {:name=>o.value})
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def check_QueryExpression(o)
|
266
|
+
query(o.expr) if o.expr # is optional
|
267
|
+
end
|
268
|
+
|
269
|
+
def relation_Object(o)
|
270
|
+
rvalue(o)
|
271
|
+
end
|
272
|
+
|
273
|
+
def relation_CollectExpression(o); end
|
274
|
+
|
275
|
+
def relation_RelationshipExpression(o); end
|
276
|
+
|
277
|
+
def check_Parameter(o)
|
278
|
+
if o.name =~ /^[0-9]+$/
|
279
|
+
acceptor.accept(Issues::ILLEGAL_NUMERIC_PARAMETER, o, :name => o.name)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
#relationship_side: resource
|
284
|
+
# | resourceref
|
285
|
+
# | collection
|
286
|
+
# | variable
|
287
|
+
# | quotedtext
|
288
|
+
# | selector
|
289
|
+
# | casestatement
|
290
|
+
# | hasharrayaccesses
|
291
|
+
|
292
|
+
def check_RelationshipExpression(o)
|
293
|
+
relation(o.left_expr)
|
294
|
+
relation(o.right_expr)
|
295
|
+
end
|
296
|
+
|
297
|
+
def check_ResourceExpression(o)
|
298
|
+
# A resource expression must have a lower case NAME as its type e.g. 'file { ... }'
|
299
|
+
unless o.type_name.is_a? Model::QualifiedName
|
300
|
+
acceptor.accept(Issues::ILLEGAL_EXPRESSION, o.type_name, :feature => 'resource type', :container => o)
|
301
|
+
end
|
302
|
+
|
303
|
+
# This is a runtime check - the model is valid, but will have runtime issues when evaluated
|
304
|
+
# and storeconfigs is not set.
|
305
|
+
if acceptor.will_accept?(Issues::RT_NO_STORECONFIGS) && o.exported
|
306
|
+
acceptor.accept(Issues::RT_NO_STORECONFIGS_EXPORT, o)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
def check_ResourceDefaultsExpression(o)
|
311
|
+
if o.form && o.form != :regular
|
312
|
+
acceptor.accept(Issues::NOT_VIRTUALIZEABLE, o)
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
def check_SelectorExpression(o)
|
317
|
+
rvalue(o.left_expr)
|
318
|
+
end
|
319
|
+
|
320
|
+
def check_SelectorEntry(o)
|
321
|
+
rvalue(o.matching_expr)
|
322
|
+
end
|
323
|
+
|
324
|
+
def check_UnaryExpression(o)
|
325
|
+
rvalue(o.expr)
|
326
|
+
end
|
327
|
+
|
328
|
+
def check_UnlessExpression(o)
|
329
|
+
rvalue(o.test)
|
330
|
+
# TODO: Unless may not have an else part that is an IfExpression (grammar denies this though)
|
331
|
+
end
|
332
|
+
|
333
|
+
# Checks that variable is either strictly 0, or a non 0 starting decimal number, or a valid VAR_NAME
|
334
|
+
def check_VariableExpression(o)
|
335
|
+
# The expression must be a qualified name
|
336
|
+
if !o.expr.is_a?(Model::QualifiedName)
|
337
|
+
acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, :feature => 'name', :container => o)
|
338
|
+
else
|
339
|
+
# name must be either a decimal value, or a valid NAME
|
340
|
+
name = o.expr.value
|
341
|
+
if name[0,1] =~ /[0-9]/
|
342
|
+
unless name =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
|
343
|
+
acceptor.accept(Issues::ILLEGAL_NUMERIC_VAR_NAME, o, :name => name)
|
344
|
+
end
|
345
|
+
else
|
346
|
+
unless name =~ Puppet::Pops::Patterns::VAR_NAME
|
347
|
+
acceptor.accept(Issues::ILLEGAL_VAR_NAME, o, :name => name)
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
#--- HOSTNAME CHECKS
|
354
|
+
|
355
|
+
# Transforms Array of host matching expressions into a (Ruby) array of AST::HostName
|
356
|
+
def hostname_Array(o, semantic, single_feature_name)
|
357
|
+
if single_feature_name
|
358
|
+
acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, {:feature=>single_feature_name, :container=>semantic})
|
359
|
+
end
|
360
|
+
o.each {|x| hostname(x, semantic, false) }
|
361
|
+
end
|
362
|
+
|
363
|
+
def hostname_String(o, semantic, single_feature_name)
|
364
|
+
# The 3.x checker only checks for illegal characters - if matching /[^-\w.]/ the name is invalid,
|
365
|
+
# but this allows pathological names like "a..b......c", "----"
|
366
|
+
# TODO: Investigate if more illegal hostnames should be flagged.
|
367
|
+
#
|
368
|
+
if o =~ Puppet::Pops::Patterns::ILLEGAL_HOSTNAME_CHARS
|
369
|
+
acceptor.accept(Issues::ILLEGAL_HOSTNAME_CHARS, semantic, :hostname => o)
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def hostname_LiteralValue(o, semantic, single_feature_name)
|
374
|
+
hostname_String(o.value.to_s, o, single_feature_name)
|
375
|
+
end
|
376
|
+
|
377
|
+
def hostname_ConcatenatedString(o, semantic, single_feature_name)
|
378
|
+
# Puppet 3.1. only accepts a concatenated string without interpolated expressions
|
379
|
+
if the_expr = o.segments.index {|s| s.is_a?(Model::TextExpression) }
|
380
|
+
acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o.segments[the_expr].expr)
|
381
|
+
elsif o.segments.size() != 1
|
382
|
+
# corner case, bad model, concatenation of several plain strings
|
383
|
+
acceptor.accept(Issues::ILLEGAL_HOSTNAME_INTERPOLATION, o)
|
384
|
+
else
|
385
|
+
# corner case, may be ok, but lexer may have replaced with plain string, this is
|
386
|
+
# here if it does not
|
387
|
+
hostname_String(o.segments[0], o.segments[0], false)
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
def hostname_QualifiedName(o, semantic, single_feature_name)
|
392
|
+
hostname_String(o.value.to_s, o, single_feature_name)
|
393
|
+
end
|
394
|
+
|
395
|
+
def hostname_QualifiedReference(o, semantic, single_feature_name)
|
396
|
+
hostname_String(o.value.to_s, o, single_feature_name)
|
397
|
+
end
|
398
|
+
|
399
|
+
def hostname_LiteralNumber(o, semantic, single_feature_name)
|
400
|
+
# always ok
|
401
|
+
end
|
402
|
+
|
403
|
+
def hostname_LiteralDefault(o, semantic, single_feature_name)
|
404
|
+
# always ok
|
405
|
+
end
|
406
|
+
|
407
|
+
def hostname_LiteralRegularExpression(o, semantic, single_feature_name)
|
408
|
+
# always ok
|
409
|
+
end
|
410
|
+
|
411
|
+
def hostname_Object(o, semantic, single_feature_name)
|
412
|
+
acceptor.accept(Issues::ILLEGAL_EXPRESSION, o, {:feature=> single_feature_name || 'hostname', :container=>semantic})
|
413
|
+
end
|
414
|
+
|
415
|
+
#---QUERY CHECKS
|
416
|
+
|
417
|
+
# Anything not explicitly allowed is flagged as error.
|
418
|
+
def query_Object(o)
|
419
|
+
acceptor.accept(Issues::ILLEGAL_QUERY_EXPRESSION, o)
|
420
|
+
end
|
421
|
+
|
422
|
+
# Puppet AST only allows == and !=
|
423
|
+
#
|
424
|
+
def query_ComparisonExpression(o)
|
425
|
+
acceptor.accept(Issues::ILLEGAL_QUERY_EXPRESSION, o) unless [:'==', :'!='].include? o.operator
|
426
|
+
end
|
427
|
+
|
428
|
+
# Allows AND, OR, and checks if left/right are allowed in query.
|
429
|
+
def query_BooleanExpression(o)
|
430
|
+
query o.left_expr
|
431
|
+
query o.right_expr
|
432
|
+
end
|
433
|
+
|
434
|
+
def query_ParenthesizedExpression(o)
|
435
|
+
query(o.expr)
|
436
|
+
end
|
437
|
+
|
438
|
+
def query_VariableExpression(o); end
|
439
|
+
|
440
|
+
def query_QualifiedName(o); end
|
441
|
+
|
442
|
+
def query_LiteralNumber(o); end
|
443
|
+
|
444
|
+
def query_LiteralString(o); end
|
445
|
+
|
446
|
+
def query_LiteralBoolean(o); end
|
447
|
+
|
448
|
+
#---RVALUE CHECKS
|
449
|
+
|
450
|
+
# By default, all expressions are reported as being rvalues
|
451
|
+
# Implement specific rvalue checks for those that are not.
|
452
|
+
#
|
453
|
+
def rvalue_Expression(o); end
|
454
|
+
|
455
|
+
def rvalue_ResourceDefaultsExpression(o); acceptor.accept(Issues::NOT_RVALUE, o) ; end
|
456
|
+
|
457
|
+
def rvalue_ResourceOverrideExpression(o); acceptor.accept(Issues::NOT_RVALUE, o) ; end
|
458
|
+
|
459
|
+
def rvalue_CollectExpression(o) ; acceptor.accept(Issues::NOT_RVALUE, o) ; end
|
460
|
+
|
461
|
+
def rvalue_Definition(o) ; acceptor.accept(Issues::NOT_RVALUE, o) ; end
|
462
|
+
|
463
|
+
def rvalue_NodeDefinition(o) ; acceptor.accept(Issues::NOT_RVALUE, o) ; end
|
464
|
+
|
465
|
+
def rvalue_UnaryExpression(o) ; rvalue o.expr ; end
|
466
|
+
|
467
|
+
#---TOP CHECK
|
468
|
+
|
469
|
+
def top_NilClass(o, definition)
|
470
|
+
# ok, reached the top, no more parents
|
471
|
+
end
|
472
|
+
|
473
|
+
def top_Object(o, definition)
|
474
|
+
# fail, reached a container that is not top level
|
475
|
+
acceptor.accept(Issues::NOT_TOP_LEVEL, definition)
|
476
|
+
end
|
477
|
+
|
478
|
+
def top_BlockExpression(o, definition)
|
479
|
+
# ok, if this is a block representing the body of a class, or is top level
|
480
|
+
top o.eContainer, definition
|
481
|
+
end
|
482
|
+
|
483
|
+
def top_HostClassDefinition(o, definition)
|
484
|
+
# ok, stop scanning parents
|
485
|
+
end
|
486
|
+
|
487
|
+
def top_Program(o, definition)
|
488
|
+
# ok
|
489
|
+
end
|
490
|
+
|
491
|
+
# A LambdaExpression is a BlockExpression, and this method is needed to prevent the polymorph method for BlockExpression
|
492
|
+
# to accept a lambda.
|
493
|
+
# A lambda can not iteratively create classes, nodes or defines as the lambda does not have a closure.
|
494
|
+
#
|
495
|
+
def top_LambdaExpression(o, definition)
|
496
|
+
# fail, stop scanning parents
|
497
|
+
acceptor.accept(Issues::NOT_TOP_LEVEL, definition)
|
498
|
+
end
|
499
|
+
|
500
|
+
#--- NON POLYMORPH, NON CHECKING CODE
|
501
|
+
|
502
|
+
# Produces string part of something named, or nil if not a QualifiedName or QualifiedReference
|
503
|
+
#
|
504
|
+
def varname_to_s(o)
|
505
|
+
case o
|
506
|
+
when Model::QualifiedName
|
507
|
+
o.value
|
508
|
+
when Model::QualifiedReference
|
509
|
+
o.value
|
510
|
+
else
|
511
|
+
nil
|
512
|
+
end
|
513
|
+
end
|
514
|
+
end
|