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
@@ -8,6 +8,6 @@ Puppet::Parser::Functions::newfunction(:fqdn_rand, :arity => -2, :type => :rvalu
|
|
8
8
|
$random_number = fqdn_rand(30)
|
9
9
|
$random_number_seed = fqdn_rand(30,30)") do |args|
|
10
10
|
max = args.shift.to_i
|
11
|
-
|
12
|
-
|
11
|
+
seed = Digest::MD5.hexdigest([self['::fqdn'],args].join(':')).hex
|
12
|
+
Puppet::Util.deterministic_rand(seed,max)
|
13
13
|
end
|
@@ -1,6 +1,24 @@
|
|
1
|
+
require 'hiera_puppet'
|
2
|
+
|
1
3
|
module Puppet::Parser::Functions
|
2
|
-
newfunction(:hiera, :type => :rvalue, :arity => -2
|
3
|
-
|
4
|
+
newfunction(:hiera, :type => :rvalue, :arity => -2, :doc => "Performs a
|
5
|
+
standard priority lookup and returns the most specific value for a given key.
|
6
|
+
The returned value can be data of any type (strings, arrays, or hashes).
|
7
|
+
|
8
|
+
In addition to the required `key` argument, `hiera` accepts two additional
|
9
|
+
arguments:
|
10
|
+
|
11
|
+
- a `default` argument in the second position, providing a value to be
|
12
|
+
returned in the absence of matches to the `key` argument
|
13
|
+
- an `override` argument in the third position, providing a data source
|
14
|
+
to consult for matching values, even if it would not ordinarily be
|
15
|
+
part of the matched hierarchy. If Hiera doesn't find a matching key
|
16
|
+
in the named override data source, it will continue to search through the
|
17
|
+
rest of the hierarchy.
|
18
|
+
|
19
|
+
More thorough examples of `hiera` are available at:
|
20
|
+
<http://docs.puppetlabs.com/hiera/1/puppet.html#hiera-lookup-functions>
|
21
|
+
") do |*args|
|
4
22
|
key, default, override = HieraPuppet.parse_args(args)
|
5
23
|
HieraPuppet.lookup(key, default, self, override, :priority)
|
6
24
|
end
|
@@ -1,6 +1,25 @@
|
|
1
|
+
require 'hiera_puppet'
|
2
|
+
|
1
3
|
module Puppet::Parser::Functions
|
2
|
-
newfunction(:hiera_array, :type => :rvalue, :arity => -2
|
3
|
-
|
4
|
+
newfunction(:hiera_array, :type => :rvalue, :arity => -2,:doc => "Returns all
|
5
|
+
matches throughout the hierarchy --- not just the first match --- as a flattened array of unique values.
|
6
|
+
If any of the matched values are arrays, they're flattened and included in the results.
|
7
|
+
|
8
|
+
In addition to the required `key` argument, `hiera_array` accepts two additional
|
9
|
+
arguments:
|
10
|
+
|
11
|
+
- a `default` argument in the second position, providing a string or array to be returned
|
12
|
+
in the absence of matches to the `key` argument
|
13
|
+
- an `override` argument in the third position, providing a data source to consult for
|
14
|
+
matching values, even if it would not ordinarily be part of the matched hierarchy.
|
15
|
+
If Hiera doesn't find a matching key in the named override data source, it will
|
16
|
+
continue to search through the rest of the hierarchy.
|
17
|
+
|
18
|
+
If any matched value is a hash, puppet will raise a type mismatch error.
|
19
|
+
|
20
|
+
More thorough examples of `hiera` are available at:
|
21
|
+
<http://docs.puppetlabs.com/hiera/1/puppet.html#hiera-lookup-functions>
|
22
|
+
") do |*args|
|
4
23
|
key, default, override = HieraPuppet.parse_args(args)
|
5
24
|
HieraPuppet.lookup(key, default, self, override, :array)
|
6
25
|
end
|
@@ -1,6 +1,27 @@
|
|
1
|
+
require 'hiera_puppet'
|
2
|
+
|
1
3
|
module Puppet::Parser::Functions
|
2
|
-
newfunction(:hiera_hash, :type => :rvalue, :arity => -2
|
3
|
-
|
4
|
+
newfunction(:hiera_hash, :type => :rvalue, :arity => -2, :doc =>
|
5
|
+
"Returns a merged hash of matches from throughout the hierarchy. In cases where two or
|
6
|
+
more hashes share keys, the hierarchy order determines which key/value pair will be
|
7
|
+
used in the returned hash, with the pair in the highest priority data source winning.
|
8
|
+
|
9
|
+
In addition to the required `key` argument, `hiera_hash` accepts two additional
|
10
|
+
arguments:
|
11
|
+
|
12
|
+
- a `default` argument in the second position, providing a hash to be returned in the
|
13
|
+
absence of any matches for the `key` argument
|
14
|
+
- an `override` argument in the third position, providing a data source to insert at
|
15
|
+
the top of the hierarchy, even if it would not ordinarily match during a Hiera data
|
16
|
+
source lookup. If Hiera doesn't find a match in the named override data source, it will
|
17
|
+
continue to search through the rest of the hierarchy.
|
18
|
+
|
19
|
+
`hiera_hash` expects that all values returned will be hashes. If any of the values
|
20
|
+
found in the data sources are strings or arrays, puppet will raise a type mismatch error.
|
21
|
+
|
22
|
+
More thorough examples of `hiera_hash` are available at:
|
23
|
+
<http://docs.puppetlabs.com/hiera/1/puppet.html#hiera-lookup-functions>
|
24
|
+
") do |*args|
|
4
25
|
key, default, override = HieraPuppet.parse_args(args)
|
5
26
|
HieraPuppet.lookup(key, default, self, override, :hash)
|
6
27
|
end
|
@@ -1,6 +1,37 @@
|
|
1
|
+
require 'hiera_puppet'
|
2
|
+
|
1
3
|
module Puppet::Parser::Functions
|
2
|
-
newfunction(:hiera_include, :arity => -2
|
3
|
-
|
4
|
+
newfunction(:hiera_include, :arity => -2, :doc => "Assigns classes to a node
|
5
|
+
using an array merge lookup that retrieves the value for a user-specified key
|
6
|
+
from a Hiera data source.
|
7
|
+
|
8
|
+
To use `hiera_include`, the following configuration is required:
|
9
|
+
|
10
|
+
- A key name to use for classes, e.g. `classes`.
|
11
|
+
- A line in the puppet `sites.pp` file (e.g. `/etc/puppet/manifests/sites.pp`)
|
12
|
+
reading `hiera_include('classes')`. Note that this line must be outside any node
|
13
|
+
definition and below any top-scope variables in use for Hiera lookups.
|
14
|
+
- Class keys in the appropriate data sources. In a data source keyed to a node's role,
|
15
|
+
one might have:
|
16
|
+
|
17
|
+
---
|
18
|
+
classes:
|
19
|
+
- apache
|
20
|
+
- apache::passenger
|
21
|
+
|
22
|
+
In addition to the required `key` argument, `hiera_include` accepts two additional
|
23
|
+
arguments:
|
24
|
+
|
25
|
+
- a `default` argument in the second position, providing an array to be returned
|
26
|
+
in the absence of matches to the `key` argument
|
27
|
+
- an `override` argument in the third position, providing a data source to consult
|
28
|
+
for matching values, even if it would not ordinarily be part of the matched hierarchy.
|
29
|
+
If Hiera doesn't find a matching key in the named override data source, it will continue
|
30
|
+
to search through the rest of the hierarchy.
|
31
|
+
|
32
|
+
More thorough examples of `hiera_include` are available at:
|
33
|
+
<http://docs.puppetlabs.com/hiera/1/puppet.html#hiera-lookup-functions>
|
34
|
+
") do |*args|
|
4
35
|
key, default, override = HieraPuppet.parse_args(args)
|
5
36
|
if answer = HieraPuppet.lookup(key, default, self, override, :array)
|
6
37
|
method = Puppet::Parser::Functions.function(:include)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Puppet::Parser::Functions::newfunction(:inline_template, :type => :rvalue, :arity => -2, :doc =>
|
2
|
-
"Evaluate a template string and return its value. See
|
3
|
-
[the templating docs](http://docs.puppetlabs.com/guides/templating.html) for
|
4
|
-
more information. Note that if multiple template strings are specified, their
|
2
|
+
"Evaluate a template string and return its value. See
|
3
|
+
[the templating docs](http://docs.puppetlabs.com/guides/templating.html) for
|
4
|
+
more information. Note that if multiple template strings are specified, their
|
5
5
|
output is all concatenated and returned as the output of the function.") do |vals|
|
6
|
-
|
6
|
+
|
7
7
|
require 'erb'
|
8
8
|
|
9
9
|
vals.collect do |string|
|
@@ -0,0 +1,74 @@
|
|
1
|
+
Puppet::Parser::Functions::newfunction(
|
2
|
+
:reduce,
|
3
|
+
:type => :rvalue,
|
4
|
+
:arity => -2,
|
5
|
+
:doc => <<-'ENDHEREDOC') do |args|
|
6
|
+
Applies a parameterized block to each element in a sequence of entries from the first
|
7
|
+
argument (_the collection_) and returns the last result of the invocation of the parameterized block.
|
8
|
+
|
9
|
+
This function takes two mandatory arguments: the first should be an Array or a Hash, and the last
|
10
|
+
a parameterized block as produced by the puppet syntax:
|
11
|
+
|
12
|
+
$a.reduce |$memo, $x| { ... }
|
13
|
+
|
14
|
+
When the first argument is an Array, the block is called with each entry in turn. When the first argument
|
15
|
+
is a hash each entry is converted to an array with `[key, value]` before being fed to the block. An optional
|
16
|
+
'start memo' value may be supplied as an argument between the array/hash and mandatory block.
|
17
|
+
|
18
|
+
If no 'start memo' is given, the first invocation of the parameterized block will be given the first and second
|
19
|
+
elements of the collection, and if the collection has fewer than 2 elements, the first
|
20
|
+
element is produced as the result of the reduction without invocation of the block.
|
21
|
+
|
22
|
+
On each subsequent invocations, the produced value of the invoked parameterized block is given as the memo in the
|
23
|
+
next invocation.
|
24
|
+
|
25
|
+
*Examples*
|
26
|
+
|
27
|
+
# Reduce an array
|
28
|
+
$a = [1,2,3]
|
29
|
+
$a.reduce |$memo, $entry| { $memo + $entry }
|
30
|
+
#=> 6
|
31
|
+
|
32
|
+
# Reduce hash values
|
33
|
+
$a = {a => 1, b => 2, c => 3}
|
34
|
+
$a.reduce |$memo, $entry| { [sum, $memo[1]+$entry[1]] }
|
35
|
+
#=> [sum, 6]
|
36
|
+
|
37
|
+
It is possible to provide a starting 'memo' as an argument.
|
38
|
+
|
39
|
+
*Examples*
|
40
|
+
# Reduce an array
|
41
|
+
$a = [1,2,3]
|
42
|
+
$a.reduce(4) |$memo, $entry| { $memo + $entry }
|
43
|
+
#=> 10
|
44
|
+
|
45
|
+
# Reduce hash values
|
46
|
+
$a = {a => 1, b => 2, c => 3}
|
47
|
+
$a.reduce([na, 4]) |$memo, $entry| { [sum, $memo[1]+$entry[1]] }
|
48
|
+
#=> [sum, 10]
|
49
|
+
|
50
|
+
Since 3.2
|
51
|
+
ENDHEREDOC
|
52
|
+
|
53
|
+
require 'puppet/parser/ast/lambda'
|
54
|
+
case args.length
|
55
|
+
when 2
|
56
|
+
pblock = args[1]
|
57
|
+
when 3
|
58
|
+
pblock = args[2]
|
59
|
+
else
|
60
|
+
raise ArgumentError, ("reduce(): wrong number of arguments (#{args.length}; must be 2 or 3)")
|
61
|
+
end
|
62
|
+
unless pblock.is_a? Puppet::Parser::AST::Lambda
|
63
|
+
raise ArgumentError, ("reduce(): wrong argument type (#{args[1].class}; must be a parameterized block.")
|
64
|
+
end
|
65
|
+
receiver = args[0]
|
66
|
+
unless [Array, Hash].include?(receiver.class)
|
67
|
+
raise ArgumentError, ("collect(): wrong argument type (#{args[0].class}; must be an Array or a Hash.")
|
68
|
+
end
|
69
|
+
if args.length == 3
|
70
|
+
receiver.reduce(args[1]) {|memo, x| pblock.call(self, memo, x) }
|
71
|
+
else
|
72
|
+
receiver.reduce {|memo, x| pblock.call(self, memo, x) }
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'puppet/parser/ast/lambda'
|
2
|
+
|
3
|
+
Puppet::Parser::Functions::newfunction(
|
4
|
+
:reject,
|
5
|
+
:type => :rvalue,
|
6
|
+
:arity => 2,
|
7
|
+
:doc => <<-'ENDHEREDOC') do |args|
|
8
|
+
Applies a parameterized block to each element in a sequence of entries from the first
|
9
|
+
argument and returns an array with the entires for which the block did *not* evaluate to true.
|
10
|
+
|
11
|
+
This function takes two mandatory arguments: the first should be an Array or a Hash, and the second
|
12
|
+
a parameterized block as produced by the puppet syntax:
|
13
|
+
|
14
|
+
$a.reject |$x| { ... }
|
15
|
+
|
16
|
+
When the first argument is an Array, the block is called with each entry in turn. When the first argument
|
17
|
+
is a hash the entry is an array with `[key, value]`.
|
18
|
+
|
19
|
+
The returned filtered object is of the same type as the receiver.
|
20
|
+
|
21
|
+
*Examples*
|
22
|
+
|
23
|
+
# selects all that does not end with berry
|
24
|
+
$a = ["rasberry", "blueberry", "orange"]
|
25
|
+
$a.reject |$x| { $x =~ /berry$/ }
|
26
|
+
|
27
|
+
Since 3.2
|
28
|
+
ENDHEREDOC
|
29
|
+
|
30
|
+
receiver = args[0]
|
31
|
+
pblock = args[1]
|
32
|
+
|
33
|
+
raise ArgumentError, ("reject(): wrong argument type (#{pblock.class}; must be a parameterized block.") unless pblock.is_a? Puppet::Parser::AST::Lambda
|
34
|
+
|
35
|
+
case receiver
|
36
|
+
when Array
|
37
|
+
receiver.reject {|x| pblock.call(self, x) }
|
38
|
+
when Hash
|
39
|
+
result = receiver.reject {|x, y| pblock.call(self, [x, y]) }
|
40
|
+
# Ruby 1.8.7 returns Array
|
41
|
+
result = Hash[result] unless result.is_a? Hash
|
42
|
+
result
|
43
|
+
else
|
44
|
+
raise ArgumentError, ("reject(): wrong argument type (#{receiver.class}; must be an Array or a Hash.")
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'puppet/parser/ast/lambda'
|
2
|
+
|
3
|
+
Puppet::Parser::Functions::newfunction(
|
4
|
+
:select,
|
5
|
+
:type => :rvalue,
|
6
|
+
:arity => 2,
|
7
|
+
:doc => <<-'ENDHEREDOC') do |args|
|
8
|
+
Applies a parameterized block to each element in a sequence of entries from the first
|
9
|
+
argument and returns an array with the entires for which the block evaluates to true.
|
10
|
+
|
11
|
+
This function takes two mandatory arguments: the first should be an Array or a Hash, and the second
|
12
|
+
a parameterized block as produced by the puppet syntax:
|
13
|
+
|
14
|
+
$a.select |$x| { ... }
|
15
|
+
|
16
|
+
When the first argument is an Array, the block is called with each entry in turn. When the first argument
|
17
|
+
is a hash the entry is an array with `[key, value]`.
|
18
|
+
|
19
|
+
The returned filtered object is of the same type as the receiver.
|
20
|
+
|
21
|
+
*Examples*
|
22
|
+
|
23
|
+
# selects all that end with berry
|
24
|
+
$a = ["raspberry", "blueberry", "orange"]
|
25
|
+
$a.select |$x| { $x =~ /berry$/ }
|
26
|
+
|
27
|
+
Since 3.2
|
28
|
+
ENDHEREDOC
|
29
|
+
|
30
|
+
receiver = args[0]
|
31
|
+
pblock = args[1]
|
32
|
+
|
33
|
+
raise ArgumentError, ("select(): wrong argument type (#{pblock.class}; must be a parameterized block.") unless pblock.is_a? Puppet::Parser::AST::Lambda
|
34
|
+
|
35
|
+
case receiver
|
36
|
+
when Array
|
37
|
+
receiver.select {|x| pblock.call(self, x) }
|
38
|
+
when Hash
|
39
|
+
result = receiver.select {|x, y| pblock.call(self, [x, y]) }
|
40
|
+
# Ruby 1.8.7 returns Array
|
41
|
+
result = Hash[result] unless result.is_a? Hash
|
42
|
+
result
|
43
|
+
else
|
44
|
+
raise ArgumentError, ("select(): wrong argument type (#{receiver.class}; must be an Array or a Hash.")
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
Puppet::Parser::Functions::newfunction(
|
2
|
+
:slice,
|
3
|
+
:type => :rvalue,
|
4
|
+
:arity => -2,
|
5
|
+
:doc => <<-'ENDHEREDOC') do |args|
|
6
|
+
Applies a parameterized block to each _slice_ of elements in a sequence of selected entries from the first
|
7
|
+
argument and returns the first argument, or if no block is given returns a new array with a concatenation of
|
8
|
+
the slices.
|
9
|
+
|
10
|
+
This function takes two mandatory arguments: the first should be an Array or a Hash, and the second
|
11
|
+
the number of elements to include in each slice. The optional third argument should be a
|
12
|
+
a parameterized block as produced by the puppet syntax:
|
13
|
+
|
14
|
+
|$x| { ... }
|
15
|
+
|
16
|
+
The parameterized block should have either one parameter (receiving an array with the slice), or the same number
|
17
|
+
of parameters as specified by the slice size (each parameter receiving its part of the slice).
|
18
|
+
In case there are fewer remaining elements than the slice size for the last slice it will contain the remaining
|
19
|
+
elements. When the block has multiple parameters, excess parameters are set to :undef for an array, and to
|
20
|
+
empty arrays for a Hash.
|
21
|
+
|
22
|
+
$a.slice(2) |$first, $second| { ... }
|
23
|
+
|
24
|
+
When the first argument is a Hash, each key,value entry is counted as one, e.g, a slice size of 2 will produce
|
25
|
+
an array of two arrays with key, value.
|
26
|
+
|
27
|
+
$a.slice(2) |$entry| { notice "first ${$entry[0]}, second ${$entry[1]}" }
|
28
|
+
$a.slice(2) |$first, $second| { notice "first ${first}, second ${second}" }
|
29
|
+
|
30
|
+
When called without a block, the function produces a concatenated result of the slices.
|
31
|
+
|
32
|
+
slice($[1,2,3,4,5,6], 2) # produces [[1,2], [3,4], [5,6]]
|
33
|
+
|
34
|
+
Since 3.2
|
35
|
+
ENDHEREDOC
|
36
|
+
require 'puppet/parser/ast/lambda'
|
37
|
+
require 'puppet/parser/scope'
|
38
|
+
|
39
|
+
def each_Common(o, slice_size, filler, scope, pblock)
|
40
|
+
serving_size = pblock ? pblock.parameter_count : 1
|
41
|
+
if serving_size == 0
|
42
|
+
raise ArgumentError, "Block must define at least one parameter."
|
43
|
+
end
|
44
|
+
unless serving_size == 1 || serving_size == slice_size
|
45
|
+
raise ArgumentError, "Block must define one parameter, or the same number of parameters as the given size of the slice (#{slice_size})."
|
46
|
+
end
|
47
|
+
enumerator = o.each_slice(slice_size)
|
48
|
+
result = []
|
49
|
+
if serving_size == 1
|
50
|
+
((o.size.to_f / slice_size).ceil).times do
|
51
|
+
if pblock
|
52
|
+
pblock.call(scope, enumerator.next)
|
53
|
+
else
|
54
|
+
result << enumerator.next
|
55
|
+
end
|
56
|
+
end
|
57
|
+
else
|
58
|
+
((o.size.to_f / slice_size).ceil).times do
|
59
|
+
a = enumerator.next
|
60
|
+
if a.size < serving_size
|
61
|
+
a = a.dup.fill(filler, a.length...serving_size)
|
62
|
+
end
|
63
|
+
pblock.call(scope, *a)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
if pblock
|
67
|
+
o
|
68
|
+
else
|
69
|
+
result
|
70
|
+
end
|
71
|
+
end
|
72
|
+
raise ArgumentError, ("slice(): wrong number of arguments (#{args.length}; must be 2 or 3)") unless args.length == 2 || args.length == 3
|
73
|
+
if args.length >= 2
|
74
|
+
begin
|
75
|
+
slice_size = Puppet::Parser::Scope.number?(args[1])
|
76
|
+
rescue
|
77
|
+
raise ArgumentError, ("slice(): wrong argument type (#{args[1]}; must be number.")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
raise ArgumentError, ("slice(): wrong argument type (#{args[1]}; must be number.") unless slice_size
|
81
|
+
raise ArgumentError, ("slice(): wrong argument value: #{slice_size}; is not an positive integer number > 0") unless slice_size.is_a?(Fixnum) && slice_size > 0
|
82
|
+
receiver = args[0]
|
83
|
+
|
84
|
+
# the block is optional, ok if nil, function then produces an array
|
85
|
+
pblock = args[2]
|
86
|
+
raise ArgumentError, ("slice(): wrong argument type (#{args[2].class}; must be a parameterized block.") unless pblock.is_a?(Puppet::Parser::AST::Lambda) || args.length == 2
|
87
|
+
|
88
|
+
case receiver
|
89
|
+
when Array
|
90
|
+
each_Common(receiver, slice_size, :undef, self, pblock)
|
91
|
+
when Hash
|
92
|
+
each_Common(receiver, slice_size, [], self, pblock)
|
93
|
+
else
|
94
|
+
raise ArgumentError, ("slice(): wrong argument type (#{args[0].class}; must be an Array or a Hash.")
|
95
|
+
end
|
96
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
Puppet::Parser::Functions::newfunction(:template, :type => :rvalue, :arity => -2, :doc =>
|
2
2
|
"Evaluate a template and return its value. See
|
3
|
-
[the templating docs](http://docs.puppetlabs.com/guides/templating.html) for
|
3
|
+
[the templating docs](http://docs.puppetlabs.com/guides/templating.html) for
|
4
4
|
more information.
|
5
|
-
|
5
|
+
|
6
6
|
Note that if multiple templates are specified, their output is all
|
7
7
|
concatenated and returned as the output of the function.") do |vals|
|
8
8
|
vals.collect do |file|
|
@@ -12,13 +12,13 @@ token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN
|
|
12
12
|
token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSREF
|
13
13
|
token NOT OR AND UNDEF PARROW PLUS MINUS TIMES DIV LSHIFT RSHIFT UMINUS
|
14
14
|
token MATCH NOMATCH REGEX IN_EDGE OUT_EDGE IN_EDGE_SUB OUT_EDGE_SUB
|
15
|
-
token IN UNLESS
|
15
|
+
token IN UNLESS MODULO
|
16
16
|
|
17
17
|
prechigh
|
18
18
|
right NOT
|
19
19
|
nonassoc UMINUS
|
20
20
|
left IN MATCH NOMATCH
|
21
|
-
left TIMES DIV
|
21
|
+
left TIMES DIV MODULO
|
22
22
|
left MINUS PLUS
|
23
23
|
left LSHIFT RSHIFT
|
24
24
|
left NOTEQUAL ISEQUAL
|
@@ -32,7 +32,7 @@ program: statements_and_declarations
|
|
32
32
|
| nil
|
33
33
|
|
34
34
|
statements_and_declarations: statement_or_declaration {
|
35
|
-
result = ast AST::
|
35
|
+
result = ast AST::BlockExpression, :children => (val[0] ? [val[0]] : [])
|
36
36
|
}
|
37
37
|
| statements_and_declarations statement_or_declaration {
|
38
38
|
if val[1]
|
@@ -488,6 +488,9 @@ expression: rvalue
|
|
488
488
|
}
|
489
489
|
| expression TIMES expression {
|
490
490
|
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
491
|
+
}
|
492
|
+
| expression MODULO expression {
|
493
|
+
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
491
494
|
}
|
492
495
|
| expression LSHIFT expression {
|
493
496
|
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
@@ -550,7 +553,7 @@ caseopt: casevalues COLON LBRACE statements RBRACE {
|
|
550
553
|
AST::CaseOpt,
|
551
554
|
:value => val[0],
|
552
555
|
|
553
|
-
:statements => ast(AST::
|
556
|
+
:statements => ast(AST::BlockExpression)
|
554
557
|
)
|
555
558
|
}
|
556
559
|
|