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
@@ -1,11 +1,12 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
require 'spec_helper'
|
3
|
+
require 'puppet/parser/parser_factory'
|
3
4
|
|
4
|
-
describe Puppet::Parser::Parser do
|
5
|
+
describe "Puppet::Parser::Parser" do
|
5
6
|
module ParseMatcher
|
6
7
|
class ParseAs
|
7
8
|
def initialize(klass)
|
8
|
-
@parser = Puppet::Parser::
|
9
|
+
@parser = Puppet::Parser::ParserFactory.parser("development")
|
9
10
|
@class = klass
|
10
11
|
end
|
11
12
|
|
@@ -38,7 +39,7 @@ describe Puppet::Parser::Parser do
|
|
38
39
|
|
39
40
|
class ParseWith
|
40
41
|
def initialize(block)
|
41
|
-
@parser = Puppet::Parser::
|
42
|
+
@parser = Puppet::Parser::ParserFactory.parser("development")
|
42
43
|
@block = block
|
43
44
|
end
|
44
45
|
|
@@ -74,76 +75,193 @@ describe Puppet::Parser::Parser do
|
|
74
75
|
|
75
76
|
before :each do
|
76
77
|
@resource_type_collection = Puppet::Resource::TypeCollection.new("env")
|
77
|
-
@parser = Puppet::Parser::
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "when parsing comments before statement" do
|
81
|
-
it "should associate the documentation to the statement AST node" do
|
82
|
-
ast = @parser.parse("""
|
83
|
-
# comment
|
84
|
-
class test {}
|
85
|
-
""")
|
78
|
+
@parser = Puppet::Parser::ParserFactory.parser("development")
|
86
79
|
|
87
|
-
|
88
|
-
ast.code[0].name.should == 'test'
|
89
|
-
ast.code[0].instantiate('')[0].doc.should == "comment\n"
|
90
|
-
end
|
80
|
+
# @parser = Puppet::Parser::Parser.new "development"
|
91
81
|
end
|
82
|
+
shared_examples_for 'a puppet parser' do
|
83
|
+
describe "when parsing comments before statement" do
|
84
|
+
it "should associate the documentation to the statement AST node" do
|
85
|
+
if Puppet[:parser] == 'future'
|
86
|
+
pending "egrammar does not yet process comments"
|
87
|
+
end
|
88
|
+
ast = @parser.parse("""
|
89
|
+
# comment
|
90
|
+
class test {}
|
91
|
+
""")
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
ast.code[0].should be_a(Puppet::Parser::AST::Hostclass)
|
94
|
+
ast.code[0].name.should == 'test'
|
95
|
+
ast.code[0].instantiate('')[0].doc.should == "comment\n"
|
96
|
+
end
|
96
97
|
end
|
97
98
|
|
98
|
-
|
99
|
-
"
|
100
|
-
|
99
|
+
describe "when parsing" do
|
100
|
+
it "should be able to parse normal left to right relationships" do
|
101
|
+
"Notify[foo] -> Notify[bar]".should parse_as(Puppet::Parser::AST::Relationship)
|
102
|
+
end
|
101
103
|
|
102
|
-
|
103
|
-
|
104
|
-
|
104
|
+
it "should be able to parse right to left relationships" do
|
105
|
+
"Notify[foo] <- Notify[bar]".should parse_as(Puppet::Parser::AST::Relationship)
|
106
|
+
end
|
105
107
|
|
106
|
-
|
107
|
-
|
108
|
-
|
108
|
+
it "should be able to parse normal left to right subscriptions" do
|
109
|
+
"Notify[foo] ~> Notify[bar]".should parse_as(Puppet::Parser::AST::Relationship)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should be able to parse right to left subscriptions" do
|
113
|
+
"Notify[foo] <~ Notify[bar]".should parse_as(Puppet::Parser::AST::Relationship)
|
114
|
+
end
|
109
115
|
|
110
|
-
|
111
|
-
|
116
|
+
it "should correctly set the arrow type of a relationship" do
|
117
|
+
"Notify[foo] <~ Notify[bar]".should parse_with { |rel| rel.arrow == "<~" }
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should be able to parse deep hash access" do
|
121
|
+
%q{
|
122
|
+
$hash = { 'a' => { 'b' => { 'c' => 'it works' } } }
|
123
|
+
$out = $hash['a']['b']['c']
|
124
|
+
}.should parse_with { |v| v.value.is_a?(Puppet::Parser::AST::ASTHash) }
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should fail if asked to parse '$foo::::bar'" do
|
128
|
+
expect { @parser.parse("$foo::::bar") }.to raise_error(Puppet::ParseError, /Syntax error at ':'/)
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "function calls" do
|
132
|
+
it "should be able to pass an array to a function" do
|
133
|
+
"my_function([1,2,3])".should parse_with { |fun|
|
134
|
+
fun.is_a?(Puppet::Parser::AST::Function) &&
|
135
|
+
fun.arguments[0].evaluate(stub 'scope') == ['1','2','3']
|
136
|
+
}
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should be able to pass a hash to a function" do
|
140
|
+
"my_function({foo => bar})".should parse_with { |fun|
|
141
|
+
fun.is_a?(Puppet::Parser::AST::Function) &&
|
142
|
+
fun.arguments[0].evaluate(stub 'scope') == {'foo' => 'bar'}
|
143
|
+
}
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "collections" do
|
148
|
+
it "should find resources according to an expression" do
|
149
|
+
%q{ File <| mode == 0700 + 0050 + 0050 |> }.should parse_with { |coll|
|
150
|
+
coll.is_a?(Puppet::Parser::AST::Collection) &&
|
151
|
+
coll.query.evaluate(stub 'scope').first == ["mode", "==", 0700 + 0050 + 0050]
|
152
|
+
}
|
153
|
+
end
|
154
|
+
end
|
112
155
|
end
|
156
|
+
end
|
113
157
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
$out = $hash['a']['b']['c']
|
118
|
-
}.should parse_with { |v| v.value.is_a?(Puppet::Parser::AST::ASTHash) }
|
158
|
+
describe 'using classic parser' do
|
159
|
+
before :each do
|
160
|
+
Puppet[:parser] = 'current'
|
119
161
|
end
|
162
|
+
it_behaves_like 'a puppet parser'
|
163
|
+
end
|
120
164
|
|
121
|
-
|
122
|
-
|
165
|
+
describe 'using future parser' do
|
166
|
+
before :each do
|
167
|
+
Puppet[:parser] = 'future'
|
123
168
|
end
|
169
|
+
it_behaves_like 'a puppet parser'
|
124
170
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
171
|
+
context 'more detailed errors should be generated' do
|
172
|
+
before :each do
|
173
|
+
Puppet[:parser] = 'future'
|
174
|
+
@resource_type_collection = Puppet::Resource::TypeCollection.new("env")
|
175
|
+
@parser = Puppet::Parser::ParserFactory.parser("development")
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'should flag illegal type references' do
|
179
|
+
source = <<-SOURCE.gsub(/^ {8}/,'')
|
180
|
+
1+1 { "title": }
|
181
|
+
SOURCE
|
182
|
+
# This error message is currently produced by the parser, and is not as detailed as desired
|
183
|
+
# It references position 16 at the closing '}'
|
184
|
+
expect { @parser.parse(source) }.to raise_error(/Expression is not valid as a resource.*line 1:16/)
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'should flag illegal type references and get position correct' do
|
188
|
+
source = <<-SOURCE.gsub(/^ {8}/,'')
|
189
|
+
1+1 { "title":
|
190
|
+
}
|
191
|
+
SOURCE
|
192
|
+
# This error message is currently produced by the parser, and is not as detailed as desired
|
193
|
+
# It references position 16 at the closing '}'
|
194
|
+
expect { @parser.parse(source) }.to raise_error(/Expression is not valid as a resource.*line 2:3/)
|
131
195
|
end
|
132
196
|
|
133
|
-
it
|
134
|
-
|
135
|
-
|
136
|
-
|
197
|
+
it 'should flag illegal use of non r-value producing if' do
|
198
|
+
source = <<-SOURCE.gsub(/^ {8}/,'')
|
199
|
+
$a = if true {
|
200
|
+
false
|
137
201
|
}
|
202
|
+
SOURCE
|
203
|
+
expect { @parser.parse(source) }.to raise_error(/An 'if' statement does not produce a value at line 1:6/)
|
138
204
|
end
|
139
|
-
end
|
140
205
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
coll.query.evaluate(stub 'scope').first == ["mode", "==", 0700 + 0050 + 0050]
|
206
|
+
it 'should flag illegal use of non r-value producing case' do
|
207
|
+
source = <<-SOURCE.gsub(/^ {8}/,'')
|
208
|
+
$a = case true {
|
209
|
+
false :{ }
|
146
210
|
}
|
211
|
+
SOURCE
|
212
|
+
expect { @parser.parse(source) }.to raise_error(/A 'case' statement does not produce a value at line 1:6/)
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'should flag illegal use of non r-value producing <| |>' do
|
216
|
+
expect { @parser.parse("$a = file <| |>") }.to raise_error(/A Virtual Query does not produce a value at line 1:6/)
|
217
|
+
end
|
218
|
+
|
219
|
+
it 'should flag illegal use of non r-value producing <<| |>>' do
|
220
|
+
expect { @parser.parse("$a = file <<| |>>") }.to raise_error(/An Exported Query does not produce a value at line 1:6/)
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'should flag illegal use of non r-value producing define' do
|
224
|
+
Puppet.expects(:err).with("Invalid use of expression. A 'define' expression does not produce a value at line 1:6")
|
225
|
+
Puppet.expects(:err).with("Classes, definitions, and nodes may only appear at toplevel or inside other classes at line 1:6")
|
226
|
+
expect { @parser.parse("$a = define foo { }") }.to raise_error(/2 errors/)
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'should flag illegal use of non r-value producing class' do
|
230
|
+
Puppet.expects(:err).with("Invalid use of expression. A Host Class Definition does not produce a value at line 1:6")
|
231
|
+
Puppet.expects(:err).with("Classes, definitions, and nodes may only appear at toplevel or inside other classes at line 1:6")
|
232
|
+
expect { @parser.parse("$a = class foo { }") }.to raise_error(/2 errors/)
|
233
|
+
end
|
234
|
+
|
235
|
+
it 'unclosed quote should be flagged for start position of string' do
|
236
|
+
source = <<-SOURCE.gsub(/^ {8}/,'')
|
237
|
+
$a = "xx
|
238
|
+
yyy
|
239
|
+
SOURCE
|
240
|
+
expect { @parser.parse(source) }.to raise_error(/Unclosed quote after '"' followed by 'xx\\nyy\.\.\.' at line 1:6/)
|
241
|
+
end
|
242
|
+
|
243
|
+
it 'can produce multiple errors and raise a summary exception' do
|
244
|
+
source = <<-SOURCE.gsub(/^ {8}/,'')
|
245
|
+
$a = node x { }
|
246
|
+
SOURCE
|
247
|
+
Puppet.expects(:err).with("Invalid use of expression. A Node Definition does not produce a value at line 1:6")
|
248
|
+
Puppet.expects(:err).with("Classes, definitions, and nodes may only appear at toplevel or inside other classes at line 1:6")
|
249
|
+
expect { @parser.parse(source) }.to raise_error(/2 errors/)
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'can produce detailed error for a bad hostname' do
|
253
|
+
source = <<-SOURCE.gsub(/^ {8}/,'')
|
254
|
+
node 'macbook+owned+by+name' { }
|
255
|
+
SOURCE
|
256
|
+
expect { @parser.parse(source) }.to raise_error(/The hostname 'macbook\+owned\+by\+name' contains illegal characters.*at line 1:6/)
|
257
|
+
end
|
258
|
+
|
259
|
+
it 'can produce detailed error for a hostname with interpolation' do
|
260
|
+
source = <<-SOURCE.gsub(/^ {8}/,'')
|
261
|
+
$name = 'fred'
|
262
|
+
node "macbook-owned-by$name" { }
|
263
|
+
SOURCE
|
264
|
+
expect { @parser.parse(source) }.to raise_error(/An interpolated expression is not allowed in a hostname of a node at line 2:24/)
|
147
265
|
end
|
148
266
|
end
|
149
267
|
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'puppet/file_bucket/dipper'
|
5
|
+
|
6
|
+
describe Puppet::Type.type(:cron).provider(:crontab), '(integration)', :unless => Puppet.features.microsoft_windows? do
|
7
|
+
include PuppetSpec::Files
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
Puppet::Type.type(:cron).stubs(:defaultprovider).returns described_class
|
11
|
+
Puppet::FileBucket::Dipper.any_instance.stubs(:backup) # Don't backup to filebucket
|
12
|
+
|
13
|
+
# I dont want to execute anything
|
14
|
+
described_class.stubs(:filetype).returns Puppet::Util::FileType::FileTypeFlat
|
15
|
+
described_class.stubs(:default_target).returns crontab_user1
|
16
|
+
|
17
|
+
# I dont want to stub Time.now to get a static header because I dont know
|
18
|
+
# where Time.now is used elsewere so just go with a very simple header
|
19
|
+
described_class.stubs(:header).returns "# HEADER: some simple\n# HEADER: header\n"
|
20
|
+
FileUtils.cp(my_fixture('crontab_user1'), crontab_user1)
|
21
|
+
FileUtils.cp(my_fixture('crontab_user2'), crontab_user2)
|
22
|
+
end
|
23
|
+
|
24
|
+
after :each do
|
25
|
+
described_class.clear
|
26
|
+
end
|
27
|
+
|
28
|
+
let :crontab_user1 do
|
29
|
+
tmpfile('cron_integration_specs')
|
30
|
+
end
|
31
|
+
|
32
|
+
let :crontab_user2 do
|
33
|
+
tmpfile('cron_integration_specs')
|
34
|
+
end
|
35
|
+
|
36
|
+
def run_in_catalog(*resources)
|
37
|
+
catalog = Puppet::Resource::Catalog.new
|
38
|
+
catalog.host_config = false
|
39
|
+
resources.each do |resource|
|
40
|
+
resource.expects(:err).never
|
41
|
+
catalog.add_resource(resource)
|
42
|
+
end
|
43
|
+
catalog.apply
|
44
|
+
end
|
45
|
+
|
46
|
+
def expect_output(fixture_name)
|
47
|
+
File.read(crontab_user1).should == File.read(my_fixture(fixture_name))
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "when managing a cron entry" do
|
51
|
+
describe "with ensure absent" do
|
52
|
+
it "should do nothing if entry already absent" do
|
53
|
+
resource = Puppet::Type.type(:cron).new(
|
54
|
+
:name => 'no_such_entry',
|
55
|
+
:ensure => :absent,
|
56
|
+
:target => crontab_user1,
|
57
|
+
:user => crontab_user1
|
58
|
+
)
|
59
|
+
run_in_catalog(resource)
|
60
|
+
expect_output('crontab_user1')
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should remove the resource from crontab if present" do
|
64
|
+
resource = Puppet::Type.type(:cron).new(
|
65
|
+
:name => 'My daily failure',
|
66
|
+
:ensure => :absent,
|
67
|
+
:target => crontab_user1,
|
68
|
+
:user => crontab_user1
|
69
|
+
)
|
70
|
+
run_in_catalog(resource)
|
71
|
+
expect_output('remove_named_resource')
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should remove a matching cronentry if present" do
|
75
|
+
resource = Puppet::Type.type(:cron).new(
|
76
|
+
:name => 'no_such_named_resource_in_crontab',
|
77
|
+
:ensure => :absent,
|
78
|
+
:minute => [ '17-19', '22' ],
|
79
|
+
:hour => [ '0-23/2' ],
|
80
|
+
:weekday => 'Tue',
|
81
|
+
:command => '/bin/unnamed_regular_command',
|
82
|
+
:target => crontab_user1,
|
83
|
+
:user => crontab_user1
|
84
|
+
)
|
85
|
+
run_in_catalog(resource)
|
86
|
+
expect_output('remove_unnamed_resource')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "with ensure present" do
|
91
|
+
it "should do nothing if entry already present" do
|
92
|
+
resource = Puppet::Type.type(:cron).new(
|
93
|
+
:name => 'My daily failure',
|
94
|
+
:special => 'daily',
|
95
|
+
:command => '/bin/false',
|
96
|
+
:target => crontab_user1,
|
97
|
+
:user => crontab_user1
|
98
|
+
)
|
99
|
+
run_in_catalog(resource)
|
100
|
+
expect_output('crontab_user1')
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should do nothing if a matching entry already present" do
|
104
|
+
resource = Puppet::Type.type(:cron).new(
|
105
|
+
:name => 'no_such_named_resource_in_crontab',
|
106
|
+
:ensure => :present,
|
107
|
+
:minute => [ '17-19', '22' ],
|
108
|
+
:hour => [ '0-23/2' ],
|
109
|
+
:command => '/bin/unnamed_regular_command',
|
110
|
+
:target => crontab_user1,
|
111
|
+
:user => crontab_user1
|
112
|
+
)
|
113
|
+
run_in_catalog(resource)
|
114
|
+
expect_output('crontab_user1')
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should add a new normal entry if currently absent" do
|
118
|
+
resource = Puppet::Type.type(:cron).new(
|
119
|
+
:name => 'new entry',
|
120
|
+
:ensure => :present,
|
121
|
+
:minute => '12',
|
122
|
+
:weekday => 'Tue',
|
123
|
+
:command => '/bin/new',
|
124
|
+
:environment => [
|
125
|
+
'MAILTO=""',
|
126
|
+
'SHELL=/bin/bash'
|
127
|
+
],
|
128
|
+
:target => crontab_user1,
|
129
|
+
:user => crontab_user1
|
130
|
+
)
|
131
|
+
run_in_catalog(resource)
|
132
|
+
expect_output('create_normal_entry')
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should add a new special entry if currently absent" do
|
136
|
+
resource = Puppet::Type.type(:cron).new(
|
137
|
+
:name => 'new special entry',
|
138
|
+
:ensure => :present,
|
139
|
+
:special => 'reboot',
|
140
|
+
:command => 'echo "Booted" 1>&2',
|
141
|
+
:environment => 'MAILTO=bob@company.com',
|
142
|
+
:target => crontab_user1,
|
143
|
+
:user => crontab_user1
|
144
|
+
)
|
145
|
+
run_in_catalog(resource)
|
146
|
+
expect_output('create_special_entry')
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should change existing entry if out of sync" do
|
150
|
+
resource = Puppet::Type.type(:cron).new(
|
151
|
+
:name => 'Monthly job',
|
152
|
+
:ensure => :present,
|
153
|
+
:special => 'monthly',
|
154
|
+
# :minute => ['22'],
|
155
|
+
:command => '/usr/bin/monthly',
|
156
|
+
:environment => [],
|
157
|
+
:target => crontab_user1,
|
158
|
+
:user => crontab_user1
|
159
|
+
)
|
160
|
+
run_in_catalog(resource)
|
161
|
+
expect_output('modify_entry')
|
162
|
+
end
|
163
|
+
it "should not try to move an entry from one file to another" do
|
164
|
+
# force the parsedfile provider to also parse user1's crontab
|
165
|
+
random_resource = Puppet::Type.type(:cron).new(
|
166
|
+
:name => 'foo',
|
167
|
+
:ensure => :absent,
|
168
|
+
:target => crontab_user1,
|
169
|
+
:user => crontab_user1
|
170
|
+
)
|
171
|
+
resource = Puppet::Type.type(:cron).new(
|
172
|
+
:name => 'My daily failure',
|
173
|
+
:special => 'daily',
|
174
|
+
:command => "/bin/false",
|
175
|
+
:target => crontab_user2,
|
176
|
+
:user => crontab_user2
|
177
|
+
)
|
178
|
+
run_in_catalog(resource)
|
179
|
+
File.read(crontab_user1).should == File.read(my_fixture('moved_cronjob_input1'))
|
180
|
+
File.read(crontab_user2).should == File.read(my_fixture('moved_cronjob_input2'))
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should not add multiple headers"
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|