corl 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. checksums.yaml +7 -7
  2. data/.gitignore +51 -0
  3. data/Gemfile +6 -11
  4. data/Gemfile.lock +122 -147
  5. data/Rakefile +22 -21
  6. data/TODO.rdoc +12 -0
  7. data/VERSION +1 -1
  8. data/bin/corl +15 -21
  9. data/bootstrap/bootstrap.sh +50 -16
  10. data/bootstrap/lib/shell/os.sh +2 -2
  11. data/bootstrap/os/ubuntu/00_base.sh +11 -4
  12. data/bootstrap/os/ubuntu/01_git.sh +6 -3
  13. data/bootstrap/os/ubuntu/{02-editor.sh → 02_editor.sh} +8 -2
  14. data/bootstrap/os/ubuntu/05_ruby.sh +63 -15
  15. data/bootstrap/os/ubuntu/06_puppet.sh +9 -4
  16. data/bootstrap/os/ubuntu/09_nucleon.sh +25 -9
  17. data/bootstrap/os/ubuntu/10_corl.sh +24 -10
  18. data/corl.gemspec +27 -502
  19. data/lib/CORL/configuration/file.rb +112 -112
  20. data/lib/CORL/machine/rackspace.rb +18 -17
  21. data/lib/core/facade.rb +1 -1
  22. data/lib/core/plugin/agent.rb +141 -0
  23. data/lib/core/plugin/cloud_action.rb +67 -62
  24. data/lib/core/plugin/configuration.rb +71 -70
  25. data/lib/core/plugin/network.rb +163 -151
  26. data/lib/core/plugin/node.rb +457 -422
  27. data/lib/core/vagrant/commands/launcher.rb +13 -13
  28. data/lib/core/vagrant/provisioner/config.rb +1 -3
  29. data/lib/nucleon/action/node/bootstrap.rb +21 -16
  30. data/lib/nucleon/action/node/destroy.rb +13 -13
  31. data/lib/nucleon/action/node/seed.rb +62 -64
  32. data/lib/nucleon/action/node/status.rb +39 -32
  33. data/locales/en.yml +121 -116
  34. data/spec/spec_helper.rb +1 -4
  35. metadata +111 -641
  36. data/.document +0 -5
  37. data/lib/core/mod/fog_rackspace_server.rb +0 -29
  38. data/lib/core/vagrant/Vagrantfile +0 -10
  39. data/lib/nucleon/action/plugin/template/nucleon.action.erb +0 -56
  40. data/rdoc/site/0.4.29/CORL/Action/Authorize.html +0 -485
  41. data/rdoc/site/0.4.29/CORL/Action/Bootstrap.html +0 -546
  42. data/rdoc/site/0.4.29/CORL/Action/Build.html +0 -396
  43. data/rdoc/site/0.4.29/CORL/Action/Destroy.html +0 -515
  44. data/rdoc/site/0.4.29/CORL/Action/Exec.html +0 -472
  45. data/rdoc/site/0.4.29/CORL/Action/Facts.html +0 -398
  46. data/rdoc/site/0.4.29/CORL/Action/Image.html +0 -515
  47. data/rdoc/site/0.4.29/CORL/Action/Images.html +0 -514
  48. data/rdoc/site/0.4.29/CORL/Action/Ip.html +0 -395
  49. data/rdoc/site/0.4.29/CORL/Action/Keypair.html +0 -494
  50. data/rdoc/site/0.4.29/CORL/Action/Lookup.html +0 -474
  51. data/rdoc/site/0.4.29/CORL/Action/Machines.html +0 -509
  52. data/rdoc/site/0.4.29/CORL/Action/Provision.html +0 -456
  53. data/rdoc/site/0.4.29/CORL/Action/Reboot.html +0 -515
  54. data/rdoc/site/0.4.29/CORL/Action/Regions.html +0 -509
  55. data/rdoc/site/0.4.29/CORL/Action/Revoke.html +0 -483
  56. data/rdoc/site/0.4.29/CORL/Action/Seed.html +0 -544
  57. data/rdoc/site/0.4.29/CORL/Action/Spawn.html +0 -616
  58. data/rdoc/site/0.4.29/CORL/Action/Ssh.html +0 -526
  59. data/rdoc/site/0.4.29/CORL/Action/Start.html +0 -515
  60. data/rdoc/site/0.4.29/CORL/Action/Stop.html +0 -515
  61. data/rdoc/site/0.4.29/CORL/Action/Vagrantfile.html +0 -457
  62. data/rdoc/site/0.4.29/CORL/Action.html +0 -360
  63. data/rdoc/site/0.4.29/CORL/Configuration/File.html +0 -1128
  64. data/rdoc/site/0.4.29/CORL/Configuration.html +0 -339
  65. data/rdoc/site/0.4.29/CORL/Errors.html +0 -339
  66. data/rdoc/site/0.4.29/CORL/Event/Puppet.html +0 -673
  67. data/rdoc/site/0.4.29/CORL/Event.html +0 -339
  68. data/rdoc/site/0.4.29/CORL/Facade.html +0 -742
  69. data/rdoc/site/0.4.29/CORL/Machine/Aws.html +0 -733
  70. data/rdoc/site/0.4.29/CORL/Machine/Fog.html +0 -1269
  71. data/rdoc/site/0.4.29/CORL/Machine/Physical.html +0 -1039
  72. data/rdoc/site/0.4.29/CORL/Machine/Rackspace.html +0 -514
  73. data/rdoc/site/0.4.29/CORL/Machine/Vagrant.html +0 -1300
  74. data/rdoc/site/0.4.29/CORL/Machine.html +0 -343
  75. data/rdoc/site/0.4.29/CORL/Mixin/Action/Keypair.html +0 -572
  76. data/rdoc/site/0.4.29/CORL/Mixin/Action.html +0 -339
  77. data/rdoc/site/0.4.29/CORL/Mixin/Lookup.html +0 -954
  78. data/rdoc/site/0.4.29/CORL/Mixin/Machine/SSH.html +0 -643
  79. data/rdoc/site/0.4.29/CORL/Mixin/Machine.html +0 -339
  80. data/rdoc/site/0.4.29/CORL/Mixin/Macro/NetworkSettings.html +0 -464
  81. data/rdoc/site/0.4.29/CORL/Mixin/Macro.html +0 -339
  82. data/rdoc/site/0.4.29/CORL/Mixin.html +0 -342
  83. data/rdoc/site/0.4.29/CORL/Network/Default.html +0 -391
  84. data/rdoc/site/0.4.29/CORL/Network.html +0 -339
  85. data/rdoc/site/0.4.29/CORL/Node/Aws.html +0 -716
  86. data/rdoc/site/0.4.29/CORL/Node/Fog.html +0 -1192
  87. data/rdoc/site/0.4.29/CORL/Node/Local.html +0 -424
  88. data/rdoc/site/0.4.29/CORL/Node/Rackspace.html +0 -709
  89. data/rdoc/site/0.4.29/CORL/Node/Vagrant.html +0 -1451
  90. data/rdoc/site/0.4.29/CORL/Node.html +0 -343
  91. data/rdoc/site/0.4.29/CORL/Plugin/CloudAction.html +0 -810
  92. data/rdoc/site/0.4.29/CORL/Plugin.html +0 -339
  93. data/rdoc/site/0.4.29/CORL/Provisioner/Puppetnode.html +0 -1095
  94. data/rdoc/site/0.4.29/CORL/Provisioner.html +0 -339
  95. data/rdoc/site/0.4.29/CORL/Template/Environment.html +0 -528
  96. data/rdoc/site/0.4.29/CORL/Template.html +0 -339
  97. data/rdoc/site/0.4.29/CORL/Util/Puppet/Resource.html +0 -1038
  98. data/rdoc/site/0.4.29/CORL/Util/Puppet/ResourceGroup.html +0 -920
  99. data/rdoc/site/0.4.29/CORL/Util/Puppet.html +0 -1087
  100. data/rdoc/site/0.4.29/CORL/Util.html +0 -341
  101. data/rdoc/site/0.4.29/CORL/Vagrant/Config.html +0 -896
  102. data/rdoc/site/0.4.29/CORL/Vagrant.html +0 -418
  103. data/rdoc/site/0.4.29/CORL.html +0 -465
  104. data/rdoc/site/0.4.29/Facter/Util/Loader.html +0 -396
  105. data/rdoc/site/0.4.29/Facter/Util.html +0 -339
  106. data/rdoc/site/0.4.29/Facter.html +0 -339
  107. data/rdoc/site/0.4.29/Fog/Compute/AWS/Server.html +0 -423
  108. data/rdoc/site/0.4.29/Fog/Compute/AWS.html +0 -345
  109. data/rdoc/site/0.4.29/Fog/Compute/RackspaceV2/Server.html +0 -408
  110. data/rdoc/site/0.4.29/Fog/Compute/RackspaceV2.html +0 -345
  111. data/rdoc/site/0.4.29/Fog/Compute.html +0 -340
  112. data/rdoc/site/0.4.29/Fog.html +0 -340
  113. data/rdoc/site/0.4.29/Hiera/Backend.html +0 -422
  114. data/rdoc/site/0.4.29/Hiera/Corl_logger.html +0 -449
  115. data/rdoc/site/0.4.29/Hiera.html +0 -346
  116. data/rdoc/site/0.4.29/Nucleon/Config.html +0 -357
  117. data/rdoc/site/0.4.29/Nucleon/Plugin/Base.html +0 -345
  118. data/rdoc/site/0.4.29/Nucleon/Plugin/Configuration.html +0 -1213
  119. data/rdoc/site/0.4.29/Nucleon/Plugin/Machine.html +0 -1279
  120. data/rdoc/site/0.4.29/Nucleon/Plugin/Network.html +0 -1425
  121. data/rdoc/site/0.4.29/Nucleon/Plugin/Node.html +0 -3715
  122. data/rdoc/site/0.4.29/Nucleon/Plugin/Provisioner.html +0 -1297
  123. data/rdoc/site/0.4.29/Nucleon/Plugin.html +0 -344
  124. data/rdoc/site/0.4.29/Nucleon.html +0 -344
  125. data/rdoc/site/0.4.29/Object.html +0 -358
  126. data/rdoc/site/0.4.29/Puppet/DataBinding/Corl.html +0 -345
  127. data/rdoc/site/0.4.29/Puppet/DataBinding.html +0 -338
  128. data/rdoc/site/0.4.29/Puppet/Indirector/Corl.html +0 -454
  129. data/rdoc/site/0.4.29/Puppet/Indirector.html +0 -338
  130. data/rdoc/site/0.4.29/Puppet/Parser/Functions.html +0 -480
  131. data/rdoc/site/0.4.29/Puppet/Parser.html +0 -338
  132. data/rdoc/site/0.4.29/Puppet.html +0 -338
  133. data/rdoc/site/0.4.29/README_rdoc.html +0 -340
  134. data/rdoc/site/0.4.29/Vagrant/Config/Loader.html +0 -399
  135. data/rdoc/site/0.4.29/Vagrant/Config.html +0 -339
  136. data/rdoc/site/0.4.29/Vagrant/Vagrantfile.html +0 -392
  137. data/rdoc/site/0.4.29/Vagrant.html +0 -346
  138. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Action/DeleteCache.html +0 -396
  139. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Action/InitKeys.html +0 -408
  140. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Action/LinkNetwork.html +0 -406
  141. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Action.html +0 -341
  142. data/rdoc/site/0.4.29/VagrantPlugins/CORL/BaseAction.html +0 -491
  143. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Command/Launcher.html +0 -533
  144. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Command.html +0 -339
  145. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Config/CORL.html +0 -732
  146. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Config.html +0 -339
  147. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Plugin.html +0 -345
  148. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Provisioner/CORL.html +0 -536
  149. data/rdoc/site/0.4.29/VagrantPlugins/CORL/Provisioner.html +0 -339
  150. data/rdoc/site/0.4.29/VagrantPlugins/CORL.html +0 -346
  151. data/rdoc/site/0.4.29/VagrantPlugins.html +0 -346
  152. data/rdoc/site/0.4.29/created.rid +0 -96
  153. data/rdoc/site/0.4.29/images/add.png +0 -0
  154. data/rdoc/site/0.4.29/images/brick.png +0 -0
  155. data/rdoc/site/0.4.29/images/brick_link.png +0 -0
  156. data/rdoc/site/0.4.29/images/bug.png +0 -0
  157. data/rdoc/site/0.4.29/images/bullet_black.png +0 -0
  158. data/rdoc/site/0.4.29/images/bullet_toggle_minus.png +0 -0
  159. data/rdoc/site/0.4.29/images/bullet_toggle_plus.png +0 -0
  160. data/rdoc/site/0.4.29/images/date.png +0 -0
  161. data/rdoc/site/0.4.29/images/delete.png +0 -0
  162. data/rdoc/site/0.4.29/images/find.png +0 -0
  163. data/rdoc/site/0.4.29/images/loadingAnimation.gif +0 -0
  164. data/rdoc/site/0.4.29/images/macFFBgHack.png +0 -0
  165. data/rdoc/site/0.4.29/images/package.png +0 -0
  166. data/rdoc/site/0.4.29/images/page_green.png +0 -0
  167. data/rdoc/site/0.4.29/images/page_white_text.png +0 -0
  168. data/rdoc/site/0.4.29/images/page_white_width.png +0 -0
  169. data/rdoc/site/0.4.29/images/plugin.png +0 -0
  170. data/rdoc/site/0.4.29/images/ruby.png +0 -0
  171. data/rdoc/site/0.4.29/images/tag_blue.png +0 -0
  172. data/rdoc/site/0.4.29/images/tag_green.png +0 -0
  173. data/rdoc/site/0.4.29/images/transparent.png +0 -0
  174. data/rdoc/site/0.4.29/images/wrench.png +0 -0
  175. data/rdoc/site/0.4.29/images/wrench_orange.png +0 -0
  176. data/rdoc/site/0.4.29/images/zoom.png +0 -0
  177. data/rdoc/site/0.4.29/index.html +0 -339
  178. data/rdoc/site/0.4.29/js/darkfish.js +0 -155
  179. data/rdoc/site/0.4.29/js/jquery.js +0 -18
  180. data/rdoc/site/0.4.29/js/navigation.js +0 -142
  181. data/rdoc/site/0.4.29/js/search.js +0 -94
  182. data/rdoc/site/0.4.29/js/search_index.js +0 -1
  183. data/rdoc/site/0.4.29/js/searcher.js +0 -228
  184. data/rdoc/site/0.4.29/rdoc.css +0 -543
  185. data/rdoc/site/0.4.29/table_of_contents.html +0 -1561
  186. data/rdoc/site/0.5.0/CORL/Build.html +0 -757
  187. data/rdoc/site/0.5.0/CORL/Builder/Identity.html +0 -569
  188. data/rdoc/site/0.5.0/CORL/Builder/Package.html +0 -576
  189. data/rdoc/site/0.5.0/CORL/Builder.html +0 -360
  190. data/rdoc/site/0.5.0/CORL/Configuration/File.html +0 -1148
  191. data/rdoc/site/0.5.0/CORL/Configuration.html +0 -359
  192. data/rdoc/site/0.5.0/CORL/Errors.html +0 -359
  193. data/rdoc/site/0.5.0/CORL/Facade.html +0 -899
  194. data/rdoc/site/0.5.0/CORL/Machine/AWS.html +0 -753
  195. data/rdoc/site/0.5.0/CORL/Machine/Fog.html +0 -1289
  196. data/rdoc/site/0.5.0/CORL/Machine/Physical.html +0 -1059
  197. data/rdoc/site/0.5.0/CORL/Machine/Rackspace.html +0 -534
  198. data/rdoc/site/0.5.0/CORL/Machine/Vagrant.html +0 -1320
  199. data/rdoc/site/0.5.0/CORL/Machine.html +0 -363
  200. data/rdoc/site/0.5.0/CORL/Mixin/Action/Keypair.html +0 -592
  201. data/rdoc/site/0.5.0/CORL/Mixin/Action.html +0 -359
  202. data/rdoc/site/0.5.0/CORL/Mixin/Builder/Global.html +0 -604
  203. data/rdoc/site/0.5.0/CORL/Mixin/Builder/Instance.html +0 -696
  204. data/rdoc/site/0.5.0/CORL/Mixin/Builder.html +0 -359
  205. data/rdoc/site/0.5.0/CORL/Mixin/Lookup.html +0 -1139
  206. data/rdoc/site/0.5.0/CORL/Mixin/Machine/SSH.html +0 -675
  207. data/rdoc/site/0.5.0/CORL/Mixin/Machine.html +0 -359
  208. data/rdoc/site/0.5.0/CORL/Mixin/Macro/NetworkSettings.html +0 -484
  209. data/rdoc/site/0.5.0/CORL/Mixin/Macro.html +0 -359
  210. data/rdoc/site/0.5.0/CORL/Mixin.html +0 -363
  211. data/rdoc/site/0.5.0/CORL/Network/CORL.html +0 -411
  212. data/rdoc/site/0.5.0/CORL/Network.html +0 -359
  213. data/rdoc/site/0.5.0/CORL/Node/AWS.html +0 -736
  214. data/rdoc/site/0.5.0/CORL/Node/Fog.html +0 -1212
  215. data/rdoc/site/0.5.0/CORL/Node/Local.html +0 -444
  216. data/rdoc/site/0.5.0/CORL/Node/Rackspace.html +0 -729
  217. data/rdoc/site/0.5.0/CORL/Node/Vagrant.html +0 -1476
  218. data/rdoc/site/0.5.0/CORL/Node.html +0 -363
  219. data/rdoc/site/0.5.0/CORL/Plugin/Builder.html +0 -500
  220. data/rdoc/site/0.5.0/CORL/Plugin/Configuration.html +0 -1271
  221. data/rdoc/site/0.5.0/CORL/Plugin/Machine.html +0 -1299
  222. data/rdoc/site/0.5.0/CORL/Plugin/Network.html +0 -1580
  223. data/rdoc/site/0.5.0/CORL/Plugin/Node.html +0 -4041
  224. data/rdoc/site/0.5.0/CORL/Plugin/Provisioner.html +0 -1115
  225. data/rdoc/site/0.5.0/CORL/Plugin.html +0 -649
  226. data/rdoc/site/0.5.0/CORL/Provisioner/Puppetnode.html +0 -1177
  227. data/rdoc/site/0.5.0/CORL/Provisioner.html +0 -359
  228. data/rdoc/site/0.5.0/CORL/Util/Puppet/Resource.html +0 -1058
  229. data/rdoc/site/0.5.0/CORL/Util/Puppet/ResourceGroup.html +0 -940
  230. data/rdoc/site/0.5.0/CORL/Util/Puppet.html +0 -1107
  231. data/rdoc/site/0.5.0/CORL/Util.html +0 -361
  232. data/rdoc/site/0.5.0/CORL/Vagrant/Config.html +0 -943
  233. data/rdoc/site/0.5.0/CORL/Vagrant.html +0 -438
  234. data/rdoc/site/0.5.0/CORL.html +0 -471
  235. data/rdoc/site/0.5.0/Fog/Compute/AWS/Server.html +0 -443
  236. data/rdoc/site/0.5.0/Fog/Compute/AWS.html +0 -365
  237. data/rdoc/site/0.5.0/Fog/Compute/RackspaceV2/Server.html +0 -428
  238. data/rdoc/site/0.5.0/Fog/Compute/RackspaceV2.html +0 -365
  239. data/rdoc/site/0.5.0/Fog/Compute.html +0 -360
  240. data/rdoc/site/0.5.0/Fog.html +0 -360
  241. data/rdoc/site/0.5.0/Hiera/Backend.html +0 -442
  242. data/rdoc/site/0.5.0/Hiera/Corl_logger.html +0 -469
  243. data/rdoc/site/0.5.0/Hiera.html +0 -366
  244. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Create.html +0 -538
  245. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Hiera.html +0 -566
  246. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Images.html +0 -572
  247. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Inspect.html +0 -524
  248. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Machines.html +0 -567
  249. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Regions.html +0 -567
  250. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Vagrantfile.html +0 -515
  251. data/rdoc/site/0.5.0/Nucleon/Action/Cloud.html +0 -365
  252. data/rdoc/site/0.5.0/Nucleon/Action/Node/Authorize.html +0 -543
  253. data/rdoc/site/0.5.0/Nucleon/Action/Node/Bootstrap.html +0 -604
  254. data/rdoc/site/0.5.0/Nucleon/Action/Node/Build.html +0 -526
  255. data/rdoc/site/0.5.0/Nucleon/Action/Node/Destroy.html +0 -573
  256. data/rdoc/site/0.5.0/Nucleon/Action/Node/Exec.html +0 -530
  257. data/rdoc/site/0.5.0/Nucleon/Action/Node/Facts.html +0 -456
  258. data/rdoc/site/0.5.0/Nucleon/Action/Node/IP.html +0 -453
  259. data/rdoc/site/0.5.0/Nucleon/Action/Node/Image.html +0 -573
  260. data/rdoc/site/0.5.0/Nucleon/Action/Node/Keypair.html +0 -572
  261. data/rdoc/site/0.5.0/Nucleon/Action/Node/Lookup.html +0 -532
  262. data/rdoc/site/0.5.0/Nucleon/Action/Node/Provision.html +0 -553
  263. data/rdoc/site/0.5.0/Nucleon/Action/Node/Reboot.html +0 -573
  264. data/rdoc/site/0.5.0/Nucleon/Action/Node/Revoke.html +0 -541
  265. data/rdoc/site/0.5.0/Nucleon/Action/Node/SSH.html +0 -583
  266. data/rdoc/site/0.5.0/Nucleon/Action/Node/Seed.html +0 -602
  267. data/rdoc/site/0.5.0/Nucleon/Action/Node/Spawn.html +0 -675
  268. data/rdoc/site/0.5.0/Nucleon/Action/Node/Start.html +0 -573
  269. data/rdoc/site/0.5.0/Nucleon/Action/Node/Stop.html +0 -573
  270. data/rdoc/site/0.5.0/Nucleon/Action/Node.html +0 -376
  271. data/rdoc/site/0.5.0/Nucleon/Action.html +0 -383
  272. data/rdoc/site/0.5.0/Nucleon/Config.html +0 -377
  273. data/rdoc/site/0.5.0/Nucleon/Event/Puppet.html +0 -693
  274. data/rdoc/site/0.5.0/Nucleon/Event.html +0 -359
  275. data/rdoc/site/0.5.0/Nucleon/Plugin/Base.html +0 -365
  276. data/rdoc/site/0.5.0/Nucleon/Plugin/CloudAction.html +0 -838
  277. data/rdoc/site/0.5.0/Nucleon/Plugin.html +0 -360
  278. data/rdoc/site/0.5.0/Nucleon/Template/Environment.html +0 -548
  279. data/rdoc/site/0.5.0/Nucleon/Template.html +0 -359
  280. data/rdoc/site/0.5.0/Nucleon.html +0 -387
  281. data/rdoc/site/0.5.0/Object.html +0 -378
  282. data/rdoc/site/0.5.0/Puppet/DataBinding/Corl.html +0 -365
  283. data/rdoc/site/0.5.0/Puppet/DataBinding.html +0 -358
  284. data/rdoc/site/0.5.0/Puppet/Indirector/Corl.html +0 -477
  285. data/rdoc/site/0.5.0/Puppet/Indirector.html +0 -358
  286. data/rdoc/site/0.5.0/Puppet/Parser/Functions.html +0 -500
  287. data/rdoc/site/0.5.0/Puppet/Parser.html +0 -358
  288. data/rdoc/site/0.5.0/Puppet.html +0 -358
  289. data/rdoc/site/0.5.0/README_rdoc.html +0 -360
  290. data/rdoc/site/0.5.0/Vagrant/Config/Loader.html +0 -419
  291. data/rdoc/site/0.5.0/Vagrant/Config.html +0 -359
  292. data/rdoc/site/0.5.0/Vagrant/Vagrantfile.html +0 -412
  293. data/rdoc/site/0.5.0/Vagrant.html +0 -366
  294. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Action/DeleteCache.html +0 -422
  295. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Action/InitKeys.html +0 -428
  296. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Action/LinkNetwork.html +0 -426
  297. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Action.html +0 -361
  298. data/rdoc/site/0.5.0/VagrantPlugins/CORL/BaseAction.html +0 -511
  299. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Command/Launcher.html +0 -553
  300. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Command.html +0 -359
  301. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Config/CORL.html +0 -752
  302. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Config.html +0 -359
  303. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Plugin.html +0 -365
  304. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Provisioner/CORL.html +0 -556
  305. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Provisioner.html +0 -359
  306. data/rdoc/site/0.5.0/VagrantPlugins/CORL.html +0 -366
  307. data/rdoc/site/0.5.0/VagrantPlugins.html +0 -366
  308. data/rdoc/site/0.5.0/created.rid +0 -103
  309. data/rdoc/site/0.5.0/images/add.png +0 -0
  310. data/rdoc/site/0.5.0/images/brick.png +0 -0
  311. data/rdoc/site/0.5.0/images/brick_link.png +0 -0
  312. data/rdoc/site/0.5.0/images/bug.png +0 -0
  313. data/rdoc/site/0.5.0/images/bullet_black.png +0 -0
  314. data/rdoc/site/0.5.0/images/bullet_toggle_minus.png +0 -0
  315. data/rdoc/site/0.5.0/images/bullet_toggle_plus.png +0 -0
  316. data/rdoc/site/0.5.0/images/date.png +0 -0
  317. data/rdoc/site/0.5.0/images/delete.png +0 -0
  318. data/rdoc/site/0.5.0/images/find.png +0 -0
  319. data/rdoc/site/0.5.0/images/loadingAnimation.gif +0 -0
  320. data/rdoc/site/0.5.0/images/macFFBgHack.png +0 -0
  321. data/rdoc/site/0.5.0/images/package.png +0 -0
  322. data/rdoc/site/0.5.0/images/page_green.png +0 -0
  323. data/rdoc/site/0.5.0/images/page_white_text.png +0 -0
  324. data/rdoc/site/0.5.0/images/page_white_width.png +0 -0
  325. data/rdoc/site/0.5.0/images/plugin.png +0 -0
  326. data/rdoc/site/0.5.0/images/ruby.png +0 -0
  327. data/rdoc/site/0.5.0/images/tag_blue.png +0 -0
  328. data/rdoc/site/0.5.0/images/tag_green.png +0 -0
  329. data/rdoc/site/0.5.0/images/transparent.png +0 -0
  330. data/rdoc/site/0.5.0/images/wrench.png +0 -0
  331. data/rdoc/site/0.5.0/images/wrench_orange.png +0 -0
  332. data/rdoc/site/0.5.0/images/zoom.png +0 -0
  333. data/rdoc/site/0.5.0/index.html +0 -359
  334. data/rdoc/site/0.5.0/js/darkfish.js +0 -155
  335. data/rdoc/site/0.5.0/js/jquery.js +0 -18
  336. data/rdoc/site/0.5.0/js/navigation.js +0 -142
  337. data/rdoc/site/0.5.0/js/search.js +0 -94
  338. data/rdoc/site/0.5.0/js/search_index.js +0 -1
  339. data/rdoc/site/0.5.0/js/searcher.js +0 -228
  340. data/rdoc/site/0.5.0/rdoc.css +0 -543
  341. data/rdoc/site/0.5.0/table_of_contents.html +0 -1797
  342. data/rdoc/site/0.5.1/CORL/Build.html +0 -781
  343. data/rdoc/site/0.5.1/CORL/Builder/Identity.html +0 -596
  344. data/rdoc/site/0.5.1/CORL/Builder/Package.html +0 -600
  345. data/rdoc/site/0.5.1/CORL/Builder.html +0 -384
  346. data/rdoc/site/0.5.1/CORL/Configuration/File.html +0 -1186
  347. data/rdoc/site/0.5.1/CORL/Configuration.html +0 -383
  348. data/rdoc/site/0.5.1/CORL/Errors.html +0 -383
  349. data/rdoc/site/0.5.1/CORL/Facade.html +0 -927
  350. data/rdoc/site/0.5.1/CORL/Machine/AWS.html +0 -777
  351. data/rdoc/site/0.5.1/CORL/Machine/Fog.html +0 -1313
  352. data/rdoc/site/0.5.1/CORL/Machine/Physical.html +0 -1083
  353. data/rdoc/site/0.5.1/CORL/Machine/Rackspace.html +0 -558
  354. data/rdoc/site/0.5.1/CORL/Machine/Vagrant.html +0 -1344
  355. data/rdoc/site/0.5.1/CORL/Machine.html +0 -387
  356. data/rdoc/site/0.5.1/CORL/Mixin/Action/Keypair.html +0 -616
  357. data/rdoc/site/0.5.1/CORL/Mixin/Action/Registration.html +0 -469
  358. data/rdoc/site/0.5.1/CORL/Mixin/Action.html +0 -384
  359. data/rdoc/site/0.5.1/CORL/Mixin/Builder/Global.html +0 -628
  360. data/rdoc/site/0.5.1/CORL/Mixin/Builder/Instance.html +0 -720
  361. data/rdoc/site/0.5.1/CORL/Mixin/Builder.html +0 -383
  362. data/rdoc/site/0.5.1/CORL/Mixin/Lookup.html +0 -1315
  363. data/rdoc/site/0.5.1/CORL/Mixin/Machine/SSH.html +0 -699
  364. data/rdoc/site/0.5.1/CORL/Mixin/Machine.html +0 -383
  365. data/rdoc/site/0.5.1/CORL/Mixin/Macro/NetworkSettings.html +0 -508
  366. data/rdoc/site/0.5.1/CORL/Mixin/Macro.html +0 -383
  367. data/rdoc/site/0.5.1/CORL/Mixin.html +0 -388
  368. data/rdoc/site/0.5.1/CORL/Network/CORL.html +0 -435
  369. data/rdoc/site/0.5.1/CORL/Network.html +0 -383
  370. data/rdoc/site/0.5.1/CORL/Node/AWS.html +0 -760
  371. data/rdoc/site/0.5.1/CORL/Node/Fog.html +0 -1268
  372. data/rdoc/site/0.5.1/CORL/Node/Local.html +0 -468
  373. data/rdoc/site/0.5.1/CORL/Node/Rackspace.html +0 -753
  374. data/rdoc/site/0.5.1/CORL/Node/Vagrant.html +0 -1497
  375. data/rdoc/site/0.5.1/CORL/Node.html +0 -387
  376. data/rdoc/site/0.5.1/CORL/Plugin/Builder.html +0 -524
  377. data/rdoc/site/0.5.1/CORL/Plugin/Configuration.html +0 -1294
  378. data/rdoc/site/0.5.1/CORL/Plugin/Machine.html +0 -1323
  379. data/rdoc/site/0.5.1/CORL/Plugin/Network.html +0 -1766
  380. data/rdoc/site/0.5.1/CORL/Plugin/Node.html +0 -4263
  381. data/rdoc/site/0.5.1/CORL/Plugin/Provisioner.html +0 -1139
  382. data/rdoc/site/0.5.1/CORL/Plugin.html +0 -673
  383. data/rdoc/site/0.5.1/CORL/Provisioner/Puppetnode.html +0 -1201
  384. data/rdoc/site/0.5.1/CORL/Provisioner.html +0 -383
  385. data/rdoc/site/0.5.1/CORL/Util/Puppet/Resource.html +0 -1082
  386. data/rdoc/site/0.5.1/CORL/Util/Puppet/ResourceGroup.html +0 -964
  387. data/rdoc/site/0.5.1/CORL/Util/Puppet.html +0 -1131
  388. data/rdoc/site/0.5.1/CORL/Util.html +0 -385
  389. data/rdoc/site/0.5.1/CORL/Vagrant/Config.html +0 -967
  390. data/rdoc/site/0.5.1/CORL/Vagrant.html +0 -462
  391. data/rdoc/site/0.5.1/CORL.html +0 -496
  392. data/rdoc/site/0.5.1/Fog/Compute/AWS/Server.html +0 -467
  393. data/rdoc/site/0.5.1/Fog/Compute/AWS.html +0 -389
  394. data/rdoc/site/0.5.1/Fog/Compute/RackspaceV2/Server.html +0 -452
  395. data/rdoc/site/0.5.1/Fog/Compute/RackspaceV2.html +0 -389
  396. data/rdoc/site/0.5.1/Fog/Compute.html +0 -384
  397. data/rdoc/site/0.5.1/Fog.html +0 -384
  398. data/rdoc/site/0.5.1/Hiera/Backend.html +0 -466
  399. data/rdoc/site/0.5.1/Hiera/Corl_logger.html +0 -493
  400. data/rdoc/site/0.5.1/Hiera.html +0 -390
  401. data/rdoc/site/0.5.1/Nucleon/Action/Cloud/Config.html +0 -978
  402. data/rdoc/site/0.5.1/Nucleon/Action/Cloud/Create.html +0 -562
  403. data/rdoc/site/0.5.1/Nucleon/Action/Cloud/Images.html +0 -596
  404. data/rdoc/site/0.5.1/Nucleon/Action/Cloud/Inspect.html +0 -567
  405. data/rdoc/site/0.5.1/Nucleon/Action/Cloud/Machines.html +0 -591
  406. data/rdoc/site/0.5.1/Nucleon/Action/Cloud/Regions.html +0 -591
  407. data/rdoc/site/0.5.1/Nucleon/Action/Cloud/Settings.html +0 -878
  408. data/rdoc/site/0.5.1/Nucleon/Action/Cloud/Vagrantfile.html +0 -539
  409. data/rdoc/site/0.5.1/Nucleon/Action/Cloud.html +0 -390
  410. data/rdoc/site/0.5.1/Nucleon/Action/Node/Authorize.html +0 -567
  411. data/rdoc/site/0.5.1/Nucleon/Action/Node/Bootstrap.html +0 -628
  412. data/rdoc/site/0.5.1/Nucleon/Action/Node/Build.html +0 -550
  413. data/rdoc/site/0.5.1/Nucleon/Action/Node/Cache.html +0 -773
  414. data/rdoc/site/0.5.1/Nucleon/Action/Node/Destroy.html +0 -597
  415. data/rdoc/site/0.5.1/Nucleon/Action/Node/Exec.html +0 -554
  416. data/rdoc/site/0.5.1/Nucleon/Action/Node/Fact.html +0 -733
  417. data/rdoc/site/0.5.1/Nucleon/Action/Node/Facts.html +0 -505
  418. data/rdoc/site/0.5.1/Nucleon/Action/Node/Group.html +0 -729
  419. data/rdoc/site/0.5.1/Nucleon/Action/Node/Groups.html +0 -505
  420. data/rdoc/site/0.5.1/Nucleon/Action/Node/IP.html +0 -477
  421. data/rdoc/site/0.5.1/Nucleon/Action/Node/Identity.html +0 -614
  422. data/rdoc/site/0.5.1/Nucleon/Action/Node/Image.html +0 -597
  423. data/rdoc/site/0.5.1/Nucleon/Action/Node/Keypair.html +0 -596
  424. data/rdoc/site/0.5.1/Nucleon/Action/Node/Lookup.html +0 -579
  425. data/rdoc/site/0.5.1/Nucleon/Action/Node/Provision.html +0 -577
  426. data/rdoc/site/0.5.1/Nucleon/Action/Node/Reboot.html +0 -597
  427. data/rdoc/site/0.5.1/Nucleon/Action/Node/Revoke.html +0 -565
  428. data/rdoc/site/0.5.1/Nucleon/Action/Node/SSH.html +0 -607
  429. data/rdoc/site/0.5.1/Nucleon/Action/Node/Seed.html +0 -626
  430. data/rdoc/site/0.5.1/Nucleon/Action/Node/Spawn.html +0 -699
  431. data/rdoc/site/0.5.1/Nucleon/Action/Node/Start.html +0 -597
  432. data/rdoc/site/0.5.1/Nucleon/Action/Node/Status.html +0 -615
  433. data/rdoc/site/0.5.1/Nucleon/Action/Node/Stop.html +0 -597
  434. data/rdoc/site/0.5.1/Nucleon/Action/Node.html +0 -406
  435. data/rdoc/site/0.5.1/Nucleon/Action/Plugin/Create.html +0 -736
  436. data/rdoc/site/0.5.1/Nucleon/Action/Plugin/List.html +0 -570
  437. data/rdoc/site/0.5.1/Nucleon/Action/Plugin.html +0 -384
  438. data/rdoc/site/0.5.1/Nucleon/Action/Plugins.html +0 -435
  439. data/rdoc/site/0.5.1/Nucleon/Action.html +0 -417
  440. data/rdoc/site/0.5.1/Nucleon/Config.html +0 -401
  441. data/rdoc/site/0.5.1/Nucleon/Event/Puppet.html +0 -717
  442. data/rdoc/site/0.5.1/Nucleon/Event.html +0 -383
  443. data/rdoc/site/0.5.1/Nucleon/Plugin/Base.html +0 -389
  444. data/rdoc/site/0.5.1/Nucleon/Plugin/CloudAction.html +0 -894
  445. data/rdoc/site/0.5.1/Nucleon/Plugin.html +0 -384
  446. data/rdoc/site/0.5.1/Nucleon/Template/Environment.html +0 -572
  447. data/rdoc/site/0.5.1/Nucleon/Template.html +0 -383
  448. data/rdoc/site/0.5.1/Nucleon.html +0 -421
  449. data/rdoc/site/0.5.1/Object.html +0 -402
  450. data/rdoc/site/0.5.1/Puppet/DataBinding/Corl.html +0 -389
  451. data/rdoc/site/0.5.1/Puppet/DataBinding.html +0 -382
  452. data/rdoc/site/0.5.1/Puppet/Indirector/Corl.html +0 -501
  453. data/rdoc/site/0.5.1/Puppet/Indirector.html +0 -382
  454. data/rdoc/site/0.5.1/Puppet/Parser/Functions.html +0 -524
  455. data/rdoc/site/0.5.1/Puppet/Parser.html +0 -382
  456. data/rdoc/site/0.5.1/Puppet.html +0 -382
  457. data/rdoc/site/0.5.1/README_rdoc.html +0 -384
  458. data/rdoc/site/0.5.1/Vagrant/Config/Loader.html +0 -443
  459. data/rdoc/site/0.5.1/Vagrant/Config.html +0 -383
  460. data/rdoc/site/0.5.1/Vagrant/Vagrantfile.html +0 -436
  461. data/rdoc/site/0.5.1/Vagrant.html +0 -390
  462. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Action/DeleteCache.html +0 -446
  463. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Action/InitKeys.html +0 -452
  464. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Action/LinkNetwork.html +0 -450
  465. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Action.html +0 -385
  466. data/rdoc/site/0.5.1/VagrantPlugins/CORL/BaseAction.html +0 -535
  467. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Command/Launcher.html +0 -577
  468. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Command.html +0 -383
  469. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Config/CORL.html +0 -776
  470. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Config.html +0 -383
  471. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Plugin.html +0 -389
  472. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Provisioner/CORL.html +0 -580
  473. data/rdoc/site/0.5.1/VagrantPlugins/CORL/Provisioner.html +0 -383
  474. data/rdoc/site/0.5.1/VagrantPlugins/CORL.html +0 -390
  475. data/rdoc/site/0.5.1/VagrantPlugins.html +0 -390
  476. data/rdoc/site/0.5.1/created.rid +0 -114
  477. data/rdoc/site/0.5.1/images/add.png +0 -0
  478. data/rdoc/site/0.5.1/images/brick.png +0 -0
  479. data/rdoc/site/0.5.1/images/brick_link.png +0 -0
  480. data/rdoc/site/0.5.1/images/bug.png +0 -0
  481. data/rdoc/site/0.5.1/images/bullet_black.png +0 -0
  482. data/rdoc/site/0.5.1/images/bullet_toggle_minus.png +0 -0
  483. data/rdoc/site/0.5.1/images/bullet_toggle_plus.png +0 -0
  484. data/rdoc/site/0.5.1/images/date.png +0 -0
  485. data/rdoc/site/0.5.1/images/delete.png +0 -0
  486. data/rdoc/site/0.5.1/images/find.png +0 -0
  487. data/rdoc/site/0.5.1/images/loadingAnimation.gif +0 -0
  488. data/rdoc/site/0.5.1/images/macFFBgHack.png +0 -0
  489. data/rdoc/site/0.5.1/images/package.png +0 -0
  490. data/rdoc/site/0.5.1/images/page_green.png +0 -0
  491. data/rdoc/site/0.5.1/images/page_white_text.png +0 -0
  492. data/rdoc/site/0.5.1/images/page_white_width.png +0 -0
  493. data/rdoc/site/0.5.1/images/plugin.png +0 -0
  494. data/rdoc/site/0.5.1/images/ruby.png +0 -0
  495. data/rdoc/site/0.5.1/images/tag_blue.png +0 -0
  496. data/rdoc/site/0.5.1/images/tag_green.png +0 -0
  497. data/rdoc/site/0.5.1/images/transparent.png +0 -0
  498. data/rdoc/site/0.5.1/images/wrench.png +0 -0
  499. data/rdoc/site/0.5.1/images/wrench_orange.png +0 -0
  500. data/rdoc/site/0.5.1/images/zoom.png +0 -0
  501. data/rdoc/site/0.5.1/index.html +0 -383
  502. data/rdoc/site/0.5.1/js/darkfish.js +0 -155
  503. data/rdoc/site/0.5.1/js/jquery.js +0 -18
  504. data/rdoc/site/0.5.1/js/navigation.js +0 -142
  505. data/rdoc/site/0.5.1/js/search.js +0 -94
  506. data/rdoc/site/0.5.1/js/search_index.js +0 -1
  507. data/rdoc/site/0.5.1/js/searcher.js +0 -228
  508. data/rdoc/site/0.5.1/rdoc.css +0 -543
  509. data/rdoc/site/0.5.1/table_of_contents.html +0 -2005
  510. data/spec/corl_mock_input.rb +0 -29
  511. data/spec/corl_test_kernel.rb +0 -22
