puppet 3.1.1 → 3.2.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 +2 -2
- data/Gemfile +32 -19
- data/README_DEVELOPER.md +332 -14
- data/Rakefile +9 -5
- data/ext/build_defaults.yaml +2 -3
- data/ext/debian/changelog.erb +6 -0
- data/ext/debian/control +6 -6
- data/ext/envpuppet +4 -4
- data/ext/project_data.yaml +1 -0
- data/ext/puppet-nm-dispatcher +13 -0
- data/ext/redhat/puppet.spec.erb +17 -0
- data/ext/suse/client.init +1 -1
- data/ext/systemd/puppetagent.service +2 -2
- data/ext/systemd/puppetmaster.service +2 -2
- data/lib/hiera/scope.rb +29 -11
- data/lib/hiera_puppet.rb +1 -3
- data/lib/puppet/agent.rb +3 -3
- data/lib/puppet/application.rb +2 -2
- data/lib/puppet/application/agent.rb +27 -12
- data/lib/puppet/application/apply.rb +11 -1
- data/lib/puppet/application/describe.rb +1 -1
- data/lib/puppet/application/doc.rb +13 -9
- data/lib/puppet/application/filebucket.rb +0 -1
- data/lib/puppet/application/kick.rb +1 -0
- data/lib/puppet/application/master.rb +16 -8
- data/lib/puppet/daemon.rb +19 -64
- data/lib/puppet/defaults.rb +61 -5
- data/lib/puppet/error.rb +15 -4
- data/lib/puppet/external/nagios/grammar.ry +1 -1
- data/lib/puppet/external/nagios/makefile +1 -1
- data/lib/puppet/external/nagios/parser.rb +185 -618
- data/lib/puppet/external/pson/pure/parser.rb +47 -1
- data/lib/puppet/face/certificate.rb +3 -3
- data/lib/puppet/face/module.rb +1 -1
- data/lib/puppet/face/module/changes.rb +3 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/node/clean.rb +5 -5
- data/lib/puppet/feature/base.rb +3 -1
- data/lib/puppet/feature/libuser.rb +8 -0
- data/lib/puppet/file_serving/fileset.rb +9 -1
- data/lib/puppet/forge.rb +28 -5
- data/lib/puppet/forge/errors.rb +34 -0
- data/lib/puppet/forge/repository.rb +1 -1
- data/lib/puppet/indirector.rb +4 -1
- data/lib/puppet/indirector/catalog/compiler.rb +37 -30
- data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
- data/lib/puppet/indirector/indirection.rb +28 -15
- data/lib/puppet/indirector/rest.rb +18 -10
- data/lib/puppet/interface.rb +11 -4
- data/lib/puppet/interface/action.rb +1 -3
- data/lib/puppet/interface/action_builder.rb +0 -3
- data/lib/puppet/interface/action_manager.rb +0 -3
- data/lib/puppet/interface/face_collection.rb +0 -2
- data/lib/puppet/interface/option.rb +0 -2
- data/lib/puppet/interface/option_builder.rb +0 -2
- data/lib/puppet/interface/option_manager.rb +0 -2
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module_tool.rb +1 -0
- data/lib/puppet/module_tool/applications/application.rb +0 -3
- data/lib/puppet/module_tool/applications/builder.rb +8 -20
- data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +1 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/errors/installer.rb +18 -1
- data/lib/puppet/module_tool/modulefile.rb +2 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
- data/lib/puppet/module_tool/tar.rb +17 -0
- data/lib/puppet/module_tool/tar/gnu.rb +9 -0
- data/lib/puppet/module_tool/tar/mini.rb +39 -0
- data/lib/puppet/module_tool/tar/solaris.rb +5 -0
- data/lib/puppet/network/http.rb +1 -0
- data/lib/puppet/network/http/connection.rb +9 -23
- data/lib/puppet/network/http/handler.rb +38 -7
- data/lib/puppet/network/http/rack/rest.rb +14 -3
- data/lib/puppet/network/http/webrick.rb +3 -1
- data/lib/puppet/network/http/webrick/rest.rb +11 -2
- data/lib/puppet/node/environment.rb +3 -1
- data/lib/puppet/parameter.rb +32 -29
- data/lib/puppet/parameter/package_options.rb +1 -1
- data/lib/puppet/parameter/path.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parameter/value_collection.rb +7 -3
- data/lib/puppet/parser/ast.rb +3 -1
- data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
- data/lib/puppet/parser/ast/astarray.rb +1 -1
- data/lib/puppet/parser/ast/block_expression.rb +41 -0
- data/lib/puppet/parser/ast/function.rb +13 -2
- data/lib/puppet/parser/ast/lambda.rb +107 -0
- data/lib/puppet/parser/ast/leaf.rb +1 -2
- data/lib/puppet/parser/ast/method_call.rb +77 -0
- data/lib/puppet/parser/ast/vardef.rb +7 -0
- data/lib/puppet/parser/compiler.rb +27 -16
- data/lib/puppet/parser/e_parser_adapter.rb +120 -0
- data/lib/puppet/parser/files.rb +7 -6
- data/lib/puppet/parser/functions.rb +10 -8
- data/lib/puppet/parser/functions/collect.rb +43 -0
- data/lib/puppet/parser/functions/each.rb +96 -0
- data/lib/puppet/parser/functions/foreach.rb +96 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
- data/lib/puppet/parser/functions/hiera.rb +20 -2
- data/lib/puppet/parser/functions/hiera_array.rb +21 -2
- data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
- data/lib/puppet/parser/functions/hiera_include.rb +33 -2
- data/lib/puppet/parser/functions/inline_template.rb +4 -4
- data/lib/puppet/parser/functions/reduce.rb +74 -0
- data/lib/puppet/parser/functions/reject.rb +46 -0
- data/lib/puppet/parser/functions/select.rb +46 -0
- data/lib/puppet/parser/functions/slice.rb +96 -0
- data/lib/puppet/parser/functions/template.rb +2 -2
- data/lib/puppet/parser/grammar.ra +7 -4
- data/lib/puppet/parser/lexer.rb +10 -0
- data/lib/puppet/parser/methods.rb +69 -0
- data/lib/puppet/parser/parser.rb +855 -808
- data/lib/puppet/parser/parser_factory.rb +62 -0
- data/lib/puppet/parser/parser_support.rb +8 -2
- data/lib/puppet/parser/scope.rb +153 -47
- data/lib/puppet/parser/templatewrapper.rb +28 -21
- data/lib/puppet/parser/type_loader.rb +3 -1
- data/lib/puppet/pops.rb +40 -0
- data/lib/puppet/pops/adaptable.rb +190 -0
- data/lib/puppet/pops/adapters.rb +65 -0
- data/lib/puppet/pops/containment.rb +37 -0
- data/lib/puppet/pops/issues.rb +258 -0
- data/lib/puppet/pops/label_provider.rb +71 -0
- data/lib/puppet/pops/model/ast_transformer.rb +636 -0
- data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
- data/lib/puppet/pops/model/factory.rb +804 -0
- data/lib/puppet/pops/model/model.rb +567 -0
- data/lib/puppet/pops/model/model_label_provider.rb +75 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
- data/lib/puppet/pops/model/tree_dumper.rb +59 -0
- data/lib/puppet/pops/parser/egrammar.ra +723 -0
- data/lib/puppet/pops/parser/eparser.rb +2300 -0
- data/lib/puppet/pops/parser/grammar.ra +746 -0
- data/lib/puppet/pops/parser/lexer.rb +842 -0
- data/lib/puppet/pops/parser/makefile +13 -0
- data/lib/puppet/pops/parser/parser_support.rb +203 -0
- data/lib/puppet/pops/patterns.rb +35 -0
- data/lib/puppet/pops/utils.rb +104 -0
- data/lib/puppet/pops/validation.rb +297 -0
- data/lib/puppet/pops/validation/checker3_1.rb +551 -0
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
- data/lib/puppet/pops/visitable.rb +6 -0
- data/lib/puppet/pops/visitor.rb +50 -0
- data/lib/puppet/property.rb +37 -28
- data/lib/puppet/property/ensure.rb +2 -2
- data/lib/puppet/property/ordered_list.rb +1 -1
- data/lib/puppet/provider.rb +26 -30
- data/lib/puppet/provider/aixobject.rb +45 -44
- data/lib/puppet/provider/augeas/augeas.rb +0 -1
- data/lib/puppet/provider/confiner.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +107 -67
- data/lib/puppet/provider/group/groupadd.rb +59 -3
- data/lib/puppet/provider/interface/cisco.rb +4 -4
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +22 -6
- data/lib/puppet/provider/nameservice/pw.rb +1 -1
- data/lib/puppet/provider/package/aix.rb +28 -4
- data/lib/puppet/provider/package/gem.rb +0 -2
- data/lib/puppet/provider/package/macports.rb +1 -1
- data/lib/puppet/provider/package/nim.rb +249 -4
- data/lib/puppet/provider/package/opkg.rb +77 -0
- data/lib/puppet/provider/package/pacman.rb +2 -2
- data/lib/puppet/provider/package/rpm.rb +30 -16
- data/lib/puppet/provider/package/yum.rb +3 -3
- data/lib/puppet/provider/parsedfile.rb +80 -3
- data/lib/puppet/provider/selmodule/semodule.rb +2 -2
- data/lib/puppet/provider/service/debian.rb +0 -4
- data/lib/puppet/provider/service/freebsd.rb +2 -2
- data/lib/puppet/provider/service/gentoo.rb +0 -9
- data/lib/puppet/provider/service/init.rb +27 -2
- data/lib/puppet/provider/service/launchd.rb +1 -1
- data/lib/puppet/provider/service/openwrt.rb +36 -0
- data/lib/puppet/provider/service/redhat.rb +0 -9
- data/lib/puppet/provider/service/src.rb +38 -4
- data/lib/puppet/provider/service/systemd.rb +2 -2
- data/lib/puppet/provider/service/upstart.rb +1 -8
- data/lib/puppet/provider/user/aix.rb +4 -10
- data/lib/puppet/provider/user/pw.rb +6 -10
- data/lib/puppet/provider/user/useradd.rb +129 -31
- data/lib/puppet/provider/vlan/cisco.rb +4 -4
- data/lib/puppet/reference/function.rb +2 -2
- data/lib/puppet/reference/indirection.rb +46 -5
- data/lib/puppet/reference/metaparameter.rb +2 -2
- data/lib/puppet/reports.rb +5 -5
- data/lib/puppet/reports/rrdgraph.rb +4 -4
- data/lib/puppet/reports/tagmail.rb +1 -1
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/type.rb +13 -11
- data/lib/puppet/scheduler.rb +16 -0
- data/lib/puppet/scheduler/job.rb +53 -0
- data/lib/puppet/scheduler/scheduler.rb +45 -0
- data/lib/puppet/scheduler/splay_job.rb +32 -0
- data/lib/puppet/scheduler/timer.rb +13 -0
- data/lib/puppet/settings/base_setting.rb +1 -1
- data/lib/puppet/simple_graph.rb +4 -4
- data/lib/puppet/ssl/base.rb +12 -2
- data/lib/puppet/ssl/certificate.rb +4 -1
- data/lib/puppet/ssl/certificate_request.rb +4 -1
- data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
- data/lib/puppet/ssl/configuration.rb +32 -0
- data/lib/puppet/ssl/host.rb +18 -21
- data/lib/puppet/ssl/key.rb +4 -1
- data/lib/puppet/ssl/validator.rb +116 -0
- data/lib/puppet/transaction.rb +1 -1
- data/lib/puppet/transaction/event.rb +3 -10
- data/lib/puppet/transaction/event_manager.rb +8 -1
- data/lib/puppet/transaction/report.rb +17 -16
- data/lib/puppet/type.rb +77 -69
- data/lib/puppet/type/cron.rb +20 -8
- data/lib/puppet/type/exec.rb +9 -3
- data/lib/puppet/type/file.rb +95 -21
- data/lib/puppet/type/file/content.rb +1 -1
- data/lib/puppet/type/file/mode.rb +7 -1
- data/lib/puppet/type/file/source.rb +2 -2
- data/lib/puppet/type/group.rb +11 -0
- data/lib/puppet/type/scheduled_task.rb +5 -1
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -2
- data/lib/puppet/type/user.rb +24 -6
- data/lib/puppet/util.rb +12 -2
- data/lib/puppet/util/classgen.rb +4 -4
- data/lib/puppet/util/colors.rb +55 -0
- data/lib/puppet/util/command_line/trollop.rb +4 -4
- data/lib/puppet/util/errors.rb +39 -3
- data/lib/puppet/util/fileparsing.rb +5 -0
- data/lib/puppet/util/filetype.rb +11 -9
- data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
- data/lib/puppet/util/libuser.conf +15 -0
- data/lib/puppet/util/libuser.rb +12 -0
- data/lib/puppet/util/monkey_patches.rb +48 -0
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/base.rb +2 -2
- data/lib/puppet/util/network_device/cisco/device.rb +29 -19
- data/lib/puppet/util/network_device/config.rb +5 -2
- data/lib/puppet/util/network_device/ipcalc.rb +1 -1
- data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
- data/lib/puppet/util/plugins.rb +4 -4
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/util/profiler.rb +28 -0
- data/lib/puppet/util/profiler/logging.rb +47 -0
- data/lib/puppet/util/profiler/none.rb +8 -0
- data/lib/puppet/util/profiler/object_counts.rb +17 -0
- data/lib/puppet/util/profiler/wall_clock.rb +34 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/rdoc/parser.rb +5 -5
- data/lib/puppet/util/ssl.rb +38 -0
- data/lib/puppet/util/subclass_loader.rb +1 -5
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/process.rb +3 -0
- data/lib/puppet/util/windows/root_certs.rb +86 -0
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
- data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
- data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
- data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
- data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
- data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
- data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
- data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
- data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
- data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
- data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
- data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
- data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
- data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
- data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
- data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
- data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
- data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
- data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
- data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
- data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
- data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
- data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
- data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
- data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
- data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
- data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
- data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
- data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
- data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
- data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
- data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
- data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
- data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
- data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
- data/spec/integration/parser/collector_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +252 -227
- data/spec/integration/parser/parser_spec.rb +171 -53
- data/spec/integration/parser/scope_spec.rb +1 -1
- data/spec/integration/provider/cron/crontab_spec.rb +187 -0
- data/spec/integration/provider/service/systemd_spec.rb +20 -0
- data/spec/integration/type/file_spec.rb +21 -21
- data/spec/integration/type/package_spec.rb +1 -1
- data/spec/lib/puppet_spec/database.rb +2 -5
- data/spec/spec_helper.rb +6 -1
- data/spec/unit/application/apply_spec.rb +16 -1
- data/spec/unit/application/describe_spec.rb +1 -1
- data/spec/unit/application/doc_spec.rb +55 -32
- data/spec/unit/application/kick_spec.rb +8 -6
- data/spec/unit/application/master_spec.rb +4 -4
- data/spec/unit/daemon_spec.rb +1 -1
- data/spec/unit/forge/errors_spec.rb +40 -0
- data/spec/unit/forge/repository_spec.rb +11 -1
- data/spec/unit/forge_spec.rb +13 -3
- data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
- data/spec/unit/hiera/scope_spec.rb +48 -25
- data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
- data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
- data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
- data/spec/unit/indirector/indirection_spec.rb +5 -0
- data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
- data/spec/unit/indirector_spec.rb +7 -1
- data/spec/unit/interface/action_builder_spec.rb +1 -1
- data/spec/unit/interface/action_manager_spec.rb +0 -2
- data/spec/unit/interface/action_spec.rb +1 -1
- data/spec/unit/interface/documentation_spec.rb +0 -2
- data/spec/unit/interface/face_collection_spec.rb +1 -1
- data/spec/unit/interface/option_builder_spec.rb +1 -1
- data/spec/unit/interface/option_spec.rb +0 -1
- data/spec/unit/module_spec.rb +17 -19
- data/spec/unit/module_tool/application_spec.rb +1 -3
- data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
- data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
- data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
- data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
- data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
- data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
- data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
- data/spec/unit/network/http/connection_spec.rb +17 -2
- data/spec/unit/network/http/handler_spec.rb +195 -167
- data/spec/unit/network/http/rack/rest_spec.rb +26 -4
- data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
- data/spec/unit/network/http/webrick_spec.rb +12 -3
- data/spec/unit/node/environment_spec.rb +421 -404
- data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
- data/spec/unit/parser/collector_spec.rb +4 -4
- data/spec/unit/parser/compiler_spec.rb +13 -13
- data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
- data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
- data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
- data/spec/unit/parser/functions/hiera_spec.rb +0 -2
- data/spec/unit/parser/functions_spec.rb +27 -15
- data/spec/unit/parser/methods/collect_spec.rb +110 -0
- data/spec/unit/parser/methods/each_spec.rb +91 -0
- data/spec/unit/parser/methods/foreach_spec.rb +91 -0
- data/spec/unit/parser/methods/reduce_spec.rb +67 -0
- data/spec/unit/parser/methods/reject_spec.rb +73 -0
- data/spec/unit/parser/methods/select_spec.rb +79 -0
- data/spec/unit/parser/methods/shared.rb +61 -0
- data/spec/unit/parser/methods/slice_spec.rb +97 -0
- data/spec/unit/parser/parser_spec.rb +2 -2
- data/spec/unit/parser/scope_spec.rb +39 -16
- data/spec/unit/parser/templatewrapper_spec.rb +6 -5
- data/spec/unit/parser/type_loader_spec.rb +191 -165
- data/spec/unit/pops/adaptable_spec.rb +143 -0
- data/spec/unit/pops/containment_spec.rb +25 -0
- data/spec/unit/pops/factory_rspec_helper.rb +77 -0
- data/spec/unit/pops/factory_spec.rb +329 -0
- data/spec/unit/pops/issues_spec.rb +26 -0
- data/spec/unit/pops/label_provider_spec.rb +42 -0
- data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
- data/spec/unit/pops/model/model_spec.rb +37 -0
- data/spec/unit/pops/parser/lexer_spec.rb +884 -0
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
- data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
- data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
- data/spec/unit/pops/parser/parser_spec.rb +15 -0
- data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
- data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
- data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
- data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
- data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
- data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
- data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
- data/spec/unit/pops/visitor_spec.rb +94 -0
- data/spec/unit/property_spec.rb +11 -0
- data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
- data/spec/unit/provider/cron/crontab_spec.rb +97 -7
- data/spec/unit/provider/cron/parsed_spec.rb +325 -0
- data/spec/unit/provider/exec/posix_spec.rb +1 -1
- data/spec/unit/provider/group/groupadd_spec.rb +33 -3
- data/spec/unit/provider/group/pw_spec.rb +5 -5
- data/spec/unit/provider/nameservice_spec.rb +304 -0
- data/spec/unit/provider/package/aix_spec.rb +53 -11
- data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
- data/spec/unit/provider/package/gem_spec.rb +6 -11
- data/spec/unit/provider/package/nim_spec.rb +216 -7
- data/spec/unit/provider/package/opkg_spec.rb +180 -0
- data/spec/unit/provider/package/rpm_spec.rb +149 -3
- data/spec/unit/provider/package/yum_spec.rb +6 -5
- data/spec/unit/provider/parsedfile_spec.rb +122 -28
- data/spec/unit/provider/service/freebsd_spec.rb +18 -0
- data/spec/unit/provider/service/init_spec.rb +108 -87
- data/spec/unit/provider/service/launchd_spec.rb +2 -2
- data/spec/unit/provider/service/openwrt_spec.rb +109 -0
- data/spec/unit/provider/service/src_spec.rb +117 -41
- data/spec/unit/provider/service/systemd_spec.rb +125 -17
- data/spec/unit/provider/service/upstart_spec.rb +1 -1
- data/spec/unit/provider/user/aix_spec.rb +42 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
- data/spec/unit/provider/user/pw_spec.rb +24 -12
- data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
- data/spec/unit/provider/user/useradd_spec.rb +179 -15
- data/spec/unit/resource/type_spec.rb +3 -3
- data/spec/unit/scheduler/job_spec.rb +79 -0
- data/spec/unit/scheduler/scheduler_spec.rb +129 -0
- data/spec/unit/scheduler/splay_job_spec.rb +35 -0
- data/spec/unit/ssl/base_spec.rb +3 -9
- data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
- data/spec/unit/ssl/certificate_request_spec.rb +3 -1
- data/spec/unit/ssl/certificate_spec.rb +3 -1
- data/spec/unit/ssl/configuration_spec.rb +74 -0
- data/spec/unit/ssl/host_spec.rb +28 -7
- data/spec/unit/ssl/validator_spec.rb +311 -0
- data/spec/unit/transaction/event_manager_spec.rb +49 -0
- data/spec/unit/transaction/event_spec.rb +20 -5
- data/spec/unit/transaction/report_spec.rb +8 -0
- data/spec/unit/type/cron_spec.rb +9 -0
- data/spec/unit/type/exec_spec.rb +11 -0
- data/spec/unit/type/file/content_spec.rb +20 -20
- data/spec/unit/type/file/mode_spec.rb +6 -0
- data/spec/unit/type/file/source_spec.rb +9 -7
- data/spec/unit/type/file_spec.rb +22 -3
- data/spec/unit/type/service_spec.rb +34 -21
- data/spec/unit/type_spec.rb +46 -1
- data/spec/unit/util/backups_spec.rb +2 -2
- data/spec/unit/util/execution_spec.rb +4 -1
- data/spec/unit/util/filetype_spec.rb +6 -0
- data/spec/unit/util/monkey_patches_spec.rb +18 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
- data/spec/unit/util/network_device/config_spec.rb +14 -0
- data/spec/unit/util/network_device_spec.rb +3 -3
- data/spec/unit/util/profiler/logging_spec.rb +81 -0
- data/spec/unit/util/profiler/none_spec.rb +12 -0
- data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
- data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
- data/spec/unit/util/pson_spec.rb +5 -0
- data/spec/unit/util/ssl_spec.rb +51 -0
- data/spec/unit/util/windows/root_certs_spec.rb +15 -0
- data/spec/unit/util_spec.rb +28 -0
- metadata +2593 -2307
- data/spec/unit/module_tool/applications/application_spec.rb +0 -19
@@ -0,0 +1,39 @@
|
|
1
|
+
class Puppet::ModuleTool::Tar::Mini
|
2
|
+
def initialize(module_name)
|
3
|
+
@module_name = module_name
|
4
|
+
end
|
5
|
+
|
6
|
+
def unpack(sourcefile, destdir)
|
7
|
+
Zlib::GzipReader.open(sourcefile) do |reader|
|
8
|
+
Archive::Tar::Minitar.unpack(reader, destdir) do |action, name, stats|
|
9
|
+
case action
|
10
|
+
when :dir, :file_start
|
11
|
+
validate_entry(destdir, name)
|
12
|
+
Puppet.debug("extracting #{destdir}/#{name}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def pack(sourcedir, destfile)
|
19
|
+
Zlib::GzipWriter.open(destfile) do |writer|
|
20
|
+
Archive::Tar::Minitar.pack(sourcedir, writer)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def validate_entry(destdir, path)
|
27
|
+
if Pathname.new(path).absolute?
|
28
|
+
raise Puppet::ModuleTool::Errors::InvalidPathInPackageError,
|
29
|
+
:requested_package => @module_name, :entry_path => path, :directory => destdir
|
30
|
+
end
|
31
|
+
|
32
|
+
path = File.expand_path File.join(destdir, path)
|
33
|
+
|
34
|
+
if path !~ /\A#{Regexp.escape destdir}/
|
35
|
+
raise Puppet::ModuleTool::Errors::InvalidPathInPackageError,
|
36
|
+
:requested_package => @module_name, :entry_path => path, :directory => destdir
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/puppet/network/http.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'net/https'
|
2
2
|
require 'puppet/ssl/host'
|
3
3
|
require 'puppet/ssl/configuration'
|
4
|
+
require 'puppet/ssl/validator'
|
4
5
|
require 'puppet/network/authentication'
|
5
6
|
|
6
7
|
module Puppet::Network::HTTP
|
@@ -44,38 +45,23 @@ module Puppet::Network::HTTP
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def request(method, *args)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
connection.verify_callback = proc do |preverify_ok, ssl_context|
|
51
|
-
# We use the callback to collect the certificates for use in
|
52
|
-
# constructing the error message if the verification failed.
|
53
|
-
# This is necessary since we don't have direct access to the
|
54
|
-
# cert that we expected the connection to use otherwise.
|
55
|
-
peer_certs << Puppet::SSL::Certificate.from_instance(ssl_context.current_cert)
|
56
|
-
# And also keep the detailed verification error if such an error occurs
|
57
|
-
if ssl_context.error_string and not preverify_ok
|
58
|
-
verify_errors << "#{ssl_context.error_string} for #{ssl_context.current_cert.subject}"
|
59
|
-
end
|
60
|
-
preverify_ok
|
61
|
-
end
|
62
|
-
|
48
|
+
ssl_validator = Puppet::SSL::Validator.new(:ssl_configuration => ssl_configuration)
|
49
|
+
# Perform our own validation of the SSL connection in addition to OpenSSL
|
50
|
+
ssl_validator.register_verify_callback(connection)
|
63
51
|
response = connection.send(method, *args)
|
64
|
-
|
65
|
-
|
66
|
-
# certificates for approaching expiration dates
|
67
|
-
warn_if_near_expiration(*peer_certs)
|
52
|
+
# Check the peer certs and warn if they're nearing expiration.
|
53
|
+
warn_if_near_expiration(*ssl_validator.peer_certs)
|
68
54
|
|
69
55
|
response
|
70
56
|
rescue OpenSSL::SSL::SSLError => error
|
71
57
|
if error.message.include? "certificate verify failed"
|
72
58
|
msg = error.message
|
73
|
-
msg << ": [" + verify_errors.join('; ') + "]"
|
59
|
+
msg << ": [" + ssl_validator.verify_errors.join('; ') + "]"
|
74
60
|
raise Puppet::Error, msg
|
75
61
|
elsif error.message =~ /hostname (was )?not match/
|
76
|
-
|
62
|
+
leaf_ssl_cert = ssl_validator.peer_certs.last
|
77
63
|
|
78
|
-
valid_certnames = [
|
64
|
+
valid_certnames = [leaf_ssl_cert.name, *leaf_ssl_cert.subject_alt_names].uniq
|
79
65
|
msg = valid_certnames.length > 1 ? "one of #{valid_certnames.join(', ')}" : valid_certnames.first
|
80
66
|
|
81
67
|
raise Puppet::Error, "Server hostname '#{connection.address}' did not match server certificate; expected #{msg}"
|
@@ -1,10 +1,12 @@
|
|
1
1
|
module Puppet::Network::HTTP
|
2
2
|
end
|
3
3
|
|
4
|
+
require 'puppet/network/http'
|
4
5
|
require 'puppet/network/http/api/v1'
|
5
6
|
require 'puppet/network/authorization'
|
6
7
|
require 'puppet/network/authentication'
|
7
8
|
require 'puppet/network/rights'
|
9
|
+
require 'puppet/util/profiler'
|
8
10
|
require 'resolv'
|
9
11
|
|
10
12
|
module Puppet::Network::HTTP::Handler
|
@@ -14,6 +16,13 @@ module Puppet::Network::HTTP::Handler
|
|
14
16
|
|
15
17
|
attr_reader :server, :handler
|
16
18
|
|
19
|
+
|
20
|
+
# Retrieve all headers from the http request, as a hash with the header names
|
21
|
+
# (lower-cased) as the keys
|
22
|
+
def headers(request)
|
23
|
+
raise NotImplementedError
|
24
|
+
end
|
25
|
+
|
17
26
|
# Retrieve the accept header from the http request.
|
18
27
|
def accept_header(request)
|
19
28
|
raise NotImplementedError
|
@@ -63,12 +72,21 @@ module Puppet::Network::HTTP::Handler
|
|
63
72
|
|
64
73
|
# handle an HTTP request
|
65
74
|
def process(request, response)
|
66
|
-
|
75
|
+
request_headers = headers(request)
|
76
|
+
request_params = params(request)
|
77
|
+
request_method = http_method(request)
|
78
|
+
request_path = path(request)
|
67
79
|
|
68
|
-
|
69
|
-
warn_if_near_expiration(client_cert(request))
|
80
|
+
configure_profiler(request_headers, request_params)
|
70
81
|
|
71
|
-
|
82
|
+
Puppet::Util::Profiler.profile("Processed request #{request_method} #{request_path}") do
|
83
|
+
indirection, method, key, params = uri2indirection(request_method, request_path, request_params)
|
84
|
+
|
85
|
+
check_authorization(indirection, method, key, params)
|
86
|
+
warn_if_near_expiration(client_cert(request))
|
87
|
+
|
88
|
+
send("do_#{method}", indirection, key, params, request, response)
|
89
|
+
end
|
72
90
|
rescue SystemExit,NoMemoryError
|
73
91
|
raise
|
74
92
|
rescue Exception => e
|
@@ -118,10 +136,15 @@ module Puppet::Network::HTTP::Handler
|
|
118
136
|
format = format_to_use(request)
|
119
137
|
set_content_type(response, format)
|
120
138
|
|
139
|
+
rendered_result = result
|
121
140
|
if result.respond_to?(:render)
|
122
|
-
|
123
|
-
|
124
|
-
|
141
|
+
Puppet::Util::Profiler.profile("Rendered result in #{format}") do
|
142
|
+
rendered_result = result.render(format)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
Puppet::Util::Profiler.profile("Sent response") do
|
147
|
+
set_response(response, rendered_result)
|
125
148
|
end
|
126
149
|
end
|
127
150
|
|
@@ -253,4 +276,12 @@ module Puppet::Network::HTTP::Handler
|
|
253
276
|
result
|
254
277
|
end
|
255
278
|
end
|
279
|
+
|
280
|
+
def configure_profiler(request_headers, request_params)
|
281
|
+
if (request_headers.has_key?(Puppet::Network::HTTP::HEADER_ENABLE_PROFILING.downcase) or Puppet[:profile])
|
282
|
+
Puppet::Util::Profiler.current = Puppet::Util::Profiler::WallClock.new(Puppet.method(:debug), request_params.object_id)
|
283
|
+
else
|
284
|
+
Puppet::Util::Profiler.current = Puppet::Util::Profiler::NONE
|
285
|
+
end
|
286
|
+
end
|
256
287
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
+
require 'openssl'
|
1
2
|
require 'puppet/network/http/handler'
|
2
3
|
require 'puppet/network/http/rack/httphandler'
|
4
|
+
require 'puppet/util/ssl'
|
3
5
|
|
4
6
|
class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
|
5
7
|
|
@@ -46,6 +48,14 @@ class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
51
|
+
# Retrieve all headers from the http request, as a map.
|
52
|
+
def headers(request)
|
53
|
+
request.env.select {|k,v| k.start_with? 'HTTP_'}.inject({}) do |m, (k,v)|
|
54
|
+
m[k.sub(/^HTTP_/, '').downcase] = v
|
55
|
+
m
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
49
59
|
# Retrieve the accept header from the http request.
|
50
60
|
def accept_header(request)
|
51
61
|
request.env[HEADER_ACCEPT]
|
@@ -98,11 +108,12 @@ class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
|
|
98
108
|
result = {}
|
99
109
|
result[:ip] = request.ip
|
100
110
|
|
101
|
-
# if we find SSL info in the headers, use them to get a hostname.
|
111
|
+
# if we find SSL info in the headers, use them to get a hostname from the CN.
|
102
112
|
# try this with :ssl_client_header, which defaults should work for
|
103
113
|
# Apache with StdEnvVars.
|
104
|
-
if
|
105
|
-
|
114
|
+
if subj_str = request.env[Puppet[:ssl_client_header]]
|
115
|
+
subject = Puppet::Util::SSL.subject_from_dn(subj_str)
|
116
|
+
result[:node] = Puppet::Util::SSL.cn_from_subject(subject)
|
106
117
|
result[:authenticated] = (request.env[Puppet[:ssl_client_verify_header]] == 'SUCCESS')
|
107
118
|
else
|
108
119
|
result[:node] = resolve_node(result)
|
@@ -14,10 +14,12 @@ class Puppet::Network::HTTP::WEBrick
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def listen(address, port)
|
17
|
-
arguments = {:BindAddress => address, :Port => port}
|
17
|
+
arguments = {:BindAddress => address, :Port => port, :DoNotReverseLookup => true}
|
18
18
|
arguments.merge!(setup_logger)
|
19
19
|
arguments.merge!(setup_ssl)
|
20
20
|
|
21
|
+
BasicSocket.do_not_reverse_lookup = true
|
22
|
+
|
21
23
|
@server = WEBrick::HTTPServer.new(arguments)
|
22
24
|
@server.listeners.each { |l| l.start_immediately = false }
|
23
25
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'puppet/network/http/handler'
|
2
2
|
require 'resolv'
|
3
3
|
require 'webrick'
|
4
|
+
require 'puppet/util/ssl'
|
4
5
|
|
5
6
|
class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
|
6
7
|
|
@@ -24,6 +25,14 @@ class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
|
|
24
25
|
process(request, response)
|
25
26
|
end
|
26
27
|
|
28
|
+
def headers(request)
|
29
|
+
result = {}
|
30
|
+
request.each do |k, v|
|
31
|
+
result[k.downcase] = v
|
32
|
+
end
|
33
|
+
result
|
34
|
+
end
|
35
|
+
|
27
36
|
def accept_header(request)
|
28
37
|
request["accept"]
|
29
38
|
end
|
@@ -73,8 +82,8 @@ class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet
|
|
73
82
|
# then we get the hostname from the cert, instead of via IP
|
74
83
|
# info
|
75
84
|
result[:authenticated] = false
|
76
|
-
if cert = request.client_cert and
|
77
|
-
result[:node] =
|
85
|
+
if cert = request.client_cert and cn = Puppet::Util::SSL.cn_from_subject(cert.subject)
|
86
|
+
result[:node] = cn
|
78
87
|
result[:authenticated] = true
|
79
88
|
else
|
80
89
|
result[:node] = resolve_node(result)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'puppet/util'
|
2
2
|
require 'puppet/util/cacher'
|
3
3
|
require 'monitor'
|
4
|
+
require 'puppet/parser/parser_factory'
|
4
5
|
|
5
6
|
# Just define it, so this class has fewer load dependencies.
|
6
7
|
class Puppet::Node
|
@@ -217,7 +218,8 @@ class Puppet::Node::Environment
|
|
217
218
|
|
218
219
|
def perform_initial_import
|
219
220
|
return empty_parse_result if Puppet.settings[:ignoreimport]
|
220
|
-
parser = Puppet::Parser::Parser.new(self)
|
221
|
+
# parser = Puppet::Parser::Parser.new(self)
|
222
|
+
parser = Puppet::Parser::ParserFactory.parser(self)
|
221
223
|
if code = Puppet.settings.uninterpolated_value(:code, name.to_s) and code != ""
|
222
224
|
parser.string = code
|
223
225
|
else
|
data/lib/puppet/parameter.rb
CHANGED
@@ -18,7 +18,7 @@ require 'puppet/util/docs'
|
|
18
18
|
# @see Puppet::Type
|
19
19
|
# @see Puppet::Property
|
20
20
|
# @api public
|
21
|
-
#
|
21
|
+
#
|
22
22
|
class Puppet::Parameter
|
23
23
|
include Puppet::Util
|
24
24
|
include Puppet::Util::Errors
|
@@ -36,7 +36,7 @@ class Puppet::Parameter
|
|
36
36
|
# which seems to works fine without this attribute declaration.
|
37
37
|
# @api private
|
38
38
|
#
|
39
|
-
attr_reader :validater
|
39
|
+
attr_reader :validater
|
40
40
|
|
41
41
|
# Unused?
|
42
42
|
# @todo The term "munger" only appears in this location in the Puppet code base. There is munge and unmunge
|
@@ -44,14 +44,14 @@ class Puppet::Parameter
|
|
44
44
|
# @api private
|
45
45
|
#
|
46
46
|
attr_reader :munger
|
47
|
-
|
47
|
+
|
48
48
|
# @return [Symbol] The parameter name as given when it was created.
|
49
49
|
attr_reader :name
|
50
|
-
|
50
|
+
|
51
51
|
# @return [Object] The default value of the parameter as determined by the {defaultto} method, or nil if no
|
52
52
|
# default has been set.
|
53
53
|
attr_reader :default
|
54
|
-
|
54
|
+
|
55
55
|
# @comment This somewhat odd documentation construct is because the getter and setter are not
|
56
56
|
# orthogonal; the setter uses varargs and this confuses yard. To overcome the problem both the
|
57
57
|
# getter and the setter are documented here. If this issues is fixed, a todo will be displayed
|
@@ -65,24 +65,24 @@ class Puppet::Parameter
|
|
65
65
|
# @overload required_features
|
66
66
|
# Returns the required _provider features_ as an array of lower case symbols
|
67
67
|
# @overload required_features=(*args)
|
68
|
-
# @param *args [Symbol] one or more names of required provider features
|
68
|
+
# @param *args [Symbol] one or more names of required provider features
|
69
69
|
# Sets the required_provider_features_ from one or more values, or array. The given arguments
|
70
70
|
# are flattened, and internalized.
|
71
71
|
# @api public
|
72
72
|
# @dsl type
|
73
73
|
#
|
74
74
|
attr_reader :required_features
|
75
|
-
|
75
|
+
|
76
76
|
# @return [Puppet::Parameter::ValueCollection] The set of valid values (or an empty set that accepts any value).
|
77
77
|
# @api private
|
78
78
|
#
|
79
79
|
attr_reader :value_collection
|
80
|
-
|
80
|
+
|
81
81
|
# @return [Boolean] Flag indicating whether this parameter is a meta-parameter or not.
|
82
82
|
attr_accessor :metaparam
|
83
83
|
|
84
84
|
# Defines how the `default` value of a parameter is computed.
|
85
|
-
# The computation of the parameter's default value is defined by providing a value or a block.
|
85
|
+
# The computation of the parameter's default value is defined by providing a value or a block.
|
86
86
|
# A default of `nil` can not be used.
|
87
87
|
# @overload defaultto(value)
|
88
88
|
# Defines the default value with a literal value
|
@@ -95,7 +95,7 @@ class Puppet::Parameter
|
|
95
95
|
# @see Parameter.default
|
96
96
|
# @dsl type
|
97
97
|
# @api public
|
98
|
-
#
|
98
|
+
#
|
99
99
|
def defaultto(value = nil, &block)
|
100
100
|
if block
|
101
101
|
define_method(:default, &block)
|
@@ -108,7 +108,7 @@ class Puppet::Parameter
|
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
|
-
# Produces a documentation string.
|
111
|
+
# Produces a documentation string.
|
112
112
|
# If an enumeration of _valid values_ has been defined, it is appended to the documentation
|
113
113
|
# for this parameter specified with the {desc} method.
|
114
114
|
# @return [String] Returns a documentation string.
|
@@ -243,6 +243,9 @@ class Puppet::Parameter
|
|
243
243
|
# @overload validate {|| ... }
|
244
244
|
# Defines an optional method that is used to validate the parameter's value.
|
245
245
|
# Validation should raise appropriate exceptions, the return value of the given block is ignored.
|
246
|
+
# The easiest way to raise an appropriate exception is to call the method {Puppet::Util::Errors.fail} with
|
247
|
+
# the message as an argument.
|
248
|
+
#
|
246
249
|
# @return [void]
|
247
250
|
# @dsl type
|
248
251
|
# @api public
|
@@ -256,7 +259,7 @@ class Puppet::Parameter
|
|
256
259
|
# regular expression patterns.
|
257
260
|
# @note Each call to this method adds to the set of valid values
|
258
261
|
# @param names [Symbol, Regexp] The set of valid literal values and/or patterns for the parameter.
|
259
|
-
# @return [void]
|
262
|
+
# @return [void]
|
260
263
|
# @dsl type
|
261
264
|
# @api public
|
262
265
|
#
|
@@ -318,14 +321,14 @@ class Puppet::Parameter
|
|
318
321
|
|
319
322
|
# Initializes the parameter with a required resource reference and optional attribute settings.
|
320
323
|
# The option `:resource` must be specified or an exception is raised. Any additional options passed
|
321
|
-
# are used to initialize the attributes of this parameter by treating each key in the `options` hash as
|
324
|
+
# are used to initialize the attributes of this parameter by treating each key in the `options` hash as
|
322
325
|
# the name of the attribute to set, and the value as the value to set.
|
323
326
|
# @param options [Hash{Symbol => Object]] Options, where `resource` is required
|
324
327
|
# @option options [Puppet::Resource] :resource The resource this parameter holds a value for. Required.
|
325
328
|
# @raise [Puppet::DevError] If resource is not specified in the options hash.
|
326
329
|
# @api public
|
327
330
|
# @note A parameter should be created via the DSL method {Puppet::Type::newparam}
|
328
|
-
#
|
331
|
+
#
|
329
332
|
def initialize(options = {})
|
330
333
|
options = symbolize_options(options)
|
331
334
|
if resource = options[:resource]
|
@@ -338,7 +341,7 @@ class Puppet::Parameter
|
|
338
341
|
set_options(options)
|
339
342
|
end
|
340
343
|
|
341
|
-
# Writes the given `msg` to the log with the loglevel indicated by the associated resource's
|
344
|
+
# Writes the given `msg` to the log with the loglevel indicated by the associated resource's
|
342
345
|
# `loglevel` parameter.
|
343
346
|
# @todo is loglevel a metaparameter? it is looked up with `resource[:loglevel]`
|
344
347
|
# @return [void]
|
@@ -354,7 +357,7 @@ class Puppet::Parameter
|
|
354
357
|
|
355
358
|
# @!attribute [r] name
|
356
359
|
# @return [Symbol] The parameter's name as given when it was created.
|
357
|
-
# @note Since a Parameter defines the name at the class level, each Parameter class must be
|
360
|
+
# @note Since a Parameter defines the name at the class level, each Parameter class must be
|
358
361
|
# unique within a type's inheritance chain.
|
359
362
|
# @comment each parameter class must define the name method, and parameter
|
360
363
|
# instances do not change that name this implicitly means that a given
|
@@ -366,7 +369,7 @@ class Puppet::Parameter
|
|
366
369
|
|
367
370
|
# @return [Boolean] Returns true if this parameter, the associated resource, or overall puppet mode is `noop`.
|
368
371
|
# @todo How is noop mode set for a parameter? Is this of value in DSL to inhibit a parameter?
|
369
|
-
#
|
372
|
+
#
|
370
373
|
def noop
|
371
374
|
@noop ||= false
|
372
375
|
tmp = @noop || self.resource.noop || Puppet[:noop] || false
|
@@ -377,7 +380,7 @@ class Puppet::Parameter
|
|
377
380
|
# @todo Original comment = _return the full path to us, for logging and rollback; not currently
|
378
381
|
# used_ This is difficult to figure out (if it is used or not as calls are certainly made to "pathbuilder"
|
379
382
|
# method is several places, not just sure if it is this implementation or not.
|
380
|
-
#
|
383
|
+
#
|
381
384
|
# @api private
|
382
385
|
def pathbuilder
|
383
386
|
if @resource
|
@@ -424,7 +427,7 @@ class Puppet::Parameter
|
|
424
427
|
ret
|
425
428
|
end
|
426
429
|
|
427
|
-
# This is the default implementation of `validate` that may be overridden by the DSL method {validate}.
|
430
|
+
# This is the default implementation of `validate` that may be overridden by the DSL method {validate}.
|
428
431
|
# If no valid values have been defined, the given value is accepted, else it is validated against
|
429
432
|
# the literal values (enumerator) and/or patterns defined by calling {newvalues}.
|
430
433
|
#
|
@@ -432,7 +435,7 @@ class Puppet::Parameter
|
|
432
435
|
# @raise [ArgumentError] if the value is not valid
|
433
436
|
# @return [void]
|
434
437
|
# @api private
|
435
|
-
#
|
438
|
+
#
|
436
439
|
def unsafe_validate(value)
|
437
440
|
self.class.value_collection.validate(value)
|
438
441
|
end
|
@@ -441,7 +444,7 @@ class Puppet::Parameter
|
|
441
444
|
# @return [void]
|
442
445
|
# @todo Better description of when the various exceptions are raised.ArgumentError is rescued and
|
443
446
|
# changed into Puppet::Error.
|
444
|
-
# @raise [ArgumentError, TypeError, Puppet::DevError, Puppet::Error] under various conditions
|
447
|
+
# @raise [ArgumentError, TypeError, Puppet::DevError, Puppet::Error] under various conditions
|
445
448
|
# A protected validation method that only ever raises useful exceptions.
|
446
449
|
# @api public
|
447
450
|
#
|
@@ -475,7 +478,7 @@ class Puppet::Parameter
|
|
475
478
|
# late-binding (e.g., users might not exist when the value is assigned
|
476
479
|
# but might when it is asked for)."_ does not seem to be correct, the implementation
|
477
480
|
# calls both validate an munge on the given value, so no late binding.
|
478
|
-
#
|
481
|
+
#
|
479
482
|
# The given value is validated and then munged (if munging has been specified). The result is store
|
480
483
|
# as the value of this arameter.
|
481
484
|
# @return [Object] The given `value` after munging.
|
@@ -492,7 +495,7 @@ class Puppet::Parameter
|
|
492
495
|
# Some types don't have providers, in which case we return the resource object itself."_
|
493
496
|
# This does not seem to be true, the default implementation that sets this value may be
|
494
497
|
# {Puppet::Type.provider=} which always gets either the name of a provider or an instance of one.
|
495
|
-
#
|
498
|
+
#
|
496
499
|
def provider
|
497
500
|
@resource.provider
|
498
501
|
end
|
@@ -504,7 +507,7 @@ class Puppet::Parameter
|
|
504
507
|
# @todo The original comment says = _"The properties need to return tags so that logs correctly
|
505
508
|
# collect them."_ what if anything of that is of interest to document. Should tags and their relationship
|
506
509
|
# to logs be described. This is a more general concept.
|
507
|
-
#
|
510
|
+
#
|
508
511
|
def tags
|
509
512
|
unless defined?(@tags)
|
510
513
|
@tags = []
|
@@ -522,20 +525,20 @@ class Puppet::Parameter
|
|
522
525
|
|
523
526
|
# Produces a String with the value formatted for display to a human.
|
524
527
|
# When the parameter value is a:
|
525
|
-
#
|
528
|
+
#
|
526
529
|
# * **single valued parameter value** the result is produced on the
|
527
|
-
# form `'value'` where _value_ is the string form of the parameter's value.
|
530
|
+
# form `'value'` where _value_ is the string form of the parameter's value.
|
528
531
|
#
|
529
|
-
# * **Array** the list of values is enclosed in `[]`, and
|
532
|
+
# * **Array** the list of values is enclosed in `[]`, and
|
530
533
|
# each produced value is separated by a comma.
|
531
|
-
#
|
534
|
+
#
|
532
535
|
# * **Hash** value is output with keys in sorted order enclosed in `{}` with each entry formatted
|
533
536
|
# on the form `'k' => v` where
|
534
537
|
# `k` is the key in string form and _v_ is the value of the key. Entries are comma separated.
|
535
538
|
#
|
536
539
|
# For both Array and Hash this method is called recursively to format contained values.
|
537
540
|
# @note this method does not protect against infinite structures.
|
538
|
-
#
|
541
|
+
#
|
539
542
|
# @return [String] The formatted value in string form.
|
540
543
|
#
|
541
544
|
def self.format_value_for_display(value)
|