puppet 3.1.1 → 3.2.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +32 -19
- data/README_DEVELOPER.md +332 -14
- data/Rakefile +9 -5
- data/ext/build_defaults.yaml +2 -3
- data/ext/debian/changelog.erb +6 -0
- data/ext/debian/control +6 -6
- data/ext/envpuppet +4 -4
- data/ext/project_data.yaml +1 -0
- data/ext/puppet-nm-dispatcher +13 -0
- data/ext/redhat/puppet.spec.erb +17 -0
- data/ext/suse/client.init +1 -1
- data/ext/systemd/puppetagent.service +2 -2
- data/ext/systemd/puppetmaster.service +2 -2
- data/lib/hiera/scope.rb +29 -11
- data/lib/hiera_puppet.rb +1 -3
- data/lib/puppet/agent.rb +3 -3
- data/lib/puppet/application.rb +2 -2
- data/lib/puppet/application/agent.rb +27 -12
- data/lib/puppet/application/apply.rb +11 -1
- data/lib/puppet/application/describe.rb +1 -1
- data/lib/puppet/application/doc.rb +13 -9
- data/lib/puppet/application/filebucket.rb +0 -1
- data/lib/puppet/application/kick.rb +1 -0
- data/lib/puppet/application/master.rb +16 -8
- data/lib/puppet/daemon.rb +19 -64
- data/lib/puppet/defaults.rb +61 -5
- data/lib/puppet/error.rb +15 -4
- data/lib/puppet/external/nagios/grammar.ry +1 -1
- data/lib/puppet/external/nagios/makefile +1 -1
- data/lib/puppet/external/nagios/parser.rb +185 -618
- data/lib/puppet/external/pson/pure/parser.rb +47 -1
- data/lib/puppet/face/certificate.rb +3 -3
- data/lib/puppet/face/module.rb +1 -1
- data/lib/puppet/face/module/changes.rb +3 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/node/clean.rb +5 -5
- data/lib/puppet/feature/base.rb +3 -1
- data/lib/puppet/feature/libuser.rb +8 -0
- data/lib/puppet/file_serving/fileset.rb +9 -1
- data/lib/puppet/forge.rb +28 -5
- data/lib/puppet/forge/errors.rb +34 -0
- data/lib/puppet/forge/repository.rb +1 -1
- data/lib/puppet/indirector.rb +4 -1
- data/lib/puppet/indirector/catalog/compiler.rb +37 -30
- data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
- data/lib/puppet/indirector/indirection.rb +28 -15
- data/lib/puppet/indirector/rest.rb +18 -10
- data/lib/puppet/interface.rb +11 -4
- data/lib/puppet/interface/action.rb +1 -3
- data/lib/puppet/interface/action_builder.rb +0 -3
- data/lib/puppet/interface/action_manager.rb +0 -3
- data/lib/puppet/interface/face_collection.rb +0 -2
- data/lib/puppet/interface/option.rb +0 -2
- data/lib/puppet/interface/option_builder.rb +0 -2
- data/lib/puppet/interface/option_manager.rb +0 -2
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module_tool.rb +1 -0
- data/lib/puppet/module_tool/applications/application.rb +0 -3
- data/lib/puppet/module_tool/applications/builder.rb +8 -20
- data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +1 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/errors/installer.rb +18 -1
- data/lib/puppet/module_tool/modulefile.rb +2 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
- data/lib/puppet/module_tool/tar.rb +17 -0
- data/lib/puppet/module_tool/tar/gnu.rb +9 -0
- data/lib/puppet/module_tool/tar/mini.rb +39 -0
- data/lib/puppet/module_tool/tar/solaris.rb +5 -0
- data/lib/puppet/network/http.rb +1 -0
- data/lib/puppet/network/http/connection.rb +9 -23
- data/lib/puppet/network/http/handler.rb +38 -7
- data/lib/puppet/network/http/rack/rest.rb +14 -3
- data/lib/puppet/network/http/webrick.rb +3 -1
- data/lib/puppet/network/http/webrick/rest.rb +11 -2
- data/lib/puppet/node/environment.rb +3 -1
- data/lib/puppet/parameter.rb +32 -29
- data/lib/puppet/parameter/package_options.rb +1 -1
- data/lib/puppet/parameter/path.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parameter/value_collection.rb +7 -3
- data/lib/puppet/parser/ast.rb +3 -1
- data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
- data/lib/puppet/parser/ast/astarray.rb +1 -1
- data/lib/puppet/parser/ast/block_expression.rb +41 -0
- data/lib/puppet/parser/ast/function.rb +13 -2
- data/lib/puppet/parser/ast/lambda.rb +107 -0
- data/lib/puppet/parser/ast/leaf.rb +1 -2
- data/lib/puppet/parser/ast/method_call.rb +77 -0
- data/lib/puppet/parser/ast/vardef.rb +7 -0
- data/lib/puppet/parser/compiler.rb +27 -16
- data/lib/puppet/parser/e_parser_adapter.rb +120 -0
- data/lib/puppet/parser/files.rb +7 -6
- data/lib/puppet/parser/functions.rb +10 -8
- data/lib/puppet/parser/functions/collect.rb +43 -0
- data/lib/puppet/parser/functions/each.rb +96 -0
- data/lib/puppet/parser/functions/foreach.rb +96 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
- data/lib/puppet/parser/functions/hiera.rb +20 -2
- data/lib/puppet/parser/functions/hiera_array.rb +21 -2
- data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
- data/lib/puppet/parser/functions/hiera_include.rb +33 -2
- data/lib/puppet/parser/functions/inline_template.rb +4 -4
- data/lib/puppet/parser/functions/reduce.rb +74 -0
- data/lib/puppet/parser/functions/reject.rb +46 -0
- data/lib/puppet/parser/functions/select.rb +46 -0
- data/lib/puppet/parser/functions/slice.rb +96 -0
- data/lib/puppet/parser/functions/template.rb +2 -2
- data/lib/puppet/parser/grammar.ra +7 -4
- data/lib/puppet/parser/lexer.rb +10 -0
- data/lib/puppet/parser/methods.rb +69 -0
- data/lib/puppet/parser/parser.rb +855 -808
- data/lib/puppet/parser/parser_factory.rb +62 -0
- data/lib/puppet/parser/parser_support.rb +8 -2
- data/lib/puppet/parser/scope.rb +153 -47
- data/lib/puppet/parser/templatewrapper.rb +28 -21
- data/lib/puppet/parser/type_loader.rb +3 -1
- data/lib/puppet/pops.rb +40 -0
- data/lib/puppet/pops/adaptable.rb +190 -0
- data/lib/puppet/pops/adapters.rb +65 -0
- data/lib/puppet/pops/containment.rb +37 -0
- data/lib/puppet/pops/issues.rb +258 -0
- data/lib/puppet/pops/label_provider.rb +71 -0
- data/lib/puppet/pops/model/ast_transformer.rb +636 -0
- data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
- data/lib/puppet/pops/model/factory.rb +804 -0
- data/lib/puppet/pops/model/model.rb +567 -0
- data/lib/puppet/pops/model/model_label_provider.rb +75 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
- data/lib/puppet/pops/model/tree_dumper.rb +59 -0
- data/lib/puppet/pops/parser/egrammar.ra +723 -0
- data/lib/puppet/pops/parser/eparser.rb +2300 -0
- data/lib/puppet/pops/parser/grammar.ra +746 -0
- data/lib/puppet/pops/parser/lexer.rb +842 -0
- data/lib/puppet/pops/parser/makefile +13 -0
- data/lib/puppet/pops/parser/parser_support.rb +203 -0
- data/lib/puppet/pops/patterns.rb +35 -0
- data/lib/puppet/pops/utils.rb +104 -0
- data/lib/puppet/pops/validation.rb +297 -0
- data/lib/puppet/pops/validation/checker3_1.rb +551 -0
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
- data/lib/puppet/pops/visitable.rb +6 -0
- data/lib/puppet/pops/visitor.rb +50 -0
- data/lib/puppet/property.rb +37 -28
- data/lib/puppet/property/ensure.rb +2 -2
- data/lib/puppet/property/ordered_list.rb +1 -1
- data/lib/puppet/provider.rb +26 -30
- data/lib/puppet/provider/aixobject.rb +45 -44
- data/lib/puppet/provider/augeas/augeas.rb +0 -1
- data/lib/puppet/provider/confiner.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +107 -67
- data/lib/puppet/provider/group/groupadd.rb +59 -3
- data/lib/puppet/provider/interface/cisco.rb +4 -4
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +22 -6
- data/lib/puppet/provider/nameservice/pw.rb +1 -1
- data/lib/puppet/provider/package/aix.rb +28 -4
- data/lib/puppet/provider/package/gem.rb +0 -2
- data/lib/puppet/provider/package/macports.rb +1 -1
- data/lib/puppet/provider/package/nim.rb +249 -4
- data/lib/puppet/provider/package/opkg.rb +77 -0
- data/lib/puppet/provider/package/pacman.rb +2 -2
- data/lib/puppet/provider/package/rpm.rb +30 -16
- data/lib/puppet/provider/package/yum.rb +3 -3
- data/lib/puppet/provider/parsedfile.rb +80 -3
- data/lib/puppet/provider/selmodule/semodule.rb +2 -2
- data/lib/puppet/provider/service/debian.rb +0 -4
- data/lib/puppet/provider/service/freebsd.rb +2 -2
- data/lib/puppet/provider/service/gentoo.rb +0 -9
- data/lib/puppet/provider/service/init.rb +27 -2
- data/lib/puppet/provider/service/launchd.rb +1 -1
- data/lib/puppet/provider/service/openwrt.rb +36 -0
- data/lib/puppet/provider/service/redhat.rb +0 -9
- data/lib/puppet/provider/service/src.rb +38 -4
- data/lib/puppet/provider/service/systemd.rb +2 -2
- data/lib/puppet/provider/service/upstart.rb +1 -8
- data/lib/puppet/provider/user/aix.rb +4 -10
- data/lib/puppet/provider/user/pw.rb +6 -10
- data/lib/puppet/provider/user/useradd.rb +129 -31
- data/lib/puppet/provider/vlan/cisco.rb +4 -4
- data/lib/puppet/reference/function.rb +2 -2
- data/lib/puppet/reference/indirection.rb +46 -5
- data/lib/puppet/reference/metaparameter.rb +2 -2
- data/lib/puppet/reports.rb +5 -5
- data/lib/puppet/reports/rrdgraph.rb +4 -4
- data/lib/puppet/reports/tagmail.rb +1 -1
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/type.rb +13 -11
- data/lib/puppet/scheduler.rb +16 -0
- data/lib/puppet/scheduler/job.rb +53 -0
- data/lib/puppet/scheduler/scheduler.rb +45 -0
- data/lib/puppet/scheduler/splay_job.rb +32 -0
- data/lib/puppet/scheduler/timer.rb +13 -0
- data/lib/puppet/settings/base_setting.rb +1 -1
- data/lib/puppet/simple_graph.rb +4 -4
- data/lib/puppet/ssl/base.rb +12 -2
- data/lib/puppet/ssl/certificate.rb +4 -1
- data/lib/puppet/ssl/certificate_request.rb +4 -1
- data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
- data/lib/puppet/ssl/configuration.rb +32 -0
- data/lib/puppet/ssl/host.rb +18 -21
- data/lib/puppet/ssl/key.rb +4 -1
- data/lib/puppet/ssl/validator.rb +116 -0
- data/lib/puppet/transaction.rb +1 -1
- data/lib/puppet/transaction/event.rb +3 -10
- data/lib/puppet/transaction/event_manager.rb +8 -1
- data/lib/puppet/transaction/report.rb +17 -16
- data/lib/puppet/type.rb +77 -69
- data/lib/puppet/type/cron.rb +20 -8
- data/lib/puppet/type/exec.rb +9 -3
- data/lib/puppet/type/file.rb +95 -21
- data/lib/puppet/type/file/content.rb +1 -1
- data/lib/puppet/type/file/mode.rb +7 -1
- data/lib/puppet/type/file/source.rb +2 -2
- data/lib/puppet/type/group.rb +11 -0
- data/lib/puppet/type/scheduled_task.rb +5 -1
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -2
- data/lib/puppet/type/user.rb +24 -6
- data/lib/puppet/util.rb +12 -2
- data/lib/puppet/util/classgen.rb +4 -4
- data/lib/puppet/util/colors.rb +55 -0
- data/lib/puppet/util/command_line/trollop.rb +4 -4
- data/lib/puppet/util/errors.rb +39 -3
- data/lib/puppet/util/fileparsing.rb +5 -0
- data/lib/puppet/util/filetype.rb +11 -9
- data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
- data/lib/puppet/util/libuser.conf +15 -0
- data/lib/puppet/util/libuser.rb +12 -0
- data/lib/puppet/util/monkey_patches.rb +48 -0
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/base.rb +2 -2
- data/lib/puppet/util/network_device/cisco/device.rb +29 -19
- data/lib/puppet/util/network_device/config.rb +5 -2
- data/lib/puppet/util/network_device/ipcalc.rb +1 -1
- data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
- data/lib/puppet/util/plugins.rb +4 -4
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/util/profiler.rb +28 -0
- data/lib/puppet/util/profiler/logging.rb +47 -0
- data/lib/puppet/util/profiler/none.rb +8 -0
- data/lib/puppet/util/profiler/object_counts.rb +17 -0
- data/lib/puppet/util/profiler/wall_clock.rb +34 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/rdoc/parser.rb +5 -5
- data/lib/puppet/util/ssl.rb +38 -0
- data/lib/puppet/util/subclass_loader.rb +1 -5
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/process.rb +3 -0
- data/lib/puppet/util/windows/root_certs.rb +86 -0
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
- data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
- data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
- data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
- data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
- data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
- data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
- data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
- data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
- data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
- data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
- data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
- data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
- data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
- data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
- data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
- data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
- data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
- data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
- data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
- data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
- data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
- data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
- data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
- data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
- data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
- data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
- data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
- data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
- data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
- data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
- data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
- data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
- data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
- data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
- data/spec/integration/parser/collector_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +252 -227
- data/spec/integration/parser/parser_spec.rb +171 -53
- data/spec/integration/parser/scope_spec.rb +1 -1
- data/spec/integration/provider/cron/crontab_spec.rb +187 -0
- data/spec/integration/provider/service/systemd_spec.rb +20 -0
- data/spec/integration/type/file_spec.rb +21 -21
- data/spec/integration/type/package_spec.rb +1 -1
- data/spec/lib/puppet_spec/database.rb +2 -5
- data/spec/spec_helper.rb +6 -1
- data/spec/unit/application/apply_spec.rb +16 -1
- data/spec/unit/application/describe_spec.rb +1 -1
- data/spec/unit/application/doc_spec.rb +55 -32
- data/spec/unit/application/kick_spec.rb +8 -6
- data/spec/unit/application/master_spec.rb +4 -4
- data/spec/unit/daemon_spec.rb +1 -1
- data/spec/unit/forge/errors_spec.rb +40 -0
- data/spec/unit/forge/repository_spec.rb +11 -1
- data/spec/unit/forge_spec.rb +13 -3
- data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
- data/spec/unit/hiera/scope_spec.rb +48 -25
- data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
- data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
- data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
- data/spec/unit/indirector/indirection_spec.rb +5 -0
- data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
- data/spec/unit/indirector_spec.rb +7 -1
- data/spec/unit/interface/action_builder_spec.rb +1 -1
- data/spec/unit/interface/action_manager_spec.rb +0 -2
- data/spec/unit/interface/action_spec.rb +1 -1
- data/spec/unit/interface/documentation_spec.rb +0 -2
- data/spec/unit/interface/face_collection_spec.rb +1 -1
- data/spec/unit/interface/option_builder_spec.rb +1 -1
- data/spec/unit/interface/option_spec.rb +0 -1
- data/spec/unit/module_spec.rb +17 -19
- data/spec/unit/module_tool/application_spec.rb +1 -3
- data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
- data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
- data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
- data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
- data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
- data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
- data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
- data/spec/unit/network/http/connection_spec.rb +17 -2
- data/spec/unit/network/http/handler_spec.rb +195 -167
- data/spec/unit/network/http/rack/rest_spec.rb +26 -4
- data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
- data/spec/unit/network/http/webrick_spec.rb +12 -3
- data/spec/unit/node/environment_spec.rb +421 -404
- data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
- data/spec/unit/parser/collector_spec.rb +4 -4
- data/spec/unit/parser/compiler_spec.rb +13 -13
- data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
- data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
- data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
- data/spec/unit/parser/functions/hiera_spec.rb +0 -2
- data/spec/unit/parser/functions_spec.rb +27 -15
- data/spec/unit/parser/methods/collect_spec.rb +110 -0
- data/spec/unit/parser/methods/each_spec.rb +91 -0
- data/spec/unit/parser/methods/foreach_spec.rb +91 -0
- data/spec/unit/parser/methods/reduce_spec.rb +67 -0
- data/spec/unit/parser/methods/reject_spec.rb +73 -0
- data/spec/unit/parser/methods/select_spec.rb +79 -0
- data/spec/unit/parser/methods/shared.rb +61 -0
- data/spec/unit/parser/methods/slice_spec.rb +97 -0
- data/spec/unit/parser/parser_spec.rb +2 -2
- data/spec/unit/parser/scope_spec.rb +39 -16
- data/spec/unit/parser/templatewrapper_spec.rb +6 -5
- data/spec/unit/parser/type_loader_spec.rb +191 -165
- data/spec/unit/pops/adaptable_spec.rb +143 -0
- data/spec/unit/pops/containment_spec.rb +25 -0
- data/spec/unit/pops/factory_rspec_helper.rb +77 -0
- data/spec/unit/pops/factory_spec.rb +329 -0
- data/spec/unit/pops/issues_spec.rb +26 -0
- data/spec/unit/pops/label_provider_spec.rb +42 -0
- data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
- data/spec/unit/pops/model/model_spec.rb +37 -0
- data/spec/unit/pops/parser/lexer_spec.rb +884 -0
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
- data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
- data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
- data/spec/unit/pops/parser/parser_spec.rb +15 -0
- data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
- data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
- data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
- data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
- data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
- data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
- data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
- data/spec/unit/pops/visitor_spec.rb +94 -0
- data/spec/unit/property_spec.rb +11 -0
- data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
- data/spec/unit/provider/cron/crontab_spec.rb +97 -7
- data/spec/unit/provider/cron/parsed_spec.rb +325 -0
- data/spec/unit/provider/exec/posix_spec.rb +1 -1
- data/spec/unit/provider/group/groupadd_spec.rb +33 -3
- data/spec/unit/provider/group/pw_spec.rb +5 -5
- data/spec/unit/provider/nameservice_spec.rb +304 -0
- data/spec/unit/provider/package/aix_spec.rb +53 -11
- data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
- data/spec/unit/provider/package/gem_spec.rb +6 -11
- data/spec/unit/provider/package/nim_spec.rb +216 -7
- data/spec/unit/provider/package/opkg_spec.rb +180 -0
- data/spec/unit/provider/package/rpm_spec.rb +149 -3
- data/spec/unit/provider/package/yum_spec.rb +6 -5
- data/spec/unit/provider/parsedfile_spec.rb +122 -28
- data/spec/unit/provider/service/freebsd_spec.rb +18 -0
- data/spec/unit/provider/service/init_spec.rb +108 -87
- data/spec/unit/provider/service/launchd_spec.rb +2 -2
- data/spec/unit/provider/service/openwrt_spec.rb +109 -0
- data/spec/unit/provider/service/src_spec.rb +117 -41
- data/spec/unit/provider/service/systemd_spec.rb +125 -17
- data/spec/unit/provider/service/upstart_spec.rb +1 -1
- data/spec/unit/provider/user/aix_spec.rb +42 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
- data/spec/unit/provider/user/pw_spec.rb +24 -12
- data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
- data/spec/unit/provider/user/useradd_spec.rb +179 -15
- data/spec/unit/resource/type_spec.rb +3 -3
- data/spec/unit/scheduler/job_spec.rb +79 -0
- data/spec/unit/scheduler/scheduler_spec.rb +129 -0
- data/spec/unit/scheduler/splay_job_spec.rb +35 -0
- data/spec/unit/ssl/base_spec.rb +3 -9
- data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
- data/spec/unit/ssl/certificate_request_spec.rb +3 -1
- data/spec/unit/ssl/certificate_spec.rb +3 -1
- data/spec/unit/ssl/configuration_spec.rb +74 -0
- data/spec/unit/ssl/host_spec.rb +28 -7
- data/spec/unit/ssl/validator_spec.rb +311 -0
- data/spec/unit/transaction/event_manager_spec.rb +49 -0
- data/spec/unit/transaction/event_spec.rb +20 -5
- data/spec/unit/transaction/report_spec.rb +8 -0
- data/spec/unit/type/cron_spec.rb +9 -0
- data/spec/unit/type/exec_spec.rb +11 -0
- data/spec/unit/type/file/content_spec.rb +20 -20
- data/spec/unit/type/file/mode_spec.rb +6 -0
- data/spec/unit/type/file/source_spec.rb +9 -7
- data/spec/unit/type/file_spec.rb +22 -3
- data/spec/unit/type/service_spec.rb +34 -21
- data/spec/unit/type_spec.rb +46 -1
- data/spec/unit/util/backups_spec.rb +2 -2
- data/spec/unit/util/execution_spec.rb +4 -1
- data/spec/unit/util/filetype_spec.rb +6 -0
- data/spec/unit/util/monkey_patches_spec.rb +18 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
- data/spec/unit/util/network_device/config_spec.rb +14 -0
- data/spec/unit/util/network_device_spec.rb +3 -3
- data/spec/unit/util/profiler/logging_spec.rb +81 -0
- data/spec/unit/util/profiler/none_spec.rb +12 -0
- data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
- data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
- data/spec/unit/util/pson_spec.rb +5 -0
- data/spec/unit/util/ssl_spec.rb +51 -0
- data/spec/unit/util/windows/root_certs_spec.rb +15 -0
- data/spec/unit/util_spec.rb +28 -0
- metadata +2593 -2307
- data/spec/unit/module_tool/applications/application_spec.rb +0 -19
@@ -0,0 +1,567 @@
|
|
1
|
+
#
|
2
|
+
# The Puppet Pops Metamodel
|
3
|
+
#
|
4
|
+
# This module contains a formal description of the Puppet Pops (*P*uppet *OP*eration instruction*S*).
|
5
|
+
# It describes a Metamodel containing DSL instructions, a description of PuppetType and related
|
6
|
+
# classes needed to evaluate puppet logic.
|
7
|
+
# The metamodel resembles the existing AST model, but it is a semantic model of instructions and
|
8
|
+
# the types that they operate on rather than a Abstract Syntax Tree, although closely related.
|
9
|
+
#
|
10
|
+
# The metamodel is anemic (has no behavior) except basic datatype and type
|
11
|
+
# assertions and reference/containment assertions.
|
12
|
+
# The metamodel is also a generalized description of the Puppet DSL to enable the
|
13
|
+
# same metamodel to be used to express Puppet DSL models (instances) with different semantics as
|
14
|
+
# the language evolves.
|
15
|
+
#
|
16
|
+
# The metamodel is concretized by a validator for a particular version of
|
17
|
+
# the Puppet DSL language.
|
18
|
+
#
|
19
|
+
# This metamodel is expressed using RGen.
|
20
|
+
#
|
21
|
+
# TODO: Anonymous Enums - probably ok, but they can be named (don't know if that is meaningsful)
|
22
|
+
|
23
|
+
require 'rgen/metamodel_builder'
|
24
|
+
|
25
|
+
module Puppet::Pops::Model
|
26
|
+
# A base class for modeled objects that makes them Visitable, and Adaptable.
|
27
|
+
# @todo currently includes Containment which will not be needed when the corresponding methods
|
28
|
+
# are added to RGen (in some version after 0.6.2).
|
29
|
+
#
|
30
|
+
class PopsObject < RGen::MetamodelBuilder::MMBase
|
31
|
+
include Puppet::Pops::Visitable
|
32
|
+
include Puppet::Pops::Adaptable
|
33
|
+
include Puppet::Pops::Containment
|
34
|
+
abstract
|
35
|
+
end
|
36
|
+
|
37
|
+
# @abstract base class for expressions
|
38
|
+
class Expression < PopsObject
|
39
|
+
abstract
|
40
|
+
end
|
41
|
+
|
42
|
+
# A Nop - the "no op" expression.
|
43
|
+
# @note not really needed since the evaluator can evaluate nil with the meaning of NoOp
|
44
|
+
# @todo deprecate? May be useful if there is the need to differentiate between nil and Nop when transforming model.
|
45
|
+
#
|
46
|
+
class Nop < Expression
|
47
|
+
end
|
48
|
+
|
49
|
+
# A binary expression is abstract and has a left and a right expression. The order of evaluation
|
50
|
+
# and semantics are determined by the concrete subclass.
|
51
|
+
#
|
52
|
+
class BinaryExpression < Expression
|
53
|
+
abstract
|
54
|
+
#
|
55
|
+
# @!attribute [rw] left_expr
|
56
|
+
# @return [Expression]
|
57
|
+
contains_one_uni 'left_expr', Expression, :lowerBound => 1
|
58
|
+
contains_one_uni 'right_expr', Expression, :lowerBound => 1
|
59
|
+
end
|
60
|
+
|
61
|
+
# An unary expression is abstract and contains one expression. The semantics are determined by
|
62
|
+
# a concrete subclass.
|
63
|
+
#
|
64
|
+
class UnaryExpression < Expression
|
65
|
+
abstract
|
66
|
+
contains_one_uni 'expr', Expression, :lowerBound => 1
|
67
|
+
end
|
68
|
+
|
69
|
+
# A class that simply evaluates to the contained expression.
|
70
|
+
# It is of value in order to preserve user entered parentheses in transformations, and
|
71
|
+
# transformations from model to source.
|
72
|
+
#
|
73
|
+
class ParenthesizedExpression < UnaryExpression; end
|
74
|
+
|
75
|
+
# An import of one or several files.
|
76
|
+
#
|
77
|
+
class ImportExpression < Expression
|
78
|
+
contains_many_uni 'files', Expression, :lowerBound => 1
|
79
|
+
end
|
80
|
+
|
81
|
+
# A boolean not expression, reversing the truth of the unary expr.
|
82
|
+
#
|
83
|
+
class NotExpression < UnaryExpression; end
|
84
|
+
|
85
|
+
# An arithmetic expression reversing the polarity of the numeric unary expr.
|
86
|
+
#
|
87
|
+
class UnaryMinusExpression < UnaryExpression; end
|
88
|
+
|
89
|
+
# An assignment expression assigns a value to the lval() of the left_expr.
|
90
|
+
#
|
91
|
+
class AssignmentExpression < BinaryExpression
|
92
|
+
has_attr 'operator', RGen::MetamodelBuilder::DataTypes::Enum.new([:'=', :'+=']), :lowerBound => 1
|
93
|
+
end
|
94
|
+
|
95
|
+
# An arithmetic expression applies an arithmetic operator on left and right expressions.
|
96
|
+
#
|
97
|
+
class ArithmeticExpression < BinaryExpression
|
98
|
+
has_attr 'operator', RGen::MetamodelBuilder::DataTypes::Enum.new([:'+', :'-', :'*', :'%', :'/', :'<<', :'>>' ]), :lowerBound => 1
|
99
|
+
end
|
100
|
+
|
101
|
+
# A relationship expression associates the left and right expressions
|
102
|
+
#
|
103
|
+
class RelationshipExpression < BinaryExpression
|
104
|
+
has_attr 'operator', RGen::MetamodelBuilder::DataTypes::Enum.new([:'->', :'<-', :'~>', :'<~']), :lowerBound => 1
|
105
|
+
end
|
106
|
+
|
107
|
+
# A binary expression, that accesses the value denoted by right in left. i.e. typically
|
108
|
+
# expressed concretely in a language as left[right].
|
109
|
+
#
|
110
|
+
class AccessExpression < Expression
|
111
|
+
contains_one_uni 'left_expr', Expression, :lowerBound => 1
|
112
|
+
contains_many_uni 'keys', Expression, :lowerBound => 1
|
113
|
+
end
|
114
|
+
|
115
|
+
# A comparison expression compares left and right using a comparison operator.
|
116
|
+
#
|
117
|
+
class ComparisonExpression < BinaryExpression
|
118
|
+
has_attr 'operator', RGen::MetamodelBuilder::DataTypes::Enum.new([:'==', :'!=', :'<', :'>', :'<=', :'>=' ]), :lowerBound => 1
|
119
|
+
end
|
120
|
+
|
121
|
+
# A match expression matches left and right using a matching operator.
|
122
|
+
#
|
123
|
+
class MatchExpression < BinaryExpression
|
124
|
+
has_attr 'operator', RGen::MetamodelBuilder::DataTypes::Enum.new([:'!~', :'=~']), :lowerBound => 1
|
125
|
+
end
|
126
|
+
|
127
|
+
# An 'in' expression checks if left is 'in' right
|
128
|
+
#
|
129
|
+
class InExpression < BinaryExpression; end
|
130
|
+
|
131
|
+
# A boolean expression applies a logical connective operator (and, or) to left and right expressions.
|
132
|
+
#
|
133
|
+
class BooleanExpression < BinaryExpression
|
134
|
+
abstract
|
135
|
+
end
|
136
|
+
|
137
|
+
# An and expression applies the logical connective operator and to left and right expression
|
138
|
+
# and does not evaluate the right expression if the left expression is false.
|
139
|
+
#
|
140
|
+
class AndExpression < BooleanExpression; end
|
141
|
+
|
142
|
+
# An or expression applies the logical connective operator or to the left and right expression
|
143
|
+
# and does not evaluate the right expression if the left expression is true
|
144
|
+
#
|
145
|
+
class OrExpression < BooleanExpression; end
|
146
|
+
|
147
|
+
# A literal list / array containing 0:M expressions.
|
148
|
+
#
|
149
|
+
class LiteralList < Expression
|
150
|
+
contains_many_uni 'values', Expression
|
151
|
+
end
|
152
|
+
|
153
|
+
# A Keyed entry has a key and a value expression. It it typically used as an entry in a Hash.
|
154
|
+
#
|
155
|
+
class KeyedEntry < PopsObject
|
156
|
+
contains_one_uni 'key', Expression, :lowerBound => 1
|
157
|
+
contains_one_uni 'value', Expression, :lowerBound => 1
|
158
|
+
end
|
159
|
+
|
160
|
+
# A literal hash is a collection of KeyedEntry objects
|
161
|
+
#
|
162
|
+
class LiteralHash < Expression
|
163
|
+
contains_many_uni 'entries', KeyedEntry
|
164
|
+
end
|
165
|
+
|
166
|
+
# A block contains a list of expressions
|
167
|
+
#
|
168
|
+
class BlockExpression < Expression
|
169
|
+
contains_many_uni 'statements', Expression
|
170
|
+
end
|
171
|
+
|
172
|
+
# A case option entry in a CaseStatement
|
173
|
+
#
|
174
|
+
class CaseOption < Expression
|
175
|
+
contains_many_uni 'values', Expression, :lowerBound => 1
|
176
|
+
contains_one_uni 'then_expr', Expression, :lowerBound => 1
|
177
|
+
end
|
178
|
+
|
179
|
+
# A case expression has a test, a list of options (multi values => block map).
|
180
|
+
# One CaseOption may contain a LiteralDefault as value. This option will be picked if nothing
|
181
|
+
# else matched.
|
182
|
+
#
|
183
|
+
class CaseExpression < Expression
|
184
|
+
contains_one_uni 'test', Expression, :lowerBound => 1
|
185
|
+
contains_many_uni 'options', CaseOption
|
186
|
+
end
|
187
|
+
|
188
|
+
# A query expression is an expression that is applied to some collection.
|
189
|
+
# The contained optional expression may contain different types of relational expressions depending
|
190
|
+
# on what the query is applied to.
|
191
|
+
#
|
192
|
+
class QueryExpression < Expression
|
193
|
+
abstract
|
194
|
+
contains_one_uni 'expr', Expression, :lowerBound => 0
|
195
|
+
end
|
196
|
+
|
197
|
+
# An exported query is a special form of query that searches for exported objects.
|
198
|
+
#
|
199
|
+
class ExportedQuery < QueryExpression
|
200
|
+
end
|
201
|
+
|
202
|
+
# A virtual query is a special form of query that searches for virtual objects.
|
203
|
+
#
|
204
|
+
class VirtualQuery < QueryExpression
|
205
|
+
end
|
206
|
+
|
207
|
+
# An attribute operation sets or appends a value to a named attribute.
|
208
|
+
#
|
209
|
+
class AttributeOperation < PopsObject
|
210
|
+
has_attr 'attribute_name', String, :lowerBound => 1
|
211
|
+
has_attr 'operator', RGen::MetamodelBuilder::DataTypes::Enum.new([:'=>', :'+>', ]), :lowerBound => 1
|
212
|
+
contains_one_uni 'value_expr', Expression, :lowerBound => 1
|
213
|
+
end
|
214
|
+
|
215
|
+
# An optional attribute operation sets or appends a value to a named attribute unless
|
216
|
+
# the value is undef/nil in which case the opereration is a Nop.
|
217
|
+
#
|
218
|
+
# This is a new feature proposed to solve the undef as antimatter problem
|
219
|
+
# @note Currently Unused
|
220
|
+
#
|
221
|
+
class OptionalAttributeOperation < AttributeOperation
|
222
|
+
end
|
223
|
+
|
224
|
+
# An object that collects stored objects from the central cache and returns
|
225
|
+
# them to the current host. Operations may optionally be applied.
|
226
|
+
#
|
227
|
+
class CollectExpression < Expression
|
228
|
+
contains_one_uni 'type_expr', Expression, :lowerBound => 1
|
229
|
+
contains_one_uni 'query', QueryExpression, :lowerBound => 1
|
230
|
+
contains_many_uni 'operations', AttributeOperation
|
231
|
+
end
|
232
|
+
|
233
|
+
class Parameter < PopsObject
|
234
|
+
has_attr 'name', String, :lowerBound => 1
|
235
|
+
contains_one_uni 'value', Expression
|
236
|
+
end
|
237
|
+
|
238
|
+
# Abstract base class for definitions.
|
239
|
+
#
|
240
|
+
class Definition < Expression
|
241
|
+
abstract
|
242
|
+
contains_many_uni 'parameters', Parameter
|
243
|
+
contains_one_uni 'body', Expression
|
244
|
+
end
|
245
|
+
|
246
|
+
# Abstract base class for named definitions.
|
247
|
+
class NamedDefinition < Definition
|
248
|
+
abstract
|
249
|
+
has_attr 'name', String, :lowerBound => 1
|
250
|
+
end
|
251
|
+
|
252
|
+
# A resource type definition (a 'define' in the DSL).
|
253
|
+
#
|
254
|
+
class ResourceTypeDefinition < NamedDefinition
|
255
|
+
# FUTURE
|
256
|
+
# contains_one_uni 'producer', Producer
|
257
|
+
end
|
258
|
+
|
259
|
+
# A node definition matches hosts using Strings, or Regular expressions. It may inherit from
|
260
|
+
# a parent node (also using a String or Regular expression).
|
261
|
+
#
|
262
|
+
class NodeDefinition < Expression
|
263
|
+
contains_one_uni 'parent', Expression
|
264
|
+
contains_many_uni 'host_matches', Expression, :lowerBound => 1
|
265
|
+
contains_one_uni 'body', Expression
|
266
|
+
end
|
267
|
+
|
268
|
+
# A class definition
|
269
|
+
#
|
270
|
+
class HostClassDefinition < NamedDefinition
|
271
|
+
has_attr 'parent_class', String
|
272
|
+
end
|
273
|
+
|
274
|
+
# i.e {|parameters| body }
|
275
|
+
class LambdaExpression < Definition; end
|
276
|
+
|
277
|
+
# If expression. If test is true, the then_expr part should be evaluated, else the (optional)
|
278
|
+
# else_expr. An 'elsif' is simply an else_expr = IfExpression, and 'else' is simply else == Block.
|
279
|
+
# a 'then' is typically a Block.
|
280
|
+
#
|
281
|
+
class IfExpression < Expression
|
282
|
+
contains_one_uni 'test', Expression, :lowerBound => 1
|
283
|
+
contains_one_uni 'then_expr', Expression, :lowerBound => 1
|
284
|
+
contains_one_uni 'else_expr', Expression
|
285
|
+
end
|
286
|
+
|
287
|
+
# An if expression with boolean reversed test.
|
288
|
+
#
|
289
|
+
class UnlessExpression < IfExpression
|
290
|
+
end
|
291
|
+
|
292
|
+
# An abstract call.
|
293
|
+
#
|
294
|
+
class CallExpression < Expression
|
295
|
+
abstract
|
296
|
+
# A bit of a crutch; functions are either procedures (void return) or has an rvalue
|
297
|
+
# this flag tells the evaluator that it is a failure to call a function that is void/procedure
|
298
|
+
# where a value is expected.
|
299
|
+
#
|
300
|
+
has_attr 'rval_required', Boolean, :defaultValueLiteral => "false"
|
301
|
+
contains_one_uni 'functor_expr', Expression, :lowerBound => 1
|
302
|
+
contains_many_uni 'arguments', Expression
|
303
|
+
contains_one_uni 'lambda', Expression
|
304
|
+
end
|
305
|
+
|
306
|
+
# A function call where the functor_expr should evaluate to something callable.
|
307
|
+
#
|
308
|
+
class CallFunctionExpression < CallExpression; end
|
309
|
+
|
310
|
+
# A function call where the given functor_expr should evaluate to the name
|
311
|
+
# of a function.
|
312
|
+
#
|
313
|
+
class CallNamedFunctionExpression < CallExpression; end
|
314
|
+
|
315
|
+
# A method/function call where the function expr is a NamedAccess and with support for
|
316
|
+
# an optional lambda block
|
317
|
+
#
|
318
|
+
class CallMethodExpression < CallExpression
|
319
|
+
end
|
320
|
+
|
321
|
+
# Abstract base class for literals.
|
322
|
+
#
|
323
|
+
class Literal < Expression
|
324
|
+
abstract
|
325
|
+
end
|
326
|
+
|
327
|
+
# A literal value is an abstract value holder. The type of the contained value is
|
328
|
+
# determined by the concrete subclass.
|
329
|
+
#
|
330
|
+
class LiteralValue < Literal
|
331
|
+
abstract
|
332
|
+
has_attr 'value', Object, :lowerBound => 1
|
333
|
+
end
|
334
|
+
|
335
|
+
# A Regular Expression Literal.
|
336
|
+
#
|
337
|
+
class LiteralRegularExpression < LiteralValue; end
|
338
|
+
|
339
|
+
# A Literal String
|
340
|
+
#
|
341
|
+
class LiteralString < LiteralValue; end
|
342
|
+
|
343
|
+
# A literal text is like a literal string, but has other rules for escaped characters. It
|
344
|
+
# is used as part of a ConcatenatedString
|
345
|
+
#
|
346
|
+
class LiteralText < LiteralValue; end
|
347
|
+
|
348
|
+
# A literal number has a radix of decimal (10), octal (8), or hex (16) to enable string conversion with the input radix.
|
349
|
+
# By default, a radix of 10 is used.
|
350
|
+
#
|
351
|
+
class LiteralNumber < LiteralValue
|
352
|
+
has_attr 'radix', Integer, :lowerBound => 1, :defaultValueLiteral => "10"
|
353
|
+
end
|
354
|
+
|
355
|
+
# The DSL `undef`.
|
356
|
+
#
|
357
|
+
class LiteralUndef < Literal; end
|
358
|
+
|
359
|
+
# The DSL `default`
|
360
|
+
class LiteralDefault < Literal; end
|
361
|
+
|
362
|
+
# DSL `true` or `false`
|
363
|
+
class LiteralBoolean < LiteralValue; end
|
364
|
+
|
365
|
+
# A text expression is an interpolation of an expression. If the embedded expression is
|
366
|
+
# a QualifiedName, it it taken as a variable name and resolved. All other expressions are evaluated.
|
367
|
+
# The result is transformed to a string.
|
368
|
+
#
|
369
|
+
class TextExpression < UnaryExpression; end
|
370
|
+
|
371
|
+
# An interpolated/concatenated string. The contained segments are expressions. Verbatim sections
|
372
|
+
# should be LiteralString instances, and interpolated expressions should either be
|
373
|
+
# TextExpression instances (if QualifiedNames should be turned into variables), or any other expression
|
374
|
+
# if such treatment is not needed.
|
375
|
+
#
|
376
|
+
class ConcatenatedString < Expression
|
377
|
+
contains_many_uni 'segments', Expression
|
378
|
+
end
|
379
|
+
|
380
|
+
# A DSL NAME (one or multiple parts separated by '::').
|
381
|
+
#
|
382
|
+
class QualifiedName < LiteralValue; end
|
383
|
+
|
384
|
+
# A DSL CLASSREF (one or multiple parts separated by '::' where (at least) the first part starts with an upper case letter).
|
385
|
+
#
|
386
|
+
class QualifiedReference < LiteralValue; end
|
387
|
+
|
388
|
+
# A Variable expression looks up value of expr (some kind of name) in scope.
|
389
|
+
# The expression is typically a QualifiedName, or QualifiedReference.
|
390
|
+
#
|
391
|
+
class VariableExpression < UnaryExpression; end
|
392
|
+
|
393
|
+
# A type reference is a reference to a type.
|
394
|
+
#
|
395
|
+
class TypeReference < Expression
|
396
|
+
contains_one_uni 'type_name', QualifiedReference, :lowerBound => 1
|
397
|
+
end
|
398
|
+
|
399
|
+
# An instance reference is a reference to one or many named instances of a particular type
|
400
|
+
#
|
401
|
+
class InstanceReferences < TypeReference
|
402
|
+
contains_many_uni 'names', Expression, :lowerBound => 1
|
403
|
+
end
|
404
|
+
|
405
|
+
# A resource body describes one resource instance
|
406
|
+
#
|
407
|
+
class ResourceBody < PopsObject
|
408
|
+
contains_one_uni 'title', Expression
|
409
|
+
contains_many_uni 'operations', AttributeOperation
|
410
|
+
end
|
411
|
+
|
412
|
+
# An abstract resource describes the form of the resource (regular, virtual or exported)
|
413
|
+
# and adds convenience methods to ask if it is virtual or exported.
|
414
|
+
# All derived classes may not support all forms, and these needs to be validated
|
415
|
+
#
|
416
|
+
class AbstractResource < Expression
|
417
|
+
has_attr 'form', RGen::MetamodelBuilder::DataTypes::Enum.new([:regular, :virtual, :exported ]), :lowerBound => 1, :defaultValueLiteral => "regular"
|
418
|
+
has_attr 'virtual', Boolean, :derived => true
|
419
|
+
has_attr 'exported', Boolean, :derived => true
|
420
|
+
|
421
|
+
module ClassModule
|
422
|
+
def virtual_derived
|
423
|
+
form == :virtual || form == :exported
|
424
|
+
end
|
425
|
+
|
426
|
+
def exported_derived
|
427
|
+
form == :exported
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
end
|
432
|
+
|
433
|
+
# A resource expression is used to instantiate one or many resource. Resources may optionally
|
434
|
+
# be virtual or exported, an exported resource is always virtual.
|
435
|
+
#
|
436
|
+
class ResourceExpression < AbstractResource
|
437
|
+
contains_one_uni 'type_name', Expression, :lowerBound => 1
|
438
|
+
contains_many_uni 'bodies', ResourceBody
|
439
|
+
end
|
440
|
+
|
441
|
+
# A resource defaults sets defaults for a resource type. This class inherits from AbstractResource
|
442
|
+
# but does only support the :regular form (this is intentional to be able to produce better error messages
|
443
|
+
# when illegal forms are applied to a model.
|
444
|
+
#
|
445
|
+
class ResourceDefaultsExpression < AbstractResource
|
446
|
+
contains_one_uni 'type_ref', QualifiedReference
|
447
|
+
contains_many_uni 'operations', AttributeOperation
|
448
|
+
end
|
449
|
+
|
450
|
+
# A resource override overrides already set values.
|
451
|
+
#
|
452
|
+
class ResourceOverrideExpression < Expression
|
453
|
+
contains_one_uni 'resources', Expression, :lowerBound => 1
|
454
|
+
contains_many_uni 'operations', AttributeOperation
|
455
|
+
end
|
456
|
+
|
457
|
+
# A selector entry describes a map from matching_expr to value_expr.
|
458
|
+
#
|
459
|
+
class SelectorEntry < PopsObject
|
460
|
+
contains_one_uni 'matching_expr', Expression, :lowerBound => 1
|
461
|
+
contains_one_uni 'value_expr', Expression, :lowerBound => 1
|
462
|
+
end
|
463
|
+
|
464
|
+
# A selector expression represents a mapping from a left_expr to a matching SelectorEntry.
|
465
|
+
#
|
466
|
+
class SelectorExpression < Expression
|
467
|
+
contains_one_uni 'left_expr', Expression, :lowerBound => 1
|
468
|
+
contains_many_uni 'selectors', SelectorEntry
|
469
|
+
end
|
470
|
+
|
471
|
+
# Create Invariant. Future suggested enhancement Puppet Types.
|
472
|
+
#
|
473
|
+
class CreateInvariantExpression < Expression
|
474
|
+
has_attr 'name', String
|
475
|
+
contains_one_uni 'message_expr', Expression, :lowerBound => 1
|
476
|
+
contains_one_uni 'constraint_expr', Expression, :lowerBound => 1
|
477
|
+
end
|
478
|
+
|
479
|
+
# Create Attribute. Future suggested enhancement Puppet Types.
|
480
|
+
#
|
481
|
+
class CreateAttributeExpression < Expression
|
482
|
+
has_attr 'name', String, :lowerBound => 1
|
483
|
+
|
484
|
+
# Should evaluate to name of datatype (String, Integer, Float, Boolean) or an EEnum metadata
|
485
|
+
# (created by CreateEnumExpression). If omitted, the type is a String.
|
486
|
+
#
|
487
|
+
contains_one_uni 'type', Expression
|
488
|
+
contains_one_uni 'min_expr', Expression
|
489
|
+
contains_one_uni 'max_expr', Expression
|
490
|
+
contains_one_uni 'default_value', Expression
|
491
|
+
contains_one_uni 'input_transformer', Expression
|
492
|
+
contains_one_uni 'derived_expr', Expression
|
493
|
+
end
|
494
|
+
|
495
|
+
# Create Attribute. Future suggested enhancement Puppet Types.
|
496
|
+
#
|
497
|
+
class CreateEnumExpression < Expression
|
498
|
+
has_attr 'name', String
|
499
|
+
contains_one_uni 'values', Expression
|
500
|
+
end
|
501
|
+
|
502
|
+
# Create Type. Future suggested enhancement Puppet Types.
|
503
|
+
#
|
504
|
+
class CreateTypeExpression < Expression
|
505
|
+
has_attr 'name', String, :lowerBound => 1
|
506
|
+
has_attr 'super_name', String
|
507
|
+
contains_many_uni 'attributes', CreateAttributeExpression
|
508
|
+
contains_many_uni 'invariants', CreateInvariantExpression
|
509
|
+
end
|
510
|
+
|
511
|
+
# Create ResourceType. Future suggested enhancement Puppet Types.
|
512
|
+
# @todo UNFINISHED
|
513
|
+
#
|
514
|
+
class CreateResourceType < CreateTypeExpression
|
515
|
+
# TODO CreateResourceType
|
516
|
+
# - has features required by the provider - provider invariant?
|
517
|
+
# - super type must be a ResourceType
|
518
|
+
end
|
519
|
+
|
520
|
+
# A named access expression looks up a named part. (e.g. $a.b)
|
521
|
+
#
|
522
|
+
class NamedAccessExpression < BinaryExpression; end
|
523
|
+
|
524
|
+
# A named function definition declares and defines a new function
|
525
|
+
# Future enhancement.
|
526
|
+
#
|
527
|
+
class NamedFunctionDefinition < NamedDefinition; end
|
528
|
+
|
529
|
+
# Future enhancements - Injection - Unfinished
|
530
|
+
#
|
531
|
+
module Injection
|
532
|
+
# A producer expression produces an instance of a type. The instance is initialized
|
533
|
+
# from an expression (or from the current scope if this expression is missing).
|
534
|
+
#--
|
535
|
+
# new. to handle production of injections
|
536
|
+
#
|
537
|
+
class Producer < Expression
|
538
|
+
contains_one_uni 'type_name', TypeReference, :lowerBound => 1
|
539
|
+
contains_one_uni 'instantiation_expr', Expression
|
540
|
+
end
|
541
|
+
|
542
|
+
# A binding entry binds one capability generically or named, specifies default bindings or
|
543
|
+
# composition of other bindings.
|
544
|
+
#
|
545
|
+
class BindingEntry < PopsObject
|
546
|
+
contains_one_uni 'key', Expression
|
547
|
+
contains_one_uni 'value', Expression
|
548
|
+
end
|
549
|
+
|
550
|
+
# Defines an optionally named binding.
|
551
|
+
#
|
552
|
+
class Binding < Expression
|
553
|
+
contains_one_uni 'title_expr', Expression
|
554
|
+
contains_many_uni 'bindings', BindingEntry
|
555
|
+
end
|
556
|
+
|
557
|
+
# An injection provides a value bound in the effective binding scope. The injection
|
558
|
+
# is based on a type (a capability) and an optional list of instance names (i.e. an InstanceReference).
|
559
|
+
# Invariants: optional and instantiation are mutually exclusive
|
560
|
+
#
|
561
|
+
class InjectExpression < Expression
|
562
|
+
has_attr 'optional', Boolean
|
563
|
+
contains_one_uni 'binding', Expression, :lowerBound => 1
|
564
|
+
contains_one_uni 'instantiation', Expression
|
565
|
+
end
|
566
|
+
end
|
567
|
+
end
|