puppet 3.4.3 → 3.5.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CONTRIBUTING.md +6 -6
- data/Gemfile +22 -16
- data/LICENSE +1 -1
- data/README.md +33 -11
- data/Rakefile +1 -1
- data/conf/auth.conf +4 -0
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/control +6 -6
- data/ext/ips/transforms +1 -1
- data/ext/nagios/naggen +1 -1
- data/ext/project_data.yaml +21 -1
- data/ext/puppet-test +3 -3
- data/ext/redhat/puppet.spec.erb +28 -2
- data/ext/suse/puppet.spec +1 -1
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/service/daemon.rb +99 -20
- data/lib/hiera_puppet.rb +2 -2
- data/lib/puppet.rb +68 -5
- data/lib/puppet/agent.rb +5 -1
- data/lib/puppet/application.rb +20 -11
- data/lib/puppet/application/agent.rb +1 -1
- data/lib/puppet/application/apply.rb +61 -41
- data/lib/puppet/application/cert.rb +3 -3
- data/lib/puppet/application/device.rb +7 -8
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +3 -3
- data/lib/puppet/application/kick.rb +2 -2
- data/lib/puppet/application/master.rb +1 -1
- data/lib/puppet/application/queue.rb +9 -9
- data/lib/puppet/application/resource.rb +2 -2
- data/lib/puppet/bindings.rb +6 -6
- data/lib/puppet/configurer.rb +17 -14
- data/lib/puppet/configurer/fact_handler.rb +1 -1
- data/lib/puppet/confine/any.rb +26 -0
- data/lib/puppet/confine/exists.rb +1 -1
- data/lib/puppet/confiner.rb +1 -0
- data/lib/puppet/context.rb +55 -0
- data/lib/puppet/context/trusted_information.rb +56 -0
- data/lib/puppet/defaults.rb +97 -26
- data/lib/puppet/environments.rb +187 -0
- data/lib/puppet/error.rb +2 -1
- data/lib/puppet/external/pson/common.rb +1 -1
- data/lib/puppet/external/pson/pure/generator.rb +1 -1
- data/lib/puppet/external/pson/pure/parser.rb +1 -1
- data/lib/puppet/face/config.rb +73 -15
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/help.rb +2 -1
- data/lib/puppet/face/help/action.erb +1 -0
- data/lib/puppet/face/help/face.erb +1 -0
- data/lib/puppet/face/help/global.erb +1 -0
- data/lib/puppet/face/help/man.erb +9 -8
- data/lib/puppet/face/module/list.rb +13 -7
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/parser.rb +11 -5
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +2 -2
- data/lib/puppet/feature/libuser.rb +1 -1
- data/lib/puppet/feature/msgpack.rb +2 -0
- data/lib/puppet/feature/rails.rb +2 -2
- data/lib/puppet/file_bucket/dipper.rb +9 -9
- data/lib/puppet/file_bucket/file.rb +9 -5
- data/lib/puppet/file_serving/base.rb +1 -1
- data/lib/puppet/file_serving/configuration.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +3 -3
- data/lib/puppet/file_serving/content.rb +2 -2
- data/lib/puppet/file_serving/fileset.rb +4 -4
- data/lib/puppet/file_serving/metadata.rb +69 -15
- data/lib/puppet/file_serving/mount/file.rb +1 -1
- data/lib/puppet/file_system.rb +361 -1
- data/lib/puppet/file_system/file18.rb +3 -3
- data/lib/puppet/file_system/file19.rb +3 -3
- data/lib/puppet/file_system/file19windows.rb +18 -23
- data/lib/puppet/file_system/file_impl.rb +145 -0
- data/lib/puppet/file_system/memory_file.rb +23 -9
- data/lib/puppet/file_system/memory_impl.rb +64 -0
- data/lib/puppet/forge.rb +4 -3
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/graph/relationship_graph.rb +7 -7
- data/lib/puppet/indirector.rb +1 -0
- data/lib/puppet/indirector/catalog/compiler.rb +3 -30
- data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
- data/lib/puppet/indirector/catalog/static_compiler.rb +3 -7
- data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
- data/lib/puppet/indirector/direct_file_server.rb +2 -2
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/face.rb +3 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +25 -15
- data/lib/puppet/indirector/file_metadata/file.rb +1 -1
- data/lib/puppet/indirector/file_server.rb +1 -1
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +4 -4
- data/lib/puppet/indirector/key/file.rb +8 -5
- data/lib/puppet/indirector/ldap.rb +1 -1
- data/lib/puppet/indirector/memory.rb +4 -0
- data/lib/puppet/indirector/msgpack.rb +82 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +3 -3
- data/lib/puppet/indirector/node/msgpack.rb +7 -0
- data/lib/puppet/indirector/node/yaml.rb +15 -0
- data/lib/puppet/indirector/queue.rb +3 -2
- data/lib/puppet/indirector/report/msgpack.rb +11 -0
- data/lib/puppet/indirector/request.rb +17 -20
- data/lib/puppet/indirector/resource/rest.rb +1 -1
- data/lib/puppet/indirector/resource_type/parser.rb +3 -13
- data/lib/puppet/indirector/rest.rb +6 -7
- data/lib/puppet/indirector/ssl_file.rb +7 -7
- data/lib/puppet/indirector/yaml.rb +9 -13
- data/lib/puppet/metatype/manager.rb +12 -7
- data/lib/puppet/module.rb +14 -9
- data/lib/puppet/module_tool.rb +21 -26
- data/lib/puppet/module_tool/applications/application.rb +1 -1
- data/lib/puppet/module_tool/applications/generator.rb +2 -1
- data/lib/puppet/module_tool/applications/installer.rb +9 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +10 -7
- data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +11 -8
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/contents_description.rb +2 -0
- data/lib/puppet/module_tool/dependency.rb +4 -5
- data/lib/puppet/module_tool/errors.rb +2 -0
- data/lib/puppet/module_tool/install_directory.rb +3 -0
- data/lib/puppet/module_tool/metadata.rb +3 -5
- data/lib/puppet/module_tool/modulefile.rb +3 -0
- data/lib/puppet/module_tool/shared_behaviors.rb +6 -1
- data/lib/puppet/module_tool/skeleton.rb +3 -0
- data/lib/puppet/module_tool/tar.rb +3 -0
- data/lib/puppet/network/auth_config_parser.rb +1 -1
- data/lib/puppet/network/authconfig.rb +5 -2
- data/lib/puppet/network/authentication.rb +7 -2
- data/lib/puppet/network/authorization.rb +2 -2
- data/lib/puppet/network/format_support.rb +4 -0
- data/lib/puppet/network/formats.rb +9 -14
- data/lib/puppet/network/http.rb +11 -0
- data/lib/puppet/network/http/api.rb +0 -2
- data/lib/puppet/network/http/api/v1.rb +146 -11
- data/lib/puppet/network/http/api/v2.rb +32 -0
- data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
- data/lib/puppet/network/http/api/v2/environments.rb +21 -0
- data/lib/puppet/network/http/connection.rb +94 -37
- data/lib/puppet/network/http/error.rb +69 -0
- data/lib/puppet/network/http/handler.rb +28 -196
- data/lib/puppet/network/http/issues.rb +9 -0
- data/lib/puppet/network/http/memory_response.rb +13 -0
- data/lib/puppet/network/http/rack/rest.rb +10 -18
- data/lib/puppet/network/http/request.rb +56 -0
- data/lib/puppet/network/http/response.rb +11 -0
- data/lib/puppet/network/http/route.rb +91 -0
- data/lib/puppet/network/http/webrick.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +7 -12
- data/lib/puppet/network/http_pool.rb +3 -3
- data/lib/puppet/network/rights.rb +4 -4
- data/lib/puppet/node.rb +23 -14
- data/lib/puppet/node/environment.rb +149 -125
- data/lib/puppet/node/facts.rb +6 -5
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/block_expression.rb +1 -6
- data/lib/puppet/parser/ast/collexpr.rb +54 -2
- data/lib/puppet/parser/ast/lambda.rb +9 -0
- data/lib/puppet/parser/ast/leaf.rb +15 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
- data/lib/puppet/parser/code_merger.rb +13 -0
- data/lib/puppet/parser/collector.rb +1 -1
- data/lib/puppet/parser/compiler.rb +28 -30
- data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
- data/lib/puppet/parser/e_parser_adapter.rb +0 -1
- data/lib/puppet/parser/files.rb +12 -7
- data/lib/puppet/parser/functions.rb +36 -29
- data/lib/puppet/parser/functions/collect.rb +1 -1
- data/lib/puppet/parser/functions/defined.rb +40 -16
- data/lib/puppet/parser/functions/each.rb +55 -41
- data/lib/puppet/parser/functions/epp.rb +41 -0
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/file.rb +1 -1
- data/lib/puppet/parser/functions/filter.rb +68 -16
- data/lib/puppet/parser/functions/generate.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +3 -2
- data/lib/puppet/parser/functions/inline_epp.rb +79 -0
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +127 -27
- data/lib/puppet/parser/functions/map.rb +64 -12
- data/lib/puppet/parser/functions/reduce.rb +40 -16
- data/lib/puppet/parser/functions/select.rb +1 -1
- data/lib/puppet/parser/functions/slice.rb +42 -23
- data/lib/puppet/parser/grammar.ra +3 -0
- data/lib/puppet/parser/lexer.rb +10 -9
- data/lib/puppet/parser/parser.rb +15 -12
- data/lib/puppet/parser/parser_factory.rb +26 -1
- data/lib/puppet/parser/parser_support.rb +13 -4
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +246 -97
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +13 -2
- data/lib/puppet/pops.rb +15 -1
- data/lib/puppet/pops/adapters.rb +64 -32
- data/lib/puppet/pops/binder/binder.rb +122 -150
- data/lib/puppet/pops/binder/binder_issues.rb +1 -21
- data/lib/puppet/pops/binder/bindings_checker.rb +0 -20
- data/lib/puppet/pops/binder/bindings_composer.rb +4 -70
- data/lib/puppet/pops/binder/bindings_factory.rb +16 -58
- data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -3
- data/lib/puppet/pops/binder/bindings_loader.rb +13 -4
- data/lib/puppet/pops/binder/bindings_model.rb +17 -31
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +2 -20
- data/lib/puppet/pops/binder/config/binder_config.rb +8 -40
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +2 -43
- data/lib/puppet/pops/binder/config/issues.rb +1 -21
- data/lib/puppet/pops/binder/injector.rb +86 -7
- data/lib/puppet/pops/binder/injector_entry.rb +6 -2
- data/lib/puppet/pops/binder/key_factory.rb +7 -1
- data/lib/puppet/pops/binder/lookup.rb +191 -0
- data/lib/puppet/pops/binder/producers.rb +5 -5
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +2 -3
- data/lib/puppet/pops/binder/system_bindings.rb +4 -16
- data/lib/puppet/pops/containment.rb +72 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
- data/lib/puppet/pops/evaluator/closure.rb +57 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
- data/lib/puppet/pops/issue_reporter.rb +8 -4
- data/lib/puppet/pops/issues.rb +199 -4
- data/lib/puppet/pops/label_provider.rb +5 -0
- data/lib/puppet/pops/model/ast_transformer.rb +55 -31
- data/lib/puppet/pops/model/ast_tree_dumper.rb +9 -1
- data/lib/puppet/pops/model/factory.rb +265 -111
- data/lib/puppet/pops/model/model.rb +179 -140
- data/lib/puppet/pops/model/model_label_provider.rb +38 -9
- data/lib/puppet/pops/model/model_tree_dumper.rb +38 -13
- data/lib/puppet/pops/parser/code_merger.rb +17 -0
- data/lib/puppet/pops/parser/egrammar.ra +110 -61
- data/lib/puppet/pops/parser/eparser.rb +1415 -1092
- data/lib/puppet/pops/parser/epp_parser.rb +51 -0
- data/lib/puppet/pops/parser/epp_support.rb +247 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +53 -15
- data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
- data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
- data/lib/puppet/pops/parser/lexer.rb +83 -192
- data/lib/puppet/pops/parser/lexer2.rb +684 -0
- data/lib/puppet/pops/parser/lexer_support.rb +107 -0
- data/lib/puppet/pops/parser/locatable.rb +23 -0
- data/lib/puppet/pops/parser/locator.rb +291 -0
- data/lib/puppet/pops/parser/makefile +1 -8
- data/lib/puppet/pops/parser/parser_support.rb +76 -48
- data/lib/puppet/pops/parser/slurp_support.rb +95 -0
- data/lib/puppet/pops/patterns.rb +13 -4
- data/lib/puppet/pops/types/class_loader.rb +2 -2
- data/lib/puppet/pops/types/enumeration.rb +34 -0
- data/lib/puppet/pops/types/type_calculator.rb +983 -58
- data/lib/puppet/pops/types/type_factory.rb +203 -15
- data/lib/puppet/pops/types/type_parser.rb +355 -12
- data/lib/puppet/pops/types/types.rb +314 -24
- data/lib/puppet/pops/utils.rb +23 -7
- data/lib/puppet/pops/validation.rb +14 -8
- data/lib/puppet/pops/validation/checker3_1.rb +17 -12
- data/lib/puppet/pops/validation/checker4_0.rb +514 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
- data/lib/puppet/pops/visitor.rb +146 -4
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider.rb +47 -26
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/augeas/augeas.rb +11 -11
- data/lib/puppet/provider/cron/crontab.rb +10 -1
- data/lib/puppet/provider/exec.rb +1 -1
- data/lib/puppet/provider/exec/posix.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/file/posix.rb +2 -2
- data/lib/puppet/provider/file/windows.rb +15 -9
- data/lib/puppet/provider/group/aix.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +3 -3
- data/lib/puppet/provider/mount.rb +7 -0
- data/lib/puppet/provider/mount/parsed.rb +0 -1
- data/lib/puppet/provider/naginator.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +1 -1
- data/lib/puppet/provider/package/appdmg.rb +1 -4
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +1 -1
- data/lib/puppet/provider/package/blastwave.rb +1 -1
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +3 -3
- data/lib/puppet/provider/package/openbsd.rb +6 -4
- data/lib/puppet/provider/package/pacman.rb +58 -5
- data/lib/puppet/provider/package/pip.rb +2 -2
- data/lib/puppet/provider/package/pkgdmg.rb +25 -10
- data/lib/puppet/provider/package/pkgin.rb +48 -23
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/ports.rb +1 -1
- data/lib/puppet/provider/package/portupgrade.rb +7 -7
- data/lib/puppet/provider/package/rpm.rb +16 -8
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/selboolean/getsetsebool.rb +1 -1
- data/lib/puppet/provider/selmodule/semodule.rb +5 -5
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +3 -3
- data/lib/puppet/provider/service/daemontools.rb +20 -20
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/freebsd.rb +3 -3
- data/lib/puppet/provider/service/gentoo.rb +2 -2
- data/lib/puppet/provider/service/init.rb +5 -5
- data/lib/puppet/provider/service/launchd.rb +4 -4
- data/lib/puppet/provider/service/redhat.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +4 -4
- data/lib/puppet/provider/service/service.rb +3 -4
- data/lib/puppet/provider/service/smf.rb +1 -1
- data/lib/puppet/provider/service/src.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +4 -4
- data/lib/puppet/provider/service/upstart.rb +22 -7
- data/lib/puppet/provider/service/windows.rb +7 -7
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +3 -3
- data/lib/puppet/provider/user/aix.rb +5 -5
- data/lib/puppet/provider/user/directoryservice.rb +8 -5
- data/lib/puppet/provider/user/ldap.rb +1 -1
- data/lib/puppet/provider/user/pw.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +19 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
- data/lib/puppet/provider/zone/solaris.rb +4 -4
- data/lib/puppet/rails.rb +16 -11
- data/lib/puppet/rails/benchmark.rb +1 -1
- data/lib/puppet/rails/resource.rb +5 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/report.rb +1 -1
- data/lib/puppet/relationship.rb +10 -5
- data/lib/puppet/reports/http.rb +8 -2
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/store.rb +3 -3
- data/lib/puppet/reports/tagmail.rb +4 -4
- data/lib/puppet/resource.rb +37 -44
- data/lib/puppet/resource/catalog.rb +18 -20
- data/lib/puppet/resource/status.rb +7 -6
- data/lib/puppet/resource/type.rb +6 -5
- data/lib/puppet/resource/type_collection.rb +2 -2
- data/lib/puppet/run.rb +9 -8
- data/lib/puppet/settings.rb +395 -244
- data/lib/puppet/settings/base_setting.rb +10 -4
- data/lib/puppet/settings/config_file.rb +81 -44
- data/lib/puppet/settings/directory_setting.rb +1 -2
- data/lib/puppet/settings/file_setting.rb +12 -5
- data/lib/puppet/settings/ini_file.rb +171 -0
- data/lib/puppet/ssl/base.rb +4 -0
- data/lib/puppet/ssl/certificate_authority.rb +16 -11
- data/lib/puppet/ssl/certificate_authority/interface.rb +3 -2
- data/lib/puppet/ssl/certificate_factory.rb +50 -5
- data/lib/puppet/ssl/certificate_request.rb +2 -2
- data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
- data/lib/puppet/ssl/certificate_revocation_list.rb +3 -1
- data/lib/puppet/ssl/host.rb +9 -8
- data/lib/puppet/ssl/inventory.rb +1 -1
- data/lib/puppet/ssl/key.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/status.rb +8 -7
- data/lib/puppet/test/test_helper.rb +35 -4
- data/lib/puppet/transaction/event.rb +6 -5
- data/lib/puppet/transaction/report.rb +10 -10
- data/lib/puppet/type.rb +1 -3
- data/lib/puppet/type/augeas.rb +2 -1
- data/lib/puppet/type/cron.rb +41 -11
- data/lib/puppet/type/exec.rb +5 -5
- data/lib/puppet/type/file.rb +42 -4
- data/lib/puppet/type/file/content.rb +5 -6
- data/lib/puppet/type/file/ensure.rb +3 -3
- data/lib/puppet/type/file/source.rb +12 -6
- data/lib/puppet/type/file/target.rb +5 -5
- data/lib/puppet/type/k5login.rb +4 -4
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/package.rb +79 -3
- data/lib/puppet/type/resources.rb +34 -5
- data/lib/puppet/type/selboolean.rb +1 -1
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -1
- data/lib/puppet/type/sshkey.rb +2 -1
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +4 -1
- data/lib/puppet/type/yumrepo.rb +219 -344
- data/lib/puppet/type/zone.rb +15 -5
- data/lib/puppet/util.rb +14 -13
- data/lib/puppet/util/adsi.rb +19 -3
- data/lib/puppet/util/autoload.rb +27 -24
- data/lib/puppet/util/backups.rb +6 -6
- data/lib/puppet/util/checksums.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/colors.rb +4 -12
- data/lib/puppet/util/command_line.rb +2 -2
- data/lib/puppet/util/command_line/trollop.rb +3 -3
- data/lib/puppet/util/docs.rb +2 -2
- data/lib/puppet/util/errors.rb +8 -1
- data/lib/puppet/util/execution.rb +12 -5
- data/lib/puppet/util/filetype.rb +5 -5
- data/lib/puppet/util/inifile.rb +19 -4
- data/lib/puppet/util/instrumentation/data.rb +5 -0
- data/lib/puppet/util/instrumentation/indirection_probe.rb +6 -1
- data/lib/puppet/util/instrumentation/listener.rb +6 -1
- data/lib/puppet/util/json_lockfile.rb +4 -1
- data/lib/puppet/util/ldap/connection.rb +1 -1
- data/lib/puppet/util/lockfile.rb +10 -6
- data/lib/puppet/util/log.rb +6 -1
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/metric.rb +9 -4
- data/lib/puppet/util/nagios_maker.rb +26 -1
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/network_device/transport/ssh.rb +3 -3
- data/lib/puppet/util/plugins.rb +1 -1
- data/lib/puppet/util/profiler.rb +13 -1
- data/lib/puppet/util/pson.rb +1 -1
- data/lib/puppet/util/queue/stomp.rb +2 -2
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +19 -19
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/retryaction.rb +1 -1
- data/lib/puppet/util/selinux.rb +2 -2
- data/lib/puppet/util/storage.rb +3 -3
- data/lib/puppet/util/symbolic_file_mode.rb +1 -1
- data/lib/puppet/util/tag_set.rb +15 -3
- data/lib/puppet/util/tagging.rb +12 -17
- data/lib/puppet/util/watched_file.rb +1 -1
- data/lib/puppet/util/watcher.rb +1 -1
- data/lib/puppet/util/windows/error.rb +2 -2
- data/lib/puppet/util/windows/file.rb +20 -4
- data/lib/puppet/util/windows/registry.rb +2 -2
- data/lib/puppet/vendor/safe_yaml/CHANGES.md +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppetx.rb +1 -21
- data/lib/puppetx/puppet/syntax_checker.rb +1 -1
- data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +9 -11
- data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
- data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
- data/spec/fixtures/{unit/pops/binder/hiera2/yaml_backend/empty/common.yaml → integration/node/environment/sitedir/03_empty.pp} +0 -0
- data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
- data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
- data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +3 -12
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/{awesome/lib/puppetx/awesome → awesome2/lib/puppetx/awesome2}/echo_scheme_handler.rb +2 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
- data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +2 -2
- data/spec/fixtures/unit/provider/service/systemd/{list_units → list_units_services} +0 -1
- data/spec/integration/agent/logging_spec.rb +1 -1
- data/spec/integration/application/apply_spec.rb +78 -3
- data/spec/integration/application/doc_spec.rb +3 -2
- data/spec/integration/configurer_spec.rb +5 -3
- data/spec/integration/directory_environments_spec.rb +50 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +4 -5
- data/spec/integration/network/authconfig_spec.rb +4 -4
- data/spec/integration/network/formats_spec.rb +1 -1
- data/spec/integration/node/environment_spec.rb +67 -15
- data/spec/integration/node/facts_spec.rb +1 -1
- data/spec/integration/node_spec.rb +1 -1
- data/spec/integration/parser/catalog_spec.rb +100 -60
- data/spec/integration/parser/compiler_spec.rb +102 -13
- data/spec/integration/parser/future_compiler_spec.rb +416 -0
- data/spec/integration/parser/parser_spec.rb +44 -105
- data/spec/integration/parser/scope_spec.rb +614 -528
- data/spec/integration/provider/cron/crontab_spec.rb +21 -0
- data/spec/integration/provider/mount_spec.rb +15 -2
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +3 -4
- data/spec/integration/ssl/autosign_spec.rb +1 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
- data/spec/integration/ssl/host_spec.rb +1 -1
- data/spec/integration/transaction_spec.rb +13 -13
- data/spec/integration/type/exec_spec.rb +2 -2
- data/spec/integration/type/file_spec.rb +114 -41
- data/spec/integration/type/nagios_spec.rb +80 -0
- data/spec/integration/type/tidy_spec.rb +2 -2
- data/spec/integration/util/execution_spec.rb +17 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +27 -2
- data/spec/lib/matchers/include.rb +27 -0
- data/spec/lib/matchers/include_spec.rb +32 -0
- data/spec/lib/matchers/json.rb +135 -79
- data/spec/lib/matchers/match_tokens2.rb +74 -0
- data/spec/lib/matchers/resource.rb +35 -0
- data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
- data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
- data/spec/lib/puppet/indirector_testing.rb +12 -2
- data/spec/lib/puppet_spec/files.rb +1 -0
- data/spec/lib/puppet_spec/matchers.rb +5 -0
- data/spec/lib/puppet_spec/modules.rb +1 -1
- data/spec/lib/puppet_spec/scope.rb +14 -0
- data/spec/shared_behaviours/file_server_terminus.rb +2 -2
- data/spec/spec_helper.rb +47 -17
- data/spec/unit/agent_spec.rb +8 -1
- data/spec/unit/application/agent_spec.rb +5 -4
- data/spec/unit/application/apply_spec.rb +34 -15
- data/spec/unit/application/device_spec.rb +27 -32
- data/spec/unit/application/doc_spec.rb +4 -4
- data/spec/unit/application/filebucket_spec.rb +1 -1
- data/spec/unit/application/master_spec.rb +2 -2
- data/spec/unit/application_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +5 -16
- data/spec/unit/configurer_spec.rb +2 -2
- data/spec/unit/confine/exists_spec.rb +5 -5
- data/spec/unit/context/trusted_information_spec.rb +124 -0
- data/spec/unit/context_spec.rb +74 -0
- data/spec/unit/environments_spec.rb +126 -0
- data/spec/unit/face/config_spec.rb +31 -16
- data/spec/unit/face/module/build_spec.rb +1 -0
- data/spec/unit/face/module/install_spec.rb +21 -104
- data/spec/unit/face/module/list_spec.rb +52 -36
- data/spec/unit/face/module/uninstall_spec.rb +18 -25
- data/spec/unit/face/parser_spec.rb +39 -23
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/base_spec.rb +9 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -2
- data/spec/unit/file_serving/configuration_spec.rb +7 -7
- data/spec/unit/file_serving/content_spec.rb +7 -12
- data/spec/unit/file_serving/fileset_spec.rb +49 -53
- data/spec/unit/file_serving/metadata_spec.rb +83 -32
- data/spec/unit/file_serving/mount/file_spec.rb +10 -10
- data/spec/unit/file_system/tempfile_spec.rb +3 -3
- data/spec/unit/file_system_spec.rb +508 -0
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/hiera/scope_spec.rb +6 -2
- data/spec/unit/hiera_puppet_spec.rb +13 -6
- data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +42 -11
- data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
- data/spec/unit/indirector/facts/facter_spec.rb +5 -5
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
- data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
- data/spec/unit/indirector/file_server_spec.rb +4 -4
- data/spec/unit/indirector/json_spec.rb +6 -6
- data/spec/unit/indirector/key/file_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +191 -0
- data/spec/unit/indirector/node/active_record_spec.rb +1 -1
- data/spec/unit/indirector/node/ldap_spec.rb +16 -7
- data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
- data/spec/unit/indirector/node/plain_spec.rb +1 -1
- data/spec/unit/indirector/queue_spec.rb +1 -1
- data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
- data/spec/unit/indirector/request_spec.rb +16 -8
- data/spec/unit/indirector/rest_spec.rb +0 -4
- data/spec/unit/indirector/ssl_file_spec.rb +12 -11
- data/spec/unit/indirector/yaml_spec.rb +4 -4
- data/spec/unit/man_spec.rb +32 -0
- data/spec/unit/module_spec.rb +60 -46
- data/spec/unit/module_tool/applications/checksummer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +53 -16
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +26 -25
- data/spec/unit/module_tool/tar_spec.rb +1 -1
- data/spec/unit/module_tool_spec.rb +17 -90
- data/spec/unit/network/authconfig_spec.rb +3 -4
- data/spec/unit/network/authentication_spec.rb +20 -6
- data/spec/unit/network/authorization_spec.rb +11 -1
- data/spec/unit/network/formats_spec.rb +32 -9
- data/spec/unit/network/http/api/v1_spec.rb +365 -62
- data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
- data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
- data/spec/unit/network/http/api/v2_spec.rb +14 -0
- data/spec/unit/network/http/connection_spec.rb +39 -5
- data/spec/unit/network/http/error_spec.rb +30 -0
- data/spec/unit/network/http/handler_spec.rb +69 -419
- data/spec/unit/network/http/rack/rest_spec.rb +20 -28
- data/spec/unit/network/http/route_spec.rb +75 -0
- data/spec/unit/network/http/webrick/rest_spec.rb +21 -58
- data/spec/unit/network/http_pool_spec.rb +3 -3
- data/spec/unit/network/rights_spec.rb +2 -2
- data/spec/unit/node/environment_spec.rb +108 -89
- data/spec/unit/node/facts_spec.rb +5 -12
- data/spec/unit/node_spec.rb +22 -22
- data/spec/unit/parser/ast/collection_spec.rb +1 -1
- data/spec/unit/parser/ast/leaf_spec.rb +2 -0
- data/spec/unit/parser/ast/resource_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +5 -3
- data/spec/unit/parser/files_spec.rb +40 -50
- data/spec/unit/parser/functions/defined_spec.rb +80 -18
- data/spec/unit/parser/functions/epp_spec.rb +88 -0
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +4 -1
- data/spec/unit/parser/functions/generate_spec.rb +6 -2
- data/spec/unit/parser/functions/hiera_array_spec.rb +5 -2
- data/spec/unit/parser/functions/hiera_hash_spec.rb +4 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +6 -3
- data/spec/unit/parser/functions/hiera_spec.rb +5 -2
- data/spec/unit/parser/functions/include_spec.rb +0 -1
- data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
- data/spec/unit/parser/functions/lookup_spec.rb +66 -16
- data/spec/unit/parser/functions_spec.rb +25 -91
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/filter_spec.rb +56 -0
- data/spec/unit/parser/methods/map_spec.rb +94 -5
- data/spec/unit/parser/methods/reduce_spec.rb +10 -0
- data/spec/unit/parser/methods/shared.rb +2 -18
- data/spec/unit/parser/methods/slice_spec.rb +39 -1
- data/spec/unit/parser/parser_spec.rb +14 -10
- data/spec/unit/parser/resource_spec.rb +3 -9
- data/spec/unit/parser/scope_spec.rb +81 -78
- data/spec/unit/parser/type_loader_spec.rb +0 -4
- data/spec/unit/pops/benchmark_spec.rb +142 -0
- data/spec/unit/pops/binder/binder_spec.rb +15 -34
- data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -41
- data/spec/unit/pops/binder/bindings_composer_spec.rb +6 -31
- data/spec/unit/pops/binder/config/binder_config_spec.rb +5 -18
- data/spec/unit/pops/binder/injector_spec.rb +76 -81
- data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
- data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
- data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
- data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
- data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
- data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
- data/spec/unit/pops/factory_spec.rb +6 -29
- data/spec/unit/pops/issues_spec.rb +1 -1
- data/spec/unit/pops/model/ast_transformer_spec.rb +6 -9
- data/spec/unit/pops/model/model_spec.rb +2 -2
- data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +4 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
- data/spec/unit/pops/parser/lexer_spec.rb +25 -86
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +29 -4
- data/spec/unit/pops/parser/parse_calls_spec.rb +10 -6
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +0 -9
- data/spec/unit/pops/parser/parse_containers_spec.rb +43 -12
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
- data/spec/unit/pops/parser/parse_resource_spec.rb +14 -0
- data/spec/unit/pops/parser/parser_spec.rb +3 -1
- data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +4 -4
- data/spec/unit/pops/transformer/transform_calls_spec.rb +41 -6
- data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -9
- data/spec/unit/pops/transformer/transform_containers_spec.rb +12 -4
- data/spec/unit/pops/types/enumeration_spec.rb +50 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1171 -196
- data/spec/unit/pops/types/type_factory_spec.rb +108 -4
- data/spec/unit/pops/types/type_parser_spec.rb +114 -10
- data/spec/unit/pops/validator/validator_spec.rb +36 -1
- data/spec/unit/provider/augeas/augeas_spec.rb +39 -16
- data/spec/unit/provider/cron/parsed_spec.rb +27 -31
- data/spec/unit/provider/file/posix_spec.rb +2 -2
- data/spec/unit/provider/group/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/mount_spec.rb +12 -1
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
- data/spec/unit/provider/package/apt_spec.rb +1 -1
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/gem_spec.rb +12 -0
- data/spec/unit/provider/package/msi_spec.rb +4 -0
- data/spec/unit/provider/package/openbsd_spec.rb +10 -10
- data/spec/unit/provider/package/pacman_spec.rb +36 -7
- data/spec/unit/provider/package/pkgin_spec.rb +57 -55
- data/spec/unit/provider/package/rpm_spec.rb +51 -6
- data/spec/unit/provider/service/base_spec.rb +4 -4
- data/spec/unit/provider/service/daemontools_spec.rb +8 -13
- data/spec/unit/provider/service/freebsd_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_spec.rb +24 -24
- data/spec/unit/provider/service/init_spec.rb +15 -15
- data/spec/unit/provider/service/openbsd_spec.rb +16 -16
- data/spec/unit/provider/service/openrc_spec.rb +20 -20
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +5 -8
- data/spec/unit/provider/service/src_spec.rb +4 -4
- data/spec/unit/provider/service/systemd_spec.rb +24 -14
- data/spec/unit/provider/service/upstart_spec.rb +12 -4
- data/spec/unit/provider/service/windows_spec.rb +1 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +21 -23
- data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
- data/spec/unit/provider/user/useradd_spec.rb +43 -15
- data/spec/unit/provider/user/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
- data/spec/unit/provider/zone/solaris_spec.rb +1 -1
- data/spec/unit/provider_spec.rb +120 -62
- data/spec/unit/rails/host_spec.rb +1 -1
- data/spec/unit/rails/param_value_spec.rb +4 -0
- data/spec/unit/relationship_spec.rb +4 -4
- data/spec/unit/reports/http_spec.rb +14 -3
- data/spec/unit/reports/rrdgraph_spec.rb +0 -1
- data/spec/unit/reports/store_spec.rb +2 -2
- data/spec/unit/resource/catalog_spec.rb +17 -29
- data/spec/unit/resource/status_spec.rb +1 -1
- data/spec/unit/resource/type_collection_spec.rb +28 -47
- data/spec/unit/resource/type_spec.rb +12 -23
- data/spec/unit/resource_spec.rb +54 -93
- data/spec/unit/run_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/config_file_spec.rb +68 -15
- data/spec/unit/settings/file_setting_spec.rb +2 -2
- data/spec/unit/settings/ini_file_spec.rb +184 -0
- data/spec/unit/settings_spec.rb +137 -79
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +3 -1
- data/spec/unit/ssl/certificate_authority_spec.rb +11 -9
- data/spec/unit/ssl/certificate_factory_spec.rb +19 -4
- data/spec/unit/ssl/certificate_request_attributes_spec.rb +1 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +101 -72
- data/spec/unit/ssl/host_spec.rb +8 -20
- data/spec/unit/ssl/inventory_spec.rb +2 -2
- data/spec/unit/ssl/key_spec.rb +4 -4
- data/spec/unit/status_spec.rb +6 -4
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -11
- data/spec/unit/transaction/event_spec.rb +2 -2
- data/spec/unit/transaction/report_spec.rb +24 -15
- data/spec/unit/transaction/resource_harness_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +39 -1
- data/spec/unit/type/file/content_spec.rb +4 -5
- data/spec/unit/type/file/ctime_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +5 -4
- data/spec/unit/type/file/mtime_spec.rb +1 -1
- data/spec/unit/type/file/source_spec.rb +30 -7
- data/spec/unit/type/file_spec.rb +8 -8
- data/spec/unit/type/k5login_spec.rb +3 -3
- data/spec/unit/type/nagios_spec.rb +6 -0
- data/spec/unit/type/package/package_settings_spec.rb +135 -0
- data/spec/unit/type/package_spec.rb +13 -1
- data/spec/unit/type/resources_spec.rb +155 -0
- data/spec/unit/type/service_spec.rb +3 -3
- data/spec/unit/type/ssh_authorized_key_spec.rb +96 -93
- data/spec/unit/type/sshkey_spec.rb +39 -30
- data/spec/unit/type/tidy_spec.rb +19 -12
- data/spec/unit/type/user_spec.rb +47 -2
- data/spec/unit/type/whit_spec.rb +2 -2
- data/spec/unit/type/yumrepo_spec.rb +32 -177
- data/spec/unit/type/zone_spec.rb +2 -2
- data/spec/unit/type_spec.rb +11 -0
- data/spec/unit/util/adsi_spec.rb +48 -1
- data/spec/unit/util/autoload_spec.rb +24 -39
- data/spec/unit/util/backups_spec.rb +25 -28
- data/spec/unit/util/checksums_spec.rb +1 -3
- data/spec/unit/util/colors_spec.rb +14 -0
- data/spec/unit/util/docs_spec.rb +9 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/filetype_spec.rb +7 -7
- data/spec/unit/util/instrumentation/data_spec.rb +3 -1
- data/spec/unit/util/instrumentation/indirection_probe_spec.rb +2 -0
- data/spec/unit/util/instrumentation/listener_spec.rb +3 -2
- data/spec/unit/util/json_lockfile_spec.rb +25 -4
- data/spec/unit/util/lockfile_spec.rb +49 -7
- data/spec/unit/util/log/destinations_spec.rb +1 -0
- data/spec/unit/util/log_spec.rb +1 -1
- data/spec/unit/util/metric_spec.rb +1 -1
- data/spec/unit/util/pidlock_spec.rb +6 -6
- data/spec/unit/util/pson_spec.rb +2 -2
- data/spec/unit/util/rdoc/parser_spec.rb +32 -29
- data/spec/unit/util/resource_template_spec.rb +3 -3
- data/spec/unit/util/selinux_spec.rb +5 -5
- data/spec/unit/util/storage_spec.rb +4 -4
- data/spec/unit/util/tag_set_spec.rb +1 -1
- data/spec/unit/util/watcher_spec.rb +1 -4
- data/spec/unit/util/yaml_spec.rb +2 -2
- data/spec/unit/util_spec.rb +7 -7
- data/tasks/benchmark.rake +0 -1
- data/tasks/parallel.rake +408 -0
- data/tasks/yard.rake +59 -0
- metadata +2889 -2782
- checksums.yaml +0 -7
- data/README_DEVELOPER.md +0 -809
- data/lib/puppet/file_system/file.rb +0 -271
- data/lib/puppet/network/http/rack/httphandler.rb +0 -13
- data/lib/puppet/pops/binder/hiera2.rb +0 -10
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +0 -148
- data/lib/puppet/pops/binder/hiera2/config.rb +0 -69
- data/lib/puppet/pops/binder/hiera2/config_checker.rb +0 -68
- data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +0 -36
- data/lib/puppet/pops/binder/hiera2/issues.rb +0 -67
- data/lib/puppet/pops/binder/hiera2/json_backend.rb +0 -18
- data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +0 -21
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +0 -67
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +0 -92
- data/lib/puppet/pops/parser/grammar.ra +0 -746
- data/lib/puppet/provider/port/parsed.rb +0 -173
- data/lib/puppet/type/port.rb +0 -119
- data/lib/puppetx/puppet/hiera2_backend.rb +0 -31
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +0 -18
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +0 -13
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +0 -4
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +0 -5
- data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +0 -7
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +0 -4
- data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +0 -2
- data/spec/unit/file_system/file_spec.rb +0 -486
- data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +0 -74
- data/spec/unit/pops/binder/hiera2/config_spec.rb +0 -61
- data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +0 -33
@@ -0,0 +1,9 @@
|
|
1
|
+
module Puppet::Network::HTTP::Issues
|
2
|
+
NO_INDIRECTION_REMOTE_REQUESTS = :NO_INDIRECTION_REMOTE_REQUESTS
|
3
|
+
HANDLER_NOT_FOUND = :HANDLER_NOT_FOUND
|
4
|
+
RESOURCE_NOT_FOUND = :RESOURCE_NOT_FOUND
|
5
|
+
RUNTIME_ERROR = :RUNTIME_ERROR
|
6
|
+
MISSING_HEADER_FIELD = :MISSING_HEADER_FIELD
|
7
|
+
UNSUPPORTED_FORMAT = :UNSUPPORTED_FORMAT
|
8
|
+
UNSUPPORTED_METHOD = :UNSUPPORTED_METHOD
|
9
|
+
end
|
@@ -1,14 +1,11 @@
|
|
1
1
|
require 'openssl'
|
2
2
|
require 'cgi'
|
3
3
|
require 'puppet/network/http/handler'
|
4
|
-
require 'puppet/network/http/rack/httphandler'
|
5
4
|
require 'puppet/util/ssl'
|
6
5
|
|
7
|
-
class Puppet::Network::HTTP::RackREST
|
8
|
-
|
6
|
+
class Puppet::Network::HTTP::RackREST
|
9
7
|
include Puppet::Network::HTTP::Handler
|
10
8
|
|
11
|
-
HEADER_ACCEPT = 'HTTP_ACCEPT'.freeze
|
12
9
|
ContentType = 'Content-Type'.freeze
|
13
10
|
|
14
11
|
CHUNK_SIZE = 8192
|
@@ -31,7 +28,7 @@ class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
|
|
31
28
|
|
32
29
|
def initialize(args={})
|
33
30
|
super()
|
34
|
-
|
31
|
+
register([Puppet::Network::HTTP::API::V2.routes, Puppet::Network::HTTP::API::V1.routes])
|
35
32
|
end
|
36
33
|
|
37
34
|
def set_content_type(response, format)
|
@@ -51,20 +48,12 @@ class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
|
|
51
48
|
|
52
49
|
# Retrieve all headers from the http request, as a map.
|
53
50
|
def headers(request)
|
54
|
-
request.env.select {|k,v| k.start_with? 'HTTP_'}.inject({}) do |m, (k,v)|
|
51
|
+
headers = request.env.select {|k,v| k.start_with? 'HTTP_'}.inject({}) do |m, (k,v)|
|
55
52
|
m[k.sub(/^HTTP_/, '').gsub('_','-').downcase] = v
|
56
53
|
m
|
57
54
|
end
|
58
|
-
|
59
|
-
|
60
|
-
# Retrieve the accept header from the http request.
|
61
|
-
def accept_header(request)
|
62
|
-
request.env[HEADER_ACCEPT]
|
63
|
-
end
|
64
|
-
|
65
|
-
# Retrieve the accept header from the http request.
|
66
|
-
def content_type_header(request)
|
67
|
-
request.content_type
|
55
|
+
headers['content-type'] = request.content_type
|
56
|
+
headers
|
68
57
|
end
|
69
58
|
|
70
59
|
# Return which HTTP verb was used in this request.
|
@@ -102,8 +91,11 @@ class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
|
|
102
91
|
cert = request.env['SSL_CLIENT_CERT']
|
103
92
|
# NOTE: The SSL_CLIENT_CERT environment variable will be the empty string
|
104
93
|
# when Puppet agent nodes have not yet obtained a signed certificate.
|
105
|
-
|
106
|
-
|
94
|
+
if cert.nil? || cert.empty?
|
95
|
+
nil
|
96
|
+
else
|
97
|
+
Puppet::SSL::Certificate.from_instance(OpenSSL::X509::Certificate.new(cert))
|
98
|
+
end
|
107
99
|
end
|
108
100
|
|
109
101
|
# Passenger freaks out if we finish handling the request without reading any
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Puppet::Network::HTTP::Request = Struct.new(:headers, :params, :method, :path, :routing_path, :client_cert, :body) do
|
2
|
+
def self.from_hash(hash)
|
3
|
+
symbol_members = members.collect(&:intern)
|
4
|
+
unknown = hash.keys - symbol_members
|
5
|
+
if unknown.empty?
|
6
|
+
new(hash[:headers] || {},
|
7
|
+
hash[:params] || {},
|
8
|
+
hash[:method] || "GET",
|
9
|
+
hash[:path],
|
10
|
+
hash[:routing_path] || hash[:path],
|
11
|
+
hash[:client_cert],
|
12
|
+
hash[:body])
|
13
|
+
else
|
14
|
+
raise ArgumentError, "Unknown arguments: #{unknown.collect(&:inspect).join(', ')}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def route_into(prefix)
|
19
|
+
self.class.new(headers, params, method, path, routing_path.sub(prefix, ''), client_cert, body)
|
20
|
+
end
|
21
|
+
|
22
|
+
def format
|
23
|
+
if header = headers['content-type']
|
24
|
+
header.gsub!(/\s*;.*$/,'') # strip any charset
|
25
|
+
format = Puppet::Network::FormatHandler.mime(header)
|
26
|
+
if format.nil?
|
27
|
+
raise "Client sent a mime-type (#{header}) that doesn't correspond to a format we support"
|
28
|
+
else
|
29
|
+
report_if_deprecated(format)
|
30
|
+
return format.name.to_s if format.suitable?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
raise "No Content-Type header was received, it isn't possible to unserialize the request"
|
35
|
+
end
|
36
|
+
|
37
|
+
def response_formatter_for(supported_formats, accepted_formats = headers['accept'])
|
38
|
+
formatter = Puppet::Network::FormatHandler.most_suitable_format_for(
|
39
|
+
accepted_formats.split(/\s*,\s*/),
|
40
|
+
supported_formats)
|
41
|
+
|
42
|
+
if formatter.nil?
|
43
|
+
raise Puppet::Network::HTTP::Error::HTTPNotAcceptableError.new("No supported formats are acceptable (Accept: #{accepted_formats})", Puppet::Network::HTTP::Issues::UNSUPPORTED_FORMAT)
|
44
|
+
end
|
45
|
+
|
46
|
+
report_if_deprecated(formatter)
|
47
|
+
|
48
|
+
formatter
|
49
|
+
end
|
50
|
+
|
51
|
+
def report_if_deprecated(format)
|
52
|
+
if format.name == :yaml || format.name == :b64_zlib_yaml
|
53
|
+
Puppet.deprecation_warning("YAML in network requests is deprecated and will be removed in a future version. See http://links.puppetlabs.com/deprecate_yaml_on_network")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Puppet::Network::HTTP::Response
|
2
|
+
def initialize(handler, response)
|
3
|
+
@handler = handler
|
4
|
+
@response = response
|
5
|
+
end
|
6
|
+
|
7
|
+
def respond_with(code, type, body)
|
8
|
+
@handler.set_content_type(@response, type)
|
9
|
+
@handler.set_response(@response, body, code)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
class Puppet::Network::HTTP::Route
|
2
|
+
MethodNotAllowedHandler = lambda do |req, res|
|
3
|
+
raise Puppet::Network::HTTP::Error::HTTPMethodNotAllowedError.new("method #{req.method} not allowed for route #{req.path}", Puppet::Network::HTTP::Issues::UNSUPPORTED_METHOD)
|
4
|
+
end
|
5
|
+
|
6
|
+
attr_reader :path_matcher
|
7
|
+
|
8
|
+
def self.path(path_matcher)
|
9
|
+
new(path_matcher)
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(path_matcher)
|
13
|
+
@path_matcher = path_matcher
|
14
|
+
@method_handlers = {
|
15
|
+
:GET => [MethodNotAllowedHandler],
|
16
|
+
:HEAD => [MethodNotAllowedHandler],
|
17
|
+
:OPTIONS => [MethodNotAllowedHandler],
|
18
|
+
:POST => [MethodNotAllowedHandler],
|
19
|
+
:PUT => [MethodNotAllowedHandler]
|
20
|
+
}
|
21
|
+
@chained = []
|
22
|
+
end
|
23
|
+
|
24
|
+
def get(*handlers)
|
25
|
+
@method_handlers[:GET] = handlers
|
26
|
+
return self
|
27
|
+
end
|
28
|
+
|
29
|
+
def head(*handlers)
|
30
|
+
@method_handlers[:HEAD] = handlers
|
31
|
+
return self
|
32
|
+
end
|
33
|
+
|
34
|
+
def options(*handlers)
|
35
|
+
@method_handlers[:OPTIONS] = handlers
|
36
|
+
return self
|
37
|
+
end
|
38
|
+
|
39
|
+
def post(*handlers)
|
40
|
+
@method_handlers[:POST] = handlers
|
41
|
+
return self
|
42
|
+
end
|
43
|
+
|
44
|
+
def put(*handlers)
|
45
|
+
@method_handlers[:PUT] = handlers
|
46
|
+
return self
|
47
|
+
end
|
48
|
+
|
49
|
+
def any(*handlers)
|
50
|
+
@method_handlers.each do |method, registered_handlers|
|
51
|
+
@method_handlers[method] = handlers
|
52
|
+
end
|
53
|
+
return self
|
54
|
+
end
|
55
|
+
|
56
|
+
def chain(*routes)
|
57
|
+
@chained = routes
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
61
|
+
def matches?(request)
|
62
|
+
Puppet.debug("Evaluating match for #{self.inspect}")
|
63
|
+
if match(request.routing_path)
|
64
|
+
return true
|
65
|
+
else
|
66
|
+
Puppet.debug("Did not match path (#{request.routing_path.inspect})")
|
67
|
+
end
|
68
|
+
return false
|
69
|
+
end
|
70
|
+
|
71
|
+
def process(request, response)
|
72
|
+
@method_handlers[request.method.upcase.intern].each do |handler|
|
73
|
+
handler.call(request, response)
|
74
|
+
end
|
75
|
+
|
76
|
+
subrequest = request.route_into(match(request.routing_path).to_s)
|
77
|
+
if chained_route = @chained.find { |route| route.matches?(subrequest) }
|
78
|
+
chained_route.process(subrequest, response)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def inspect
|
83
|
+
"Route #{@path_matcher.inspect}"
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def match(path)
|
89
|
+
@path_matcher.match(path)
|
90
|
+
end
|
91
|
+
end
|
@@ -22,7 +22,7 @@ class Puppet::Network::HTTP::WEBrick
|
|
22
22
|
@server = WEBrick::HTTPServer.new(arguments)
|
23
23
|
@server.listeners.each { |l| l.start_immediately = false }
|
24
24
|
|
25
|
-
@server.mount('/', Puppet::Network::HTTP::WEBrickREST
|
25
|
+
@server.mount('/', Puppet::Network::HTTP::WEBrickREST)
|
26
26
|
|
27
27
|
raise "WEBrick server is already listening" if @listening
|
28
28
|
@listening = true
|
@@ -7,10 +7,10 @@ class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
|
|
7
7
|
|
8
8
|
include Puppet::Network::HTTP::Handler
|
9
9
|
|
10
|
-
def initialize(server
|
10
|
+
def initialize(server)
|
11
11
|
raise ArgumentError, "server is required" unless server
|
12
|
+
register([Puppet::Network::HTTP::API::V2.routes, Puppet::Network::HTTP::API::V1.routes])
|
12
13
|
super(server)
|
13
|
-
initialize_for_puppet(:server => server, :handler => handler)
|
14
14
|
end
|
15
15
|
|
16
16
|
# Retrieve the request parameters, including authentication information.
|
@@ -39,14 +39,6 @@ class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
|
|
39
39
|
result
|
40
40
|
end
|
41
41
|
|
42
|
-
def accept_header(request)
|
43
|
-
request["accept"]
|
44
|
-
end
|
45
|
-
|
46
|
-
def content_type_header(request)
|
47
|
-
request["content-type"]
|
48
|
-
end
|
49
|
-
|
50
42
|
def http_method(request)
|
51
43
|
request.request_method
|
52
44
|
end
|
@@ -60,7 +52,11 @@ class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
|
|
60
52
|
end
|
61
53
|
|
62
54
|
def client_cert(request)
|
63
|
-
request.client_cert
|
55
|
+
if cert = request.client_cert
|
56
|
+
Puppet::SSL::Certificate.from_instance(cert)
|
57
|
+
else
|
58
|
+
nil
|
59
|
+
end
|
64
60
|
end
|
65
61
|
|
66
62
|
# Set the specified format as the content type of the response.
|
@@ -74,7 +70,6 @@ class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
|
|
74
70
|
response.body = result
|
75
71
|
response["content-length"] = result.stat.size if result.is_a?(File)
|
76
72
|
end
|
77
|
-
response.reason_phrase = result if status < 200 or status >= 300
|
78
73
|
end
|
79
74
|
|
80
75
|
# Retrieve node/cert/ip information from the request object.
|
@@ -3,10 +3,10 @@ require 'puppet/network/http/connection'
|
|
3
3
|
module Puppet::Network; end
|
4
4
|
|
5
5
|
# This module contains the factory methods that should be used for getting a
|
6
|
-
# Puppet::Network::HTTP::Connection instance.
|
6
|
+
# {Puppet::Network::HTTP::Connection} instance.
|
7
7
|
#
|
8
|
-
# The name "HttpPool" is a misnomer, and a leftover of history, but we would
|
9
|
-
#
|
8
|
+
# @note The name "HttpPool" is a misnomer, and a leftover of history, but we would
|
9
|
+
# like to make this cache connections in the future.
|
10
10
|
#
|
11
11
|
# @api public
|
12
12
|
#
|
@@ -13,7 +13,7 @@ class Rights
|
|
13
13
|
!is_forbidden_and_why?(name, :node => args[0], :ip => args[1])
|
14
14
|
end
|
15
15
|
|
16
|
-
def is_request_forbidden_and_why?(
|
16
|
+
def is_request_forbidden_and_why?(method, path, params)
|
17
17
|
methods_to_check = if method == :head
|
18
18
|
# :head is ok if either :find or :save is ok.
|
19
19
|
[:find, :save]
|
@@ -21,7 +21,7 @@ class Rights
|
|
21
21
|
[method]
|
22
22
|
end
|
23
23
|
authorization_failure_exceptions = methods_to_check.map do |method|
|
24
|
-
is_forbidden_and_why?(
|
24
|
+
is_forbidden_and_why?(path, params.merge({:method => method}))
|
25
25
|
end
|
26
26
|
if authorization_failure_exceptions.include? nil
|
27
27
|
# One of the methods we checked is ok, therefore this request is ok.
|
@@ -187,8 +187,8 @@ class Rights
|
|
187
187
|
@methods << m
|
188
188
|
end
|
189
189
|
|
190
|
-
def restrict_environment(
|
191
|
-
env = Puppet
|
190
|
+
def restrict_environment(environment)
|
191
|
+
env = Puppet.lookup(:environments).get(environment)
|
192
192
|
raise ArgumentError, "'#{env}' is already in the '#{name}' ACL" if @environment.include?(env)
|
193
193
|
|
194
194
|
@environment << env
|
data/lib/puppet/node.rb
CHANGED
@@ -9,9 +9,6 @@ class Puppet::Node
|
|
9
9
|
# the node sources.
|
10
10
|
extend Puppet::Indirector
|
11
11
|
|
12
|
-
# Adds the environment getter and setter, with some instance/string conversion
|
13
|
-
include Puppet::Node::Environment::Helper
|
14
|
-
|
15
12
|
# Use the node source as the indirection terminus.
|
16
13
|
indirects :node, :terminus_setting => :node_terminus, :doc => "Where to find node information.
|
17
14
|
A node is composed of its name, its facts, and its environment."
|
@@ -21,16 +18,21 @@ class Puppet::Node
|
|
21
18
|
|
22
19
|
::PSON.register_document_type('Node',self)
|
23
20
|
|
24
|
-
def self.
|
25
|
-
raise ArgumentError, "No name provided in serialized data" unless name =
|
21
|
+
def self.from_data_hash(data)
|
22
|
+
raise ArgumentError, "No name provided in serialized data" unless name = data['name']
|
26
23
|
|
27
24
|
node = new(name)
|
28
|
-
node.classes =
|
29
|
-
node.parameters =
|
30
|
-
node.environment =
|
25
|
+
node.classes = data['classes']
|
26
|
+
node.parameters = data['parameters']
|
27
|
+
node.environment = data['environment']
|
31
28
|
node
|
32
29
|
end
|
33
30
|
|
31
|
+
def self.from_pson(pson)
|
32
|
+
Puppet.deprecation_warning("from_pson is being removed in favour of from_data_hash.")
|
33
|
+
self.from_data_hash(pson)
|
34
|
+
end
|
35
|
+
|
34
36
|
def to_data_hash
|
35
37
|
result = {
|
36
38
|
'name' => name,
|
@@ -53,15 +55,22 @@ class Puppet::Node
|
|
53
55
|
end
|
54
56
|
|
55
57
|
def environment
|
56
|
-
|
57
|
-
|
58
|
-
|
58
|
+
if @environment
|
59
|
+
@environment
|
60
|
+
elsif env = parameters["environment"]
|
59
61
|
self.environment = env
|
60
|
-
|
62
|
+
@environment
|
63
|
+
else
|
64
|
+
Puppet.lookup(:environments).get(Puppet[:environment])
|
61
65
|
end
|
66
|
+
end
|
62
67
|
|
63
|
-
|
64
|
-
|
68
|
+
def environment=(env)
|
69
|
+
if env.is_a?(String) or env.is_a?(Symbol)
|
70
|
+
@environment = Puppet.lookup(:environments).get(env)
|
71
|
+
else
|
72
|
+
@environment = env
|
73
|
+
end
|
65
74
|
end
|
66
75
|
|
67
76
|
def initialize(name, options = {})
|
@@ -10,59 +10,25 @@ end
|
|
10
10
|
# Puppet::Node::Environment acts as a container for all configuration
|
11
11
|
# that is expected to vary between environments.
|
12
12
|
#
|
13
|
-
# ## Global variables
|
14
|
-
#
|
15
|
-
# The Puppet::Node::Environment uses a number of global variables.
|
16
|
-
#
|
17
|
-
# ### `$environment`
|
18
|
-
#
|
19
|
-
# The 'environment' global variable represents the current environment that's
|
20
|
-
# being used in the compiler.
|
21
|
-
#
|
22
13
|
# ## The root environment
|
23
14
|
#
|
24
15
|
# In addition to normal environments that are defined by the user,there is a
|
25
16
|
# special 'root' environment. It is defined as an instance variable on the
|
26
17
|
# Puppet::Node::Environment metaclass. The environment name is `*root*` and can
|
27
|
-
# be accessed by
|
18
|
+
# be accessed by looking up the `:root_environment` using {Puppet.lookup}.
|
28
19
|
#
|
29
20
|
# The primary purpose of the root environment is to contain parser functions
|
30
21
|
# that are not bound to a specific environment. The main case for this is for
|
31
22
|
# logging functions. Logging functions are attached to the 'root' environment
|
32
23
|
# when {Puppet::Parser::Functions.reset} is called.
|
33
|
-
#
|
34
|
-
# The root environment is also used as a fallback environment when the
|
35
|
-
# current environment has been requested by {Puppet::Node::Environment.current}
|
36
|
-
# requested and no environment was set by {Puppet::Node::Environment.current=}
|
37
24
|
class Puppet::Node::Environment
|
38
25
|
|
39
|
-
# This defines a mixin for classes that have an environment. It implements
|
40
|
-
# `environment` and `environment=` that respects the semantics of the
|
41
|
-
# Puppet::Node::Environment class
|
42
|
-
#
|
43
|
-
# @api public
|
44
|
-
module Helper
|
45
|
-
|
46
|
-
def environment
|
47
|
-
Puppet::Node::Environment.new(@environment)
|
48
|
-
end
|
49
|
-
|
50
|
-
def environment=(env)
|
51
|
-
if env.is_a?(String) or env.is_a?(Symbol)
|
52
|
-
@environment = env
|
53
|
-
else
|
54
|
-
@environment = env.name
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
26
|
include Puppet::Util::Cacher
|
60
27
|
|
61
|
-
#
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
@seen = {}
|
28
|
+
# @api private
|
29
|
+
def self.seen
|
30
|
+
@seen ||= {}
|
31
|
+
end
|
66
32
|
|
67
33
|
# Create a new environment with the given name, or return an existing one
|
68
34
|
#
|
@@ -94,58 +60,100 @@ class Puppet::Node::Environment
|
|
94
60
|
|
95
61
|
symbol = name.to_sym
|
96
62
|
|
97
|
-
return
|
63
|
+
return seen[symbol] if seen[symbol]
|
98
64
|
|
99
|
-
obj = self.
|
100
|
-
|
101
|
-
|
65
|
+
obj = self.create(symbol,
|
66
|
+
split_path(Puppet.settings.value(:modulepath, symbol)),
|
67
|
+
Puppet.settings.value(:manifest, symbol))
|
68
|
+
seen[symbol] = obj
|
102
69
|
end
|
103
70
|
|
104
|
-
#
|
105
|
-
#
|
106
|
-
# @note This should only used when a catalog is being compiled.
|
71
|
+
# Create a new environment with the given name
|
107
72
|
#
|
108
|
-
# @
|
73
|
+
# @param name [Symbol] the name of the
|
74
|
+
# @param modulepath [Array<String>] the list of paths from which to load modules
|
75
|
+
# @param manifest [String] the path to the manifest for the environment
|
76
|
+
# @return [Puppet::Node::Environment]
|
109
77
|
#
|
110
|
-
# @
|
111
|
-
|
112
|
-
|
113
|
-
|
78
|
+
# @api public
|
79
|
+
def self.create(name, modulepath, manifest)
|
80
|
+
obj = self.allocate
|
81
|
+
obj.send(:initialize,
|
82
|
+
name,
|
83
|
+
expand_dirs(extralibs() + modulepath),
|
84
|
+
File.expand_path(manifest))
|
85
|
+
obj
|
114
86
|
end
|
115
87
|
|
116
|
-
#
|
117
|
-
#
|
118
|
-
# @note This should only set when a catalog is being compiled. Under normal
|
119
|
-
# This value is initially set in {Puppet::Parser::Compiler#environment}
|
88
|
+
# Instantiate a new environment
|
120
89
|
#
|
121
|
-
# @note
|
122
|
-
#
|
123
|
-
#
|
90
|
+
# @note {Puppet::Node::Environment.new} is overridden to return memoized
|
91
|
+
# objects, so this will not be invoked with the normal Ruby initialization
|
92
|
+
# semantics.
|
124
93
|
#
|
125
|
-
# @
|
94
|
+
# @param name [Symbol] The environment name
|
95
|
+
def initialize(name, modulepath, manifest)
|
96
|
+
@name = name
|
97
|
+
@modulepath = modulepath
|
98
|
+
@manifest = manifest
|
99
|
+
end
|
100
|
+
|
101
|
+
# Creates a new Puppet::Node::Environment instance, overriding any of the passed
|
102
|
+
# parameters.
|
126
103
|
#
|
127
|
-
# @param
|
128
|
-
|
129
|
-
|
104
|
+
# @param env_params [Hash<{Symbol => String,Array<String>}>] new environment
|
105
|
+
# parameters (:modulepath, :manifest)
|
106
|
+
# @return [Puppet::Node::Environment]
|
107
|
+
def override_with(env_params)
|
108
|
+
return self.class.create(name,
|
109
|
+
env_params[:modulepath] || modulepath,
|
110
|
+
env_params[:manifest] || manifest)
|
130
111
|
end
|
131
112
|
|
113
|
+
# Creates a new Puppet::Node::Environment instance, overriding manfiest
|
114
|
+
# and modulepath from the passed settings if they were originally set from
|
115
|
+
# the commandline, or returns self if there is nothing to override.
|
116
|
+
#
|
117
|
+
# @param settings [Puppet::Settings] an initialized puppet settings instance
|
118
|
+
# @return [Puppet::Node::Environment] new overridden environment or self if
|
119
|
+
# there are no commandline changes from settings.
|
120
|
+
def override_from_commandline(settings)
|
121
|
+
overrides = {}
|
122
|
+
overrides[:modulepath] = self.class.split_path(settings[:modulepath]) if settings.set_by_cli?(:modulepath)
|
123
|
+
if settings.set_by_cli?(:manifest) ||
|
124
|
+
(settings.set_by_cli?(:manifestdir) && settings[:manifest].start_with?(settings[:manifestdir]))
|
125
|
+
overrides[:manifest] = settings[:manifest]
|
126
|
+
end
|
127
|
+
overrides.empty? ?
|
128
|
+
self :
|
129
|
+
self.override_with(overrides)
|
130
|
+
end
|
132
131
|
|
133
|
-
#
|
132
|
+
# Retrieve the environment for the current process.
|
134
133
|
#
|
135
|
-
# This
|
136
|
-
# specific environment.
|
134
|
+
# @note This should only used when a catalog is being compiled.
|
137
135
|
#
|
138
136
|
# @api private
|
139
|
-
|
140
|
-
|
137
|
+
#
|
138
|
+
# @return [Puppet::Node::Environment] the currently set environment if one
|
139
|
+
# has been explicitly set, else it will return the '*root*' environment
|
140
|
+
def self.current
|
141
|
+
Puppet.deprecation_warning("Puppet::Node::Environment.current has been replaced by Puppet.lookup(:current_environment), see http://links.puppetlabs.com/current-env-deprecation")
|
142
|
+
Puppet.lookup(:current_environment)
|
143
|
+
end
|
144
|
+
|
145
|
+
# @param [String] name Environment name to check for valid syntax.
|
146
|
+
# @return [Boolean] true if name is valid
|
147
|
+
# @api public
|
148
|
+
def self.valid_name?(name)
|
149
|
+
!!name.match(/\A\w+\Z/)
|
141
150
|
end
|
142
151
|
|
143
152
|
# Clear all memoized environments and the 'current' environment
|
144
153
|
#
|
145
154
|
# @api private
|
146
155
|
def self.clear
|
147
|
-
|
148
|
-
$environment = nil
|
156
|
+
seen.clear
|
149
157
|
end
|
150
158
|
|
151
159
|
# @!attribute [r] name
|
@@ -154,6 +162,25 @@ class Puppet::Node::Environment
|
|
154
162
|
# environment identifier
|
155
163
|
attr_reader :name
|
156
164
|
|
165
|
+
# @api public
|
166
|
+
# @return [Array<String>] All directories present on disk in the modulepath
|
167
|
+
def modulepath
|
168
|
+
@modulepath.find_all do |p|
|
169
|
+
Puppet::FileSystem.directory?(p)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
# @api public
|
174
|
+
# @return [Array<String>] All directories in the modulepath (even if they are not present on disk)
|
175
|
+
def full_modulepath
|
176
|
+
@modulepath
|
177
|
+
end
|
178
|
+
|
179
|
+
# @!attribute [r] manifest
|
180
|
+
# @api public
|
181
|
+
# @return [String] path to the manifest file or directory.
|
182
|
+
attr_reader :manifest
|
183
|
+
|
157
184
|
# Return an environment-specific Puppet setting.
|
158
185
|
#
|
159
186
|
# @api public
|
@@ -164,26 +191,6 @@ class Puppet::Node::Environment
|
|
164
191
|
Puppet.settings.value(param, self.name)
|
165
192
|
end
|
166
193
|
|
167
|
-
# Instantiate a new environment
|
168
|
-
#
|
169
|
-
# @note {Puppet::Node::Environment.new} is overridden to return memoized
|
170
|
-
# objects, so this will not be invoked with the normal Ruby initialization
|
171
|
-
# semantics.
|
172
|
-
#
|
173
|
-
# @param name [Symbol] The environment name
|
174
|
-
def initialize(name)
|
175
|
-
@name = name
|
176
|
-
end
|
177
|
-
|
178
|
-
# The current global TypeCollection
|
179
|
-
#
|
180
|
-
# @note The environment is loosely coupled with the {Puppet::Resource::TypeCollection}
|
181
|
-
# class. While there is a 1:1 relationship between an environment and a
|
182
|
-
# TypeCollection instance, there is only one TypeCollection instance
|
183
|
-
# available at any given time. It is stored in `$known_resource_types`.
|
184
|
-
# `$known_resource_types` is accessed as an instance method, but is global
|
185
|
-
# to all environment variables.
|
186
|
-
#
|
187
194
|
# @api public
|
188
195
|
# @return [Puppet::Resource::TypeCollection] The current global TypeCollection
|
189
196
|
def known_resource_types
|
@@ -230,21 +237,6 @@ class Puppet::Node::Environment
|
|
230
237
|
nil
|
231
238
|
end
|
232
239
|
|
233
|
-
# @!attribute [r] modulepath
|
234
|
-
# Return all existent directories in the modulepath for this environment
|
235
|
-
# @note This value is cached so that the filesystem doesn't have to be
|
236
|
-
# re-enumerated every time this method is invoked, since that
|
237
|
-
# enumeration could be a costly operation and this method is called
|
238
|
-
# frequently. The cache expiry is determined by `Puppet[:filetimeout]`.
|
239
|
-
# @see Puppet::Util::Cacher.cached_attr
|
240
|
-
# @api public
|
241
|
-
# @return [Array<String>] All directories present in the modulepath
|
242
|
-
cached_attr(:modulepath, Puppet[:filetimeout]) do
|
243
|
-
dirs = self[:modulepath].split(File::PATH_SEPARATOR)
|
244
|
-
dirs = ENV["PUPPETLIB"].split(File::PATH_SEPARATOR) + dirs if ENV["PUPPETLIB"]
|
245
|
-
validate_dirs(dirs)
|
246
|
-
end
|
247
|
-
|
248
240
|
# @!attribute [r] modules
|
249
241
|
# Return all modules for this environment in the order they appear in the
|
250
242
|
# modulepath.
|
@@ -367,9 +359,16 @@ class Puppet::Node::Environment
|
|
367
359
|
deps
|
368
360
|
end
|
369
361
|
|
362
|
+
# Set a periodic watcher on the file, so we can tell if it has changed.
|
363
|
+
# @param filename [File,String] File instance or filename
|
364
|
+
# @api private
|
365
|
+
def watch_file(file)
|
366
|
+
known_resource_types.watch_file(file.to_s)
|
367
|
+
end
|
370
368
|
|
371
369
|
def check_for_reparse
|
372
|
-
if @known_resource_types && @known_resource_types.require_reparse?
|
370
|
+
if (Puppet[:code] != @parsed_code) || (@known_resource_types && @known_resource_types.require_reparse?)
|
371
|
+
@parsed_code = nil
|
373
372
|
@known_resource_types = nil
|
374
373
|
end
|
375
374
|
end
|
@@ -402,22 +401,37 @@ class Puppet::Node::Environment
|
|
402
401
|
self.to_s.to_zaml(z)
|
403
402
|
end
|
404
403
|
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
404
|
+
def self.split_path(path_string)
|
405
|
+
path_string.split(File::PATH_SEPARATOR)
|
406
|
+
end
|
407
|
+
|
408
|
+
def ==(other)
|
409
|
+
return true if other.kind_of?(Puppet::Node::Environment) &&
|
410
|
+
self.name == other.name &&
|
411
|
+
self.full_modulepath == other.full_modulepath &&
|
412
|
+
self.manifest == other.manifest
|
413
|
+
end
|
414
|
+
|
415
|
+
def hash
|
416
|
+
[self.class, name, full_modulepath, manifest].hash
|
417
|
+
end
|
418
|
+
|
419
|
+
private
|
420
|
+
|
421
|
+
def self.extralibs()
|
422
|
+
if ENV["PUPPETLIB"]
|
423
|
+
split_path(ENV["PUPPETLIB"])
|
424
|
+
else
|
425
|
+
[]
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
def self.expand_dirs(dirs)
|
412
430
|
dirs.collect do |dir|
|
413
431
|
File.expand_path(dir)
|
414
|
-
end.find_all do |p|
|
415
|
-
FileTest.directory?(p)
|
416
432
|
end
|
417
433
|
end
|
418
434
|
|
419
|
-
private
|
420
|
-
|
421
435
|
# Reparse the manifests for the given environment
|
422
436
|
#
|
423
437
|
# There are two sources that can be used for the initial parse:
|
@@ -435,16 +449,28 @@ class Puppet::Node::Environment
|
|
435
449
|
# @return [Puppet::Parser::AST::Hostclass] The AST hostclass object
|
436
450
|
# representing the 'main' hostclass
|
437
451
|
def perform_initial_import
|
438
|
-
return empty_parse_result if Puppet
|
439
|
-
# parser = Puppet::Parser::Parser.new(self)
|
452
|
+
return empty_parse_result if Puppet[:ignoreimport]
|
440
453
|
parser = Puppet::Parser::ParserFactory.parser(self)
|
441
|
-
|
442
|
-
|
454
|
+
@parsed_code = Puppet[:code]
|
455
|
+
if @parsed_code != ""
|
456
|
+
parser.string = @parsed_code
|
457
|
+
parser.parse
|
443
458
|
else
|
444
|
-
file =
|
445
|
-
|
459
|
+
file = self.manifest
|
460
|
+
# if the manifest file is a reference to a directory, parse and combine all .pp files in that
|
461
|
+
# directory
|
462
|
+
if File.directory?(file)
|
463
|
+
parse_results = Dir.entries(file).find_all { |f| f =~ /\.pp$/ }.sort.map do |pp_file|
|
464
|
+
parser.file = File.join(file, pp_file)
|
465
|
+
parser.parse
|
466
|
+
end
|
467
|
+
# Use a parser type specific merger to concatenate the results
|
468
|
+
Puppet::Parser::AST::Hostclass.new('', :code => Puppet::Parser::ParserFactory.code_merger.concatenate(parse_results))
|
469
|
+
else
|
470
|
+
parser.file = file
|
471
|
+
parser.parse
|
472
|
+
end
|
446
473
|
end
|
447
|
-
parser.parse
|
448
474
|
rescue => detail
|
449
475
|
@known_resource_types.parse_failed = true
|
450
476
|
|
@@ -463,6 +489,4 @@ class Puppet::Node::Environment
|
|
463
489
|
def empty_parse_result
|
464
490
|
return Puppet::Parser::AST::Hostclass.new('')
|
465
491
|
end
|
466
|
-
|
467
|
-
@root = new(:'*root*')
|
468
492
|
end
|