@@ -2,27 +2,27 @@
2
2
  module CORL
3
3
  module Plugin
4
4
  class Node < Nucleon.plugin_class(:nucleon, :base)
5
-
5
+
6
6
  include Parallel
7
7
  external_block_exec :exec, :command, :action
8
-
8
+
9
9
  #-----------------------------------------------------------------------------
10
10
  # Node plugin interface
11
-
11
+
12
12
  def normalize(reload)
13
13
  super
14
-
14
+
15
15
  @class_color = :purple
16
-
16
+
17
17
  export.each do |name, value|
18
18
  myself[name] = value
19
19
  end
20
-
20
+
21
21
  ui.resource = Util::Console.colorize(hostname, @class_color)
22
22
  logger = hostname
23
-
23
+
24
24
  add_groups([ "all", plugin_provider.to_s, plugin_name.to_s ])
25
-
25
+
26
26
  unless reload
27
27
  @cli_interface = Util::Liquid.new do |method, args, &code|
28
28
  result = exec({ :commands => [ [ method, args ].flatten.join(' ') ] }) do |op, data|
@@ -34,7 +34,7 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
34
34
  end
35
35
  result
36
36
  end
37
-
37
+
38
38
  @action_interface = Util::Liquid.new do |method, args, &code|
39
39
  action(method, *args) do |op, data|
