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.

Files changed (477) hide show
  1. data/CONTRIBUTING.md +2 -2
  2. data/Gemfile +32 -19
  3. data/README_DEVELOPER.md +332 -14
  4. data/Rakefile +9 -5
  5. data/ext/build_defaults.yaml +2 -3
  6. data/ext/debian/changelog.erb +6 -0
  7. data/ext/debian/control +6 -6
  8. data/ext/envpuppet +4 -4
  9. data/ext/project_data.yaml +1 -0
  10. data/ext/puppet-nm-dispatcher +13 -0
  11. data/ext/redhat/puppet.spec.erb +17 -0
  12. data/ext/suse/client.init +1 -1
  13. data/ext/systemd/puppetagent.service +2 -2
  14. data/ext/systemd/puppetmaster.service +2 -2
  15. data/lib/hiera/scope.rb +29 -11
  16. data/lib/hiera_puppet.rb +1 -3
  17. data/lib/puppet/agent.rb +3 -3
  18. data/lib/puppet/application.rb +2 -2
  19. data/lib/puppet/application/agent.rb +27 -12
  20. data/lib/puppet/application/apply.rb +11 -1
  21. data/lib/puppet/application/describe.rb +1 -1
  22. data/lib/puppet/application/doc.rb +13 -9
  23. data/lib/puppet/application/filebucket.rb +0 -1
  24. data/lib/puppet/application/kick.rb +1 -0
  25. data/lib/puppet/application/master.rb +16 -8
  26. data/lib/puppet/daemon.rb +19 -64
  27. data/lib/puppet/defaults.rb +61 -5
  28. data/lib/puppet/error.rb +15 -4
  29. data/lib/puppet/external/nagios/grammar.ry +1 -1
  30. data/lib/puppet/external/nagios/makefile +1 -1
  31. data/lib/puppet/external/nagios/parser.rb +185 -618
  32. data/lib/puppet/external/pson/pure/parser.rb +47 -1
  33. data/lib/puppet/face/certificate.rb +3 -3
  34. data/lib/puppet/face/module.rb +1 -1
  35. data/lib/puppet/face/module/changes.rb +3 -1
  36. data/lib/puppet/face/module/uninstall.rb +1 -1
  37. data/lib/puppet/face/node/clean.rb +5 -5
  38. data/lib/puppet/feature/base.rb +3 -1
  39. data/lib/puppet/feature/libuser.rb +8 -0
  40. data/lib/puppet/file_serving/fileset.rb +9 -1
  41. data/lib/puppet/forge.rb +28 -5
  42. data/lib/puppet/forge/errors.rb +34 -0
  43. data/lib/puppet/forge/repository.rb +1 -1
  44. data/lib/puppet/indirector.rb +4 -1
  45. data/lib/puppet/indirector/catalog/compiler.rb +37 -30
  46. data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
  47. data/lib/puppet/indirector/indirection.rb +28 -15
  48. data/lib/puppet/indirector/rest.rb +18 -10
  49. data/lib/puppet/interface.rb +11 -4
  50. data/lib/puppet/interface/action.rb +1 -3
  51. data/lib/puppet/interface/action_builder.rb +0 -3
  52. data/lib/puppet/interface/action_manager.rb +0 -3
  53. data/lib/puppet/interface/face_collection.rb +0 -2
  54. data/lib/puppet/interface/option.rb +0 -2
  55. data/lib/puppet/interface/option_builder.rb +0 -2
  56. data/lib/puppet/interface/option_manager.rb +0 -2
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module_tool.rb +1 -0
  59. data/lib/puppet/module_tool/applications/application.rb +0 -3
  60. data/lib/puppet/module_tool/applications/builder.rb +8 -20
  61. data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
  62. data/lib/puppet/module_tool/applications/installer.rb +1 -0
  63. data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +18 -1
  66. data/lib/puppet/module_tool/modulefile.rb +2 -2
  67. data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
  68. data/lib/puppet/module_tool/tar.rb +17 -0
  69. data/lib/puppet/module_tool/tar/gnu.rb +9 -0
  70. data/lib/puppet/module_tool/tar/mini.rb +39 -0
  71. data/lib/puppet/module_tool/tar/solaris.rb +5 -0
  72. data/lib/puppet/network/http.rb +1 -0
  73. data/lib/puppet/network/http/connection.rb +9 -23
  74. data/lib/puppet/network/http/handler.rb +38 -7
  75. data/lib/puppet/network/http/rack/rest.rb +14 -3
  76. data/lib/puppet/network/http/webrick.rb +3 -1
  77. data/lib/puppet/network/http/webrick/rest.rb +11 -2
  78. data/lib/puppet/node/environment.rb +3 -1
  79. data/lib/puppet/parameter.rb +32 -29
  80. data/lib/puppet/parameter/package_options.rb +1 -1
  81. data/lib/puppet/parameter/path.rb +1 -1
  82. data/lib/puppet/parameter/value.rb +1 -1
  83. data/lib/puppet/parameter/value_collection.rb +7 -3
  84. data/lib/puppet/parser/ast.rb +3 -1
  85. data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
  86. data/lib/puppet/parser/ast/astarray.rb +1 -1
  87. data/lib/puppet/parser/ast/block_expression.rb +41 -0
  88. data/lib/puppet/parser/ast/function.rb +13 -2
  89. data/lib/puppet/parser/ast/lambda.rb +107 -0
  90. data/lib/puppet/parser/ast/leaf.rb +1 -2
  91. data/lib/puppet/parser/ast/method_call.rb +77 -0
  92. data/lib/puppet/parser/ast/vardef.rb +7 -0
  93. data/lib/puppet/parser/compiler.rb +27 -16
  94. data/lib/puppet/parser/e_parser_adapter.rb +120 -0
  95. data/lib/puppet/parser/files.rb +7 -6
  96. data/lib/puppet/parser/functions.rb +10 -8
  97. data/lib/puppet/parser/functions/collect.rb +43 -0
  98. data/lib/puppet/parser/functions/each.rb +96 -0
  99. data/lib/puppet/parser/functions/foreach.rb +96 -0
  100. data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
  101. data/lib/puppet/parser/functions/hiera.rb +20 -2
  102. data/lib/puppet/parser/functions/hiera_array.rb +21 -2
  103. data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
  104. data/lib/puppet/parser/functions/hiera_include.rb +33 -2
  105. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  106. data/lib/puppet/parser/functions/reduce.rb +74 -0
  107. data/lib/puppet/parser/functions/reject.rb +46 -0
  108. data/lib/puppet/parser/functions/select.rb +46 -0
  109. data/lib/puppet/parser/functions/slice.rb +96 -0
  110. data/lib/puppet/parser/functions/template.rb +2 -2
  111. data/lib/puppet/parser/grammar.ra +7 -4
  112. data/lib/puppet/parser/lexer.rb +10 -0
  113. data/lib/puppet/parser/methods.rb +69 -0
  114. data/lib/puppet/parser/parser.rb +855 -808
  115. data/lib/puppet/parser/parser_factory.rb +62 -0
  116. data/lib/puppet/parser/parser_support.rb +8 -2
  117. data/lib/puppet/parser/scope.rb +153 -47
  118. data/lib/puppet/parser/templatewrapper.rb +28 -21
  119. data/lib/puppet/parser/type_loader.rb +3 -1
  120. data/lib/puppet/pops.rb +40 -0
  121. data/lib/puppet/pops/adaptable.rb +190 -0
  122. data/lib/puppet/pops/adapters.rb +65 -0
  123. data/lib/puppet/pops/containment.rb +37 -0
  124. data/lib/puppet/pops/issues.rb +258 -0
  125. data/lib/puppet/pops/label_provider.rb +71 -0
  126. data/lib/puppet/pops/model/ast_transformer.rb +636 -0
  127. data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
  128. data/lib/puppet/pops/model/factory.rb +804 -0
  129. data/lib/puppet/pops/model/model.rb +567 -0
  130. data/lib/puppet/pops/model/model_label_provider.rb +75 -0
  131. data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
  132. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  133. data/lib/puppet/pops/parser/egrammar.ra +723 -0
  134. data/lib/puppet/pops/parser/eparser.rb +2300 -0
  135. data/lib/puppet/pops/parser/grammar.ra +746 -0
  136. data/lib/puppet/pops/parser/lexer.rb +842 -0
  137. data/lib/puppet/pops/parser/makefile +13 -0
  138. data/lib/puppet/pops/parser/parser_support.rb +203 -0
  139. data/lib/puppet/pops/patterns.rb +35 -0
  140. data/lib/puppet/pops/utils.rb +104 -0
  141. data/lib/puppet/pops/validation.rb +297 -0
  142. data/lib/puppet/pops/validation/checker3_1.rb +551 -0
  143. data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
  144. data/lib/puppet/pops/visitable.rb +6 -0
  145. data/lib/puppet/pops/visitor.rb +50 -0
  146. data/lib/puppet/property.rb +37 -28
  147. data/lib/puppet/property/ensure.rb +2 -2
  148. data/lib/puppet/property/ordered_list.rb +1 -1
  149. data/lib/puppet/provider.rb +26 -30
  150. data/lib/puppet/provider/aixobject.rb +45 -44
  151. data/lib/puppet/provider/augeas/augeas.rb +0 -1
  152. data/lib/puppet/provider/confiner.rb +1 -1
  153. data/lib/puppet/provider/cron/crontab.rb +107 -67
  154. data/lib/puppet/provider/group/groupadd.rb +59 -3
  155. data/lib/puppet/provider/interface/cisco.rb +4 -4
  156. data/lib/puppet/provider/mount/parsed.rb +1 -1
  157. data/lib/puppet/provider/nameservice.rb +22 -6
  158. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  159. data/lib/puppet/provider/package/aix.rb +28 -4
  160. data/lib/puppet/provider/package/gem.rb +0 -2
  161. data/lib/puppet/provider/package/macports.rb +1 -1
  162. data/lib/puppet/provider/package/nim.rb +249 -4
  163. data/lib/puppet/provider/package/opkg.rb +77 -0
  164. data/lib/puppet/provider/package/pacman.rb +2 -2
  165. data/lib/puppet/provider/package/rpm.rb +30 -16
  166. data/lib/puppet/provider/package/yum.rb +3 -3
  167. data/lib/puppet/provider/parsedfile.rb +80 -3
  168. data/lib/puppet/provider/selmodule/semodule.rb +2 -2
  169. data/lib/puppet/provider/service/debian.rb +0 -4
  170. data/lib/puppet/provider/service/freebsd.rb +2 -2
  171. data/lib/puppet/provider/service/gentoo.rb +0 -9
  172. data/lib/puppet/provider/service/init.rb +27 -2
  173. data/lib/puppet/provider/service/launchd.rb +1 -1
  174. data/lib/puppet/provider/service/openwrt.rb +36 -0
  175. data/lib/puppet/provider/service/redhat.rb +0 -9
  176. data/lib/puppet/provider/service/src.rb +38 -4
  177. data/lib/puppet/provider/service/systemd.rb +2 -2
  178. data/lib/puppet/provider/service/upstart.rb +1 -8
  179. data/lib/puppet/provider/user/aix.rb +4 -10
  180. data/lib/puppet/provider/user/pw.rb +6 -10
  181. data/lib/puppet/provider/user/useradd.rb +129 -31
  182. data/lib/puppet/provider/vlan/cisco.rb +4 -4
  183. data/lib/puppet/reference/function.rb +2 -2
  184. data/lib/puppet/reference/indirection.rb +46 -5
  185. data/lib/puppet/reference/metaparameter.rb +2 -2
  186. data/lib/puppet/reports.rb +5 -5
  187. data/lib/puppet/reports/rrdgraph.rb +4 -4
  188. data/lib/puppet/reports/tagmail.rb +1 -1
  189. data/lib/puppet/resource.rb +1 -1
  190. data/lib/puppet/resource/type.rb +13 -11
  191. data/lib/puppet/scheduler.rb +16 -0
  192. data/lib/puppet/scheduler/job.rb +53 -0
  193. data/lib/puppet/scheduler/scheduler.rb +45 -0
  194. data/lib/puppet/scheduler/splay_job.rb +32 -0
  195. data/lib/puppet/scheduler/timer.rb +13 -0
  196. data/lib/puppet/settings/base_setting.rb +1 -1
  197. data/lib/puppet/simple_graph.rb +4 -4
  198. data/lib/puppet/ssl/base.rb +12 -2
  199. data/lib/puppet/ssl/certificate.rb +4 -1
  200. data/lib/puppet/ssl/certificate_request.rb +4 -1
  201. data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
  202. data/lib/puppet/ssl/configuration.rb +32 -0
  203. data/lib/puppet/ssl/host.rb +18 -21
  204. data/lib/puppet/ssl/key.rb +4 -1
  205. data/lib/puppet/ssl/validator.rb +116 -0
  206. data/lib/puppet/transaction.rb +1 -1
  207. data/lib/puppet/transaction/event.rb +3 -10
  208. data/lib/puppet/transaction/event_manager.rb +8 -1
  209. data/lib/puppet/transaction/report.rb +17 -16
  210. data/lib/puppet/type.rb +77 -69
  211. data/lib/puppet/type/cron.rb +20 -8
  212. data/lib/puppet/type/exec.rb +9 -3
  213. data/lib/puppet/type/file.rb +95 -21
  214. data/lib/puppet/type/file/content.rb +1 -1
  215. data/lib/puppet/type/file/mode.rb +7 -1
  216. data/lib/puppet/type/file/source.rb +2 -2
  217. data/lib/puppet/type/group.rb +11 -0
  218. data/lib/puppet/type/scheduled_task.rb +5 -1
  219. data/lib/puppet/type/service.rb +1 -1
  220. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  221. data/lib/puppet/type/user.rb +24 -6
  222. data/lib/puppet/util.rb +12 -2
  223. data/lib/puppet/util/classgen.rb +4 -4
  224. data/lib/puppet/util/colors.rb +55 -0
  225. data/lib/puppet/util/command_line/trollop.rb +4 -4
  226. data/lib/puppet/util/errors.rb +39 -3
  227. data/lib/puppet/util/fileparsing.rb +5 -0
  228. data/lib/puppet/util/filetype.rb +11 -9
  229. data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
  230. data/lib/puppet/util/libuser.conf +15 -0
  231. data/lib/puppet/util/libuser.rb +12 -0
  232. data/lib/puppet/util/monkey_patches.rb +48 -0
  233. data/lib/puppet/util/network_device.rb +1 -1
  234. data/lib/puppet/util/network_device/base.rb +2 -2
  235. data/lib/puppet/util/network_device/cisco/device.rb +29 -19
  236. data/lib/puppet/util/network_device/config.rb +5 -2
  237. data/lib/puppet/util/network_device/ipcalc.rb +1 -1
  238. data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
  239. data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
  240. data/lib/puppet/util/plugins.rb +4 -4
  241. data/lib/puppet/util/posix.rb +1 -1
  242. data/lib/puppet/util/profiler.rb +28 -0
  243. data/lib/puppet/util/profiler/logging.rb +47 -0
  244. data/lib/puppet/util/profiler/none.rb +8 -0
  245. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  246. data/lib/puppet/util/profiler/wall_clock.rb +34 -0
  247. data/lib/puppet/util/provider_features.rb +1 -1
  248. data/lib/puppet/util/rdoc/parser.rb +5 -5
  249. data/lib/puppet/util/ssl.rb +38 -0
  250. data/lib/puppet/util/subclass_loader.rb +1 -5
  251. data/lib/puppet/util/windows.rb +1 -0
  252. data/lib/puppet/util/windows/process.rb +3 -0
  253. data/lib/puppet/util/windows/root_certs.rb +86 -0
  254. data/lib/puppet/util/windows/security.rb +1 -0
  255. data/lib/puppet/version.rb +1 -1
  256. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
  257. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
  258. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
  259. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
  260. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
  261. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
  262. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
  263. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
  264. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
  265. data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
  266. data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
  267. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
  268. data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
  269. data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
  270. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
  271. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
  272. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
  273. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
  274. data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
  275. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
  276. data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  277. data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
  278. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
  279. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
  280. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
  281. data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
  282. data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
  283. data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
  284. data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
  285. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
  286. data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
  287. data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
  288. data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
  289. data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
  290. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
  291. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
  292. data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
  293. data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
  294. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
  295. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
  296. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
  297. data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
  298. data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
  299. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
  300. data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
  301. data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
  302. data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
  303. data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
  304. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
  305. data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
  306. data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
  307. data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
  308. data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
  309. data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
  310. data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
  311. data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
  312. data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
  313. data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
  314. data/spec/integration/parser/collector_spec.rb +1 -1
  315. data/spec/integration/parser/compiler_spec.rb +252 -227
  316. data/spec/integration/parser/parser_spec.rb +171 -53
  317. data/spec/integration/parser/scope_spec.rb +1 -1
  318. data/spec/integration/provider/cron/crontab_spec.rb +187 -0
  319. data/spec/integration/provider/service/systemd_spec.rb +20 -0
  320. data/spec/integration/type/file_spec.rb +21 -21
  321. data/spec/integration/type/package_spec.rb +1 -1
  322. data/spec/lib/puppet_spec/database.rb +2 -5
  323. data/spec/spec_helper.rb +6 -1
  324. data/spec/unit/application/apply_spec.rb +16 -1
  325. data/spec/unit/application/describe_spec.rb +1 -1
  326. data/spec/unit/application/doc_spec.rb +55 -32
  327. data/spec/unit/application/kick_spec.rb +8 -6
  328. data/spec/unit/application/master_spec.rb +4 -4
  329. data/spec/unit/daemon_spec.rb +1 -1
  330. data/spec/unit/forge/errors_spec.rb +40 -0
  331. data/spec/unit/forge/repository_spec.rb +11 -1
  332. data/spec/unit/forge_spec.rb +13 -3
  333. data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
  334. data/spec/unit/hiera/scope_spec.rb +48 -25
  335. data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
  336. data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
  337. data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
  338. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
  339. data/spec/unit/indirector/indirection_spec.rb +5 -0
  340. data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
  341. data/spec/unit/indirector_spec.rb +7 -1
  342. data/spec/unit/interface/action_builder_spec.rb +1 -1
  343. data/spec/unit/interface/action_manager_spec.rb +0 -2
  344. data/spec/unit/interface/action_spec.rb +1 -1
  345. data/spec/unit/interface/documentation_spec.rb +0 -2
  346. data/spec/unit/interface/face_collection_spec.rb +1 -1
  347. data/spec/unit/interface/option_builder_spec.rb +1 -1
  348. data/spec/unit/interface/option_spec.rb +0 -1
  349. data/spec/unit/module_spec.rb +17 -19
  350. data/spec/unit/module_tool/application_spec.rb +1 -3
  351. data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
  352. data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
  353. data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
  354. data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
  355. data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
  356. data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
  357. data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
  358. data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
  359. data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
  360. data/spec/unit/network/http/connection_spec.rb +17 -2
  361. data/spec/unit/network/http/handler_spec.rb +195 -167
  362. data/spec/unit/network/http/rack/rest_spec.rb +26 -4
  363. data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
  364. data/spec/unit/network/http/webrick_spec.rb +12 -3
  365. data/spec/unit/node/environment_spec.rb +421 -404
  366. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
  367. data/spec/unit/parser/collector_spec.rb +4 -4
  368. data/spec/unit/parser/compiler_spec.rb +13 -13
  369. data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
  370. data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
  371. data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
  372. data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
  373. data/spec/unit/parser/functions/hiera_spec.rb +0 -2
  374. data/spec/unit/parser/functions_spec.rb +27 -15
  375. data/spec/unit/parser/methods/collect_spec.rb +110 -0
  376. data/spec/unit/parser/methods/each_spec.rb +91 -0
  377. data/spec/unit/parser/methods/foreach_spec.rb +91 -0
  378. data/spec/unit/parser/methods/reduce_spec.rb +67 -0
  379. data/spec/unit/parser/methods/reject_spec.rb +73 -0
  380. data/spec/unit/parser/methods/select_spec.rb +79 -0
  381. data/spec/unit/parser/methods/shared.rb +61 -0
  382. data/spec/unit/parser/methods/slice_spec.rb +97 -0
  383. data/spec/unit/parser/parser_spec.rb +2 -2
  384. data/spec/unit/parser/scope_spec.rb +39 -16
  385. data/spec/unit/parser/templatewrapper_spec.rb +6 -5
  386. data/spec/unit/parser/type_loader_spec.rb +191 -165
  387. data/spec/unit/pops/adaptable_spec.rb +143 -0
  388. data/spec/unit/pops/containment_spec.rb +25 -0
  389. data/spec/unit/pops/factory_rspec_helper.rb +77 -0
  390. data/spec/unit/pops/factory_spec.rb +329 -0
  391. data/spec/unit/pops/issues_spec.rb +26 -0
  392. data/spec/unit/pops/label_provider_spec.rb +42 -0
  393. data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
  394. data/spec/unit/pops/model/model_spec.rb +37 -0
  395. data/spec/unit/pops/parser/lexer_spec.rb +884 -0
  396. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
  397. data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
  398. data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
  399. data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
  400. data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
  401. data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
  402. data/spec/unit/pops/parser/parser_spec.rb +15 -0
  403. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
  404. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
  405. data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
  406. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
  407. data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
  408. data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
  409. data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
  410. data/spec/unit/pops/visitor_spec.rb +94 -0
  411. data/spec/unit/property_spec.rb +11 -0
  412. data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
  413. data/spec/unit/provider/cron/crontab_spec.rb +97 -7
  414. data/spec/unit/provider/cron/parsed_spec.rb +325 -0
  415. data/spec/unit/provider/exec/posix_spec.rb +1 -1
  416. data/spec/unit/provider/group/groupadd_spec.rb +33 -3
  417. data/spec/unit/provider/group/pw_spec.rb +5 -5
  418. data/spec/unit/provider/nameservice_spec.rb +304 -0
  419. data/spec/unit/provider/package/aix_spec.rb +53 -11
  420. data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
  421. data/spec/unit/provider/package/gem_spec.rb +6 -11
  422. data/spec/unit/provider/package/nim_spec.rb +216 -7
  423. data/spec/unit/provider/package/opkg_spec.rb +180 -0
  424. data/spec/unit/provider/package/rpm_spec.rb +149 -3
  425. data/spec/unit/provider/package/yum_spec.rb +6 -5
  426. data/spec/unit/provider/parsedfile_spec.rb +122 -28
  427. data/spec/unit/provider/service/freebsd_spec.rb +18 -0
  428. data/spec/unit/provider/service/init_spec.rb +108 -87
  429. data/spec/unit/provider/service/launchd_spec.rb +2 -2
  430. data/spec/unit/provider/service/openwrt_spec.rb +109 -0
  431. data/spec/unit/provider/service/src_spec.rb +117 -41
  432. data/spec/unit/provider/service/systemd_spec.rb +125 -17
  433. data/spec/unit/provider/service/upstart_spec.rb +1 -1
  434. data/spec/unit/provider/user/aix_spec.rb +42 -0
  435. data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
  436. data/spec/unit/provider/user/pw_spec.rb +24 -12
  437. data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
  438. data/spec/unit/provider/user/useradd_spec.rb +179 -15
  439. data/spec/unit/resource/type_spec.rb +3 -3
  440. data/spec/unit/scheduler/job_spec.rb +79 -0
  441. data/spec/unit/scheduler/scheduler_spec.rb +129 -0
  442. data/spec/unit/scheduler/splay_job_spec.rb +35 -0
  443. data/spec/unit/ssl/base_spec.rb +3 -9
  444. data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
  445. data/spec/unit/ssl/certificate_request_spec.rb +3 -1
  446. data/spec/unit/ssl/certificate_spec.rb +3 -1
  447. data/spec/unit/ssl/configuration_spec.rb +74 -0
  448. data/spec/unit/ssl/host_spec.rb +28 -7
  449. data/spec/unit/ssl/validator_spec.rb +311 -0
  450. data/spec/unit/transaction/event_manager_spec.rb +49 -0
  451. data/spec/unit/transaction/event_spec.rb +20 -5
  452. data/spec/unit/transaction/report_spec.rb +8 -0
  453. data/spec/unit/type/cron_spec.rb +9 -0
  454. data/spec/unit/type/exec_spec.rb +11 -0
  455. data/spec/unit/type/file/content_spec.rb +20 -20
  456. data/spec/unit/type/file/mode_spec.rb +6 -0
  457. data/spec/unit/type/file/source_spec.rb +9 -7
  458. data/spec/unit/type/file_spec.rb +22 -3
  459. data/spec/unit/type/service_spec.rb +34 -21
  460. data/spec/unit/type_spec.rb +46 -1
  461. data/spec/unit/util/backups_spec.rb +2 -2
  462. data/spec/unit/util/execution_spec.rb +4 -1
  463. data/spec/unit/util/filetype_spec.rb +6 -0
  464. data/spec/unit/util/monkey_patches_spec.rb +18 -0
  465. data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
  466. data/spec/unit/util/network_device/config_spec.rb +14 -0
  467. data/spec/unit/util/network_device_spec.rb +3 -3
  468. data/spec/unit/util/profiler/logging_spec.rb +81 -0
  469. data/spec/unit/util/profiler/none_spec.rb +12 -0
  470. data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
  471. data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
  472. data/spec/unit/util/pson_spec.rb +5 -0
  473. data/spec/unit/util/ssl_spec.rb +51 -0
  474. data/spec/unit/util/windows/root_certs_spec.rb +15 -0
  475. data/spec/unit/util_spec.rb +28 -0
  476. metadata +2593 -2307
  477. 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