puppet 3.2.4 → 3.3.0.rc2
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/COMMITTERS.md +101 -42
- data/Gemfile +15 -4
- data/README.md +5 -1
- data/README_DEVELOPER.md +117 -54
- data/Rakefile +4 -0
- data/ext/build_defaults.yaml +3 -2
- data/ext/debian/puppet-common.manpages +33 -1
- data/ext/gentoo/init.d/puppet +1 -1
- data/ext/gentoo/init.d/puppetmaster +1 -1
- data/ext/redhat/puppet.spec.erb +0 -1
- data/install.rb +2 -1
- data/lib/hiera/backend/puppet_backend.rb +1 -1
- data/lib/puppet/application.rb +10 -9
- data/lib/puppet/application/agent.rb +87 -93
- data/lib/puppet/application/apply.rb +0 -2
- data/lib/puppet/application/device.rb +3 -3
- data/lib/puppet/application/kick.rb +2 -2
- data/lib/puppet/application/master.rb +41 -19
- data/lib/puppet/application/queue.rb +5 -3
- data/lib/puppet/bindings.rb +147 -0
- data/lib/puppet/configurer.rb +25 -15
- data/lib/puppet/configurer/fact_handler.rb +2 -9
- data/lib/puppet/daemon.rb +44 -33
- data/lib/puppet/defaults.rb +57 -26
- data/lib/puppet/error.rb +1 -1
- data/lib/puppet/external/dot.rb +2 -2
- data/lib/puppet/external/nagios/base.rb +1 -6
- data/lib/puppet/external/pson/common.rb +2 -2
- data/lib/puppet/external/pson/pure/generator.rb +2 -2
- data/lib/puppet/external/pson/pure/parser.rb +1 -1
- data/lib/puppet/face/ca.rb +1 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/help.rb +2 -2
- data/lib/puppet/face/module/list.rb +2 -2
- data/lib/puppet/feature/rails.rb +1 -1
- data/lib/puppet/file_bucket/dipper.rb +0 -1
- data/lib/puppet/file_serving/base.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +20 -14
- data/lib/puppet/forge.rb +0 -32
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/errors.rb +3 -3
- data/lib/puppet/forge/repository.rb +7 -42
- data/lib/puppet/graph.rb +11 -0
- data/lib/puppet/graph/key.rb +26 -0
- data/lib/puppet/graph/prioritizer.rb +29 -0
- data/lib/puppet/graph/random_prioritizer.rb +16 -0
- data/lib/puppet/{rb_tree_map.rb → graph/rb_tree_map.rb} +3 -3
- data/lib/puppet/graph/relationship_graph.rb +246 -0
- data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
- data/lib/puppet/{simple_graph.rb → graph/simple_graph.rb} +22 -3
- data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
- data/lib/puppet/indirector.rb +2 -2
- data/lib/puppet/indirector/catalog/compiler.rb +10 -7
- data/lib/puppet/indirector/catalog/static_compiler.rb +50 -0
- data/lib/puppet/indirector/certificate/rest.rb +1 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +2 -2
- data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -1
- data/lib/puppet/indirector/facts/network_device.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +0 -1
- data/lib/puppet/indirector/indirection.rb +2 -2
- data/lib/puppet/indirector/memory.rb +9 -0
- data/lib/puppet/indirector/node/ldap.rb +2 -4
- data/lib/puppet/indirector/report/processor.rb +1 -2
- data/lib/puppet/indirector/report/rest.rb +1 -1
- data/lib/puppet/indirector/request.rb +32 -10
- data/lib/puppet/indirector/resource/rest.rb +1 -1
- data/lib/puppet/indirector/resource_type/parser.rb +31 -12
- data/lib/puppet/interface.rb +1 -1
- data/lib/puppet/interface/documentation.rb +7 -11
- data/lib/puppet/interface/option.rb +1 -1
- data/lib/puppet/interface/option_builder.rb +1 -1
- data/lib/puppet/metatype/manager.rb +2 -2
- data/lib/puppet/module.rb +7 -1
- data/lib/puppet/module_tool.rb +1 -1
- data/lib/puppet/module_tool/applications/application.rb +10 -0
- data/lib/puppet/module_tool/applications/installer.rb +6 -3
- data/lib/puppet/module_tool/dependency.rb +2 -0
- data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
- data/lib/puppet/module_tool/metadata.rb +25 -13
- data/lib/puppet/module_tool/modulefile.rb +7 -7
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -2
- data/lib/puppet/module_tool/skeleton.rb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +5 -5
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +5 -4
- data/lib/puppet/network/auth_config_parser.rb +3 -0
- data/lib/puppet/network/authconfig.rb +0 -1
- data/lib/puppet/network/authorization.rb +1 -1
- data/lib/puppet/network/authstore.rb +2 -2
- data/lib/puppet/network/format_handler.rb +25 -114
- data/lib/puppet/network/format_support.rb +106 -0
- data/lib/puppet/network/formats.rb +10 -4
- data/lib/puppet/network/http/compression.rb +1 -1
- data/lib/puppet/network/http/connection.rb +76 -32
- data/lib/puppet/network/http/handler.rb +122 -61
- data/lib/puppet/network/http/rack/rest.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +9 -3
- data/lib/puppet/network/http_pool.rb +2 -2
- data/lib/puppet/network/resolver.rb +1 -0
- data/lib/puppet/network/server.rb +5 -81
- data/lib/puppet/node/environment.rb +256 -13
- data/lib/puppet/node/facts.rb +28 -2
- data/lib/puppet/parameter.rb +27 -18
- data/lib/puppet/parameter/boolean.rb +20 -0
- data/lib/puppet/parameter/path.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parameter/value_collection.rb +1 -1
- data/lib/puppet/parser/ast/arithmetic_operator.rb +8 -0
- data/lib/puppet/parser/ast/casestatement.rb +0 -3
- data/lib/puppet/parser/ast/lambda.rb +25 -6
- data/lib/puppet/parser/ast/leaf.rb +10 -3
- data/lib/puppet/parser/ast/nop.rb +1 -1
- data/lib/puppet/parser/ast/resource_override.rb +0 -2
- data/lib/puppet/parser/compiler.rb +92 -34
- data/lib/puppet/parser/files.rb +0 -5
- data/lib/puppet/parser/functions/create_resources.rb +23 -46
- data/lib/puppet/parser/functions/each.rb +0 -2
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/foreach.rb +0 -2
- data/lib/puppet/parser/functions/hiera_include.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +44 -0
- data/lib/puppet/parser/functions/slice.rb +1 -1
- data/lib/puppet/parser/grammar.ra +0 -1
- data/lib/puppet/parser/lexer.rb +0 -1
- data/lib/puppet/parser/parser.rb +0 -1
- data/lib/puppet/parser/parser_factory.rb +3 -2
- data/lib/puppet/parser/parser_support.rb +1 -1
- data/lib/puppet/parser/relationship.rb +1 -1
- data/lib/puppet/parser/scope.rb +49 -24
- data/lib/puppet/parser/type_loader.rb +13 -18
- data/lib/puppet/pops.rb +45 -0
- data/lib/puppet/pops/adaptable.rb +2 -2
- data/lib/puppet/pops/adapters.rb +4 -0
- data/lib/puppet/pops/binder/binder.rb +421 -0
- data/lib/puppet/pops/binder/binder_issues.rb +142 -0
- data/lib/puppet/pops/binder/bindings_checker.rb +217 -0
- data/lib/puppet/pops/binder/bindings_composer.rb +241 -0
- data/lib/puppet/pops/binder/bindings_factory.rb +847 -0
- data/lib/puppet/pops/binder/bindings_label_provider.rb +46 -0
- data/lib/puppet/pops/binder/bindings_loader.rb +79 -0
- data/lib/puppet/pops/binder/bindings_model.rb +215 -0
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +205 -0
- data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
- data/lib/puppet/pops/binder/config/binder_config.rb +139 -0
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +183 -0
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
- data/lib/puppet/pops/binder/config/issues.rb +106 -0
- data/lib/puppet/pops/binder/hiera2.rb +10 -0
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +148 -0
- data/lib/puppet/pops/binder/hiera2/config.rb +69 -0
- data/lib/puppet/pops/binder/hiera2/config_checker.rb +68 -0
- data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +36 -0
- data/lib/puppet/pops/binder/hiera2/issues.rb +67 -0
- data/lib/puppet/pops/binder/hiera2/json_backend.rb +18 -0
- data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +21 -0
- data/lib/puppet/pops/binder/injector.rb +688 -0
- data/lib/puppet/pops/binder/injector_entry.rb +53 -0
- data/lib/puppet/pops/binder/key_factory.rb +61 -0
- data/lib/puppet/pops/binder/producers.rb +829 -0
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +67 -0
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +92 -0
- data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +54 -0
- data/lib/puppet/pops/binder/system_bindings.rb +72 -0
- data/lib/puppet/pops/issue_reporter.rb +75 -0
- data/lib/puppet/pops/issues.rb +9 -5
- data/lib/puppet/pops/model/ast_transformer.rb +4 -4
- data/lib/puppet/pops/model/ast_tree_dumper.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +25 -13
- data/lib/puppet/pops/model/model.rb +1 -1
- data/lib/puppet/pops/model/tree_dumper.rb +2 -2
- data/lib/puppet/pops/parser/egrammar.ra +0 -1
- data/lib/puppet/pops/parser/eparser.rb +1 -2
- data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
- data/lib/puppet/pops/parser/lexer.rb +8 -6
- data/lib/puppet/pops/types/class_loader.rb +118 -0
- data/lib/puppet/pops/types/type_calculator.rb +557 -0
- data/lib/puppet/pops/types/type_factory.rb +147 -0
- data/lib/puppet/pops/types/type_parser.rb +117 -0
- data/lib/puppet/pops/types/types.rb +132 -0
- data/lib/puppet/pops/validation.rb +146 -17
- data/lib/puppet/pops/validation/checker3_1.rb +1 -1
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +6 -16
- data/lib/puppet/property.rb +3 -3
- data/lib/puppet/property/keyvalue.rb +1 -1
- data/lib/puppet/provider.rb +2 -2
- data/lib/puppet/provider/aixobject.rb +19 -21
- data/lib/puppet/provider/augeas/augeas.rb +3 -1
- data/lib/puppet/provider/command.rb +2 -2
- data/lib/puppet/provider/group/aix.rb +1 -1
- data/lib/puppet/provider/group/ldap.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
- data/lib/puppet/provider/mailalias/aliases.rb +3 -8
- data/lib/puppet/provider/mcx/mcxcontent.rb +7 -1
- data/lib/puppet/provider/mount.rb +8 -3
- data/lib/puppet/provider/nameservice.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +0 -1
- data/lib/puppet/provider/package/dpkg.rb +86 -32
- data/lib/puppet/provider/package/fink.rb +0 -2
- data/lib/puppet/provider/package/freebsd.rb +0 -2
- data/lib/puppet/provider/package/openbsd.rb +57 -10
- data/lib/puppet/provider/package/opkg.rb +0 -1
- data/lib/puppet/provider/package/pacman.rb +0 -1
- data/lib/puppet/provider/package/pip.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +17 -6
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +9 -1
- data/lib/puppet/provider/package/ports.rb +2 -2
- data/lib/puppet/provider/package/rpm.rb +29 -12
- data/lib/puppet/provider/package/rug.rb +1 -1
- data/lib/puppet/provider/package/urpmi.rb +11 -15
- data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +1 -26
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +22 -3
- data/lib/puppet/provider/parsedfile.rb +1 -12
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +1 -1
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +3 -3
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/init.rb +14 -20
- data/lib/puppet/provider/service/openrc.rb +3 -1
- data/lib/puppet/provider/service/redhat.rb +5 -8
- data/lib/puppet/provider/service/runit.rb +3 -2
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
- data/lib/puppet/provider/sshkey/parsed.rb +0 -2
- data/lib/puppet/provider/user/aix.rb +25 -12
- data/lib/puppet/provider/user/directoryservice.rb +4 -7
- data/lib/puppet/provider/user/ldap.rb +0 -1
- data/lib/puppet/provider/user/user_role_add.rb +2 -0
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/provider/zone/solaris.rb +1 -2
- data/lib/puppet/reference/metaparameter.rb +1 -1
- data/lib/puppet/reference/type.rb +1 -1
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/tagmail.rb +1 -1
- data/lib/puppet/resource.rb +16 -4
- data/lib/puppet/resource/catalog.rb +111 -173
- data/lib/puppet/resource/status.rb +42 -3
- data/lib/puppet/resource/type.rb +33 -46
- data/lib/puppet/resource/type_collection.rb +19 -15
- data/lib/puppet/run.rb +5 -1
- data/lib/puppet/scheduler/scheduler.rb +14 -15
- data/lib/puppet/settings.rb +78 -41
- data/lib/puppet/settings/boolean_setting.rb +0 -2
- data/lib/puppet/settings/config_file.rb +0 -2
- data/lib/puppet/settings/directory_setting.rb +0 -2
- data/lib/puppet/settings/duration_setting.rb +0 -2
- data/lib/puppet/settings/enum_setting.rb +16 -0
- data/lib/puppet/settings/file_setting.rb +0 -2
- data/lib/puppet/settings/path_setting.rb +0 -2
- data/lib/puppet/settings/string_setting.rb +0 -3
- data/lib/puppet/settings/terminus_setting.rb +0 -2
- data/lib/puppet/ssl/certificate_authority.rb +102 -9
- data/lib/puppet/test/test_helper.rb +1 -0
- data/lib/puppet/transaction.rb +130 -292
- data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
- data/lib/puppet/transaction/event.rb +16 -1
- data/lib/puppet/transaction/report.rb +34 -14
- data/lib/puppet/transaction/resource_harness.rb +16 -19
- data/lib/puppet/type.rb +59 -53
- data/lib/puppet/type/component.rb +0 -2
- data/lib/puppet/type/cron.rb +13 -2
- data/lib/puppet/type/exec.rb +5 -7
- data/lib/puppet/type/file.rb +9 -32
- data/lib/puppet/type/file/content.rb +4 -1
- data/lib/puppet/type/file/ctime.rb +3 -1
- data/lib/puppet/type/file/ensure.rb +1 -1
- data/lib/puppet/type/file/mode.rb +0 -1
- data/lib/puppet/type/file/mtime.rb +2 -1
- data/lib/puppet/type/group.rb +7 -9
- data/lib/puppet/type/host.rb +1 -2
- data/lib/puppet/type/mcx.rb +0 -1
- data/lib/puppet/type/mount.rb +38 -6
- data/lib/puppet/type/package.rb +2 -2
- data/lib/puppet/type/resources.rb +5 -4
- data/lib/puppet/type/schedule.rb +1 -4
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/service.rb +1 -3
- data/lib/puppet/type/tidy.rb +3 -3
- data/lib/puppet/type/user.rb +9 -13
- data/lib/puppet/type/yumrepo.rb +11 -7
- data/lib/puppet/util.rb +14 -7
- data/lib/puppet/util/autoload.rb +0 -1
- data/lib/puppet/util/backups.rb +1 -3
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -3
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/constant_inflector.rb +1 -2
- data/lib/puppet/util/errors.rb +1 -0
- data/lib/puppet/util/file_watcher.rb +28 -0
- data/lib/puppet/util/fileparsing.rb +1 -3
- data/lib/puppet/util/filetype.rb +0 -1
- data/lib/puppet/util/http_proxy.rb +38 -0
- data/lib/puppet/util/ldap/manager.rb +1 -2
- data/lib/puppet/util/log.rb +31 -10
- data/lib/puppet/util/log/destinations.rb +0 -50
- data/lib/puppet/util/metric.rb +8 -1
- data/lib/puppet/util/monkey_patches.rb +14 -148
- data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +6 -9
- data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
- data/lib/puppet/util/pidlock.rb +3 -0
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/util/profiler.rb +1 -1
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +0 -1
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -42
- data/lib/puppet/util/retryaction.rb +0 -1
- data/lib/puppet/util/symbolic_file_mode.rb +5 -1
- data/lib/puppet/util/tagging.rb +0 -2
- data/lib/puppet/util/warnings.rb +3 -0
- data/lib/puppet/util/watched_file.rb +37 -0
- data/lib/puppet/util/watcher.rb +17 -0
- data/lib/puppet/util/watcher/change_watcher.rb +33 -0
- data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
- data/lib/puppet/util/watcher/timer.rb +19 -0
- data/lib/puppet/util/windows/user.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppetx.rb +109 -0
- data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
- data/lib/puppetx/puppet/hiera2_backend.rb +31 -0
- data/lib/puppetx/puppet/syntax_checker.rb +91 -0
- data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +39 -0
- data/lib/semver.rb +1 -1
- data/man/man8/puppet-kick.8 +1 -1
- data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +18 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +10 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +19 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +11 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +3 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +13 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +4 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +11 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_scheme_handler.rb +18 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +3 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +2 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +11 -0
- data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +5 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +10 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +1 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +7 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +4 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +2 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/empty/common.yaml +0 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +2 -0
- data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
- data/spec/integration/agent/logging_spec.rb +178 -0
- data/spec/integration/configurer_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +0 -6
- data/spec/integration/network/authconfig_spec.rb +19 -0
- data/spec/integration/network/server/webrick_spec.rb +10 -11
- data/spec/integration/parser/catalog_spec.rb +85 -0
- data/spec/integration/provider/cron/crontab_spec.rb +11 -0
- data/spec/integration/provider/mount_spec.rb +1 -0
- data/spec/integration/transaction_spec.rb +8 -8
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +58 -11
- data/spec/lib/matchers/include_in_order.rb +21 -0
- data/spec/lib/matchers/include_in_order_spec.rb +30 -0
- data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
- data/spec/lib/puppet_spec/compiler.rb +24 -0
- data/spec/lib/puppet_spec/pops.rb +16 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/unit/application/agent_spec.rb +145 -145
- data/spec/unit/application/apply_spec.rb +1 -1
- data/spec/unit/application/doc_spec.rb +1 -1
- data/spec/unit/application/face_base_spec.rb +3 -3
- data/spec/unit/application/facts_spec.rb +1 -0
- data/spec/unit/application/master_spec.rb +0 -15
- data/spec/unit/application/queue_spec.rb +6 -12
- data/spec/unit/application/resource_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +19 -50
- data/spec/unit/configurer_spec.rb +23 -7
- data/spec/unit/daemon_spec.rb +97 -121
- data/spec/unit/defaults_spec.rb +44 -0
- data/spec/unit/face/node_spec.rb +2 -2
- data/spec/unit/file_serving/configuration/parser_spec.rb +23 -33
- data/spec/unit/file_serving/configuration_spec.rb +2 -2
- data/spec/unit/file_serving/mount/file_spec.rb +4 -4
- data/spec/unit/forge/repository_spec.rb +9 -29
- data/spec/unit/graph/key_spec.rb +41 -0
- data/spec/unit/{rb_tree_map_spec.rb → graph/rb_tree_map_spec.rb} +7 -7
- data/spec/unit/graph/relationship_graph_spec.rb +393 -0
- data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
- data/spec/unit/{simple_graph_spec.rb → graph/simple_graph.rb} +42 -254
- data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
- data/spec/unit/hiera_puppet_spec.rb +1 -1
- data/spec/unit/indirector/catalog/active_record_spec.rb +4 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +20 -26
- data/spec/unit/indirector/face_spec.rb +1 -1
- data/spec/unit/indirector/facts/facter_spec.rb +11 -1
- data/spec/unit/indirector/facts/network_device_spec.rb +11 -1
- data/spec/unit/indirector/hiera_spec.rb +1 -1
- data/spec/unit/indirector/instrumentation_data/local_spec.rb +1 -1
- data/spec/unit/indirector/instrumentation_listener/local_spec.rb +1 -1
- data/spec/unit/indirector/request_spec.rb +92 -39
- data/spec/unit/indirector/rest_spec.rb +1 -0
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/interface/option_builder_spec.rb +1 -0
- data/spec/unit/interface/option_spec.rb +1 -0
- data/spec/unit/interface_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +49 -2
- data/spec/unit/module_tool/metadata_spec.rb +13 -0
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/format_handler_spec.rb +33 -282
- data/spec/unit/network/format_support_spec.rb +199 -0
- data/spec/unit/network/formats_spec.rb +2 -2
- data/spec/unit/network/http/connection_spec.rb +88 -7
- data/spec/unit/network/http/handler_spec.rb +271 -249
- data/spec/unit/network/http/rack/rest_spec.rb +1 -1
- data/spec/unit/network/http/webrick/rest_spec.rb +73 -22
- data/spec/unit/network/http_pool_spec.rb +40 -0
- data/spec/unit/network/server_spec.rb +18 -207
- data/spec/unit/node/facts_spec.rb +68 -17
- data/spec/unit/other/selinux_spec.rb +24 -20
- data/spec/unit/parameter/boolean_spec.rb +25 -0
- data/spec/unit/parameter/value_collection_spec.rb +7 -7
- data/spec/unit/parameter_spec.rb +10 -13
- data/spec/unit/parser/ast/function_spec.rb +4 -4
- data/spec/unit/parser/ast/leaf_spec.rb +45 -6
- data/spec/unit/parser/collector_spec.rb +3 -3
- data/spec/unit/parser/compiler_spec.rb +4 -3
- data/spec/unit/parser/functions/create_resources_spec.rb +9 -25
- data/spec/unit/parser/functions/extlookup_spec.rb +2 -2
- data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
- data/spec/unit/parser/functions/lookup_spec.rb +96 -0
- data/spec/unit/parser/functions/regsubst_spec.rb +2 -2
- data/spec/unit/parser/functions/split_spec.rb +2 -2
- data/spec/unit/parser/functions/sprintf_spec.rb +1 -1
- data/spec/unit/parser/functions/versioncmp_spec.rb +2 -2
- data/spec/unit/parser/functions_spec.rb +7 -7
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/collect_spec.rb +43 -0
- data/spec/unit/parser/resource_spec.rb +9 -9
- data/spec/unit/parser/scope_spec.rb +45 -2
- data/spec/unit/parser/type_loader_spec.rb +159 -175
- data/spec/unit/pops/binder/binder_spec.rb +62 -0
- data/spec/unit/pops/binder/bindings_checker_spec.rb +196 -0
- data/spec/unit/pops/binder/bindings_composer_spec.rb +89 -0
- data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
- data/spec/unit/pops/binder/config/binder_config_spec.rb +48 -0
- data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +74 -0
- data/spec/unit/pops/binder/hiera2/config_spec.rb +61 -0
- data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +33 -0
- data/spec/unit/pops/binder/injector_spec.rb +789 -0
- data/spec/unit/pops/containment_spec.rb +1 -0
- data/spec/unit/pops/issues_spec.rb +1 -1
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +88 -0
- data/spec/unit/pops/parser/lexer_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_calls_spec.rb +4 -0
- data/spec/unit/pops/parser/parser_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +484 -0
- data/spec/unit/pops/types/type_factory_spec.rb +65 -0
- data/spec/unit/pops/types/type_parser_spec.rb +93 -0
- data/spec/unit/property/list_spec.rb +1 -1
- data/spec/unit/property/ordered_list_spec.rb +1 -1
- data/spec/unit/provider/aixobject_spec.rb +101 -0
- data/spec/unit/provider/augeas/augeas_spec.rb +14 -3
- data/spec/unit/provider/mcx/mcxcontent_spec.rb +52 -16
- data/spec/unit/provider/mount/parsed_spec.rb +44 -56
- data/spec/unit/provider/mount_spec.rb +11 -2
- data/spec/unit/provider/naginator_spec.rb +8 -0
- data/spec/unit/provider/package/apt_spec.rb +5 -1
- data/spec/unit/provider/package/aptitude_spec.rb +9 -5
- data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
- data/spec/unit/provider/package/dpkg_spec.rb +274 -99
- data/spec/unit/provider/package/openbsd_spec.rb +84 -1
- data/spec/unit/provider/package/opkg_spec.rb +3 -3
- data/spec/unit/provider/package/pip_spec.rb +16 -0
- data/spec/unit/provider/package/pkgdmg_spec.rb +62 -7
- data/spec/unit/provider/package/rpm_spec.rb +112 -21
- data/spec/unit/provider/package/urpmi.rb +80 -0
- data/spec/unit/provider/package/windows/exe_package_spec.rb +1 -1
- data/spec/unit/provider/package/yum_spec.rb +85 -0
- data/spec/unit/provider/package/zypper_spec.rb +25 -6
- data/spec/unit/provider/parsedfile_spec.rb +3 -2
- data/spec/unit/provider/service/init_spec.rb +10 -10
- data/spec/unit/provider/service/openrc_spec.rb +16 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +7 -0
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -2
- data/spec/unit/provider/user/aix_spec.rb +89 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +11 -4
- data/spec/unit/provider/user/user_role_add_spec.rb +18 -0
- data/spec/unit/provider_spec.rb +2 -13
- data/spec/unit/reports/http_spec.rb +1 -1
- data/spec/unit/resource/catalog_spec.rb +23 -97
- data/spec/unit/resource/resource_type.json +34 -0
- data/spec/unit/resource/status_spec.rb +56 -0
- data/spec/unit/resource/type_collection_spec.rb +6 -6
- data/spec/unit/resource/type_spec.rb +25 -5
- data/spec/unit/resource_spec.rb +68 -24
- data/spec/unit/run_spec.rb +16 -0
- data/spec/unit/scheduler/scheduler_spec.rb +14 -27
- data/spec/unit/semver_spec.rb +5 -0
- data/spec/unit/settings/enum_setting_spec.rb +27 -0
- data/spec/unit/settings_spec.rb +53 -44
- data/spec/unit/ssl/certificate_authority_spec.rb +155 -19
- data/spec/unit/transaction/additional_resource_generator_spec.rb +419 -0
- data/spec/unit/transaction/event_manager_spec.rb +2 -2
- data/spec/unit/transaction/event_spec.rb +57 -0
- data/spec/unit/transaction/report_spec.rb +66 -0
- data/spec/unit/transaction/resource_harness_spec.rb +27 -20
- data/spec/unit/transaction_spec.rb +182 -390
- data/spec/unit/type/augeas_spec.rb +3 -3
- data/spec/unit/type/component_spec.rb +0 -9
- data/spec/unit/type/computer_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +2 -2
- data/spec/unit/type/exec_spec.rb +4 -2
- data/spec/unit/type/file/content_spec.rb +11 -0
- data/spec/unit/type/file/group_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +16 -8
- data/spec/unit/type/mount_spec.rb +445 -259
- data/spec/unit/type/package_spec.rb +4 -4
- data/spec/unit/type/resources_spec.rb +30 -1
- data/spec/unit/type/user_spec.rb +26 -3
- data/spec/unit/type/yumrepo_spec.rb +7 -27
- data/spec/unit/type/zone_spec.rb +4 -1
- data/spec/unit/type_spec.rb +66 -33
- data/spec/unit/util/backups_spec.rb +3 -3
- data/spec/unit/util/http_proxy_spec.rb +83 -0
- data/spec/unit/util/log_spec.rb +79 -8
- data/spec/unit/util/metric_spec.rb +12 -0
- data/spec/unit/util/monkey_patches_spec.rb +6 -0
- data/spec/unit/util/network_device/config_spec.rb +26 -64
- data/spec/unit/util/pidlock_spec.rb +4 -1
- data/spec/unit/util/tagging_spec.rb +5 -9
- data/spec/unit/util/warnings_spec.rb +1 -1
- data/spec/unit/util/watched_file_spec.rb +52 -0
- data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
- data/spec/unit/util/watcher_spec.rb +56 -0
- data/spec/unit/util_spec.rb +16 -0
- metadata +2767 -2576
- data/ext/debian/puppet.manpages +0 -32
- data/ext/osx/PackageInfo.plist +0 -36
- data/ext/osx/createpackage.sh +0 -187
- data/ext/redhat/rundir-perms.patch +0 -28
- data/lib/puppet/external/base64.rb +0 -19
- data/lib/puppet/util/graph.rb +0 -27
- data/lib/puppet/util/loadedfile.rb +0 -61
- data/lib/puppet/util/log_paths.rb +0 -22
- data/lib/puppet/util/subclass_loader.rb +0 -78
- data/spec/monkey_patches/publicize_methods.rb +0 -11
- data/spec/unit/util/loadedfile_spec.rb +0 -71
@@ -0,0 +1,28 @@
|
|
1
|
+
# Configures validation suitable for the bindings model
|
2
|
+
# @api public
|
3
|
+
#
|
4
|
+
class Puppet::Pops::Binder::BindingsValidatorFactory < Puppet::Pops::Validation::Factory
|
5
|
+
Issues = Puppet::Pops::Binder::BinderIssues
|
6
|
+
|
7
|
+
# Produces the checker to use
|
8
|
+
def checker diagnostic_producer
|
9
|
+
Puppet::Pops::Binder::BindingsChecker.new(diagnostic_producer)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Produces the label provider to use
|
13
|
+
def label_provider
|
14
|
+
Puppet::Pops::Binder::BindingsLabelProvider.new()
|
15
|
+
end
|
16
|
+
|
17
|
+
# Produces the severity producer to use
|
18
|
+
def severity_producer
|
19
|
+
p = super
|
20
|
+
|
21
|
+
# Configure each issue that should **not** be an error
|
22
|
+
#
|
23
|
+
p[Issues::MISSING_BINDINGS] = :warning
|
24
|
+
p[Issues::MISSING_LAYERS] = :warning
|
25
|
+
|
26
|
+
p
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module Puppet::Pops::Binder::Config
|
2
|
+
# Class holding the Binder Configuration
|
3
|
+
# The configuration is obtained from the file 'binder_config.yaml'
|
4
|
+
# that must reside in the root directory of the site
|
5
|
+
# @api public
|
6
|
+
#
|
7
|
+
class BinderConfig
|
8
|
+
|
9
|
+
# The bindings hierarchy is an array of categorizations where the
|
10
|
+
# array for each category has exactly three elements - the categorization name,
|
11
|
+
# category value, and the path that is later used by the backend to read
|
12
|
+
# the bindings for that category
|
13
|
+
#
|
14
|
+
# @return [Array<Hash<String, String>, Hash<String, Array<String>>]
|
15
|
+
# @api public
|
16
|
+
#
|
17
|
+
attr_reader :layering_config
|
18
|
+
|
19
|
+
# @return [Array<Array(String, String)>] Array of Category tuples where Strings are not evaluated.
|
20
|
+
# @api public
|
21
|
+
#
|
22
|
+
attr_reader :categorization
|
23
|
+
|
24
|
+
# @return <Hash<String, String>] ({}) optional mapping of bindings-scheme to handler class name
|
25
|
+
attr_reader :scheme_extensions
|
26
|
+
|
27
|
+
# @return <Hash<String, String>] ({}) optional mapping of hiera backend name to backend class name
|
28
|
+
attr_reader :hiera_backends
|
29
|
+
|
30
|
+
# @return [String] the loaded config file
|
31
|
+
attr_accessor :config_file
|
32
|
+
|
33
|
+
DEFAULT_LAYERS = [
|
34
|
+
{ 'name' => 'site', 'include' => ['confdir-hiera:/', 'confdir:/default?optional'] },
|
35
|
+
{ 'name' => 'modules', 'include' => ['module-hiera:/*/', 'module:/*::default'] },
|
36
|
+
]
|
37
|
+
|
38
|
+
DEFAULT_CATEGORIES = [
|
39
|
+
['node', "${fqdn}"],
|
40
|
+
['osfamily', "${osfamily}"],
|
41
|
+
['environment', "${environment}"],
|
42
|
+
['common', "true"]
|
43
|
+
]
|
44
|
+
|
45
|
+
DEFAULT_SCHEME_EXTENSIONS = {}
|
46
|
+
|
47
|
+
DEFAULT_HIERA_BACKENDS_EXTENSIONS = {}
|
48
|
+
|
49
|
+
def default_config()
|
50
|
+
# This is hardcoded now, but may be a user supplied default configuration later
|
51
|
+
{'version' => 1, 'layers' => default_layers, 'categories' => default_categories}
|
52
|
+
end
|
53
|
+
|
54
|
+
def confdir()
|
55
|
+
Puppet.settings[:confdir]
|
56
|
+
end
|
57
|
+
|
58
|
+
# Creates a new Config. The configuration is loaded from the file 'binder_config.yaml' which
|
59
|
+
# is expected to be found in confdir.
|
60
|
+
#
|
61
|
+
# @param diagnostics [DiagnosticProducer] collector of diagnostics
|
62
|
+
# @api public
|
63
|
+
#
|
64
|
+
def initialize(diagnostics)
|
65
|
+
@config_file = Puppet.settings[:binder_config]
|
66
|
+
# if file is stated, it must exist
|
67
|
+
# otherwise it is optional $confdir/binder_conf.yaml
|
68
|
+
# and if that fails, the default
|
69
|
+
case @config_file
|
70
|
+
when NilClass
|
71
|
+
# use the config file if it exists
|
72
|
+
rootdir = confdir
|
73
|
+
if rootdir.is_a?(String)
|
74
|
+
expanded_config_file = File.expand_path(File.join(rootdir, '/binder_config.yaml'))
|
75
|
+
if File.exist?(expanded_config_file)
|
76
|
+
@config_file = expanded_config_file
|
77
|
+
end
|
78
|
+
else
|
79
|
+
raise ArgumentError, "No Puppet settings 'confdir', or it is not a String"
|
80
|
+
end
|
81
|
+
when String
|
82
|
+
unless File.exist?(@config_file)
|
83
|
+
raise ArgumentError, "Cannot find the given binder configuration file '#{@config_file}'"
|
84
|
+
end
|
85
|
+
else
|
86
|
+
raise ArgumentError, "The setting binder_config is expected to be a String, got: #{@config_file.class.name}."
|
87
|
+
end
|
88
|
+
unless @config_file.is_a?(String) && File.exist?(@config_file)
|
89
|
+
@config_file = nil # use defaults
|
90
|
+
end
|
91
|
+
|
92
|
+
validator = BinderConfigChecker.new(diagnostics)
|
93
|
+
begin
|
94
|
+
data = @config_file ? YAML.load_file(@config_file) : default_config()
|
95
|
+
validator.validate(data, @config_file)
|
96
|
+
rescue Errno::ENOENT
|
97
|
+
diagnostics.accept(Issues::CONFIG_FILE_NOT_FOUND, @config_file)
|
98
|
+
rescue Errno::ENOTDIR
|
99
|
+
diagnostics.accept(Issues::CONFIG_FILE_NOT_FOUND, @config_file)
|
100
|
+
rescue ::SyntaxError => e
|
101
|
+
diagnostics.accept(Issues::CONFIG_FILE_SYNTAX_ERROR, @config_file, :detail => e.message)
|
102
|
+
end
|
103
|
+
|
104
|
+
unless diagnostics.errors?
|
105
|
+
@layering_config = data['layers'] or default_layers
|
106
|
+
@categorization = data['categories'] or default_categories
|
107
|
+
@scheme_extensions = (data['extensions'] and data['extensions']['scheme_handlers'] or default_scheme_extensions)
|
108
|
+
@hiera_backends = (data['extensions'] and data['extensions']['hiera_backends'] or default_hiera_backends_extensions)
|
109
|
+
else
|
110
|
+
@layering_config = []
|
111
|
+
@categorization = {}
|
112
|
+
@scheme_extensions = {}
|
113
|
+
@hiera_backends = {}
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# The default_xxx methods exists to make it easier to do mocking in tests.
|
118
|
+
|
119
|
+
# @api private
|
120
|
+
def default_layers
|
121
|
+
DEFAULT_LAYERS
|
122
|
+
end
|
123
|
+
|
124
|
+
# @api private
|
125
|
+
def default_categories
|
126
|
+
DEFAULT_CATEGORIES
|
127
|
+
end
|
128
|
+
|
129
|
+
# @api private
|
130
|
+
def default_scheme_extensions
|
131
|
+
DEFAULT_SCHEME_EXTENSIONS
|
132
|
+
end
|
133
|
+
|
134
|
+
# @api private
|
135
|
+
def default_hiera_backends_extensions
|
136
|
+
DEFAULT_HIERA_BACKENDS_EXTENSIONS
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
module Puppet::Pops::Binder::Config
|
2
|
+
# Validates the consistency of a Binder::BinderConfig
|
3
|
+
class BinderConfigChecker
|
4
|
+
# Create an instance with a diagnostic producer that will receive the result during validation
|
5
|
+
# @param diangostics [DiagnosticProducer] The producer that will receive the diagnostic
|
6
|
+
# @api public
|
7
|
+
#
|
8
|
+
def initialize(diagnostics)
|
9
|
+
@diagnostics = diagnostics
|
10
|
+
t = Puppet::Pops::Types
|
11
|
+
@type_calculator = t::TypeCalculator.new()
|
12
|
+
@array_of_string_type = t::TypeFactory.array_of(t::TypeFactory.string())
|
13
|
+
end
|
14
|
+
|
15
|
+
# Validate the consistency of the given data. Diagnostics will be emitted to the DiagnosticProducer
|
16
|
+
# that was set when this checker was created
|
17
|
+
#
|
18
|
+
# @param data [Object] The data read from the config file
|
19
|
+
# @param config_file [String] The full path of the file. Used in error messages
|
20
|
+
# @api public
|
21
|
+
#
|
22
|
+
def validate(data, config_file)
|
23
|
+
@unique_layer_names = Set.new()
|
24
|
+
|
25
|
+
if data.is_a?(Hash)
|
26
|
+
check_top_level(data, config_file)
|
27
|
+
else
|
28
|
+
accept(Issues::CONFIG_IS_NOT_HASH, config_file)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def accept(issue, semantic, options = {})
|
35
|
+
@diagnostics.accept(issue, semantic, options)
|
36
|
+
end
|
37
|
+
|
38
|
+
def check_top_level(data, config_file)
|
39
|
+
if layers = (data['layers'] || data[:layers])
|
40
|
+
check_layers(layers, config_file)
|
41
|
+
else
|
42
|
+
accept(Issues::CONFIG_LAYERS_MISSING, config_file)
|
43
|
+
end
|
44
|
+
|
45
|
+
if categories = (data['categories'] || data[:categories])
|
46
|
+
check_categories(categories, config_file)
|
47
|
+
else
|
48
|
+
accept(Issues::CONFIG_CATEGORIES_MISSING, config_file)
|
49
|
+
end
|
50
|
+
|
51
|
+
if version = (data['version'] or data[:version])
|
52
|
+
accept(Issues::CONFIG_WRONG_VERSION, config_file, {:expected => 1, :actual => version}) unless version == 1
|
53
|
+
else
|
54
|
+
accept(Issues::CONFIG_VERSION_MISSING, config_file)
|
55
|
+
end
|
56
|
+
if extensions = data['extensions']
|
57
|
+
check_extensions(extensions, config_file)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def check_layers(layers, config_file)
|
62
|
+
unless layers.is_a?(Array)
|
63
|
+
accept(Issues::LAYERS_IS_NOT_ARRAY, config_file, :klass => data.class)
|
64
|
+
else
|
65
|
+
layers.each {|layer| check_layer(layer, config_file) }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def check_layer(layer, config_file)
|
70
|
+
unless layer.is_a?(Hash)
|
71
|
+
accept(Issues::LAYER_IS_NOT_HASH, config_file, :klass => layer.class)
|
72
|
+
return
|
73
|
+
end
|
74
|
+
layer.each_pair do |k, v|
|
75
|
+
case k
|
76
|
+
when 'name'
|
77
|
+
unless v.is_a?(String)
|
78
|
+
accept(Issues::LAYER_NAME_NOT_STRING, config_file, :class_name => v.class.name)
|
79
|
+
end
|
80
|
+
|
81
|
+
unless @unique_layer_names.add?(v)
|
82
|
+
accept(Issues::DUPLICATE_LAYER_NAME, config_file, :name => v.to_s )
|
83
|
+
end
|
84
|
+
|
85
|
+
when 'include'
|
86
|
+
check_bindings_references('include', v, config_file)
|
87
|
+
|
88
|
+
when 'exclude'
|
89
|
+
check_bindings_references('exclude', v, config_file)
|
90
|
+
|
91
|
+
when Symbol
|
92
|
+
accept(Issues::LAYER_ATTRIBUTE_IS_SYMBOL, config_file, :name => k.to_s)
|
93
|
+
|
94
|
+
else
|
95
|
+
accept(Issues::UNKNOWN_LAYER_ATTRIBUTE, config_file, :name => k.to_s )
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def check_categories(categories, config_file)
|
101
|
+
unless categories.is_a?(Array)
|
102
|
+
accept(Issues::CATEGORIES_IS_NOT_ARRAY, config_file, :klass => categories.class)
|
103
|
+
else
|
104
|
+
categories.each { |entry| check_category(entry, config_file) }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def check_category(category, config_file)
|
109
|
+
type = @type_calculator.infer(category)
|
110
|
+
unless @type_calculator.assignable?(@array_of_string_type, type)
|
111
|
+
accept(Issues::CATEGORY_IS_NOT_ARRAY, config_file, :type => @type_calculator.string(type))
|
112
|
+
return
|
113
|
+
end
|
114
|
+
unless category.size == 2
|
115
|
+
accept(Issues::CATEGORY_NOT_TWO_STRINGS, config_file, :count => category.size)
|
116
|
+
return
|
117
|
+
end
|
118
|
+
unless category[0] =~ /[a-z][a-zA-Z0-9_]*/
|
119
|
+
accept(Issues::INVALID_CATEGORY_NAME, config_file, :name => category[0])
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# references to bindings is a single String URI, or an array of String URI
|
124
|
+
# @param kind [String] 'include' or 'exclude' (used in issue messages)
|
125
|
+
# @param value [String, Array<String>] one or more String URI binding references
|
126
|
+
# @param config_file [String] reference to the loaded config file
|
127
|
+
#
|
128
|
+
def check_bindings_references(kind, value, config_file)
|
129
|
+
return check_reference(value, kind, config_file) if value.is_a?(String)
|
130
|
+
accept(Issues::BINDINGS_REF_NOT_STRING_OR_ARRAY, config_file, :kind => kind ) unless value.is_a?(Array)
|
131
|
+
value.each {|ref| check_reference(ref, kind, config_file) }
|
132
|
+
end
|
133
|
+
|
134
|
+
# A reference is a URI in string form having one of the schemes:
|
135
|
+
# - module-hiera
|
136
|
+
# - confdir-hiera
|
137
|
+
# - enc
|
138
|
+
#
|
139
|
+
# and with a path (at least '/')
|
140
|
+
#
|
141
|
+
def check_reference(value, kind, config_file)
|
142
|
+
begin
|
143
|
+
uri = URI.parse(value)
|
144
|
+
|
145
|
+
unless uri.scheme
|
146
|
+
accept(Issues::MISSING_SCHEME, config_file, :uri => uri)
|
147
|
+
end
|
148
|
+
unless uri.path
|
149
|
+
accept(Issues::REF_WITHOUT_PATH, config_file, :uri => uri, :kind => kind)
|
150
|
+
end
|
151
|
+
|
152
|
+
rescue InvalidURIError => e
|
153
|
+
accept(Issues::BINDINGS_REF_INVALID_URI, config_file, :msg => e.message)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def check_extensions(extensions, config_file)
|
158
|
+
unless extensions.is_a?(Hash)
|
159
|
+
accept(Issues::EXTENSIONS_NOT_HASH, config_file, :actual => extensions.class.name)
|
160
|
+
return
|
161
|
+
end
|
162
|
+
# check known extensions
|
163
|
+
extensions.each_key do |key|
|
164
|
+
unless ['scheme_handlers', 'hiera_backends'].include? key
|
165
|
+
accept(Issues::UNKNOWN_EXTENSION, config_file, :extension => key)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
if binding_schemes = extensions['scheme_handlers']
|
170
|
+
unless binding_schemes.is_a?(Hash)
|
171
|
+
accept(Issues::EXTENSION_BINDING_NOT_HASH, config_file, :extension => 'scheme_handlers', :actual => binding_schemes.class.name)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
if hiera_backends = extensions['hiera_backends']
|
176
|
+
unless hiera_backends.is_a?(Hash)
|
177
|
+
accept(Issues::EXTENSION_BINDING_NOT_HASH, config_file, :extension => 'hiera_backends', :actual => hiera_backends.class.name)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Puppet::Pops::Binder::Config
|
2
|
+
# Generates validation diagnostics
|
3
|
+
class Puppet::Pops::Binder::Config::DiagnosticProducer
|
4
|
+
def initialize(acceptor)
|
5
|
+
@acceptor = acceptor
|
6
|
+
@severity_producer = Puppet::Pops::Validation::SeverityProducer.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def accept(issue, semantic, arguments={})
|
10
|
+
arguments[:semantic] ||= semantic
|
11
|
+
severity = severity_producer.severity(issue)
|
12
|
+
@acceptor.accept(Puppet::Pops::Validation::Diagnostic.new(severity, issue, nil, nil, arguments))
|
13
|
+
end
|
14
|
+
|
15
|
+
def errors?()
|
16
|
+
@acceptor.errors?
|
17
|
+
end
|
18
|
+
|
19
|
+
def severity_producer
|
20
|
+
p = @severity_producer
|
21
|
+
# All are errors, if there is need to mark some as warnings...
|
22
|
+
# p[Issues::XXX] = :warning
|
23
|
+
|
24
|
+
# ignored because there is a default
|
25
|
+
p[Puppet::Pops::Binder::Config::Issues::CONFIG_LAYERS_MISSING] = :ignore
|
26
|
+
|
27
|
+
# ignored because there is a default
|
28
|
+
p[Puppet::Pops::Binder::Config::Issues::CONFIG_CATEGORIES_MISSING] = :ignore
|
29
|
+
p
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module Puppet::Pops::Binder::Config::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_FILE_NOT_FOUND = issue :CONFIG_FILE_NOT_FOUND do
|
8
|
+
"The binder configuration file: #{semantic} can not be found."
|
9
|
+
end
|
10
|
+
|
11
|
+
CONFIG_FILE_SYNTAX_ERROR = issue :CONFIG_FILE_SYNTAX_ERROR, :detail do
|
12
|
+
"Syntax error in configuration file: #{detail}"
|
13
|
+
end
|
14
|
+
|
15
|
+
CONFIG_IS_NOT_HASH = issue :CONFIG_IS_NOT_HASH do
|
16
|
+
"The configuration file '#{semantic}' has no hash at the top level"
|
17
|
+
end
|
18
|
+
|
19
|
+
CONFIG_LAYERS_MISSING = issue :CONFIG_LAYERS_MISSING do
|
20
|
+
"The configuration file '#{semantic}' has no 'layers' entry in the top level hash"
|
21
|
+
end
|
22
|
+
|
23
|
+
CONFIG_VERSION_MISSING = issue :CONFIG_VERSION_MISSING do
|
24
|
+
"The configuration file '#{semantic}' has no 'version' entry in the top level hash"
|
25
|
+
end
|
26
|
+
|
27
|
+
CONFIG_CATEGORIES_MISSING = issue :CONFIG_CATEGORIES_MISSING do
|
28
|
+
"The configuration file '#{semantic}' has no 'categories' entry in the top level hash"
|
29
|
+
end
|
30
|
+
|
31
|
+
LAYERS_IS_NOT_ARRAY = issue :LAYERS_IS_NOT_ARRAY, :klass do
|
32
|
+
"The configuration file '#{semantic}' should contain a 'layers' key with an Array value, got: #{klass.name}"
|
33
|
+
end
|
34
|
+
|
35
|
+
CATEGORIES_IS_NOT_ARRAY = issue :CATEGORIES_IS_NOT_ARRAY, :klass do
|
36
|
+
"The configuration file '#{semantic}' should contain a 'categories' key with an Array value, got: #{klass.name}"
|
37
|
+
end
|
38
|
+
|
39
|
+
CATEGORY_IS_NOT_ARRAY = issue :CATEGORY_IS_NOT_ARRAY, :klass do
|
40
|
+
"The configuration file '#{semantic}' each entry in 'categories' should be an Array(String, String), got: #{klass.name}"
|
41
|
+
end
|
42
|
+
|
43
|
+
CATEGORY_NOT_TWO_STRINGS = issue :CATEGORY_NOT_TWO_STRINGS, :count do
|
44
|
+
"The configuration file '#{semantic}' each entry in 'categories' should be an array with 2 strings, got: #{count}"
|
45
|
+
end
|
46
|
+
|
47
|
+
INVALID_CATEGORY_NAME = issue :INVALID_CATEGORY_NAME, :name do
|
48
|
+
"The configuration file '#{semantic}' contains the invalid category: '#{name}', must match /[a-z][a-zA-Z0-9_]*/"
|
49
|
+
end
|
50
|
+
|
51
|
+
LAYER_IS_NOT_HASH = issue :LAYER_IS_NOT_HASH, :klass do
|
52
|
+
"The configuration file '#{semantic}' should contain one hash per layer, got #{klass.name} instead of Hash"
|
53
|
+
end
|
54
|
+
|
55
|
+
DUPLICATE_LAYER_NAME = issue :DUPLICATE_LAYER_NAME, :name do
|
56
|
+
"Duplicate layer '#{name}' in configuration file #{semantic}"
|
57
|
+
end
|
58
|
+
|
59
|
+
UNKNOWN_LAYER_ATTRIBUTE = issue :UNKNOWN_LAYER_ATTRIBUTE, :name do
|
60
|
+
"Unknown layer attribute '#{name}' in configuration file #{semantic}"
|
61
|
+
end
|
62
|
+
|
63
|
+
BINDINGS_REF_NOT_STRING_OR_ARRAY = issue :BINDINGS_REF_NOT_STRING_OR_ARRAY, :kind do
|
64
|
+
"Configuration file #{semantic} has bindings reference in '#{kind}' that is neither a String nor an Array."
|
65
|
+
end
|
66
|
+
|
67
|
+
MISSING_SCHEME = issue :MISSING_SCHEME, :uri do
|
68
|
+
"Configuration file #{semantic} contains a bindings reference: '#{uri}' without scheme."
|
69
|
+
end
|
70
|
+
|
71
|
+
UNKNOWN_REF_SCHEME = issue :UNKNOWN_REF_SCHEME, :uri, :kind do
|
72
|
+
"Configuration file #{semantic} contains a bindings reference: '#{kind}' => '#{uri}' with unknown scheme"
|
73
|
+
end
|
74
|
+
|
75
|
+
REF_WITHOUT_PATH = issue :REF_WITHOUT_PATH, :uri, :kind do
|
76
|
+
"Configuration file #{semantic} contains a bindings reference: '#{kind}' => '#{uri}' without path"
|
77
|
+
end
|
78
|
+
|
79
|
+
BINDINGS_REF_INVALID_URI = issue :BINDINGS_REF_INVALID_URI, :msg do
|
80
|
+
"Configuration file #{semantic} contains a bindings reference: '#{kind}' => invalid uri, msg: '#{msg}'"
|
81
|
+
end
|
82
|
+
|
83
|
+
LAYER_ATTRIBUTE_IS_SYMBOL = issue :LAYER_ATTRIBUTE_IS_SYMBOL, :name do
|
84
|
+
"Configuration file #{semantic} contains a layer attribute '#{name}' that is a Symbol (should be String)"
|
85
|
+
end
|
86
|
+
|
87
|
+
LAYER_NAME_NOT_STRING = issue :LAYER_NAME_NOT_STRING, :class_name do
|
88
|
+
"Configuration file #{semantic} contains a layer name that is not a String, got a: '#{class_name}'"
|
89
|
+
end
|
90
|
+
|
91
|
+
CONFIG_WRONG_VERSION = issue :CONFIG_WRONG_VERSION, :expected, :actual do
|
92
|
+
"The configuration file '#{semantic}' has unsupported 'version', expected: #{expected}, but got: #{actual}."
|
93
|
+
end
|
94
|
+
|
95
|
+
EXTENSIONS_NOT_HASH = issue :EXTENSIONS_NOT_HASH, :actual do
|
96
|
+
"The configuration file '#{semantic}' contains 'extensions', expected: Hash, but got: #{actual}."
|
97
|
+
end
|
98
|
+
|
99
|
+
EXTENSION_BINDING_NOT_HASH = issue :EXTENSION_BINDING_NOT_HASH, :extension, :actual do
|
100
|
+
"The configuration file '#{semantic}' contains '#{extension}', expected: Hash, but got: #{actual}."
|
101
|
+
end
|
102
|
+
|
103
|
+
UNKNOWN_EXTENSION = issue :UNKNOWN_EXTENSION, :actual do
|
104
|
+
"The configuration file '#{semantic}' contains the unknown extension: #{extension}."
|
105
|
+
end
|
106
|
+
end
|