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
@@ -7,7 +7,7 @@ module Puppet::Network
|
|
7
7
|
# Create our config object if necessary. If there's no configuration file
|
8
8
|
# we install our defaults
|
9
9
|
def self.authconfig
|
10
|
-
@auth_config_file ||= Puppet::Util::
|
10
|
+
@auth_config_file ||= Puppet::Util::WatchedFile.new(Puppet[:rest_authconfig])
|
11
11
|
if (not @auth_config) or @auth_config_file.changed?
|
12
12
|
begin
|
13
13
|
@auth_config = Puppet::Network::AuthConfigParser.new_from_file(Puppet[:rest_authconfig]).parse
|
@@ -232,7 +232,7 @@ module Puppet
|
|
232
232
|
name.downcase.split(".").reverse
|
233
233
|
end
|
234
234
|
|
235
|
-
# Parse our input pattern and figure out what kind of
|
235
|
+
# Parse our input pattern and figure out what kind of allowable
|
236
236
|
# statement it is. The output of this is used for later matching.
|
237
237
|
Octet = '(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])'
|
238
238
|
IPv4 = "#{Octet}\.#{Octet}\.#{Octet}\.#{Octet}"
|
@@ -246,7 +246,7 @@ module Puppet
|
|
246
246
|
def parse_ip(value)
|
247
247
|
@name = :ip
|
248
248
|
@exact, @length, @pattern = *case value
|
249
|
-
when /^(?:#{IP})\/(\d+)$/
|
249
|
+
when /^(?:#{IP})\/(\d+)$/ # 12.34.56.78/24, a001:b002::efff/120, c444:1000:2000::9:192.168.0.1/112
|
250
250
|
[:inexact, $1.to_i, IPAddr.new(value)]
|
251
251
|
when /^(#{IP})$/ # 10.20.30.40,
|
252
252
|
[:exact, nil, IPAddr.new(value)]
|
@@ -5,33 +5,10 @@ require 'puppet/network/format'
|
|
5
5
|
module Puppet::Network::FormatHandler
|
6
6
|
class FormatError < Puppet::Error; end
|
7
7
|
|
8
|
-
class FormatProtector
|
9
|
-
attr_reader :format
|
10
|
-
|
11
|
-
def protect(method, args)
|
12
|
-
Puppet::Network::FormatHandler.format(format).send(method, *args)
|
13
|
-
rescue => details
|
14
|
-
direction = method.to_s.include?("intern") ? "from" : "to"
|
15
|
-
error = FormatError.new("Could not #{method} #{direction} #{format}: #{details}")
|
16
|
-
error.set_backtrace(details.backtrace)
|
17
|
-
raise error
|
18
|
-
end
|
19
|
-
|
20
|
-
def initialize(format)
|
21
|
-
@format = format
|
22
|
-
end
|
23
|
-
|
24
|
-
[:intern, :intern_multiple, :render, :render_multiple, :mime].each do |method|
|
25
|
-
define_method(method) do |*args|
|
26
|
-
protect(method, args)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
8
|
@formats = {}
|
9
|
+
|
32
10
|
def self.create(*args, &block)
|
33
|
-
instance = Puppet::Network::Format.new(*args)
|
34
|
-
instance.instance_eval(&block) if block_given?
|
11
|
+
instance = Puppet::Network::Format.new(*args, &block)
|
35
12
|
|
36
13
|
@formats[instance.name] = instance
|
37
14
|
instance
|
@@ -43,18 +20,15 @@ module Puppet::Network::FormatHandler
|
|
43
20
|
}
|
44
21
|
end
|
45
22
|
|
46
|
-
def self.extended(klass)
|
47
|
-
klass.extend(ClassMethods)
|
48
|
-
|
49
|
-
# LAK:NOTE This won't work in 1.9 ('send' won't be able to send
|
50
|
-
# private methods, but I don't know how else to do it.
|
51
|
-
klass.send(:include, InstanceMethods)
|
52
|
-
end
|
53
|
-
|
54
23
|
def self.format(name)
|
55
24
|
@formats[name.to_s.downcase.intern]
|
56
25
|
end
|
57
26
|
|
27
|
+
def self.format_for(name)
|
28
|
+
name = format_to_canonical_name(name)
|
29
|
+
format(name)
|
30
|
+
end
|
31
|
+
|
58
32
|
def self.format_by_extension(ext)
|
59
33
|
@formats.each do |name, format|
|
60
34
|
return format if format.extension == ext
|
@@ -73,15 +47,6 @@ module Puppet::Network::FormatHandler
|
|
73
47
|
@formats.values.find { |format| format.mime == mimetype }
|
74
48
|
end
|
75
49
|
|
76
|
-
# Use a delegator to make sure any exceptions generated by our formats are
|
77
|
-
# handled intelligently.
|
78
|
-
def self.protected_format(name)
|
79
|
-
name = format_to_canonical_name(name)
|
80
|
-
@format_protectors ||= {}
|
81
|
-
@format_protectors[name] ||= FormatProtector.new(name)
|
82
|
-
@format_protectors[name]
|
83
|
-
end
|
84
|
-
|
85
50
|
# Return a format name given:
|
86
51
|
# * a format name
|
87
52
|
# * a mime-type
|
@@ -99,81 +64,27 @@ module Puppet::Network::FormatHandler
|
|
99
64
|
out.name
|
100
65
|
end
|
101
66
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
def default_format
|
120
|
-
supported_formats[0]
|
121
|
-
end
|
122
|
-
|
123
|
-
def support_format?(name)
|
124
|
-
Puppet::Network::FormatHandler.format(name).supported?(self)
|
125
|
-
end
|
126
|
-
|
127
|
-
def supported_formats
|
128
|
-
result = format_handler.formats.collect { |f| format_handler.format(f) }.find_all { |f| f.supported?(self) }.collect { |f| f.name }.sort do |a, b|
|
129
|
-
# It's an inverse sort -- higher weight formats go first.
|
130
|
-
format_handler.format(b).weight <=> format_handler.format(a).weight
|
131
|
-
end
|
132
|
-
|
133
|
-
result = put_preferred_format_first(result)
|
134
|
-
|
135
|
-
Puppet.debug "#{friendly_name} supports formats: #{result.map{ |f| f.to_s }.sort.join(' ')}; using #{result.first}"
|
136
|
-
|
137
|
-
result
|
138
|
-
end
|
139
|
-
|
140
|
-
private
|
141
|
-
|
142
|
-
def friendly_name
|
143
|
-
if self.respond_to? :indirection
|
144
|
-
indirection.name
|
145
|
-
else
|
146
|
-
self
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
def put_preferred_format_first(list)
|
151
|
-
preferred_format = Puppet.settings[:preferred_serialization_format].to_sym
|
152
|
-
if list.include?(preferred_format)
|
153
|
-
list.delete(preferred_format)
|
154
|
-
list.unshift(preferred_format)
|
155
|
-
else
|
156
|
-
Puppet.debug "Value of 'preferred_serialization_format' (#{preferred_format}) is invalid for #{friendly_name}, using default (#{list.first})"
|
67
|
+
# Determine which of the accepted formats should be used given what is supported.
|
68
|
+
#
|
69
|
+
# @param accepted [Array<String, Symbol>] the accepted formats in a form a
|
70
|
+
# that can be understood by #format_to_canonical_name and is in order of
|
71
|
+
# preference (most preferred is first)
|
72
|
+
# @param supported [Array<Symbol>] the names of the supported formats (order
|
73
|
+
# does not matter)
|
74
|
+
# @return [Puppet::Network::Format, nil] the most suitable format
|
75
|
+
# @api private
|
76
|
+
def self.most_suitable_format_for(accepted, supported)
|
77
|
+
format_name = accepted.find do |accepted|
|
78
|
+
begin
|
79
|
+
format_name = format_to_canonical_name(accepted)
|
80
|
+
supported.include?(format_name)
|
81
|
+
rescue ArgumentError
|
82
|
+
false
|
157
83
|
end
|
158
|
-
list
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
module InstanceMethods
|
163
|
-
def render(format = nil)
|
164
|
-
format ||= self.class.default_format
|
165
|
-
|
166
|
-
Puppet::Network::FormatHandler.protected_format(format).render(self)
|
167
|
-
end
|
168
|
-
|
169
|
-
def mime(format = nil)
|
170
|
-
format ||= self.class.default_format
|
171
|
-
|
172
|
-
Puppet::Network::FormatHandler.protected_format(format).mime
|
173
84
|
end
|
174
85
|
|
175
|
-
|
176
|
-
|
86
|
+
if format_name
|
87
|
+
format_for(format_name)
|
177
88
|
end
|
178
89
|
end
|
179
90
|
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'puppet/network/format_handler'
|
2
|
+
|
3
|
+
# Provides network serialization support when included
|
4
|
+
module Puppet::Network::FormatSupport
|
5
|
+
def self.included(klass)
|
6
|
+
klass.extend(ClassMethods)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def convert_from(format, data)
|
11
|
+
get_format(format).intern(self, data)
|
12
|
+
rescue => err
|
13
|
+
raise Puppet::Network::FormatHandler::FormatError, "Could not intern from #{format}: #{err}", err.backtrace
|
14
|
+
end
|
15
|
+
|
16
|
+
def convert_from_multiple(format, data)
|
17
|
+
get_format(format).intern_multiple(self, data)
|
18
|
+
rescue => err
|
19
|
+
raise Puppet::Network::FormatHandler::FormatError, "Could not intern_multiple from #{format}: #{err}", err.backtrace
|
20
|
+
end
|
21
|
+
|
22
|
+
def render_multiple(format, instances)
|
23
|
+
get_format(format).render_multiple(instances)
|
24
|
+
rescue => err
|
25
|
+
raise Puppet::Network::FormatHandler::FormatError, "Could not render_multiple to #{format}: #{err}", err.backtrace
|
26
|
+
end
|
27
|
+
|
28
|
+
def default_format
|
29
|
+
supported_formats[0]
|
30
|
+
end
|
31
|
+
|
32
|
+
def support_format?(name)
|
33
|
+
Puppet::Network::FormatHandler.format(name).supported?(self)
|
34
|
+
end
|
35
|
+
|
36
|
+
def supported_formats
|
37
|
+
result = format_handler.formats.collect do |f|
|
38
|
+
format_handler.format(f)
|
39
|
+
end.find_all do |f|
|
40
|
+
f.supported?(self)
|
41
|
+
end.sort do |a, b|
|
42
|
+
# It's an inverse sort -- higher weight formats go first.
|
43
|
+
b.weight <=> a.weight
|
44
|
+
end.collect do |f|
|
45
|
+
f.name
|
46
|
+
end
|
47
|
+
|
48
|
+
result = put_preferred_format_first(result)
|
49
|
+
|
50
|
+
Puppet.debug "#{friendly_name} supports formats: #{result.join(' ')}"
|
51
|
+
|
52
|
+
result
|
53
|
+
end
|
54
|
+
|
55
|
+
# @api private
|
56
|
+
def get_format(format_name)
|
57
|
+
format_handler.format_for(format_name)
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def format_handler
|
63
|
+
Puppet::Network::FormatHandler
|
64
|
+
end
|
65
|
+
|
66
|
+
def friendly_name
|
67
|
+
if self.respond_to? :indirection
|
68
|
+
indirection.name
|
69
|
+
else
|
70
|
+
self
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def put_preferred_format_first(list)
|
75
|
+
preferred_format = Puppet.settings[:preferred_serialization_format].to_sym
|
76
|
+
if list.include?(preferred_format)
|
77
|
+
list.delete(preferred_format)
|
78
|
+
list.unshift(preferred_format)
|
79
|
+
else
|
80
|
+
Puppet.debug "Value of 'preferred_serialization_format' (#{preferred_format}) is invalid for #{friendly_name}, using default (#{list.first})"
|
81
|
+
end
|
82
|
+
list
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def render(format = nil)
|
87
|
+
format ||= self.class.default_format
|
88
|
+
|
89
|
+
self.class.get_format(format).render(self)
|
90
|
+
rescue => err
|
91
|
+
raise Puppet::Network::FormatHandler::FormatError, "Could not render to #{format}: #{err}", err.backtrace
|
92
|
+
end
|
93
|
+
|
94
|
+
def mime(format = nil)
|
95
|
+
format ||= self.class.default_format
|
96
|
+
|
97
|
+
self.class.get_format(format).mime
|
98
|
+
rescue => err
|
99
|
+
raise Puppet::Network::FormatHandler::FormatError, "Could not mime to #{format}: #{err}", err.backtrace
|
100
|
+
end
|
101
|
+
|
102
|
+
def support_format?(name)
|
103
|
+
self.class.support_format?(name)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
@@ -1,14 +1,12 @@
|
|
1
1
|
require 'puppet/network/format_handler'
|
2
2
|
|
3
3
|
Puppet::Network::FormatHandler.create_serialized_formats(:yaml) do
|
4
|
-
# Yaml doesn't need the class name; it's serialized.
|
5
4
|
def intern(klass, text)
|
6
5
|
data = YAML.load(text, :safe => true, :deserialize_symbols => true)
|
7
6
|
return data if data.is_a?(klass)
|
8
7
|
klass.from_pson(data)
|
9
8
|
end
|
10
9
|
|
11
|
-
# Yaml doesn't need the class name; it's serialized.
|
12
10
|
def intern_multiple(klass, text)
|
13
11
|
YAML.load(text, :safe => true, :deserialize_symbols => true).collect do |data|
|
14
12
|
if data.is_a?(klass)
|
@@ -28,7 +26,6 @@ Puppet::Network::FormatHandler.create_serialized_formats(:yaml) do
|
|
28
26
|
instances.to_yaml
|
29
27
|
end
|
30
28
|
|
31
|
-
# Unlike core's yaml, ZAML should support 1.8.1 just fine
|
32
29
|
def supported?(klass)
|
33
30
|
true
|
34
31
|
end
|
@@ -159,7 +156,6 @@ Puppet::Network::FormatHandler.create(:console,
|
|
159
156
|
if datum.is_a? Hash and datum.keys.all? { |x| x.is_a? String or x.is_a? Numeric }
|
160
157
|
output = ''
|
161
158
|
column_a = datum.empty? ? 2 : datum.map{ |k,v| k.to_s.length }.max + 2
|
162
|
-
column_b = 79 - column_a
|
163
159
|
datum.sort_by { |k,v| k.to_s } .each do |key, value|
|
164
160
|
output << key.to_s.ljust(column_a)
|
165
161
|
output << json.render(value).
|
@@ -169,6 +165,16 @@ Puppet::Network::FormatHandler.create(:console,
|
|
169
165
|
return output
|
170
166
|
end
|
171
167
|
|
168
|
+
# Print one item per line for arrays
|
169
|
+
if datum.is_a? Array
|
170
|
+
output = ''
|
171
|
+
datum.each do |item|
|
172
|
+
output << item.to_s
|
173
|
+
output << "\n"
|
174
|
+
end
|
175
|
+
return output
|
176
|
+
end
|
177
|
+
|
172
178
|
# ...or pretty-print the inspect outcome.
|
173
179
|
return json.render(datum)
|
174
180
|
end
|
@@ -69,7 +69,7 @@ module Puppet::Network::HTTP::Compression
|
|
69
69
|
out = @uncompressor.inflate(chunk)
|
70
70
|
@first = false
|
71
71
|
return out
|
72
|
-
rescue Zlib::DataError
|
72
|
+
rescue Zlib::DataError
|
73
73
|
# it can happen that we receive a raw deflate stream
|
74
74
|
# which might make our inflate throw a data error.
|
75
75
|
# in this case, we try with a verbatim (no header)
|
@@ -3,9 +3,13 @@ require 'puppet/ssl/host'
|
|
3
3
|
require 'puppet/ssl/configuration'
|
4
4
|
require 'puppet/ssl/validator'
|
5
5
|
require 'puppet/network/authentication'
|
6
|
+
require 'uri'
|
6
7
|
|
7
8
|
module Puppet::Network::HTTP
|
8
9
|
|
10
|
+
# This will be raised if too many redirects happen for a given HTTP request
|
11
|
+
class RedirectionLimitExceededException < Puppet::Error ; end
|
12
|
+
|
9
13
|
# This class provides simple methods for issuing various types of HTTP
|
10
14
|
# requests. It's interface is intended to mirror Ruby's Net::HTTP
|
11
15
|
# object, but it provides a few important bits of additional
|
@@ -18,10 +22,34 @@ module Puppet::Network::HTTP
|
|
18
22
|
class Connection
|
19
23
|
include Puppet::Network::Authentication
|
20
24
|
|
21
|
-
|
25
|
+
OPTION_DEFAULTS = {
|
26
|
+
:use_ssl => true,
|
27
|
+
:verify_peer => true,
|
28
|
+
:redirect_limit => 10
|
29
|
+
}
|
30
|
+
|
31
|
+
# Creates a new HTTP client connection to `host`:`port`.
|
32
|
+
# @param host [String] the host to which this client will connect to
|
33
|
+
# @param port [Fixnum] the port to which this client will connect to
|
34
|
+
# @param options [Hash] options influencing the properties of the created connection,
|
35
|
+
# the following options are recognized:
|
36
|
+
# :use_ssl [Boolean] true to connect with SSL, false otherwise, defaults to true
|
37
|
+
# :verify_peer [Boolean] true to verify the peer's certificate, false otherwise, defaults to true
|
38
|
+
# :redirect_limit [Fixnum] the number of allowed redirections, defaults to 10
|
39
|
+
# passing any other option in the options hash results in a Puppet::Error exception
|
40
|
+
# @note the HTTP connection itself happens lazily only when {#request}, or one of the {#get}, {#post}, {#delete}, {#head} or {#put} is called
|
41
|
+
# @api private
|
42
|
+
def initialize(host, port, options = {})
|
22
43
|
@host = host
|
23
44
|
@port = port
|
24
|
-
|
45
|
+
|
46
|
+
unknown_options = options.keys - OPTION_DEFAULTS.keys
|
47
|
+
raise Puppet::Error, "Unrecognized option(s): #{unknown_options.map(&:inspect).sort.join(', ')}" unless unknown_options.empty?
|
48
|
+
|
49
|
+
options = OPTION_DEFAULTS.merge(options)
|
50
|
+
@use_ssl = options[:use_ssl]
|
51
|
+
@verify_peer = options[:verify_peer]
|
52
|
+
@redirect_limit = options[:redirect_limit]
|
25
53
|
end
|
26
54
|
|
27
55
|
def get(*args)
|
@@ -45,32 +73,22 @@ module Puppet::Network::HTTP
|
|
45
73
|
end
|
46
74
|
|
47
75
|
def request(method, *args)
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
raise Puppet::Error, msg
|
61
|
-
elsif error.message =~ /hostname (\w+ )?not match/
|
62
|
-
leaf_ssl_cert = ssl_validator.peer_certs.last
|
63
|
-
|
64
|
-
valid_certnames = [leaf_ssl_cert.name, *leaf_ssl_cert.subject_alt_names].uniq
|
65
|
-
msg = valid_certnames.length > 1 ? "one of #{valid_certnames.join(', ')}" : valid_certnames.first
|
66
|
-
|
67
|
-
raise Puppet::Error, "Server hostname '#{connection.address}' did not match server certificate; expected #{msg}"
|
68
|
-
else
|
69
|
-
raise
|
76
|
+
current_args = args.dup
|
77
|
+
@redirect_limit.times do |redirection|
|
78
|
+
response = execute_request(method, *args)
|
79
|
+
return response unless [301, 302, 307].include?(response.code.to_i)
|
80
|
+
|
81
|
+
# handle the redirection
|
82
|
+
location = URI.parse(response['location'])
|
83
|
+
@connection = initialize_connection(location.host, location.port, location.scheme == 'https')
|
84
|
+
|
85
|
+
# update to the current request path
|
86
|
+
current_args = [location.path] + current_args.drop(1)
|
87
|
+
# and try again...
|
70
88
|
end
|
89
|
+
raise RedirectionLimitExceededException, "Too many HTTP redirections for #{@host}:#{@port}"
|
71
90
|
end
|
72
91
|
|
73
|
-
|
74
92
|
# TODO: These are proxies for the Net::HTTP#request_* methods, which are
|
75
93
|
# almost the same as the "get", "post", etc. methods that we've ported above,
|
76
94
|
# but they are able to accept a code block and will yield to it. For now
|
@@ -91,7 +109,6 @@ module Puppet::Network::HTTP
|
|
91
109
|
end
|
92
110
|
# end of Net::HTTP#request_* proxies
|
93
111
|
|
94
|
-
|
95
112
|
def address
|
96
113
|
connection.address
|
97
114
|
end
|
@@ -104,15 +121,42 @@ module Puppet::Network::HTTP
|
|
104
121
|
connection.use_ssl?
|
105
122
|
end
|
106
123
|
|
107
|
-
|
108
124
|
private
|
109
125
|
|
110
126
|
def connection
|
111
|
-
@connection || initialize_connection
|
127
|
+
@connection || initialize_connection(@host, @port, @use_ssl)
|
128
|
+
end
|
129
|
+
|
130
|
+
def execute_request(method, *args)
|
131
|
+
ssl_validator = Puppet::SSL::Validator.new(:ssl_configuration => ssl_configuration)
|
132
|
+
# Perform our own validation of the SSL connection in addition to OpenSSL
|
133
|
+
ssl_validator.register_verify_callback(connection)
|
134
|
+
|
135
|
+
response = connection.send(method, *args)
|
136
|
+
|
137
|
+
# Check the peer certs and warn if they're nearing expiration.
|
138
|
+
warn_if_near_expiration(*ssl_validator.peer_certs)
|
139
|
+
|
140
|
+
response
|
141
|
+
rescue OpenSSL::SSL::SSLError => error
|
142
|
+
if error.message.include? "certificate verify failed"
|
143
|
+
msg = error.message
|
144
|
+
msg << ": [" + ssl_validator.verify_errors.join('; ') + "]"
|
145
|
+
raise Puppet::Error, msg
|
146
|
+
elsif error.message =~ /hostname (\w+ )?not match/
|
147
|
+
leaf_ssl_cert = ssl_validator.peer_certs.last
|
148
|
+
|
149
|
+
valid_certnames = [leaf_ssl_cert.name, *leaf_ssl_cert.subject_alt_names].uniq
|
150
|
+
msg = valid_certnames.length > 1 ? "one of #{valid_certnames.join(', ')}" : valid_certnames.first
|
151
|
+
|
152
|
+
raise Puppet::Error, "Server hostname '#{connection.address}' did not match server certificate; expected #{msg}"
|
153
|
+
else
|
154
|
+
raise
|
155
|
+
end
|
112
156
|
end
|
113
157
|
|
114
|
-
def initialize_connection
|
115
|
-
args = [
|
158
|
+
def initialize_connection(host, port, use_ssl)
|
159
|
+
args = [host, port]
|
116
160
|
if Puppet[:http_proxy_host] == "none"
|
117
161
|
args << nil << nil
|
118
162
|
else
|
@@ -125,7 +169,7 @@ module Puppet::Network::HTTP
|
|
125
169
|
# give us a reader for ca_file... Grr...
|
126
170
|
class << @connection; attr_accessor :ca_file; end
|
127
171
|
|
128
|
-
@connection.use_ssl =
|
172
|
+
@connection.use_ssl = use_ssl
|
129
173
|
# Use configured timeout (#1176)
|
130
174
|
@connection.read_timeout = Puppet[:configtimeout]
|
131
175
|
@connection.open_timeout = Puppet[:configtimeout]
|
@@ -137,7 +181,7 @@ module Puppet::Network::HTTP
|
|
137
181
|
|
138
182
|
# Use cert information from a Puppet client to set up the http object.
|
139
183
|
def cert_setup
|
140
|
-
if FileTest.exist?(Puppet[:hostcert]) and FileTest.exist?(ssl_configuration.ca_auth_file)
|
184
|
+
if @verify_peer and FileTest.exist?(Puppet[:hostcert]) and FileTest.exist?(ssl_configuration.ca_auth_file)
|
141
185
|
@connection.cert_store = ssl_host.ssl_store
|
142
186
|
@connection.ca_file = ssl_configuration.ca_auth_file
|
143
187
|
@connection.cert = ssl_host.certificate.content
|