40
40
  code.call(op, data) if code
@@ -42,190 +42,197 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
42
42
  end
43
43
  end
44
44
  end
45
-
45
+
46
46
  #---
47
-
48
- def method_missing(method, *args, &code)
47
+
48
+ def method_missing(method, *args, &code)
49
49
  action(method, *args) do |op, data|
50
50
  code.call(op, data) if code
51
51
  end
52
52
  end
53
-
53
+
54
54
  #---
55
-
55
+
56
56
  def localize
57
57
  @local_context = true
58
58
  myself.local_machine = create_machine(:local_machine, :physical)
59
59
  end
60
-
60
+
61
61
  #---
62
-
62
+
63
63
  def remove_plugin
64
64
  CORL.remove_plugin(local_machine) if local_machine
65
65
  CORL.remove_plugin(machine) if machine
66
66
  end
67
-
67
+
68
68
  #-----------------------------------------------------------------------------
69
69
  # Checks
70
-
70
+
71
+ def running?
72
+ return machine.running? if machine
73
+ false
74
+ end
75
+
76
+ #---
77
+
71
78
  def local?
72
79
  @local_context ? true : false
73
80
  end
74
-
81
+
75
82
  #---
76
-
83
+
77
84
  def usable_image?(image)
78
85
  true
79
- end
80
-
86
+ end
87
+
81
88
  #-----------------------------------------------------------------------------
