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
data/lib/puppet/parser/files.rb
CHANGED
@@ -1,10 +1,5 @@
|
|
1
1
|
require 'puppet/module'
|
2
|
-
#require 'puppet/parser/parser'
|
3
2
|
|
4
|
-
# This is a silly central module for finding
|
5
|
-
# different kinds of files while parsing. This code
|
6
|
-
# doesn't really belong in the Puppet::Module class,
|
7
|
-
# but it doesn't really belong anywhere else, either.
|
8
3
|
module Puppet; module Parser; module Files
|
9
4
|
|
10
5
|
module_function
|
@@ -45,52 +45,29 @@ Puppet::Parser::Functions::newfunction(:create_resources, :arity => -3, :doc =>
|
|
45
45
|
ENDHEREDOC
|
46
46
|
raise ArgumentError, ("create_resources(): wrong number of arguments (#{args.length}; must be 2 or 3)") if args.length > 3
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
else
|
67
|
-
raise ArgumentError, "could not create resource of unknown type #{type_name}"
|
68
|
-
end
|
48
|
+
type, instances, defaults = args
|
49
|
+
defaults ||= {}
|
50
|
+
|
51
|
+
resource = Puppet::Parser::AST::Resource.new(:type => type.sub(/^@{1,2}/, '').downcase, :instances =>
|
52
|
+
instances.collect do |title, params|
|
53
|
+
Puppet::Parser::AST::ResourceInstance.new(
|
54
|
+
:title => Puppet::Parser::AST::Leaf.new(:value => title),
|
55
|
+
:parameters => defaults.merge(params).collect do |name, value|
|
56
|
+
Puppet::Parser::AST::ResourceParam.new(
|
57
|
+
:param => name,
|
58
|
+
:value => Puppet::Parser::AST::Leaf.new(:value => value))
|
59
|
+
end)
|
60
|
+
end)
|
61
|
+
|
62
|
+
if type.start_with? '@@'
|
63
|
+
resource.exported = true
|
64
|
+
elsif type.start_with? '@'
|
65
|
+
resource.virtual = true
|
69
66
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
raise
|
75
|
-
case type_of_resource
|
76
|
-
# JJM The only difference between a type and a define is the call to instantiate_resource
|
77
|
-
# for a defined type.
|
78
|
-
when :type, :define
|
79
|
-
p_resource = Puppet::Parser::Resource.new(type_name, title, :scope => self, :source => resource)
|
80
|
-
p_resource.virtual = type_virtual
|
81
|
-
p_resource.exported = type_exported
|
82
|
-
{:name => title}.merge(params).each do |k,v|
|
83
|
-
p_resource.set_parameter(k,v)
|
84
|
-
end
|
85
|
-
if type_of_resource == :define then
|
86
|
-
resource.instantiate_resource(self, p_resource)
|
87
|
-
end
|
88
|
-
compiler.add_resource(self, p_resource)
|
89
|
-
when :class
|
90
|
-
klass = find_hostclass(title)
|
91
|
-
raise ArgumentError, "could not find hostclass #{title}" unless klass
|
92
|
-
klass.ensure_in_catalog(self, params)
|
93
|
-
compiler.catalog.add_class(title)
|
94
|
-
end
|
67
|
+
|
68
|
+
begin
|
69
|
+
resource.safeevaluate(self)
|
70
|
+
rescue Puppet::ParseError => internal_error
|
71
|
+
raise internal_error.original
|
95
72
|
end
|
96
73
|
end
|
@@ -42,7 +42,6 @@ Puppet::Parser::Functions::newfunction(
|
|
42
42
|
end
|
43
43
|
enumerator = o.each
|
44
44
|
index = 0
|
45
|
-
result = nil
|
46
45
|
if serving_size == 1
|
47
46
|
(o.size).times do
|
48
47
|
pblock.call(scope, enumerator.next)
|
@@ -68,7 +67,6 @@ Puppet::Parser::Functions::newfunction(
|
|
68
67
|
raise ArgumentError, "Block must define at most two parameters (for hash entry key and value)."
|
69
68
|
end
|
70
69
|
enumerator = o.each_pair
|
71
|
-
result = nil
|
72
70
|
if serving_size == 1
|
73
71
|
(o.size).times do
|
74
72
|
pblock.call(scope, enumerator.next)
|
@@ -9,7 +9,7 @@ uses CSV files but the concept can easily be adjust for databases, yaml
|
|
9
9
|
or any other queryable data source.
|
10
10
|
|
11
11
|
The object of this is to make it obvious when it's being used, rather than
|
12
|
-
magically loading data in when
|
12
|
+
magically loading data in when a module is loaded I prefer to look at the code
|
13
13
|
and see statements like:
|
14
14
|
|
15
15
|
$snmp_contact = extlookup(\"snmp_contact\")
|
@@ -26,7 +26,7 @@ Over time there will be a lot of this kind of thing spread all over your manifes
|
|
26
26
|
and adding an additional client involves grepping through manifests to find all the
|
27
27
|
places where you have constructs like this.
|
28
28
|
|
29
|
-
This is a data problem and shouldn't be handled in code,
|
29
|
+
This is a data problem and shouldn't be handled in code, and using this function you
|
30
30
|
can do just that.
|
31
31
|
|
32
32
|
First you configure it in site.pp:
|
@@ -42,7 +42,6 @@ Puppet::Parser::Functions::newfunction(
|
|
42
42
|
end
|
43
43
|
enumerator = o.each
|
44
44
|
index = 0
|
45
|
-
result = nil
|
46
45
|
if serving_size == 1
|
47
46
|
(o.size).times do
|
48
47
|
pblock.call(scope, enumerator.next)
|
@@ -68,7 +67,6 @@ Puppet::Parser::Functions::newfunction(
|
|
68
67
|
raise ArgumentError, "Block must define at most two parameters (for hash entry key and value)."
|
69
68
|
end
|
70
69
|
enumerator = o.each_pair
|
71
|
-
result = nil
|
72
70
|
if serving_size == 1
|
73
71
|
(o.size).times do
|
74
72
|
pblock.call(scope, enumerator.next)
|
@@ -35,7 +35,7 @@ module Puppet::Parser::Functions
|
|
35
35
|
key, default, override = HieraPuppet.parse_args(args)
|
36
36
|
if answer = HieraPuppet.lookup(key, default, self, override, :array)
|
37
37
|
method = Puppet::Parser::Functions.function(:include)
|
38
|
-
send(method, answer)
|
38
|
+
send(method, [answer])
|
39
39
|
else
|
40
40
|
raise Puppet::ParseError, "Could not find data item #{key}"
|
41
41
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
Puppet::Parser::Functions.newfunction(:lookup, :type => :rvalue, :arity => -2, :doc => <<-'ENDHEREDOC') do |args|
|
2
|
+
Looks up data defined using Puppet Bindings.
|
3
|
+
The function is callable with one or two arguments and optionally with a lambda to process the result.
|
4
|
+
The second argument can be a type specification; a String that describes the type of the produced result.
|
5
|
+
If a value is found, an assert is made that the value is compliant with the specified type.
|
6
|
+
|
7
|
+
When called with one argument; the name:
|
8
|
+
|
9
|
+
lookup('the_name')
|
10
|
+
|
11
|
+
When called with two arguments; the name, and the expected type:
|
12
|
+
|
13
|
+
lookup('the_name', 'String')
|
14
|
+
|
15
|
+
Using a lambda to process the looked up result.
|
16
|
+
|
17
|
+
lookup('the_name') |$result| { if $result == undef { 'Jane Doe' } else { $result }}
|
18
|
+
|
19
|
+
The type specification is one of:
|
20
|
+
|
21
|
+
* the basic types; 'Integer', 'String', 'Float', 'Boolean', or 'Pattern' (regular expression)
|
22
|
+
* an Array with an optional element type given in '[]', that when not given defaults to '[Data]'
|
23
|
+
* a Hash with optional key and value types given in '[]', where key type defaults to 'Literal' and value to 'Data', if
|
24
|
+
only one type is given, the key defaults to 'Literal'
|
25
|
+
* the abstract type 'Literal' which is one of the basic types
|
26
|
+
* the abstract type 'Data' which is 'Literal', or type compatible with Array[Data], or Hash[Literal, Data]
|
27
|
+
* the abstract type 'Collection' which is Array or Hash of any element type.
|
28
|
+
* the abstract type 'Object' which is any kind of type
|
29
|
+
|
30
|
+
ENDHEREDOC
|
31
|
+
|
32
|
+
unless Puppet[:binder] || Puppet[:parser] == 'future'
|
33
|
+
raise Puppet::ParseError, "The lookup function is only available with settings --binder true, or --parser future"
|
34
|
+
end
|
35
|
+
type_parser = Puppet::Pops::Types::TypeParser.new
|
36
|
+
pblock = args[-1] if args[-1].is_a?(Puppet::Parser::AST::Lambda)
|
37
|
+
type_name = args[1] unless args[1].is_a?(Puppet::Parser::AST::Lambda)
|
38
|
+
type = type_parser.parse( type_name || "Data")
|
39
|
+
result = compiler.injector.lookup(self, type, args[0])
|
40
|
+
if pblock
|
41
|
+
result = pblock.call(self, result.nil? ? :undef : result)
|
42
|
+
end
|
43
|
+
result.nil? ? :undef : result
|
44
|
+
end
|
@@ -79,7 +79,7 @@ Puppet::Parser::Functions::newfunction(
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
raise ArgumentError, ("slice(): wrong argument type (#{args[1]}; must be number.") unless slice_size
|
82
|
-
raise ArgumentError, ("slice(): wrong argument value: #{slice_size}; is not
|
82
|
+
raise ArgumentError, ("slice(): wrong argument value: #{slice_size}; is not a positive integer number > 0") unless slice_size.is_a?(Fixnum) && slice_size > 0
|
83
83
|
receiver = args[0]
|
84
84
|
|
85
85
|
# the block is optional, ok if nil, function then produces an array
|
data/lib/puppet/parser/lexer.rb
CHANGED
data/lib/puppet/parser/parser.rb
CHANGED
@@ -29,7 +29,8 @@ module Puppet::Parser
|
|
29
29
|
def self.eparser(environment)
|
30
30
|
# Since RGen is optional, test that it is installed
|
31
31
|
@@asserted ||= false
|
32
|
-
assert_rgen_installed() unless
|
32
|
+
assert_rgen_installed() unless @@asserted
|
33
|
+
@@asserted = true
|
33
34
|
require 'puppet/parser'
|
34
35
|
require 'puppet/parser/e_parser_adapter'
|
35
36
|
EParserAdapter.new(Puppet::Parser::Parser.new(environment))
|
@@ -53,7 +54,7 @@ module Puppet::Parser
|
|
53
54
|
container.left_expr = litstring
|
54
55
|
raise "no eContainer" if litstring.eContainer() != container
|
55
56
|
raise "no eContainingFeature" if litstring.eContainingFeature() != :left_expr
|
56
|
-
rescue
|
57
|
+
rescue
|
57
58
|
raise Puppet::DevError.new("The gem 'rgen' version >= 0.6.1 is required when using '--parser future'. An older version is installed, please update.")
|
58
59
|
end
|
59
60
|
end
|
@@ -50,7 +50,7 @@ class Puppet::Parser::Relationship
|
|
50
50
|
unless source_resource = catalog.resource(source)
|
51
51
|
raise ArgumentError, "Could not find resource '#{source}' for relationship on '#{target}'"
|
52
52
|
end
|
53
|
-
unless
|
53
|
+
unless catalog.resource(target)
|
54
54
|
raise ArgumentError, "Could not find resource '#{target}' for relationship from '#{source}'"
|
55
55
|
end
|
56
56
|
Puppet.debug "Adding relationship from #{source} to #{target} with '#{param_name}'"
|
data/lib/puppet/parser/scope.rb
CHANGED
@@ -74,6 +74,22 @@ class Puppet::Parser::Scope
|
|
74
74
|
def parent
|
75
75
|
@parent
|
76
76
|
end
|
77
|
+
|
78
|
+
def add_entries_to(target = {})
|
79
|
+
@parent.add_entries_to(target) unless @parent.nil?
|
80
|
+
# do not return pure ephemeral ($0-$n)
|
81
|
+
if is_local_scope?
|
82
|
+
@symbols.each do |k, v|
|
83
|
+
if v == :undef
|
84
|
+
target.delete(k)
|
85
|
+
else
|
86
|
+
target[ k ] = v
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
target
|
91
|
+
end
|
92
|
+
|
77
93
|
end
|
78
94
|
|
79
95
|
# Initialize a new scope suitable for parser function testing. This method
|
@@ -182,7 +198,7 @@ class Puppet::Parser::Scope
|
|
182
198
|
@tags = []
|
183
199
|
|
184
200
|
# The symbol table for this scope. This is where we store variables.
|
185
|
-
@symtable = Ephemeral.new
|
201
|
+
@symtable = Ephemeral.new(nil, true)
|
186
202
|
|
187
203
|
@ephemeral = [ Ephemeral.new(@symtable) ]
|
188
204
|
|
@@ -267,7 +283,7 @@ class Puppet::Parser::Scope
|
|
267
283
|
# @api public
|
268
284
|
def lookupvar(name, options = {})
|
269
285
|
unless name.is_a? String
|
270
|
-
raise Puppet::
|
286
|
+
raise Puppet::ParseError, "Scope variable name #{name.inspect} is a #{name.class}, not a string"
|
271
287
|
end
|
272
288
|
|
273
289
|
table = @ephemeral.last
|
@@ -305,7 +321,7 @@ class Puppet::Parser::Scope
|
|
305
321
|
# The scope of the inherited thing of this scope's resource. This could
|
306
322
|
# either be a node that was inherited or the class.
|
307
323
|
#
|
308
|
-
# @
|
324
|
+
# @return [Puppet::Parser::Scope] The scope or nil if there is not an inherited scope
|
309
325
|
def inherited_scope
|
310
326
|
if has_inherited_class?
|
311
327
|
qualified_scope(resource.resource_type.parent)
|
@@ -320,7 +336,7 @@ class Puppet::Parser::Scope
|
|
320
336
|
# scope in which it was included. The chain of parent scopes is followed
|
321
337
|
# until a node scope or the topscope is found
|
322
338
|
#
|
323
|
-
# @
|
339
|
+
# @return [Puppet::Parser::Scope] The scope or nil if there is no enclosing scope
|
324
340
|
def enclosing_scope
|
325
341
|
if has_enclosing_scope?
|
326
342
|
if parent.is_topscope? or parent.is_nodescope?
|
@@ -347,7 +363,11 @@ class Puppet::Parser::Scope
|
|
347
363
|
|
348
364
|
def lookup_qualified_variable(class_name, variable_name, position)
|
349
365
|
begin
|
350
|
-
|
366
|
+
if lookup_as_local_name?(class_name, variable_name)
|
367
|
+
self[variable_name]
|
368
|
+
else
|
369
|
+
qualified_scope(class_name).lookupvar(variable_name, position)
|
370
|
+
end
|
351
371
|
rescue RuntimeError => e
|
352
372
|
location = if position[:lineproc]
|
353
373
|
" at #{position[:lineproc].call}"
|
@@ -361,6 +381,21 @@ class Puppet::Parser::Scope
|
|
361
381
|
end
|
362
382
|
end
|
363
383
|
|
384
|
+
# Handles the special case of looking up fully qualified variable in not yet evaluated top scope
|
385
|
+
# This is ok if the lookup request originated in topscope (this happens when evaluating
|
386
|
+
# bindings; using the top scope to provide the values for facts.
|
387
|
+
# @param class_name [String] the classname part of a variable name, may be special ""
|
388
|
+
# @param variable_name [String] the variable name without the absolute leading '::'
|
389
|
+
# @return [Boolean] true if the given variable name should be looked up directly in this scope
|
390
|
+
#
|
391
|
+
def lookup_as_local_name?(class_name, variable_name)
|
392
|
+
# not a local if name has more than one segment
|
393
|
+
return nil if variable_name =~ /::/
|
394
|
+
# partial only if the class for "" cannot be found
|
395
|
+
return nil unless class_name == "" && klass = find_hostclass(class_name) && class_scope(klass).nil?
|
396
|
+
is_topscope?
|
397
|
+
end
|
398
|
+
|
364
399
|
def has_inherited_class?
|
365
400
|
is_classscope? and resource.resource_type.parent
|
366
401
|
end
|
@@ -378,9 +413,10 @@ class Puppet::Parser::Scope
|
|
378
413
|
end
|
379
414
|
private :qualified_scope
|
380
415
|
|
381
|
-
#
|
382
|
-
# by default) including the values defined in
|
383
|
-
# shadow parent values.
|
416
|
+
# Returns a Hash containing all variables and their values, optionally (and
|
417
|
+
# by default) including the values defined in parent. Local values
|
418
|
+
# shadow parent values. Ephemeral scopes for match results ($0 - $n) are not included.
|
419
|
+
#
|
384
420
|
def to_hash(recursive = true)
|
385
421
|
if recursive and parent
|
386
422
|
target = parent.to_hash(recursive)
|
@@ -388,14 +424,8 @@ class Puppet::Parser::Scope
|
|
388
424
|
target = Hash.new
|
389
425
|
end
|
390
426
|
|
391
|
-
|
392
|
-
|
393
|
-
target.delete(name)
|
394
|
-
else
|
395
|
-
target[name] = value
|
396
|
-
end
|
397
|
-
end
|
398
|
-
|
427
|
+
# add all local scopes
|
428
|
+
@ephemeral.last.add_entries_to(target)
|
399
429
|
target
|
400
430
|
end
|
401
431
|
|
@@ -441,7 +471,7 @@ class Puppet::Parser::Scope
|
|
441
471
|
raise Puppet::ParseError.new("Cannot assign to a numeric match result variable '$#{name}'") unless options[:ephemeral]
|
442
472
|
end
|
443
473
|
unless name.is_a? String
|
444
|
-
raise Puppet::
|
474
|
+
raise Puppet::ParseError, "Scope variable name #{name.inspect} is a #{name.class}, not a string"
|
445
475
|
end
|
446
476
|
|
447
477
|
table = effective_symtable options[:ephemeral]
|
@@ -469,7 +499,7 @@ class Puppet::Parser::Scope
|
|
469
499
|
# scope's symtable. If the parameter `use_ephemeral` is true, the "top most" ephemeral "table"
|
470
500
|
# will be returned (irrespective of it being a match scope or a local scope).
|
471
501
|
#
|
472
|
-
# @param [Boolean] whether the top most ephemeral (of any kind) should be used or not
|
502
|
+
# @param use_ephemeral [Boolean] whether the top most ephemeral (of any kind) should be used or not
|
473
503
|
def effective_symtable use_ephemeral
|
474
504
|
s = @ephemeral.last
|
475
505
|
return s if use_ephemeral
|
@@ -523,12 +553,7 @@ class Puppet::Parser::Scope
|
|
523
553
|
if level == :all
|
524
554
|
@ephemeral = [ Ephemeral.new(@symtable)]
|
525
555
|
else
|
526
|
-
|
527
|
-
# pop-with-a-count - or if someone more ambitious wants to monkey-patch
|
528
|
-
# that feature into older rubies. --daniel 2012-07-16
|
529
|
-
(@ephemeral.size - level).times do
|
530
|
-
@ephemeral.pop
|
531
|
-
end
|
556
|
+
@ephemeral.pop(@ephemeral.size - level)
|
532
557
|
end
|
533
558
|
end
|
534
559
|
|
@@ -95,15 +95,7 @@ class Puppet::Parser::TypeLoader
|
|
95
95
|
# behavior) only load files from the first module of a given name. E.g.,
|
96
96
|
# given first/foo and second/foo, only files from first/foo will be loaded.
|
97
97
|
environment.modules.each do |mod|
|
98
|
-
|
99
|
-
if File.exists?(mod.manifests)
|
100
|
-
Find.find(mod.manifests) do |path|
|
101
|
-
if path.end_with?(".pp") || path.end_with?(".rb")
|
102
|
-
manifest_files << path
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
load_files(mod.name, manifest_files)
|
98
|
+
load_files(mod.name, mod.all_manifests)
|
107
99
|
end
|
108
100
|
end
|
109
101
|
|
@@ -117,7 +109,7 @@ class Puppet::Parser::TypeLoader
|
|
117
109
|
# Try to load the object with the given fully qualified name.
|
118
110
|
def try_load_fqname(type, fqname)
|
119
111
|
return nil if fqname == "" # special-case main.
|
120
|
-
|
112
|
+
files_to_try_for(fqname).each do |filename|
|
121
113
|
begin
|
122
114
|
imported_types = import_from_modules(filename)
|
123
115
|
if result = imported_types.find { |t| t.type == type and t.name == fqname }
|
@@ -125,7 +117,6 @@ class Puppet::Parser::TypeLoader
|
|
125
117
|
return result
|
126
118
|
end
|
127
119
|
rescue Puppet::ImportError => detail
|
128
|
-
# We couldn't load the item
|
129
120
|
# I'm not convienced we should just drop these errors, but this
|
130
121
|
# preserves existing behaviours.
|
131
122
|
end
|
@@ -171,13 +162,17 @@ class Puppet::Parser::TypeLoader
|
|
171
162
|
|
172
163
|
# Return a list of all file basenames that should be tried in order
|
173
164
|
# to load the object with the given fully qualified name.
|
174
|
-
def
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
165
|
+
def files_to_try_for(qualified_name)
|
166
|
+
qualified_name.split('::').inject([]) do |paths, name|
|
167
|
+
add_path_for_name(paths, name)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def add_path_for_name(paths, name)
|
172
|
+
if paths.empty?
|
173
|
+
[name]
|
174
|
+
else
|
175
|
+
paths.unshift(File.join(paths.first, name))
|
180
176
|
end
|
181
|
-
return result
|
182
177
|
end
|
183
178
|
end
|