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
@@ -11,14 +11,61 @@ describe provider_class do
|
|
11
11
|
cracklib-dicts 0 2.8.9 3.3 x86_64
|
12
12
|
basesystem 0 8.0 5.1.1.el5.centos noarch
|
13
13
|
chkconfig 0 1.3.30.2 2.el5 x86_64
|
14
|
+
myresource 0 1.2.3.4 5.el4 noarch
|
14
15
|
RPM_OUTPUT
|
15
16
|
end
|
16
17
|
|
18
|
+
let(:resource) do
|
19
|
+
Puppet::Type.type(:package).new(
|
20
|
+
:name => 'myresource',
|
21
|
+
:ensure => :installed
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
let(:provider) do
|
26
|
+
provider = provider_class.new
|
27
|
+
provider.resource = resource
|
28
|
+
provider
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:rpm_version) { "RPM version 5.0.0\n" }
|
32
|
+
|
33
|
+
before(:each) do
|
34
|
+
Puppet::Util.stubs(:which).with("rpm").returns("/bin/rpm")
|
35
|
+
subject.stubs(:which).with("rpm").returns("/bin/rpm")
|
36
|
+
subject.instance_variable_set("@current_version", nil)
|
37
|
+
Puppet::Type::Package::ProviderRpm.expects(:execute).with(["/bin/rpm", "--version"]).returns(rpm_version).at_most_once
|
38
|
+
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "--version"], {:failonfail => true, :combine => true, :custom_environment => {}}).returns(rpm_version).at_most_once
|
39
|
+
end
|
40
|
+
|
17
41
|
describe "self.instances" do
|
42
|
+
describe "with a modern version of RPM" do
|
43
|
+
it "should include all the modern flags" do
|
44
|
+
Puppet::Util::Execution.expects(:execpipe).with("/bin/rpm -qa --nosignature --nodigest --qf '%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\n'").yields(packages)
|
45
|
+
|
46
|
+
installed_packages = subject.instances
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "with a version of RPM < 4.1" do
|
51
|
+
let(:rpm_version) { "RPM version 4.0.2\n" }
|
52
|
+
it "should exclude the --nosignature flag" do
|
53
|
+
Puppet::Util::Execution.expects(:execpipe).with("/bin/rpm -qa --nodigest --qf '%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\n'").yields(packages)
|
54
|
+
|
55
|
+
installed_packages = subject.instances
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "with a version of RPM < 4.0.2" do
|
60
|
+
let(:rpm_version) { "RPM version 3.0.5\n" }
|
61
|
+
it "should exclude the --nodigest flag" do
|
62
|
+
Puppet::Util::Execution.expects(:execpipe).with("/bin/rpm -qa --qf '%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\n'").yields(packages)
|
63
|
+
|
64
|
+
installed_packages = subject.instances
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
18
68
|
it "returns an array of packages" do
|
19
|
-
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "--version"], {:failonfail => true, :combine => true, :custom_environment => {}}).returns("RPM version 5.x")
|
20
|
-
Puppet::Util.stubs(:which).with("rpm").returns("/bin/rpm")
|
21
|
-
subject.stubs(:which).with("rpm").returns("/bin/rpm")
|
22
69
|
Puppet::Util::Execution.expects(:execpipe).with("/bin/rpm -qa --nosignature --nodigest --qf '%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\n'").yields(packages)
|
23
70
|
|
24
71
|
installed_packages = subject.instances
|
@@ -55,4 +102,103 @@ describe provider_class do
|
|
55
102
|
}
|
56
103
|
end
|
57
104
|
end
|
105
|
+
|
106
|
+
describe "#install" do
|
107
|
+
let(:resource) do
|
108
|
+
Puppet::Type.type(:package).new(
|
109
|
+
:name => 'myresource',
|
110
|
+
:ensure => :installed,
|
111
|
+
:source => '/path/to/package'
|
112
|
+
)
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "when not already installed" do
|
116
|
+
it "should only include the '-i' flag" do
|
117
|
+
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-i", '/path/to/package'], {:failonfail => true, :combine => true, :custom_environment => {}})
|
118
|
+
provider.install
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "when an older version is installed" do
|
123
|
+
before(:each) do
|
124
|
+
# Force the provider to think a version of the package is already installed
|
125
|
+
# This is real hacky. I'm sorry. --jeffweiss 25 Jan 2013
|
126
|
+
provider.instance_variable_get('@property_hash')[:ensure] = '1.2.3.3'
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should include the '-U --oldpackage' flags" do
|
130
|
+
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", ["-U", "--oldpackage"], '/path/to/package'], {:failonfail => true, :combine => true, :custom_environment => {}})
|
131
|
+
provider.install
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe "#uninstall" do
|
137
|
+
let(:resource) do
|
138
|
+
Puppet::Type.type(:package).new(
|
139
|
+
:name => 'myresource',
|
140
|
+
:ensure => :installed
|
141
|
+
)
|
142
|
+
end
|
143
|
+
|
144
|
+
describe "on a modern RPM" do
|
145
|
+
before(:each) do
|
146
|
+
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", "myresource", '--nosignature', '--nodigest', "--qf", "%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\n"], {:failonfail => true, :combine => true, :custom_environment => {}}).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
|
147
|
+
end
|
148
|
+
|
149
|
+
let(:rpm_version) { "RPM version 4.10.0\n" }
|
150
|
+
|
151
|
+
it "should include the architecture in the package name" do
|
152
|
+
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-e", 'myresource-1.2.3.4-5.el4.noarch'], {:failonfail => true, :combine => true, :custom_environment => {}}).returns('').at_most_once
|
153
|
+
provider.uninstall
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
describe "on an ancient RPM" do
|
158
|
+
before(:each) do
|
159
|
+
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", "myresource", '', '', "--qf", "%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\n"], {:failonfail => true, :combine => true, :custom_environment => {}}).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
|
160
|
+
end
|
161
|
+
|
162
|
+
let(:rpm_version) { "RPM version 3.0.6\n" }
|
163
|
+
|
164
|
+
it "should exclude the architecture from the package name" do
|
165
|
+
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-e", 'myresource-1.2.3.4-5.el4'], {:failonfail => true, :combine => true, :custom_environment => {}}).returns('').at_most_once
|
166
|
+
provider.uninstall
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
describe ".nodigest" do
|
173
|
+
{ '4.0' => nil,
|
174
|
+
'4.0.1' => nil,
|
175
|
+
'4.0.2' => '--nodigest',
|
176
|
+
'4.0.3' => '--nodigest',
|
177
|
+
'4.1' => '--nodigest',
|
178
|
+
'5' => '--nodigest',
|
179
|
+
}.each do |version, expected|
|
180
|
+
describe "when current version is #{version}" do
|
181
|
+
it "should return #{expected.inspect}" do
|
182
|
+
subject.stubs(:current_version).returns(version)
|
183
|
+
subject.nodigest.should == expected
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe ".nosignature" do
|
190
|
+
{ '4.0.3' => nil,
|
191
|
+
'4.1' => '--nosignature',
|
192
|
+
'4.1.1' => '--nosignature',
|
193
|
+
'4.2' => '--nosignature',
|
194
|
+
'5' => '--nosignature',
|
195
|
+
}.each do |version, expected|
|
196
|
+
describe "when current version is #{version}" do
|
197
|
+
it "should return #{expected.inspect}" do
|
198
|
+
subject.stubs(:current_version).returns(version)
|
199
|
+
subject.nosignature.should == expected
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
58
204
|
end
|
@@ -25,6 +25,12 @@ describe provider do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
describe 'when installing' do
|
28
|
+
before(:each) do
|
29
|
+
Puppet::Util.stubs(:which).with("rpm").returns("/bin/rpm")
|
30
|
+
provider.stubs(:which).with("rpm").returns("/bin/rpm")
|
31
|
+
Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "--version"], {:combine => true, :custom_environment => {}, :failonfail => true}).returns("4.10.1\n").at_most_once
|
32
|
+
end
|
33
|
+
|
28
34
|
it 'should call yum install for :installed' do
|
29
35
|
@resource.stubs(:should).with(:ensure).returns :installed
|
30
36
|
@provider.expects(:yum).with('-d', '0', '-e', '0', '-y', :install, 'mypackage')
|
@@ -56,11 +62,6 @@ describe provider do
|
|
56
62
|
@provider.expects(:yum).with('-y', :erase, 'mypackage')
|
57
63
|
@provider.purge
|
58
64
|
end
|
59
|
-
|
60
|
-
it 'should use rpm to uninstall' do
|
61
|
-
@provider.expects(:rpm).with('-e', 'mypackage-1-1.i386')
|
62
|
-
@provider.uninstall
|
63
|
-
end
|
64
65
|
end
|
65
66
|
|
66
67
|
it 'should be versionable' do
|
@@ -5,55 +5,97 @@ require 'puppet/provider/parsedfile'
|
|
5
5
|
|
6
6
|
# Most of the tests for this are still in test/ral/provider/parsedfile.rb.
|
7
7
|
describe Puppet::Provider::ParsedFile do
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
|
9
|
+
# The ParsedFile provider class is meant to be used as an abstract base class
|
10
|
+
# but also stores a lot of state within the singleton class. To avoid
|
11
|
+
# sharing data between classes we construct an anonymous class that inherits
|
12
|
+
# the ParsedFile provider instead of directly working with the ParsedFile
|
13
|
+
# provider itself.
|
14
|
+
subject { Puppet::Type.newtype(:parsedfile_type).provide(:parsedfile_provider, :parent => described_class) }
|
11
15
|
|
12
16
|
describe "when looking up records loaded from disk" do
|
13
17
|
it "should return nil if no records have been loaded" do
|
14
|
-
|
18
|
+
subject.record?("foo").should be_nil
|
15
19
|
end
|
16
20
|
end
|
17
21
|
|
18
22
|
describe "when generating a list of instances" do
|
19
23
|
it "should return an instance for each record parsed from all of the registered targets" do
|
20
|
-
|
21
|
-
|
24
|
+
subject.expects(:targets).returns %w{/one /two}
|
25
|
+
subject.stubs(:skip_record?).returns false
|
22
26
|
one = [:uno1, :uno2]
|
23
27
|
two = [:dos1, :dos2]
|
24
|
-
|
25
|
-
|
28
|
+
subject.expects(:prefetch_target).with("/one").returns one
|
29
|
+
subject.expects(:prefetch_target).with("/two").returns two
|
26
30
|
|
27
31
|
results = []
|
28
32
|
(one + two).each do |inst|
|
29
33
|
results << inst.to_s + "_instance"
|
30
|
-
|
34
|
+
subject.expects(:new).with(inst).returns(results[-1])
|
31
35
|
end
|
32
36
|
|
33
|
-
|
37
|
+
subject.instances.should == results
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should ignore target when retrieve fails" do
|
41
|
+
subject.expects(:targets).returns %w{/one /two /three}
|
42
|
+
subject.stubs(:skip_record?).returns false
|
43
|
+
subject.expects(:retrieve).with("/one").returns [
|
44
|
+
{:name => 'target1_record1'},
|
45
|
+
{:name => 'target1_record2'}
|
46
|
+
]
|
47
|
+
subject.expects(:retrieve).with("/two").raises Puppet::Util::FileType::FileReadError, "some error"
|
48
|
+
subject.expects(:retrieve).with("/three").returns [
|
49
|
+
{:name => 'target3_record1'},
|
50
|
+
{:name => 'target3_record2'}
|
51
|
+
]
|
52
|
+
Puppet.expects(:err).with('Could not prefetch parsedfile_type provider \'parsedfile_provider\' target \'/two\': some error. Treating as empty')
|
53
|
+
subject.expects(:new).with(:name => 'target1_record1', :on_disk => true, :target => '/one', :ensure => :present).returns 'r1'
|
54
|
+
subject.expects(:new).with(:name => 'target1_record2', :on_disk => true, :target => '/one', :ensure => :present).returns 'r2'
|
55
|
+
subject.expects(:new).with(:name => 'target3_record1', :on_disk => true, :target => '/three', :ensure => :present).returns 'r3'
|
56
|
+
subject.expects(:new).with(:name => 'target3_record2', :on_disk => true, :target => '/three', :ensure => :present).returns 'r4'
|
57
|
+
|
58
|
+
subject.instances.should == %w{r1 r2 r3 r4}
|
34
59
|
end
|
35
60
|
|
36
61
|
it "should skip specified records" do
|
37
|
-
|
38
|
-
|
39
|
-
|
62
|
+
subject.expects(:targets).returns %w{/one}
|
63
|
+
subject.expects(:skip_record?).with(:uno).returns false
|
64
|
+
subject.expects(:skip_record?).with(:dos).returns true
|
40
65
|
one = [:uno, :dos]
|
41
|
-
|
66
|
+
subject.expects(:prefetch_target).returns one
|
67
|
+
|
68
|
+
subject.expects(:new).with(:uno).returns "eh"
|
69
|
+
subject.expects(:new).with(:dos).never
|
70
|
+
|
71
|
+
subject.instances
|
72
|
+
end
|
73
|
+
end
|
42
74
|
|
43
|
-
|
44
|
-
|
75
|
+
describe "when matching resources to existing records" do
|
76
|
+
let(:first_resource) { stub(:one, :name => :one) }
|
77
|
+
let(:second_resource) { stub(:two, :name => :two) }
|
45
78
|
|
46
|
-
|
79
|
+
let(:resources) {{:one => first_resource, :two => second_resource}}
|
80
|
+
|
81
|
+
it "returns a resource if the record name matches the resource name" do
|
82
|
+
record = {:name => :one}
|
83
|
+
subject.resource_for_record(record, resources).should be first_resource
|
84
|
+
end
|
85
|
+
|
86
|
+
it "doesn't return a resource if the record name doesn't match any resource names" do
|
87
|
+
record = {:name => :three}
|
88
|
+
subject.resource_for_record(record, resources).should be_nil
|
47
89
|
end
|
48
90
|
end
|
49
91
|
|
50
92
|
describe "when flushing a file's records to disk" do
|
51
93
|
before do
|
52
94
|
# This way we start with some @records, like we would in real life.
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
95
|
+
subject.stubs(:retrieve).returns []
|
96
|
+
subject.default_target = "/foo/bar"
|
97
|
+
subject.initvars
|
98
|
+
subject.prefetch
|
57
99
|
|
58
100
|
@filetype = Puppet::Util::FileType.filetype(:flat).new("/my/file")
|
59
101
|
Puppet::Util::FileType.filetype(:flat).stubs(:new).with("/my/file").returns @filetype
|
@@ -64,7 +106,7 @@ describe Puppet::Provider::ParsedFile do
|
|
64
106
|
it "should back up the file being written if the filetype can be backed up" do
|
65
107
|
@filetype.expects(:backup)
|
66
108
|
|
67
|
-
|
109
|
+
subject.flush_target("/my/file")
|
68
110
|
end
|
69
111
|
|
70
112
|
it "should not try to back up the file if the filetype cannot be backed up" do
|
@@ -73,22 +115,74 @@ describe Puppet::Provider::ParsedFile do
|
|
73
115
|
|
74
116
|
@filetype.stubs(:write)
|
75
117
|
|
76
|
-
|
118
|
+
subject.flush_target("/my/file")
|
77
119
|
end
|
78
120
|
|
79
121
|
it "should not back up the file more than once between calls to 'prefetch'" do
|
80
122
|
@filetype.expects(:backup).once
|
81
123
|
|
82
|
-
|
83
|
-
|
124
|
+
subject.flush_target("/my/file")
|
125
|
+
subject.flush_target("/my/file")
|
84
126
|
end
|
85
127
|
|
86
128
|
it "should back the file up again once the file has been reread" do
|
87
129
|
@filetype.expects(:backup).times(2)
|
88
130
|
|
89
|
-
|
90
|
-
|
91
|
-
|
131
|
+
subject.flush_target("/my/file")
|
132
|
+
subject.prefetch
|
133
|
+
subject.flush_target("/my/file")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "A very basic provider based on ParsedFile" do
|
139
|
+
|
140
|
+
let(:input_text) { File.read(my_fixture('simple.txt')) }
|
141
|
+
let(:target) { File.expand_path("/tmp/test") }
|
142
|
+
|
143
|
+
subject do
|
144
|
+
example_provider_class = Class.new(Puppet::Provider::ParsedFile)
|
145
|
+
example_provider_class.default_target = target
|
146
|
+
# Setup some record rules
|
147
|
+
example_provider_class.instance_eval do
|
148
|
+
text_line :text, :match => %r{.}
|
149
|
+
end
|
150
|
+
example_provider_class.initvars
|
151
|
+
example_provider_class.prefetch
|
152
|
+
# evade a race between multiple invocations of the header method
|
153
|
+
example_provider_class.stubs(:header).
|
154
|
+
returns("# HEADER As added by puppet.\n")
|
155
|
+
example_provider_class
|
156
|
+
end
|
157
|
+
|
158
|
+
context "writing file contents back to disk" do
|
159
|
+
it "should not change anything except from adding a header" do
|
160
|
+
input_records = subject.parse(input_text)
|
161
|
+
subject.to_file(input_records).
|
162
|
+
should match subject.header + input_text
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context "rewriting a file containing a native header" do
|
167
|
+
let(:regex) { %r/^# HEADER.*third party\.\n/ }
|
168
|
+
let(:input_records) { subject.parse(input_text) }
|
169
|
+
|
170
|
+
before :each do
|
171
|
+
subject.stubs(:native_header_regex).returns(regex)
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should move the native header to the top" do
|
175
|
+
subject.to_file(input_records).should_not match /\A#{subject.header}/
|
176
|
+
end
|
177
|
+
|
178
|
+
context "and dropping native headers found in input" do
|
179
|
+
before :each do
|
180
|
+
subject.stubs(:drop_native_header).returns(true)
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should not include the native header in the output" do
|
184
|
+
subject.to_file(input_records).should_not match regex
|
185
|
+
end
|
92
186
|
end
|
93
187
|
end
|
94
188
|
end
|
@@ -54,4 +54,22 @@ OUTPUT
|
|
54
54
|
|
55
55
|
@provider.rcvar_value.should == "YES"
|
56
56
|
end
|
57
|
+
|
58
|
+
it "should find the right rcvar_name" do
|
59
|
+
@provider.stubs(:rcvar).returns(['# ntpd', 'ntpd_enable="YES"'])
|
60
|
+
|
61
|
+
@provider.rcvar_name.should == "ntpd"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should enable only the selected service" do
|
65
|
+
File.stubs(:exists?).with('/etc/rc.conf').returns(true)
|
66
|
+
File.stubs(:read).with('/etc/rc.conf').returns("openntpd_enable=\"NO\"\nntpd_enable=\"NO\"\n")
|
67
|
+
fh = stub 'fh'
|
68
|
+
File.stubs(:open).with('/etc/rc.conf', File::WRONLY).yields(fh)
|
69
|
+
fh.expects(:<<).with("openntpd_enable=\"NO\"\nntpd_enable=\"YES\"\n")
|
70
|
+
File.stubs(:exists?).with('/etc/rc.conf.local').returns(false)
|
71
|
+
File.stubs(:exists?).with('/etc/rc.conf.d/ntpd').returns(false)
|
72
|
+
|
73
|
+
@provider.rc_replace('ntpd', 'ntpd', 'YES')
|
74
|
+
end
|
57
75
|
end
|
@@ -5,141 +5,155 @@
|
|
5
5
|
|
6
6
|
require 'spec_helper'
|
7
7
|
|
8
|
-
|
8
|
+
describe Puppet::Type.type(:service).provider(:init) do
|
9
9
|
|
10
|
-
|
10
|
+
let :provider do
|
11
|
+
provider = described_class.new(:name => 'myservice')
|
12
|
+
provider.resource = resource
|
13
|
+
provider
|
14
|
+
end
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
let :resource do
|
17
|
+
Puppet::Type.type(:service).new(
|
18
|
+
:name => 'myservice',
|
19
|
+
:ensure => :running,
|
20
|
+
:path => paths
|
21
|
+
)
|
22
|
+
end
|
19
23
|
|
20
|
-
|
21
|
-
|
24
|
+
let :paths do
|
25
|
+
["/service/path","/alt/service/path"]
|
26
|
+
end
|
27
|
+
|
28
|
+
let :excludes do
|
29
|
+
# Taken from redhat, gentoo, and debian
|
30
|
+
%w{functions.sh reboot.sh shutdown.sh functions halt killall single linuxconf reboot boot wait-for-state}
|
22
31
|
end
|
23
32
|
|
24
33
|
describe "when getting all service instances" do
|
25
34
|
before :each do
|
35
|
+
described_class.stubs(:defpath).returns('tmp')
|
36
|
+
|
26
37
|
@services = ['one', 'two', 'three', 'four']
|
27
|
-
Dir.stubs(:entries).returns @services
|
28
|
-
FileTest.
|
38
|
+
Dir.stubs(:entries).with('tmp').returns @services
|
39
|
+
FileTest.expects(:directory?).with('tmp').returns(true)
|
29
40
|
FileTest.stubs(:executable?).returns(true)
|
30
|
-
@class.stubs(:defpath).returns('tmp')
|
31
41
|
end
|
32
42
|
|
33
43
|
it "should return instances for all services" do
|
34
|
-
|
35
|
-
@class.expects(:new).with{|hash| hash[:name] == inst}.returns("#{inst}_instance")
|
36
|
-
end
|
37
|
-
results = @services.collect {|x| "#{x}_instance"}
|
38
|
-
|
39
|
-
@class.instances.should == results
|
44
|
+
described_class.instances.map(&:name).should == @services
|
40
45
|
end
|
41
46
|
|
42
47
|
it "should omit an array of services from exclude list" do
|
43
48
|
exclude = ['two', 'four']
|
44
|
-
(@services - exclude)
|
45
|
-
@class.expects(:new).with{|hash| hash[:name] == inst}.returns("#{inst}_instance")
|
46
|
-
end
|
47
|
-
results = (@services-exclude).collect {|x| "#{x}_instance"}
|
48
|
-
|
49
|
-
@class.get_services(@class.defpath, exclude).should == results
|
49
|
+
described_class.get_services(described_class.defpath, exclude).map(&:name).should == (@services - exclude)
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should omit a single service from the exclude list" do
|
53
53
|
exclude = 'two'
|
54
|
-
(@services - [exclude]
|
55
|
-
@class.expects(:new).with{|hash| hash[:name] == inst}.returns("#{inst}_instance")
|
56
|
-
end
|
57
|
-
results = @services.reject{|x| x == exclude }.collect {|x| "#{x}_instance"}
|
58
|
-
|
59
|
-
@class.get_services(@class.defpath, exclude).should == results
|
54
|
+
described_class.get_services(described_class.defpath, exclude).map(&:name).should == @services - [exclude]
|
60
55
|
end
|
61
56
|
|
62
57
|
it "should use defpath" do
|
63
|
-
|
64
|
-
@class.expects(:new).with{|hash| hash[:path] == @class.defpath}.returns("#{inst}_instance")
|
65
|
-
end
|
66
|
-
results = @services.sort.collect {|x| "#{x}_instance"}
|
67
|
-
|
68
|
-
@class.instances.sort.should == results
|
58
|
+
described_class.instances.should be_all { |provider| provider.get(:path) == described_class.defpath }
|
69
59
|
end
|
70
60
|
|
71
61
|
it "should set hasstatus to true for providers" do
|
72
|
-
|
73
|
-
@class.expects(:new).with{|hash| hash[:name] == inst && hash[:hasstatus] == true}.returns("#{inst}_instance")
|
74
|
-
end
|
75
|
-
results = @services.collect {|x| "#{x}_instance"}
|
76
|
-
|
77
|
-
@class.instances.should == results
|
62
|
+
described_class.instances.should be_all { |provider| provider.get(:hasstatus) == true }
|
78
63
|
end
|
79
64
|
|
80
65
|
it "should discard upstart jobs" do
|
81
66
|
not_init_service, *valid_services = @services
|
82
|
-
|
83
|
-
@class.expects(:new).with{|hash| hash[:name] == inst && hash[:hasstatus] == true}.returns("#{inst}_instance")
|
84
|
-
end
|
85
|
-
File.stubs(:symlink?).returns(false)
|
67
|
+
File.stubs(:symlink?).returns false
|
86
68
|
File.stubs(:symlink?).with("tmp/#{not_init_service}").returns(true)
|
87
69
|
File.stubs(:readlink).with("tmp/#{not_init_service}").returns("/lib/init/upstart-job")
|
88
70
|
|
89
|
-
|
90
|
-
|
71
|
+
described_class.instances.map(&:name).should == valid_services
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should discard non-initscript scripts" do
|
75
|
+
valid_services = @services
|
76
|
+
all_services = valid_services + excludes
|
77
|
+
Dir.expects(:entries).with('tmp').returns all_services
|
78
|
+
described_class.instances.map(&:name).should =~ valid_services
|
91
79
|
end
|
92
80
|
end
|
93
81
|
|
94
|
-
describe "when
|
82
|
+
describe "when checking valid paths" do
|
95
83
|
it "should discard paths that do not exist" do
|
96
|
-
File.
|
97
|
-
File.
|
98
|
-
|
84
|
+
File.expects(:directory?).with(paths[0]).returns false
|
85
|
+
File.expects(:exist?).with(paths[0]).returns false
|
86
|
+
File.expects(:directory?).with(paths[1]).returns true
|
87
|
+
|
88
|
+
provider.paths.should == [paths[1]]
|
99
89
|
end
|
100
90
|
|
101
91
|
it "should discard paths that are not directories" do
|
102
|
-
|
103
|
-
|
104
|
-
|
92
|
+
paths.each do |path|
|
93
|
+
File.expects(:exist?).with(path).returns true
|
94
|
+
File.expects(:directory?).with(path).returns false
|
95
|
+
end
|
96
|
+
provider.paths.should be_empty
|
105
97
|
end
|
98
|
+
end
|
106
99
|
|
107
|
-
|
108
|
-
|
109
|
-
File.expects(:
|
110
|
-
@provider.initscript.should == "/service/path/myservice"
|
100
|
+
describe "when searching for the init script" do
|
101
|
+
before :each do
|
102
|
+
paths.each {|path| File.expects(:directory?).with(path).returns true }
|
111
103
|
end
|
104
|
+
|
112
105
|
it "should be able to find the init script in the service path" do
|
113
|
-
File.
|
114
|
-
File.expects(:stat).with("/
|
115
|
-
|
106
|
+
File.expects(:stat).with("#{paths[0]}/myservice").returns true
|
107
|
+
File.expects(:stat).with("#{paths[1]}/myservice").never # first one wins
|
108
|
+
provider.initscript.should == "/service/path/myservice"
|
116
109
|
end
|
110
|
+
|
111
|
+
it "should be able to find the init script in an alternate service path" do
|
112
|
+
File.expects(:stat).with("#{paths[0]}/myservice").raises Errno::ENOENT, "No such file or directory - #{paths[0]}/myservice"
|
113
|
+
File.expects(:stat).with("#{paths[1]}/myservice").returns true
|
114
|
+
provider.initscript.should == "/alt/service/path/myservice"
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should be able to find the init script if it ends with .sh" do
|
118
|
+
File.expects(:stat).with("#{paths[0]}/myservice").raises Errno::ENOENT, "No such file or directory - #{paths[0]}/myservice"
|
119
|
+
File.expects(:stat).with("#{paths[1]}/myservice").raises Errno::ENOENT, "No such file or directory - #{paths[1]}/myservice"
|
120
|
+
File.expects(:stat).with("#{paths[0]}/myservice.sh").returns true
|
121
|
+
provider.initscript.should == "/service/path/myservice.sh"
|
122
|
+
end
|
123
|
+
|
117
124
|
it "should fail if the service isn't there" do
|
118
|
-
|
125
|
+
paths.each do |path|
|
126
|
+
File.expects(:stat).with("#{path}/myservice").raises Errno::ENOENT, "No such file or directory - #{path}/myservice"
|
127
|
+
File.expects(:stat).with("#{path}/myservice.sh").raises Errno::ENOENT, "No such file or directory - #{path}/myservice.sh"
|
128
|
+
end
|
129
|
+
expect { provider.initscript }.to raise_error(Puppet::Error, "Could not find init script for 'myservice'")
|
119
130
|
end
|
120
131
|
end
|
121
132
|
|
122
133
|
describe "if the init script is present" do
|
123
134
|
before :each do
|
135
|
+
File.stubs(:directory?).with("/service/path").returns true
|
136
|
+
File.stubs(:directory?).with("/alt/service/path").returns true
|
124
137
|
File.stubs(:stat).with("/service/path/myservice").returns true
|
125
138
|
end
|
126
139
|
|
127
140
|
[:start, :stop, :status, :restart].each do |method|
|
128
141
|
it "should have a #{method} method" do
|
129
|
-
|
142
|
+
provider.should respond_to(method)
|
130
143
|
end
|
131
144
|
describe "when running #{method}" do
|
132
145
|
|
133
146
|
it "should use any provided explicit command" do
|
134
|
-
|
135
|
-
|
136
|
-
|
147
|
+
resource[method] = "/user/specified/command"
|
148
|
+
provider.expects(:execute).with { |command, *args| command == ["/user/specified/command"] }
|
149
|
+
provider.send(method)
|
137
150
|
end
|
138
151
|
|
139
152
|
it "should pass #{method} to the init script when no explicit command is provided" do
|
140
|
-
|
141
|
-
|
142
|
-
|
153
|
+
resource[:hasrestart] = :true
|
154
|
+
resource[:hasstatus] = :true
|
155
|
+
provider.expects(:execute).with { |command, *args| command == ["/service/path/myservice",method]}
|
156
|
+
provider.send(method)
|
143
157
|
end
|
144
158
|
end
|
145
159
|
end
|
@@ -147,45 +161,52 @@ describe provider_class do
|
|
147
161
|
describe "when checking status" do
|
148
162
|
describe "when hasstatus is :true" do
|
149
163
|
before :each do
|
150
|
-
|
164
|
+
resource[:hasstatus] = :true
|
151
165
|
end
|
152
166
|
it "should execute the command" do
|
153
|
-
|
154
|
-
|
167
|
+
provider.expects(:texecute).with(:status, ['/service/path/myservice', :status], false).returns("")
|
168
|
+
provider.status
|
155
169
|
end
|
156
170
|
it "should consider the process running if the command returns 0" do
|
157
|
-
|
171
|
+
provider.expects(:texecute).with(:status, ['/service/path/myservice', :status], false).returns("")
|
158
172
|
$CHILD_STATUS.stubs(:exitstatus).returns(0)
|
159
|
-
|
173
|
+
provider.status.should == :running
|
160
174
|
end
|
161
175
|
[-10,-1,1,10].each { |ec|
|
162
176
|
it "should consider the process stopped if the command returns something non-0" do
|
163
|
-
|
177
|
+
provider.expects(:texecute).with(:status, ['/service/path/myservice', :status], false).returns("")
|
164
178
|
$CHILD_STATUS.stubs(:exitstatus).returns(ec)
|
165
|
-
|
179
|
+
provider.status.should == :stopped
|
166
180
|
end
|
167
181
|
}
|
168
182
|
end
|
169
183
|
describe "when hasstatus is not :true" do
|
184
|
+
before :each do
|
185
|
+
resource[:hasstatus] = :false
|
186
|
+
end
|
187
|
+
|
170
188
|
it "should consider the service :running if it has a pid" do
|
171
|
-
|
172
|
-
|
189
|
+
provider.expects(:getpid).returns "1234"
|
190
|
+
provider.status.should == :running
|
173
191
|
end
|
174
192
|
it "should consider the service :stopped if it doesn't have a pid" do
|
175
|
-
|
176
|
-
|
193
|
+
provider.expects(:getpid).returns nil
|
194
|
+
provider.status.should == :stopped
|
177
195
|
end
|
178
196
|
end
|
179
197
|
end
|
180
198
|
|
181
199
|
describe "when restarting and hasrestart is not :true" do
|
200
|
+
before :each do
|
201
|
+
resource[:hasrestart] = :false
|
202
|
+
end
|
203
|
+
|
182
204
|
it "should stop and restart the process" do
|
183
|
-
|
184
|
-
|
205
|
+
provider.expects(:texecute).with(:stop, ['/service/path/myservice', :stop ], true).returns("")
|
206
|
+
provider.expects(:texecute).with(:start,['/service/path/myservice', :start], true).returns("")
|
185
207
|
$CHILD_STATUS.stubs(:exitstatus).returns(0)
|
186
|
-
|
208
|
+
provider.restart
|
187
209
|
end
|
188
210
|
end
|
189
|
-
|
190
211
|
end
|
191
212
|
end
|