82
89
  # Property accessors / modifiers
83
-
90
+
84
91
  network_settings :node
85
-
92
+
86
93
  #---
87
-
94
+
88
95
  def keypair
89
96
  @keypair
90
97
  end
91
-
98
+
92
99
  def keypair=keypair
93
100
  @keypair = keypair
94
101
  end
95
-
102
+
96
103
  #---
97
-
104
+
98
105
  def machine
99
106
  @machine
100
107
  end
101
-
108
+
102
109
  def machine=machine
103
- @machine = machine
110
+ @machine = machine
104
111
  end
105
-
112
+
106
113
  #---
107
-
114
+
108
115
  def local_machine
109
116
  @local_machine
110
117
  end
111
-
118
+
112
119
  def local_machine=local_machine
113
- @local_machine = local_machine
120
+ @local_machine = local_machine
114
121
  end
115
-
122
+
116
123
  #---
117
-
124
+
118
125
  def id(reset = false)
119
126
  myself[:id] = machine.plugin_name if machine && ( reset || setting(:id).nil? )
120
127
  setting(:id)
121
128
  end
122
-
129
+
123
130
  #---
124
-
131
+
125
132
  def public_ip(reset = false)
126
133
  myself[:public_ip] = machine.public_ip if machine && ( reset || setting(:public_ip).nil? )
127
134
  setting(:public_ip)
128
135
  end
129
-
136
+
130
137
  def private_ip(reset = false)
131
138
  myself[:private_ip] = machine.private_ip if machine && ( reset || setting(:private_ip).nil? )
132
139
  setting(:private_ip)
133
140
  end
134
-
141
+
135
142
  #---
136
-
143
+
137
144
  def hostname
138
145
  hostname = setting(:hostname)
139
-
146
+
140
147
  unless hostname
141
148
  hostname = plugin_name
142
149
  end
143
-
144
- if hostname.to_s != ui.resource.to_s
150
+
151
+ if hostname.to_s != ui.resource.to_s
145
152
  ui.resource = Util::Console.colorize(hostname, @class_color)
146
153
  logger = hostname
147
154
  end
148
155
  hostname
149
156
  end
150
-
157
+
151
158
  #---
152
-
159
+
153
160
  def state(reset = false)
154
161
  myself[:state] = machine.state if machine && ( reset || setting(:state).nil? )
155
162
  setting(:state)
156
163
  end
157
-
164
+
158
165
  #---
159
-
166
+
160
167
  def user=user
161
168
  myself[:user] = user
162
169
  end
163
-
170
+
164
171
  def user
165
172
  myself[:user]
166
173
  end
167
-
174
+
168
175
  #---
169
-
176
+
170
177
  def ssh_port=ssh_port
171
178
  myself[:ssh_port] = ssh_port
172
179
  machine.init_ssh(ssh_port) if machine
173
180
  end
174
-
181
+
175
182
  def ssh_port
176
183
  myself[:ssh_port] = 22 if myself[:ssh_port].nil?
177
184
  myself[:ssh_port]
178
185
  end
179
-
186
+
180
187
  #---
181
-
188
+
182
189
  def home(env_var = 'HOME', reset = false)
183
190
  if reset || myself[:user_home].nil?
184
191
  myself[:user_home] = cli_capture(:echo, '$' + env_var.to_s.gsub('$', '')) if machine
185
192
  end
186
193
  myself[:user_home]
187
194
  end
188
-
195
+
189
196
  #---
190
-
197
+
191
198
  def ssh_path(home_env_var = 'HOME', reset = false)
192
199
  home = home(home_env_var, reset)
193
200
  home ? File.join(home, '.ssh') : nil
194
201
  end
195
-
202
+
196
203
  #---
197
-
204
+
198
205
  def private_key=private_key
199
206
  myself[:private_key] = private_key
200
207
  end
201
-
208
+
202
209
  def private_key
203
210
  config_key = myself[:private_key]
204
211
  return File.expand_path(config_key, network.directory) if config_key
205
212
  nil
206
213
  end
207
-
214
+
208
215
  #---
209
-
216
+
210
217
  def public_key=public_key
211
218
  myself[:public_key] = public_key
212
219
  end
213
-
220
+
214
221
  def public_key
215
222
  config_key = myself[:public_key]
216
223
  return File.expand_path(config_key, network.directory) if config_key
217
224
  end
218
-
225
+
219
226
  #---
220
-
227
+
221
228
  def machine_types # Must be set at machine level (queried)
222
229
  machine.machine_types if machine
223
230
  end
224
-
231
+
225
232
  def machine_type(reset = false)
226
233
  myself[:machine_type] = machine.machine_type if machine && ( reset || myself[:machine_type].nil? )
227
234
  machine_type = myself[:machine_type]
228
-
235
+
229
236
  if machine_type.nil? && machine
230
237
  if types = machine_types
231
238
  unless types.empty?
@@ -234,41 +241,41 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
234
241
  end
235
242
  end
236
243
  end
237
-
244
+
238
245
  machine_type
239
246
  end
240
-
247
+
241
248
  #---
242
-
249
+
243
250
  def images(search_terms = [], options = {})
244
251
  config = Config.ensure(options)
245
252
  images = []
246
-
253
+
247
254
  if machine
248
255
  loaded_images = machine.images
249
-
256
+
250
257
  if loaded_images
251
258
  require_all = config.get(:require_all, false)
252
-
259
+
253
260
  loaded_images.each do |image|
254
261
  if usable_image?(image)
255
262
  include_image = ( search_terms.empty? ? true : require_all )
256
263
  image_text = image_search_text(image)
257
-
264
+
258
265
  search_terms.each do |term|
259
266
  if config.get(:match_case, false)
260
267
  success = image_text.match(/#{term}/)
261
268
  else
262
- success = image_text.match(/#{term}/i)
269
+ success = image_text.match(/#{term}/i)
263
270
  end
264
-
265
- if require_all
271
+
272
+ if require_all
266
273
  include_image = false unless success
267
274
  else
268
- include_image = true if success
275
+ include_image = true if success
269
276
  end
270
277
  end
271
-
278
+
272
279
  images << image if include_image
273
280
  end
274
281
  end
@@ -276,133 +283,151 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
276
283
  end
277
284
  images
278
285
  end
279
-
286
+
280
287
  #---
281
-
288
+
282
289
  def image=image
283
290
  myself[:image] = image
284
291
  end
285
-
292
+
286
293
  def image(reset = false)
287
294
  myself[:image] = machine.image if machine && ( reset || myself[:image].nil? )
288
295
  myself[:image]
289
296
  end
290
-
297
+
291
298
  #---
292
-
299
+
293
300
  def custom_facts=facts
294
301
  myself[:facts] = hash(facts)
295
302
  end
296
-
303
+
297
304
  def custom_facts
298
305
  search(:facts, {}, :hash)
299
306
  end
300
-
307
+
301
308
  def ensure_custom_facts(facts)
302
309
  hash(facts).each do |name, value|
303
310
  set_setting([ :facts, name ], value)
304
311
  end
305
312
  end
306
-
313
+
307
314
  def remove_custom_facts(*facts)
308
315
  facts.each do |name|
309
316
  delete_setting([ :facts, name ])
310
- end
317
+ end
311
318
  end
312
-
319
+
313
320
  #---
314
-
321
+
315
322
  def profiles=profiles
316
323
  myself[:profiles] = array(profiles)
317
324
  end
318
-
325
+
319
326
  def profiles
320
327
  [ array(myself[:profiles]), lookup_array(:profiles).reverse ].flatten
321
328
  end
322
-
329
+
323
330
  #---
324
-
331
+
325
332
  def provisioner_info
326
333
  provisioner_info = {}
327
-
334
+
328
335
  # Compose needed provisioners and profiles
329
336
  profiles.each do |profile|
330
337
  if info = Plugin::Provisioner.translate_reference(profile)
331
338
  provider = info[:provider]
332
-
339
+
333
340
  provisioner_info[provider] = { :profiles => [] } unless provisioner_info.has_key?(provider)
334
341
  provisioner_info[provider][:profiles] += info[:profiles]
335
342
  end
336
343
  end
337
344
  provisioner_info
338
345
  end
339
-
346
+
340
347
  #---
341
-
348
+
342
349
  def provisioners
343
- provisioners = {}
350
+ provisioners = {}
344
351
  provisioner_info.each do |provider, node_profiles|
345
352
  provisioners[provider] = network.provisioners(provider)
346
- end
353
+ end
347
354
  provisioners
348
355
  end
349
-
356
+
350
357
  #---
351
-
358
+
352
359
  def build_time=time
353
360
  myself[:build] = time
354
361
  end
355
-
362
+
356
363
  def build_time
357
364
  myself[:build]
358
365
  end
359
-
366
+
360
367
  #---
361
-
368
+
362
369
  def bootstrap_script=bootstrap
363
370
  myself[:bootstrap] = bootstrap
364
371
  end
365
-
372
+
366
373
  def bootstrap_script
367
- myself[:bootstrap]
374
+ myself[:bootstrap]
375
+ end
376
+
377
+ #---
378
+
379
+ def agents
380
+ hash(myself[:agents])
368
381
  end
369
-
382
+
383
+ def agent(provider)
384
+ search([ :agents, provider ], {}, :hash)
385
+ end
386
+
387
+ def add_agent(provider, settings)
388
+ set_setting([ :agents, provider ], Config.new(settings).export)
389
+ end
390
+
391
+ def remove_agent(provider)
392
+ delete_setting([ :agents, provider ])
393
+ end
394
+
370
395
  #-----------------------------------------------------------------------------
371
396
  # Settings groups
372
-
397
+
373
398
  def machine_config
374
399
  name = setting(:id)
375
400
  name = nil if name.nil? || name.empty?
376
401
  config = Config.new({ :name => name })
377
-
402
+
378
403
  yield(config) if block_given?
379
404
  config
380
405
  end
381
-
406
+
382
407
  #-----------------------------------------------------------------------------
383
408
  # Machine information
384
-
409
+
385
410
  def fact_var
386
411
  @facts
387
412
  end
388
-
413
+
389
414
  def fact_var=facts
390
415
  @facts = facts
391
416
  end
392
-
417
+
393
418
  #---
394
-
419
+
395
420
  def facts(reset = false, clone = true)
396
421
  if reset || fact_var.nil?
397
422
  default_facts = extended_config(:hiera_default_facts, {
398
- :fqdn => hostname,
423
+ :fqdn => hostname,
399
424
  :hostname => hostname.gsub(/\..*$/, ''),
400
425
  :corl_provider => plugin_provider.to_s
401
426
  })
402
-
427
+
403
428
  unless local?
404
429
  result = run.node_facts({ :quiet => true })
405
-
430
+
406
431
  if result.status == code.success
407
432
  node_facts = Util::Data.symbol_map(Util::Data.parse_json(result.errors))
408
433
  end
@@ -410,15 +435,15 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
410
435
  unless node_facts
411
436
  node_facts = local? ? Util::Data.merge([ CORL.facts, custom_facts ]) : custom_facts
412
437
  end
413
-
438
+
414
439
  self.fact_var = Config.new(node_facts).defaults(default_facts).export
415
440
  end
416
441
  return fact_var.clone if clone
417
442
  fact_var
418
443
  end
419
-
444
+
420
445
  #---
421
-
446
+
422
447
  def create_facts_post(data, names)
423
448
  fact_values = {}
424
449
  names.each do |name|
@@ -428,197 +453,197 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
428
453
  ensure_custom_facts(fact_values)
429
454
  data
430
455
  end
431
-
456
+
432
457
  #---
433
-
458
+
434
459
  def delete_facts_post(data, old_data)
435
460
  remove_custom_facts(*old_data.keys)
436
461
  data
437
462
  end
438
-
463
+
439
464
  #---
440
-
465
+
441
466
  def hiera_var
442
467
  @hiera
443
468
  end
444
-
469
+
445
470
  def hiera_var=hiera
446
471
  @hiera = hiera
447
472
  end
448
-
473
+
449
474
  #---
450
-
475
+
451
476
  def hiera_override_dir
452
477
  network.hiera_override_dir
453
478
  end
454
-
479
+
455
480
  #---
456
-
481
+
457
482
  def lookup(property, default = nil, options = {})
458
483
  unless local?
459
484
  config = Config.ensure(options).import({ :property => property, :quiet => true })
460
485
  result = run.node_lookup(config)
461
-
486
+
462
487
  if result.status == code.success
463
488
  return Util::Data.value(Util::Data.parse_json(result.errors), default)
464
489
  end
465
490
  return default
466
491
  end
467
492
  options[:hiera_scope] = Util::Data.prefix('::', facts, '')
468
- lookup_base(property, default, options)
493
+ lookup_base(property, default, options)
469
494
  end
470
-
495
+
471
496
  #---
472
-
497
+
473
498
  def remote_cache_setting(keys, default = nil, format = false)
474
- cache_id = keys.flatten.join('.')
499
+ cache_id = keys.flatten.join('.')
475
500
  result = run.node_cache({ :name => cache_id })
476
-
501
+
477
502
  if result.status == code.success
478
503
  value = Util::Data.value(Util::Data.parse_json(result.errors), default)
479
504
  else
480
505
  value = default
481
- end
506
+ end
482
507
  filter(value, format)
483
508
  end
484
-
509
+
485
510
  #---
486
511
 
487
512
  def set_remote_cache_setting(keys, value)
488
- run.node_cache({
489
- :name => keys.flatten.join('.'),
490
- :value => Util::Data.to_json(value, false),
491
- :json => true
513
+ run.node_cache({
514
+ :name => keys.flatten.join('.'),
515
+ :value => Util::Data.to_json(value, false),
516
+ :json => true
492
517
  }).status == code.success
493
518
  end
494
-
519
+
495
520
  #---
496
521
 
497
522
  def delete_remote_cache_setting(keys)
498
- run.node_cache({
499
- :name => keys.flatten.join('.'),
500
- :delete => true
523
+ run.node_cache({
524
+ :name => keys.flatten.join('.'),
525
+ :delete => true
501
526
  }).status == code.success
502
527
  end
503
-
528
+
504
529
  #---
505
530
 
506
531
  def clear_remote_cache
507
532
  run.node_cache({ :clear => true }).status == code.success
508
533
  end
509
-
534
+
510
535
  #-----------------------------------------------------------------------------
511
536
  # Machine operations
512
-
537
+
513
538
  def build(options = {})
514
539
  config = Config.ensure(options)
515
540
  success = true
516
-
541
+
517
542
  # TODO: Figure out what's going on with the parallel implementation here.
518
543
  parallel_original = ENV['NUCLEON_NO_PARALLEL']
519
544
  ENV['NUCLEON_NO_PARALLEL'] = 'true'
520
-
545
+
521
546
  status = parallel(:build_provider, network.builders, config)
522
547
  success = false if status.values.include?(false)
523
-
548
+
524
549
  if success
525
550
  status = parallel(:build_provisioners, provisioners, config)
526
551
  success = false if status.values.include?(false)
527
-
552
+
528
553
  if success
529
554
  myself.build_time = Time.now.to_s if success
530
-
555
+
531
556
  if config.delete(:save, true)
532
- success("Saving successful build", { :i18n => false })
533
-
557
+ success("Saving successful build", { :i18n => false })
558
+
534
559
  success = save(extended_config(:build, {
535
560
  :message => config.get(:message, "Built #{plugin_provider} node: #{plugin_name}"),
536
- :remote => config.get(:remote, :edit)
561
+ :remote => config.get(:remote, :edit)
537
562
  }))
538
563
  end
539
564
  end
540
565
  end
541
-
542
- ENV['NUCLEON_NO_PARALLEL'] = parallel_original
566
+
567
+ ENV['NUCLEON_NO_PARALLEL'] = parallel_original
543
568
  success
544
569
  end
545
-
570
+
546
571
  def build_provider(provider, plugin, config)
547
572
  info("Building #{provider} components", { :i18n => false })
548
573
  plugin.build(myself, config)
549
574
  end
550
-
575
+
551
576
  def build_provisioners(provider, collection, config)
552
577
  info("Building #{provider} provisioner collection", { :i18n => false })
553
578
  status = parallel(:build_provisioner, collection, provider, config)
554
- status.values.include?(false) ? false : true
579
+ status.values.include?(false) ? false : true
555
580
  end
556
-
581
+
557
582
  def build_provisioner(name, plugin, provider, config)
558
583
  info("Building #{provider} #{name} provisioner components", { :i18n => false })
559
- plugin.build(myself, config)
584
+ plugin.build(myself, config)
560
585
  end
561
-
586
+
562
587
  #---
563
-
588
+
564
589
  def attach_keys(keypair)
565
590
  base_name = "#{plugin_provider}-#{plugin_name}"
566
- save_config = {
567
- :pull => false,
591
+ save_config = {
592
+ :pull => false,
568
593
  :push => false,
569
- :message => "Updating SSH keys for node #{plugin_provider} (#{plugin_name})"
594
+ :message => "Updating SSH keys for node #{plugin_provider} (#{plugin_name})"
570
595
  }
571
-
596
+
572
597
  active = machine && machine.running?
573
598
  result = run.authorize({ :public_key => keypair.ssh_key }) if active
574
599
  success = false
575
-
576
- if ! active || result.status == code.success
600
+
601
+ if ! active || result.status == code.success
577
602
  private_key = network.attach_data(:keys, "#{base_name}-id_#{keypair.type}", keypair.encrypted_key)
578
603
  public_key = network.attach_data(:keys, "#{base_name}-id_#{keypair.type}.pub", keypair.ssh_key)
579
-
604
+
580
605
  if private_key && public_key
581
606
  FileUtils.chmod(0600, private_key)
582
607
  FileUtils.chmod(0644, public_key)
583
-
608
+
584
609
  myself.keypair = Util::SSH.generate({ :private_key => keypair.private_key })
585
610
  myself.keypair.store(network.key_cache_directory, plugin_name)
586
-
611
+
587
612
  save_config[:files] = [ private_key, public_key ]
588
-
613
+
589
614
  myself.private_key = private_key
590
615
  myself.public_key = public_key
591
-
616
+
592
617
  success = save(extended_config(:key_save, save_config))
593
618
  end
594
619
  end
595
620
  success
596
621
  end
597
-
622
+
598
623
  #---
599
-
624
+
600
625
  def delete_keys
601
626
  private_key = myself[:private_key]
602
627
  public_key = myself[:public_key]
603
-
628
+
604
629
  keys = []
605
630
  keys << private_key if private_key
606
631
  keys << public_key if public_key
607
-
632
+
608
633
  success = true
609
-
634
+
610
635
  unless keys.empty?
611
636
  files = network.delete_attachments(keys)
612
-
637
+
613
638
  if files && ! files.empty?
614
639
  delete_setting(:private_key)
615
640
  delete_setting(:public_key)
616
-
641
+
617
642
  success = save(extended_config(:key_delete, {
618
- :files => [ private_key, public_key ],
619
- :pull => false,
643
+ :files => [ private_key, public_key ],
644
+ :pull => false,
620
645
  :push => false,
621
- :message => "Removing SSH keys for node #{plugin_provider} (#{plugin_name})"
646
+ :message => "Removing SSH keys for node #{plugin_provider} (#{plugin_name})"
622
647
  }))
623
648
  else
624
649
  success = false
@@ -626,34 +651,34 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
626
651
  end
627
652
  success
628
653
  end
629
-
654
+
630
655
  #---
631
-
656
+
632
657
  def create_machine(name, provider, options = {})
633
658
  CORL.create_plugin(:CORL, :machine, provider, extended_config(name, options).import({ :meta => { :parent => myself }}))
634
659
  end
635
-
660
+
636
661
  #---
637
-
662
+
638
663
  def create(options = {})
639
664
  success = true
640
-
665
+
641
666
  if machine
642
667
  config = Config.ensure(options)
643
-
668
+
644
669
  clear_cache
645
-
670
+
646
671
  if extension_check(:create, { :config => config })
647
672
  logger.info("Creating node: #{plugin_name}")
648
-
649
- yield(:config, config) if block_given?
673
+
674
+ yield(:config, config) if block_given?
650
675
  success = machine.create(config.export)
651
-
676
+
652
677
  if success && block_given?
653
678
  process_success = yield(:process, config)
654
- success = process_success if process_success == false
679
+ success = process_success if process_success == false
655
680
  end
656
-
681
+
657
682
  if success
658
683
  extension(:create_success, { :config => config })
659
684
  end
@@ -663,35 +688,36 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
663
688
  end
664
689
  success
665
690
  end
666
-
691
+
667
692
  #---
668
-
693
+
669
694
  def download(remote_path, local_path, options = {})
670
695
  success = false
671
-
696
+
672
697
  if machine && machine.running?
673
698
  config = Config.ensure(options)
674
699
  hook_config = Config.new({ :local_path => local_path, :remote_path => remote_path, :config => config })
675
-
700
+ quiet = config.get(:quiet, false)
701
+
676
702
  if extension_check(:download, hook_config)
677
703
  logger.info("Downloading from #{plugin_name}")
678
-
679
- info("Starting download of #{remote_path} to #{local_path}", { :i18n => false })
704
+
705
+ info("Starting download of #{remote_path} to #{local_path}", { :i18n => false }) unless quiet
680
706
  yield(:config, hook_config) if block_given?
681
-
707
+
682
708
  active_machine = local? ? local_machine : machine
683
-
709
+
684
710
  success = active_machine.download(remote_path, local_path, config.export) do |name, received, total|
685
- info("#{name}: Sent #{received} of #{total}", { :i18n => false })
711
+ info("#{name}: Sent #{received} of #{total}", { :i18n => false }) unless quiet
686
712
  yield(:progress, { :name => name, :received => received, :total => total })
687
713
  end
688
-
714
+
689
715
  if success && block_given?
690
- info("Successfully finished download of #{remote_path} to #{local_path}", { :i18n => false })
716
+ info("Successfully finished download of #{remote_path} to #{local_path}", { :i18n => false }) unless quiet
691
717
  process_success = yield(:process, hook_config)
692
- success = process_success if process_success == false
718
+ success = process_success if process_success == false
693
719
  end
694
-
720
+
695
721
  if success
696
722
  extension(:download_success, hook_config)
697
723
  end
@@ -701,35 +727,36 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
701
727
  end
702
728
  success
703
729
  end
704
-
730
+
705
731
  #---
706
-
732
+
707
733
  def upload(local_path, remote_path, options = {})
708
734
  success = false
709
-
735
+
710
736
  if machine && machine.running?
711
737
  config = Config.ensure(options)
712
738
  hook_config = Config.new({ :local_path => local_path, :remote_path => remote_path, :config => config })
713
-
739
+ quiet = config.get(:quiet, false)
740
+
714
741
  if extension_check(:upload, hook_config)
715
742
  logger.info("Uploading to #{plugin_name}")
716
-
717
- info("Starting upload of #{local_path} to #{remote_path}", { :i18n => false })
743
+
744
+ info("Starting upload of #{local_path} to #{remote_path}", { :i18n => false }) unless quiet
718
745
  yield(:config, hook_config) if block_given?
719
-
746
+
720
747
  active_machine = local? ? local_machine : machine
721
-
748
+
722
749
  success = active_machine.upload(local_path, remote_path, config.export) do |name, sent, total|
723
- info("#{name}: Sent #{sent} of #{total}", { :i18n => false })
724
- yield(:progress, { :name => name, :sent => sent, :total => total })
750
+ info("#{name}: Sent #{sent} of #{total}", { :i18n => false }) unless quiet
751
+ yield(:progress, { :name => name, :sent => sent, :total => total })
725
752
  end
726
-
753
+
727
754
  if success && block_given?
728
- info("Successfully finished upload of #{local_path} to #{remote_path}", { :i18n => false })
755
+ info("Successfully finished upload of #{local_path} to #{remote_path}", { :i18n => false }) unless quiet
729
756
  process_success = yield(:process, hook_config)
730
- success = process_success if process_success == false
757
+ success = process_success if process_success == false
731
758
  end
732
-
759
+
733
760
  if success
734
761
  extension(:upload_success, hook_config)
735
762
  end
@@ -739,30 +766,30 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
739
766
  end
740
767
  success
741
768
  end
742
-
769
+
743
770
  #---
744
-
745
- def send_files(local_path, remote_path, files = nil, permission = '0644', &code)
771
+
772
+ def send_files(local_path, remote_path, files = nil, permission = '0644', options = {}, &code)
746
773
  local_path = File.expand_path(local_path)
747
774
  return false unless File.directory?(local_path)
748
-
775
+
749
776
  success = true
750
-
777
+
751
778
  send_file = lambda do |local_file, remote_file|
752
- send_success = upload(local_file, remote_file) do |op, options|
753
- code.call(op, options) if code
779
+ send_success = upload(local_file, remote_file, options) do |op, upload_options|
780
+ code.call(op, upload_options) if code
754
781
  end
755
782
  send_success = cli_check(:chmod, permission, remote_file) if send_success
756
- send_success
783
+ send_success
757
784
  end
758
-
785
+
759
786
  if files && files.is_a?(Array)
760
787
  files.flatten.each do |rel_file_name|
761
788
  local_file = "#{local_path}/#{rel_file_name}"
762
789
  remote_file = "#{remote_path}/#{rel_file_name}"
763
-
790
+
764
791
  if File.exists?(local_file)
765
- send_success = send_file.call(local_file, remote_file)
792
+ send_success = send_file.call(local_file, remote_file)
766
793
  success = false unless send_success
767
794
  end
768
795
  end
@@ -772,30 +799,30 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
772
799
  end
773
800
  success
774
801
  end
775
-
802
+
776
803
  #---
777
-
804
+
778
805
  def exec(options = {})
779
806
  default_error = Util::Shell::Result.new(:error, 255)
780
807
  results = [ default_error ]
781
-
808
+
782
809
  if local? && local_machine || machine && machine.running?
783
810
  config = Config.ensure(options)
784
-
811
+
785
812
  if extension_check(:exec, { :config => config })
786
813
  logger.info("Executing node: #{plugin_name}")
787
-
814
+
788
815
  yield(:config, config) if block_given?
789
-
816
+
790
817
  if local? && local_machine
791
818
  active_machine = local_machine
792
819
  else
793
820
  active_machine = machine
794
821
  end
795
-
822
+
796
823
  if commands = config.get(:commands, nil)
797
824
  quiet = config.get(:quiet, false)
798
-
825
+
799
826
  begin
800
827
  test = active_machine.exec(commands, config.export) do |type, command, data|
801
828
  unless quiet
@@ -807,25 +834,25 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
807
834
  end
808
835
  end
809
836
  yield(:progress, { :type => type, :command => command, :data => data }) if block_given?
810
- end
837
+ end
811
838
  end
812
839
  results = test if test
813
-
840
+
814
841
  rescue => error
815
- default_error.append_errors(error.message)
842
+ default_error.append_errors(error.message)
816
843
  end
817
844
  else
818
- default_error.append_errors("No execution command")
845
+ default_error.append_errors("No execution command")
819
846
  end
820
-
847
+
821
848
  if results
822
849
  success = true
823
850
  results.each do |result|
824
- success = false if result.status != code.success
851
+ success = false if result.status != code.success
825
852
  end
826
853
  if success
827
854
  yield(:process, config) if block_given?
828
- extension(:exec_success, { :config => config, :results => results })
855
+ extension(:exec_success, { :config => config, :results => results })
829
856
  end
830
857
  else
831
858
  default_error.append_errors("No execution results")
@@ -835,107 +862,107 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
835
862
  end
836
863
  else
837
864
  default_error.append_errors("No attached machine")
838
-
865
+
839
866
  logger.warn("Node #{plugin_name} does not have an attached machine or is not running so cannot execute commands")
840
867
  end
841
- results
868
+ results
842
869
  end
843
-
870
+
844
871
  #---
845
-
872
+
846
873
  def cli
847
874
  @cli_interface
848
875
  end
849
-
876
+
850
877
  #---
851
-
878
+
852
879
  def command(command, options = {})
853
880
  config = Config.ensure(options)
854
881
  as_admin = config.delete(:as_admin, false)
855
882
  remove_command = false
856
-
883
+
857
884
  unless command.is_a?(CORL::Plugin::Command)
858
885
  command = CORL.command(Config.new({ :command => command }).import(config), :bash)
859
886
  remove_command = true
860
887
  end
861
-
888
+
862
889
  admin_command = ''
863
890
  if as_admin
864
891
  admin_command = 'sudo' if user.to_s != 'root'
865
892
  admin_command = extension_set(:admin_command, admin_command, config)
866
893
  end
867
-
894
+
868
895
  config[:commands] = [ "#{admin_command} #{command.to_s}".strip ]
869
-
896
+
870
897
  results = exec(config) do |op, data|
871
- yield(op, data) if block_given?
898
+ yield(op, data) if block_given?
872
899
  end
873
-
874
- CORL.remove_plugin(command) if remove_command
875
- results.first
900
+
901
+ CORL.remove_plugin(command) if remove_command
902
+ results.first
876
903
  end
877
-
904
+
878
905
  #---
879
-
906
+
880
907
  def action(provider, options = {})
881
908
  codes :network_load_error
882
-
909
+
883
910
  config = Config.ensure(options).defaults({
884
911
  :log_level => Nucleon.log_level,
885
- :net_remote => :edit,
886
- :net_provider => network.plugin_provider
912
+ :net_remote => :edit,
913
+ :net_provider => network.plugin_provider
887
914
  })
888
-
915
+
889
916
  logger.info("Executing remote action #{provider} with encoded arguments: #{config.export.inspect}")
890
-
917
+
891
918
  encoded_config = Util::CLI.encode(Util::Data.clean(config.export))
892
919
  action_config = extended_config(:action, {
893
- :command => provider.to_s.gsub('_', ' '),
920
+ :command => provider.to_s.gsub('_', ' '),
894
921
  :data => { :encoded => encoded_config }
895
922
  })
896
-
897
- quiet = config.get(:quiet, false)
923
+
924
+ quiet = config.get(:quiet, false)
898
925
  result = command(:corl, { :subcommand => action_config, :as_admin => true, :quiet => quiet }) do |op, data|
899
- yield(op, data) if block_given?
926
+ yield(op, data) if block_given?
900
927
  end
901
-
928
+
902
929
  # Update local network configuration so we capture any updates
903
930
  if result.status == code.success && ! network.load({ :remote => config[:net_remote], :pull => true })
904
931
  result.status = code.network_load_error
905
932
  end
906
933
  result
907
934
  end
908
-
935
+
909
936
  #---
910
-
937
+
911
938
  def run
912
939
  @action_interface
913
940
  end
914
-
941
+
915
942
  #---
916
-
943
+
917
944
  def terminal(options = {})
918
945
  myself.status = code.unknown_status
919
-
946
+
920
947
  if machine && machine.running?
921
948
  config = Config.ensure(options)
922
-
949
+
923
950
  if extension_check(:terminal, { :config => config })
924
951
  logger.info("Launching terminal for node: #{plugin_name}")
925
-
952
+
926
953
  if local? && local_machine
927
954
  active_machine = local_machine
928
955
  else
929
956
  active_machine = machine
930
957
  end
931
-
958
+
932
959
  config[:private_keys] = private_key
933
960
  config[:port] = ssh_port
934
-
961
+
935
962
  myself.status = active_machine.terminal(user, config.export)
936
-
963
+
937
964
  if status == code.success
938
- extension(:exec_success, { :config => config })
965
+ extension(:exec_success, { :config => config })
939
966
  end
940
967
  end
941
968
  else
@@ -943,21 +970,25 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
943
970
  end
944
971
  status == code.success
945
972
  end
946
-
973
+
947
974
  #---
948
-
975
+
949
976
  def bootstrap(local_path, options = {})
950
977
  config = Config.ensure(options)
951
978
  myself.status = code.unknown_status
952
-
953
- bootstrap_name = 'bootstrap'
954
- bootstrap_path = config.get(:bootstrap_path, File.join(CORL.lib_path, '..', bootstrap_name))
955
- bootstrap_glob = config.get(:bootstrap_glob, '**/*.sh')
956
- bootstrap_init = config.get(:bootstrap_init, 'bootstrap.sh')
957
-
979
+
980
+ bootstrap_name = 'bootstrap'
981
+ bootstrap_path = config.get(:bootstrap_path, File.join(CORL.lib_path, '..', bootstrap_name))
982
+ bootstrap_glob = config.get(:bootstrap_glob, '**/*.sh')
983
+ bootstrap_init = config.get(:bootstrap_init, 'bootstrap.sh')
984
+ bootstrap_scripts = config.get_array(:bootstrap_scripts)
985
+
958
986
  user_home = config[:home]
959
987
  auth_files = config.get_array(:auth_files)
960
-
988
+
989
+ reboot = config.get(:reboot, false)
990
+ dev_build = config.get(:dev_build, false)
991
+
961
992
  codes :local_path_not_found,
962
993
  :home_path_lookup_failure,
963
994
  :auth_upload_failure,
@@ -965,61 +996,64 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
965
996
  :bootstrap_upload_failure,
966
997
  :bootstrap_exec_failure,
967
998
  :reload_failure
968
-
969
- if File.directory?(local_path)
999
+
1000
+ if File.directory?(local_path)
970
1001
  if user_home || user_home = home(config.get(:home_env_var, 'HOME'), config.get(:force, false))
971
1002
  myself.status = code.success
972
-
1003
+
973
1004
  # Transmit authorisation / credential files
974
1005
  package_files = [ '.fog', '.netrc', '.google-privatekey.p12', '.vimrc' ]
975
1006
  auth_files.each do |file|
976
1007
  package_files << file.gsub(local_path + '/', '')
977
1008
  end
978
- send_success = send_files(local_path, user_home, package_files, '0600') do |op, data|
1009
+ send_success = send_files(local_path, user_home, package_files, '0600', { :quiet => true }) do |op, data|
979
1010
  yield("send_#{op}".to_sym, data) if block_given?
980
1011
  data
981
1012
  end
982
1013
  unless send_success
983
1014
  myself.status = code.auth_upload_failure
984
1015
  end
985
-
1016
+
986
1017
  if user.to_sym != config.get(:root_user, :root).to_sym
987
1018
  auth_files = package_files.collect { |path| "'#{path}'"}
988
1019
  root_home_path = config.get(:root_home, '/root')
989
-
1020
+
990
1021
  result = command("cp #{auth_files.join(' ')} #{root_home_path}", { :as_admin => true })
991
- myself.status = code.root_auth_copy_failure unless result.status == code.success
1022
+ myself.status = code.root_auth_copy_failure unless result.status == code.success
992
1023
  end
993
-
1024
+
994
1025
  # Send bootstrap package
995
1026
  if status == code.success
996
1027
  remote_bootstrap_path = File.join(user_home, bootstrap_name)
997
-
1028
+
998
1029
  cli.rm('-Rf', remote_bootstrap_path)
999
- send_success = send_files(bootstrap_path, remote_bootstrap_path, nil, '0700') do |op, data|
1030
+ send_success = send_files(bootstrap_path, remote_bootstrap_path, nil, '0700', { :quiet => true }) do |op, data|
1000
1031
  yield("send_#{op}".to_sym, data) if block_given?
1001
1032
  data
1002
1033
  end
1003
1034
  unless send_success
1004
1035
  myself.status = code.bootstrap_upload_failure
1005
1036
  end
1006
-
1037
+
1007
1038
  # Execute bootstrap process
1008
1039
  if status == code.success
1009
1040
  remote_script = File.join(remote_bootstrap_path, bootstrap_init)
1010
-
1041
+ environment = "HOSTNAME='#{hostname}' "
1042
+ environment << "DEVELOPMENT_BUILD=1 " if dev_build
1043
+ script_names = bootstrap_scripts.empty? ? '' : bootstrap_scripts.join(' ')
1044
+
1011
1045
  myself.bootstrap_script = remote_script
1012
-
1013
- result = command("HOSTNAME='#{hostname}' #{remote_script}", { :as_admin => true }) do |op, data|
1046
+
1047
+ result = command("#{environment} #{remote_script} #{script_names}", { :as_admin => true }) do |op, data|
1014
1048
  yield("exec_#{op}".to_sym, data) if block_given?
1015
1049
  data
1016
1050
  end
1017
-
1051
+
1018
1052
  if result.status == code.success
1019
1053
  # Reboot the machine
1020
- unless reload
1054
+ if reboot && ! reload
1021
1055
  warn('corl.core.node.bootstrap.reload')
1022
- myself.status = code.reload_failure
1056
+ myself.status = code.reload_failure
1023
1057
  end
1024
1058
  else
1025
1059
  warn('corl.core.node.bootstrap.status', { :script => remote_script, :status => result.status })
@@ -1028,59 +1062,59 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
1028
1062
  end
1029
1063
  end
1030
1064
  else
1031
- myself.status = code.home_path_lookup_failure
1065
+ myself.status = code.home_path_lookup_failure
1032
1066
  end
1033
1067
  else
1034
1068
  myself.status = code.local_path_not_found
1035
1069
  end
1036
1070
  status == code.success
1037
1071
  end
1038
-
1072
+
1039
1073
  #---
1040
-
1074
+
1041
1075
  def save(options = {})
1042
1076
  config = Config.ensure(options)
1043
-
1077
+
1044
1078
  # Record machine parameters
1045
1079
  if block_given?
1046
1080
  # Provider or external configuration preparation
1047
- yield(config)
1081
+ yield(config)
1048
1082
  else
1049
1083
  # Default configuration preparation
1050
1084
  id(true)
1051
1085
  public_ip(true)
1052
1086
  private_ip(true)
1053
1087
  state(true)
1054
-
1088
+
1055
1089
  machine_type(false)
1056
1090
  image(false)
1057
1091
  end
1058
-
1059
- network.save(config.import({
1092
+
1093
+ network.save(config.import({
1060
1094
  :commit => true,
1061
1095
  :allow_empty => true,
1062
1096
  :message => config.get(:message, "Saving #{plugin_provider} node #{plugin_name}"),
1063
1097
  :remote => config.get(:remote, :edit)
1064
- }))
1098
+ }))
1065
1099
  end
1066
-
1100
+
1067
1101
  #---
1068
-
1102
+
1069
1103
  def start(options = {})
1070
1104
  success = true
1071
-
1105
+
1072
1106
  if machine
1073
1107
  config = Config.ensure(options)
1074
-
1108
+
1075
1109
  if extension_check(:start, { :config => config })
1076
1110
  logger.info("Starting node: #{plugin_name}")
1077
-
1078
- yield(:config, config) if block_given?
1111
+
1112
+ yield(:config, config) if block_given?
1079
1113
  success = machine.start(config.export)
1080
1114
  success = save(config) if success
1081
-
1115
+
1082
1116
  if success
1083
- if config.get(:bootstrap, true) && bootstrap_script
1117
+ if config.get(:bootstrap, false) && bootstrap_script
1084
1118
  result = command("HOSTNAME='#{hostname}' #{bootstrap_script}", { :as_admin => true }) do |op, data|
1085
1119
  yield("bootstrap_#{op}".to_sym, data) if block_given?
1086
1120
  data
@@ -1088,12 +1122,12 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
1088
1122
  success = false unless result.status == code.success && reload
1089
1123
  end
1090
1124
  end
1091
-
1125
+
1092
1126
  if success && block_given?
1093
1127
  process_success = yield(:process, config)
1094
- success = process_success if process_success == false
1128
+ success = process_success if process_success == false
1095
1129
  end
1096
-
1130
+
1097
1131
  if success
1098
1132
  extension(:start_success, { :config => config })
1099
1133
  end
@@ -1103,26 +1137,26 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
1103
1137
  end
1104
1138
  success
1105
1139
  end
1106
-
1140
+
1107
1141
  #---
1108
-
1142
+
1109
1143
  def reload(options = {})
1110
1144
  success = true
1111
-
1145
+
1112
1146
  if machine && machine.created?
1113
1147
  config = Config.ensure(options)
1114
-
1148
+
1115
1149
  if extension_check(:reload, { :config => config })
1116
1150
  logger.info("Reloading node: #{plugin_name}")
1117
-
1118
- yield(:config, config) if block_given?
1151
+
1152
+ yield(:config, config) if block_given?
1119
1153
  success = machine.reload(config.export)
1120
-
1154
+
1121
1155
  if success && block_given?
1122
1156
  process_success = yield(:process, config)
1123
- success = process_success if process_success == false
1157
+ success = process_success if process_success == false
1124
1158
  end
1125
-
1159
+
1126
1160
  if success
1127
1161
  extension(:reload_success, { :config => config })
1128
1162
  end
@@ -1132,27 +1166,27 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
1132
1166
  end
1133
1167
  success
1134
1168
  end
1135
-
1169
+
1136
1170
  #---
1137
-
1171
+
1138
1172
  def create_image(options = {})
1139
1173
  success = true
1140
-
1174
+
1141
1175
  if machine && machine.running?
1142
1176
  config = Config.ensure(options)
1143
-
1177
+
1144
1178
  if extension_check(:create_image, { :config => config })
1145
1179
  logger.info("Executing node: #{plugin_name}")
1146
-
1147
- yield(:config, config) if block_given?
1180
+
1181
+ yield(:config, config) if block_given?
1148
1182
  success = machine.create_image(config.export)
1149
1183
  success = save(config) if success
1150
-
1184
+
1151
1185
  if success && block_given?
1152
1186
  process_success = yield(:process, config)
1153
- success = process_success if process_success == false
1187
+ success = process_success if process_success == false
1154
1188
  end
1155
-
1189
+
1156
1190
  if success
1157
1191
  extension(:create_image_success, { :config => config })
1158
1192
  end
@@ -1160,44 +1194,44 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
1160
1194
  else
1161
1195
  logger.warn("Node #{plugin_name} does not have an attached machine or is not running so cannot create an image")
1162
1196
  end
1163
- success
1197
+ success
1164
1198
  end
1165
-
1199
+
1166
1200
  #---
1167
-
1201
+
1168
1202
  def stop(options = {})
1169
1203
  success = true
1170
-
1204
+
1171
1205
  if machine && machine.running?
1172
1206
  config = Config.ensure(options)
1173
-
1207
+
1174
1208
  if extension_check(:stop, { :config => config })
1175
1209
  logger.info("Stopping node: #{plugin_name}")
1176
-
1177
- yield(:config, config) if block_given?
1210
+
1211
+ yield(:config, config) if block_given?
1178
1212
  success = machine.stop(config.export)
1179
-
1213
+
1180
1214
  myself.machine = nil
1181
-
1215
+
1182
1216
  override_settings = false
1183
1217
  override_settings = yield(:finalize, config) if success && block_given?
1184
-
1218
+
1185
1219
  if success && ! override_settings
1186
1220
  delete_setting(:id)
1187
1221
  delete_setting(:public_ip)
1188
1222
  delete_setting(:private_ip)
1189
1223
  delete_setting(:ssh_port)
1190
1224
  delete_setting(:build)
1191
-
1225
+
1192
1226
  myself[:state] = :stopped
1193
1227
  end
1194
1228
  success = save(config)
1195
-
1229
+
1196
1230
  if success && block_given?
1197
1231
  process_success = yield(:process, config)
1198
- success = process_success if process_success == false
1232
+ success = process_success if process_success == false
1199
1233
  end
1200
-
1234
+
1201
1235
  if success
1202
1236
  extension(:stop_success, { :config => config })
1203
1237
  end
@@ -1211,169 +1245,170 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
1211
1245
  #---
1212
1246
 
1213
1247
  def destroy(options = {})
1214
- config = Config.ensure(options)
1248
+ config = Config.ensure(options)
1215
1249
  success = true
1216
-
1250
+
1217
1251
  if extension_check(:destroy, { :config => config })
1218
1252
  logger.info("Destroying node: #{plugin_name}")
1219
-
1253
+
1220
1254
  yield(:config, config) if block_given?
1221
-
1255
+
1222
1256
  if machine && machine.created?
1223
- # Shut down machine
1257
+ # Shut down machine
1224
1258
  success = machine.destroy(config.export)
1225
1259
  myself.machine = nil
1226
1260
  else
1227
1261
  logger.warn("Node #{plugin_name} does not have an attached machine or is not created so cannot be destroyed")
1228
1262
  end
1229
-
1263
+
1230
1264
  # Remove SSH keys
1231
1265
  if success && delete_keys
1232
1266
  # Remove node information
1233
1267
  network.delete_node(plugin_provider, plugin_name, false)
1234
-
1268
+
1235
1269
  network.save({
1236
- :commit => true,
1237
- :remote => config.get(:remote, :edit),
1270
+ :commit => true,
1271
+ :remote => config.get(:remote, :edit),
1238
1272
  :message => config.get(:message, "Destroying node #{plugin_name}"),
1239
- :push => true
1273
+ :push => true
1240
1274
  })
1241
- end
1242
-
1275
+ end
1276
+
1243
1277
  if success && block_given?
1244
1278
  process_success = yield(:process, config)
1245
- success = process_success if process_success == false
1279
+ success = process_success if process_success == false
1246
1280
  end
1247
-
1281
+
1248
1282
  if success
1249
1283
  extension(:destroy_success, { :config => config })
1250
1284
  clear_cache
1251
1285
  end
1252
1286
  end
1253
- success
1287
+ success
1254
1288
  end
1255
1289
 
1256
1290
  #-----------------------------------------------------------------------------
1257
1291
  # Utilities
1258
-
1259
- def self.build_info(namespace, plugin_type, data)
1292
+
1293
+ def self.build_info(namespace, plugin_type, data)
1260
1294
  data = data.split(/\s*,\s*/) if data.is_a?(String)
1261
1295
  super(namespace, plugin_type, data)
1262
1296
  end
1263
-
1297
+
1264
1298
  #---
1265
-
1299
+
1266
1300
  def self.translate(data)
1267
1301
  options = super(data)
1268
-
1269
- case data
1302
+
1303
+ case data
1270
1304
  when String
1271
1305
  options = { :name => data }
1272
1306
  when Hash
1273
1307
  options = data
1274
1308
  end
1275
-
1309
+
1276
1310
  if options.has_key?(:name)
1277
1311
  if matches = translate_reference(options[:name])
1278
1312
  options[:provider] = matches[:provider]
1279
1313
  options[:name] = matches[:name]
1280
-
1281
- logger.debug("Translating node options: #{options.inspect}")
1314
+
1315
+ logger.debug("Translating node options: #{options.inspect}")
1282
1316
  end
1283
1317
  end
1284
1318
  options
1285
1319
  end
1286
-
1320
+
1287
1321
  #---
1288
-
1322
+
1289
1323
  def self.translate_reference(reference)
1290
1324
  # ex: rackspace:::web1.staging.example.com
1291
1325
  if reference && reference.match(/^\s*([a-zA-Z0-9_-]+):::([^\s]+)\s*$/)
1292
1326
  provider = $1
1293
1327
  name = $2
1294
-
1328
+
1295
1329
  logger.debug("Translating node reference: #{provider} #{name}")
1296
-
1330
+
1297
1331
  info = {
1298
1332
  :provider => provider,
1299
1333
  :name => name
1300
1334
  }
1301
-
1335
+
1302
1336
  logger.debug("Project reference info: #{info.inspect}")
1303
1337
  return info
1304
1338
  end
1305
1339
  nil
1306
1340
  end
1307
-
1341
+
1308
1342
  #---
1309
-
1343
+
1310
1344
  def translate_reference(reference)
1311
1345
  myself.class.translate_reference(reference)
1312
1346
  end
1313
-
1347
+
1314
1348
  #-----------------------------------------------------------------------------
1315
1349
  # CLI utilities
1316
-
1350
+
1317
1351
  def cli_capture(cli_command, *args)
1318
- result = cli.send(cli_command, args)
1319
-
1320
- if result.status == code.success && ! result.output.empty?
1352
+ result = exec({ :commands => [ [ cli_command, args ].flatten.join(' ') ], :quiet => true })
1353
+ result = result.first
1354
+
1355
+ if result.status == code.success && ! result.output.empty?
1321
1356
  result.output
1322
1357
  else
1323
1358
  nil
1324
- end
1359
+ end
1325
1360
  end
1326
-
1361
+
1327
1362
  #---
1328
-
1363
+
1329
1364
  def cli_check(cli_command, *args)
1330
1365
  result = cli.send(cli_command, args)
1331
- result.status == code.success ? true : false
1366
+ result.status == code.success ? true : false
1332
1367
  end
1333
-
1368
+
1334
1369
  #---
1335
-
1370
+
1336
1371
  def filter_output(type, data)
1337
1372
  if type == :output
1338
1373
  # Hide redundant Facter output
1339
1374
  if data =~ /^Already evaluated [a-z]+ at [^,]+, reevaluating anyways$/
1340
1375
  data = ''
1341
- end
1376
+ end
1342
1377
  end
1343
- data
1378
+ data
1344
1379
  end
1345
-
1380
+
1346
1381
  #-----------------------------------------------------------------------------
1347
1382
  # Machine type utilities
1348
-
1383
+
1349
1384
  def machine_type_id(machine_type)
1350
1385
  machine_type.id
1351
1386
  end
1352
-
1387
+
1353
1388
  #---
1354
-
1389
+
1355
1390
  def render_machine_type(machine_type)
1356
- ''
1391
+ ''
1357
1392
  end
1358
-
1393
+
1359
1394
  #-----------------------------------------------------------------------------
1360
1395
  # Image utilities
1361
-
1396
+
1362
1397
  def image_id(image)
1363
1398
  image.id
1364
1399
  end
1365
-
1400
+
1366
1401
  #---
1367
-
1402
+
1368
1403
  def render_image(image)
1369
- ''
1404
+ ''
1370
1405
  end
1371
-
1406
+
1372
1407
  #---
1373
-
1408
+
1374
1409
  def image_search_text(image)
1375
1410
  image.to_s
1376
- end
1411
+ end
1377
1412
  end
1378
1413
  end
1379
1414
  end