poolparty 0.2.69 → 0.2.84

Sign up to get free protection for your applications and to get access to all the features.
Files changed (298) hide show
  1. data/Capfile +1 -0
  2. data/History.txt +6 -0
  3. data/Manifest.txt +140 -143
  4. data/PostInstall.txt +1 -1
  5. data/README.txt +2 -0
  6. data/bin/cloud-configure +5 -2
  7. data/bin/cloud-handle-load +3 -3
  8. data/bin/cloud-maintain +3 -3
  9. data/bin/cloud-provision +6 -5
  10. data/bin/cloud-rsync +28 -0
  11. data/bin/cloud-setup-dev +25 -0
  12. data/bin/cloud-spec +40 -0
  13. data/bin/cloud-start +5 -3
  14. data/bin/server-clean-cert-for +15 -0
  15. data/bin/server-rerun +0 -1
  16. data/bin/server-start-client +1 -1
  17. data/bin/server-start-master +1 -1
  18. data/bin/server-start-node +1 -1
  19. data/bin/server-update-hosts +4 -3
  20. data/bin/server-write-new-nodes +26 -0
  21. data/generators/poolspec/USAGE +2 -2
  22. data/generators/poolspec/poolspec_generator.rb +1 -1
  23. data/lib/erlang/messenger/Makefile +15 -0
  24. data/lib/erlang/messenger/ebin/client_app.beam +0 -0
  25. data/lib/erlang/messenger/ebin/client_server.beam +0 -0
  26. data/lib/erlang/messenger/ebin/erl_crash.dump +10326 -0
  27. data/lib/erlang/messenger/ebin/master_app.beam +0 -0
  28. data/lib/erlang/messenger/ebin/node_app.beam +0 -0
  29. data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
  30. data/lib/erlang/messenger/ebin/pm_client_old.beam +0 -0
  31. data/lib/erlang/messenger/ebin/pm_client_supervisor.beam +0 -0
  32. data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
  33. data/lib/erlang/messenger/ebin/pm_event_manager.beam +0 -0
  34. data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
  35. data/lib/erlang/messenger/ebin/pm_master_event_handler.beam +0 -0
  36. data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
  37. data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
  38. data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
  39. data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
  40. data/lib/erlang/messenger/ebin/pm_spawner.beam +0 -0
  41. data/lib/erlang/messenger/ebin/pm_strings.beam +0 -0
  42. data/lib/erlang/messenger/ebin/utils.beam +0 -0
  43. data/lib/erlang/messenger/lib/eunit/Makefile +28 -0
  44. data/lib/erlang/messenger/lib/eunit/ebin/autoload.beam +0 -0
  45. data/lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam +0 -0
  46. data/lib/erlang/messenger/lib/eunit/ebin/eunit.beam +0 -0
  47. data/lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam +0 -0
  48. data/lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam +0 -0
  49. data/lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam +0 -0
  50. data/lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam +0 -0
  51. data/lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam +0 -0
  52. data/lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam +0 -0
  53. data/lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam +0 -0
  54. data/lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam +0 -0
  55. data/lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam +0 -0
  56. data/lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam +0 -0
  57. data/lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam +0 -0
  58. data/lib/erlang/messenger/lib/eunit/src/Makefile +46 -0
  59. data/lib/erlang/messenger/src/pm_master.erl +5 -0
  60. data/lib/erlang/messenger/src/pm_node.erl +2 -3
  61. data/lib/erlang/messenger/src/pm_spawner.erl +213 -0
  62. data/lib/poolparty/base_packages/heartbeat.rb +57 -43
  63. data/lib/poolparty/base_packages/poolparty.rb +18 -15
  64. data/lib/poolparty/capistrano.rb +18 -0
  65. data/lib/poolparty/core/class.rb +24 -0
  66. data/lib/poolparty/core/kernel.rb +7 -0
  67. data/lib/poolparty/core/module.rb +2 -2
  68. data/lib/poolparty/core/string.rb +1 -1
  69. data/lib/poolparty/dependency_resolutions/puppet.rb +10 -2
  70. data/lib/poolparty/exceptions/ProvisionerException.rb +5 -0
  71. data/lib/poolparty/extra/deployments.rb +31 -0
  72. data/lib/poolparty/helpers/binary.rb +14 -2
  73. data/lib/poolparty/helpers/optioner.rb +61 -22
  74. data/lib/poolparty/helpers/ruberl.rb +33 -0
  75. data/lib/poolparty/modules/cloud_dsl.rb +2 -1
  76. data/lib/poolparty/modules/cloud_resourcer.rb +30 -6
  77. data/lib/poolparty/modules/configurable.rb +2 -0
  78. data/lib/poolparty/modules/file_writer.rb +4 -4
  79. data/lib/poolparty/modules/resourcing_dsl.rb +5 -5
  80. data/lib/poolparty/monitors/base_monitor.rb +1 -1
  81. data/lib/poolparty/monitors/monitors/cpu_monitor.rb +2 -2
  82. data/lib/poolparty/net/messenger.rb +1 -1
  83. data/lib/poolparty/net/remote.rb +2 -2
  84. data/lib/poolparty/net/remote_bases/ec2.rb +51 -11
  85. data/lib/poolparty/net/remote_instance.rb +7 -3
  86. data/lib/poolparty/net/remoter.rb +72 -24
  87. data/lib/poolparty/net/remoter_base.rb +10 -0
  88. data/lib/poolparty/plugins/deploydirectory.rb +10 -5
  89. data/lib/poolparty/plugins/git.rb +51 -0
  90. data/lib/poolparty/{pool → poolparty}/base.rb +4 -2
  91. data/lib/poolparty/{pool → poolparty}/cloud.rb +32 -10
  92. data/lib/poolparty/{pool → poolparty}/plugin_model.rb +4 -4
  93. data/lib/poolparty/{pool → poolparty}/pool.rb +2 -2
  94. data/lib/poolparty/{pool → poolparty}/resource.rb +33 -15
  95. data/lib/poolparty/{pool → poolparty}/resources/class_package.rb +3 -3
  96. data/lib/poolparty/{pool → poolparty}/resources/directory.rb +6 -3
  97. data/lib/poolparty/{pool → poolparty}/resources/exec.rb +2 -5
  98. data/lib/poolparty/{pool → poolparty}/resources/file.rb +3 -3
  99. data/lib/poolparty/{pool → poolparty}/resources/package.rb +1 -1
  100. data/lib/poolparty/{pool → poolparty}/resources/remote_file.rb +1 -1
  101. data/lib/poolparty/poolparty/resources/remote_user.rb +17 -0
  102. data/lib/poolparty/{pool → poolparty}/resources/sshkey.rb +5 -1
  103. data/lib/poolparty/{pool → poolparty}/script.rb +1 -1
  104. data/lib/poolparty/provisioners/capistrano/capistrano.rb +127 -0
  105. data/lib/poolparty/provisioners/capistrano/capistrano_configurer.rb +58 -0
  106. data/lib/poolparty/provisioners/capistrano/recipies/base.rb +104 -0
  107. data/lib/poolparty/provisioners/capistrano/recipies/master.rb +121 -0
  108. data/lib/poolparty/provisioners/capistrano/recipies/slave.rb +12 -0
  109. data/lib/poolparty/provisioners/provisioner_base.rb +204 -0
  110. data/lib/poolparty/spec/core/string.rb +16 -0
  111. data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +26 -0
  112. data/lib/poolparty/spec/matchers/have_cron.rb +28 -0
  113. data/lib/poolparty/spec/matchers/have_deploydirectory.rb +15 -0
  114. data/lib/poolparty/spec/matchers/have_directory.rb +31 -0
  115. data/lib/poolparty/spec/matchers/have_exec.rb +28 -0
  116. data/lib/poolparty/spec/matchers/have_file.rb +28 -0
  117. data/lib/poolparty/spec/matchers/have_gempackage.rb +28 -0
  118. data/lib/poolparty/spec/matchers/have_git.rb +28 -0
  119. data/lib/poolparty/spec/matchers/have_host.rb +28 -0
  120. data/lib/poolparty/spec/matchers/have_mount.rb +28 -0
  121. data/lib/poolparty/spec/matchers/have_package.rb +28 -0
  122. data/lib/poolparty/spec/matchers/have_remotefile.rb +28 -0
  123. data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +28 -0
  124. data/lib/poolparty/spec/matchers/have_service.rb +28 -0
  125. data/lib/poolparty/spec/matchers/have_sshkey.rb +28 -0
  126. data/lib/poolparty/spec/matchers/have_symlink.rb +28 -0
  127. data/lib/poolparty/spec/matchers/have_variable.rb +32 -0
  128. data/lib/poolparty/spec/spec/dynamic_matchers.rb +63 -0
  129. data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +7 -0
  130. data/lib/poolparty/spec/templates/have_base.rb +28 -0
  131. data/lib/poolparty/templates/authkeys +1 -1
  132. data/lib/poolparty/templates/gem +12 -10
  133. data/lib/poolparty/templates/ha.cf +9 -11
  134. data/lib/poolparty/templates/haresources +1 -1
  135. data/lib/poolparty/templates/logd.cf +42 -0
  136. data/lib/poolparty/templates/puppet.conf +18 -8
  137. data/lib/poolparty/templates/puppetcleaner +9 -3
  138. data/lib/poolparty/templates/puppetrerun +16 -3
  139. data/lib/poolparty/templates/puppetrunner +1 -1
  140. data/lib/poolparty/version.rb +1 -1
  141. data/lib/poolparty.rb +12 -8
  142. data/lib/poolpartyspec.rb +34 -0
  143. data/poolparty.gemspec +151 -149
  144. data/spec/poolparty/aska/aska_spec.rb +0 -5
  145. data/spec/poolparty/bin/console_spec.rb +3 -0
  146. data/spec/poolparty/extra/deployments_spec.rb +64 -0
  147. data/spec/poolparty/helpers/binary_spec.rb +1 -1
  148. data/spec/poolparty/helpers/optioner_spec.rb +17 -4
  149. data/spec/poolparty/modules/cloud_resourcer_spec.rb +19 -2
  150. data/spec/poolparty/modules/configurable_spec.rb +2 -2
  151. data/spec/poolparty/net/remote_bases/ec2_spec.rb +5 -2
  152. data/spec/poolparty/net/remote_instance_spec.rb +5 -0
  153. data/spec/poolparty/net/remote_spec.rb +24 -31
  154. data/spec/poolparty/net/remoter_base_spec.rb +11 -6
  155. data/spec/poolparty/net/remoter_spec.rb +55 -27
  156. data/spec/poolparty/plugins/deploydirectory_spec.rb +1 -0
  157. data/spec/poolparty/plugins/git_spec.rb +45 -0
  158. data/spec/poolparty/{pool → poolparty}/cloud_spec.rb +41 -0
  159. data/spec/poolparty/{pool → poolparty}/plugin_spec.rb +1 -1
  160. data/spec/poolparty/{pool → poolparty}/pool_spec.rb +1 -1
  161. data/spec/poolparty/{pool → poolparty}/resource_spec.rb +15 -2
  162. data/spec/poolparty/poolparty/resources/user_spec.rb +38 -0
  163. data/spec/poolparty/poolparty/test_plugins/virtual_host_template.erb +0 -0
  164. data/spec/poolparty/poolparty_spec.rb +1 -1
  165. data/spec/poolparty/provisioners/capistrano/capistrano_spec.rb +27 -0
  166. data/spec/poolparty/provisioners/provisioner_base_spec.rb +120 -0
  167. data/spec/poolparty/spec/core/string_spec.rb +57 -0
  168. data/spec/poolparty/spec_helper.rb +48 -6
  169. data/tasks/deployment.rake +3 -5
  170. data/tasks/spec.rake +2 -3
  171. data/website/index.html +2 -2
  172. metadata +150 -148
  173. data/lib/erlang/messenger/lib/eunit/.svn/all-wcprops +0 -53
  174. data/lib/erlang/messenger/lib/eunit/.svn/entries +0 -140
  175. data/lib/erlang/messenger/lib/eunit/.svn/format +0 -1
  176. data/lib/erlang/messenger/lib/eunit/.svn/prop-base/NOTES.svn-base +0 -5
  177. data/lib/erlang/messenger/lib/eunit/.svn/text-base/AUTHORS.svn-base +0 -2
  178. data/lib/erlang/messenger/lib/eunit/.svn/text-base/CHANGELOG.svn-base +0 -14
  179. data/lib/erlang/messenger/lib/eunit/.svn/text-base/COPYING.svn-base +0 -504
  180. data/lib/erlang/messenger/lib/eunit/.svn/text-base/NOTES.svn-base +0 -276
  181. data/lib/erlang/messenger/lib/eunit/.svn/text-base/README.svn-base +0 -3
  182. data/lib/erlang/messenger/lib/eunit/.svn/text-base/sys.config.svn-base +0 -9
  183. data/lib/erlang/messenger/lib/eunit/.svn/text-base/vsn.mk.svn-base +0 -1
  184. data/lib/erlang/messenger/lib/eunit/doc/.svn/all-wcprops +0 -59
  185. data/lib/erlang/messenger/lib/eunit/doc/.svn/entries +0 -142
  186. data/lib/erlang/messenger/lib/eunit/doc/.svn/format +0 -1
  187. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/erlang.png.svn-base +0 -5
  188. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/eunit.html.svn-base +0 -5
  189. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/index.html.svn-base +0 -5
  190. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/modules-frame.html.svn-base +0 -5
  191. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/overview-summary.html.svn-base +0 -5
  192. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/packages-frame.html.svn-base +0 -5
  193. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/edoc-info.svn-base +0 -3
  194. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/erlang.png.svn-base +0 -0
  195. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/eunit.html.svn-base +0 -172
  196. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/index.html.svn-base +0 -17
  197. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/modules-frame.html.svn-base +0 -12
  198. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/overview-summary.html.svn-base +0 -984
  199. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/overview.edoc.svn-base +0 -980
  200. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/packages-frame.html.svn-base +0 -11
  201. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/stylesheet.css.svn-base +0 -55
  202. data/lib/erlang/messenger/lib/eunit/ebin/.svn/all-wcprops +0 -5
  203. data/lib/erlang/messenger/lib/eunit/ebin/.svn/dir-prop-base +0 -8
  204. data/lib/erlang/messenger/lib/eunit/ebin/.svn/entries +0 -28
  205. data/lib/erlang/messenger/lib/eunit/ebin/.svn/format +0 -1
  206. data/lib/erlang/messenger/lib/eunit/examples/.svn/all-wcprops +0 -23
  207. data/lib/erlang/messenger/lib/eunit/examples/.svn/entries +0 -66
  208. data/lib/erlang/messenger/lib/eunit/examples/.svn/format +0 -1
  209. data/lib/erlang/messenger/lib/eunit/examples/.svn/prop-base/eunit_examples.erl.svn-base +0 -5
  210. data/lib/erlang/messenger/lib/eunit/examples/.svn/prop-base/fib.erl.svn-base +0 -5
  211. data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/eunit_examples.erl.svn-base +0 -339
  212. data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/fib.erl.svn-base +0 -19
  213. data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/tests.txt.svn-base +0 -1
  214. data/lib/erlang/messenger/lib/eunit/include/.svn/all-wcprops +0 -11
  215. data/lib/erlang/messenger/lib/eunit/include/.svn/entries +0 -41
  216. data/lib/erlang/messenger/lib/eunit/include/.svn/format +0 -1
  217. data/lib/erlang/messenger/lib/eunit/include/.svn/prop-base/eunit.hrl.svn-base +0 -5
  218. data/lib/erlang/messenger/lib/eunit/include/.svn/text-base/eunit.hrl.svn-base +0 -313
  219. data/lib/erlang/messenger/lib/eunit/src/.svn/all-wcprops +0 -113
  220. data/lib/erlang/messenger/lib/eunit/src/.svn/entries +0 -259
  221. data/lib/erlang/messenger/lib/eunit/src/.svn/format +0 -1
  222. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/autoload.erl.svn-base +0 -5
  223. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/code_monitor.erl.svn-base +0 -5
  224. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit.erl.svn-base +0 -5
  225. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_autoexport.erl.svn-base +0 -5
  226. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_data.erl.svn-base +0 -5
  227. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_internal.hrl.svn-base +0 -5
  228. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_lib.erl.svn-base +0 -5
  229. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_proc.erl.svn-base +0 -5
  230. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_serial.erl.svn-base +0 -5
  231. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_server.erl.svn-base +0 -5
  232. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_striptests.erl.svn-base +0 -5
  233. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_test.erl.svn-base +0 -5
  234. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_tests.erl.svn-base +0 -5
  235. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_tty.erl.svn-base +0 -5
  236. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/file_monitor.erl.svn-base +0 -5
  237. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/autoload.erl.svn-base +0 -388
  238. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/code_monitor.erl.svn-base +0 -243
  239. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.app.src.svn-base +0 -21
  240. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.appup.src.svn-base +0 -1
  241. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.erl.svn-base +0 -196
  242. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_autoexport.erl.svn-base +0 -102
  243. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_data.erl.svn-base +0 -798
  244. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_internal.hrl.svn-base +0 -48
  245. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_lib.erl.svn-base +0 -682
  246. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_proc.erl.svn-base +0 -552
  247. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_serial.erl.svn-base +0 -157
  248. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_server.erl.svn-base +0 -340
  249. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_striptests.erl.svn-base +0 -64
  250. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_test.erl.svn-base +0 -334
  251. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_tests.erl.svn-base +0 -45
  252. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_tty.erl.svn-base +0 -272
  253. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/file_monitor.erl.svn-base +0 -409
  254. data/lib/erlang/messenger/src/pm_client_old.erl +0 -52
  255. data/lib/poolparty/helpers/provisioner_base.rb +0 -346
  256. data/lib/poolparty/helpers/provisioners/master.rb +0 -205
  257. data/lib/poolparty/helpers/provisioners/slave.rb +0 -64
  258. data/spec/poolparty/helpers/provisioner_base_spec.rb +0 -134
  259. data/spec/poolparty/helpers/provisioners/master_spec.rb +0 -54
  260. data/spec/poolparty/helpers/provisioners/slave_spec.rb +0 -28
  261. /data/lib/poolparty/{pool → poolparty}/custom_resource.rb +0 -0
  262. /data/lib/poolparty/{pool → poolparty}/loggable.rb +0 -0
  263. /data/lib/poolparty/{pool → poolparty}/plugin.rb +0 -0
  264. /data/lib/poolparty/{pool → poolparty}/resources/conditional.rb +0 -0
  265. /data/lib/poolparty/{pool → poolparty}/resources/cron.rb +0 -0
  266. /data/lib/poolparty/{pool → poolparty}/resources/custom_service.rb +0 -0
  267. /data/lib/poolparty/{pool → poolparty}/resources/gem_package.rb +0 -0
  268. /data/lib/poolparty/{pool → poolparty}/resources/host.rb +0 -0
  269. /data/lib/poolparty/{pool → poolparty}/resources/mount.rb +0 -0
  270. /data/lib/poolparty/{pool → poolparty}/resources/service.rb +0 -0
  271. /data/lib/poolparty/{pool → poolparty}/resources/symlink.rb +0 -0
  272. /data/lib/poolparty/{pool → poolparty}/resources/variable.rb +0 -0
  273. /data/log/{pool.logs → pool.log} +0 -0
  274. /data/spec/poolparty/{pool/test_plugins/virtual_host_template.erb → net/log/pool.log} +0 -0
  275. /data/spec/poolparty/{pool → poolparty}/base_spec.rb +0 -0
  276. /data/spec/poolparty/{pool → poolparty}/configurers/files/ruby_basic.rb +0 -0
  277. /data/spec/poolparty/{pool → poolparty}/configurers/files/ruby_plugins.rb +0 -0
  278. /data/spec/poolparty/{pool → poolparty}/configurers/ruby_spec.rb +0 -0
  279. /data/spec/poolparty/{pool → poolparty}/custom_resource_spec.rb +0 -0
  280. /data/spec/poolparty/{pool → poolparty}/example_spec.rb +0 -0
  281. /data/spec/poolparty/{pool → poolparty}/plugin_model_spec.rb +0 -0
  282. /data/spec/poolparty/{pool → poolparty}/resources/class_package_spec.rb +0 -0
  283. /data/spec/poolparty/{pool → poolparty}/resources/conditional_spec.rb +0 -0
  284. /data/spec/poolparty/{pool → poolparty}/resources/cron_spec.rb +0 -0
  285. /data/spec/poolparty/{pool → poolparty}/resources/directory_spec.rb +0 -0
  286. /data/spec/poolparty/{pool → poolparty}/resources/exec_spec.rb +0 -0
  287. /data/spec/poolparty/{pool → poolparty}/resources/file_spec.rb +0 -0
  288. /data/spec/poolparty/{pool → poolparty}/resources/gem_spec.rb +0 -0
  289. /data/spec/poolparty/{pool → poolparty}/resources/host_spec.rb +0 -0
  290. /data/spec/poolparty/{pool → poolparty}/resources/package_spec.rb +0 -0
  291. /data/spec/poolparty/{pool → poolparty}/resources/remote_file_spec.rb +0 -0
  292. /data/spec/poolparty/{pool → poolparty}/resources/service_spec.rb +0 -0
  293. /data/spec/poolparty/{pool → poolparty}/resources/sshkey_spec.rb +0 -0
  294. /data/spec/poolparty/{pool → poolparty}/resources/symlink_spec.rb +0 -0
  295. /data/spec/poolparty/{pool → poolparty}/resources/variable_spec.rb +0 -0
  296. /data/spec/poolparty/{pool → poolparty}/script_spec.rb +0 -0
  297. /data/spec/poolparty/{pool → poolparty}/test_plugins/sshkey_test +0 -0
  298. /data/spec/poolparty/{pool → poolparty}/test_plugins/webserver.rb +0 -0
@@ -1,346 +0,0 @@
1
- =begin rdoc
2
- The Provisioner is responsible for provisioning REMOTE servers
3
- This class only comes in to play when calling the setup commands on
4
- the development machine
5
- =end
6
- module PoolParty
7
- module Provisioner
8
-
9
- # Provision master
10
- # Convenience method to clean
11
- def self.provision_master(cloud, testing=false)
12
- Provisioner::Master.new(cloud).process_install!(testing)
13
- end
14
-
15
- def self.configure_master(cloud, testing=false)
16
- Provisioner::Master.new(cloud).process_configure!(testing)
17
- end
18
-
19
- def self.reconfigure_master(cloud, testing=false)
20
- Provisioner::Master.new(cloud).process_reconfigure!(testing)
21
- end
22
-
23
- def self.provision_slaves(cloud, testing=false)
24
- cloud.nonmaster_nonterminated_instances.each do |sl|
25
- provision_slave(sl, cloud, testing)
26
- end
27
- end
28
-
29
- def self.configure_slaves(cloud, testing=false)
30
- cloud.nonmaster_nonterminated_instances.each do |sl|
31
- configure_slave(sl, cloud, testing)
32
- end
33
- end
34
-
35
- def self.provision_slave(instance, cloud, testing=false)
36
- Provisioner::Slave.new(instance, cloud).process_install!(testing)
37
- end
38
-
39
- def self.configure_slave(instance, cloud, testing=false)
40
- Provisioner::Slave.new(instance, cloud).process_configure!(testing)
41
- end
42
-
43
- def self.process_clean_reconfigure_for!(instance, cloud, testing=false)
44
- Provisioner::Master.new(cloud).process_clean_reconfigure_for!(instance, testing)
45
- end
46
-
47
- def self.clear_master_ssl_certs(cloud, testing=false)
48
- Provisioner::Master.new(cloud).clear_master_ssl_certs
49
- end
50
-
51
- class ProvisionerBase
52
-
53
- include Configurable
54
- include CloudResourcer
55
- include FileWriter
56
-
57
- def initialize(instance,cld=self, os=:ubuntu)
58
- @instance = instance
59
- @cloud = cld
60
-
61
- options(cloud.options) if cloud && cloud.respond_to?(:options)
62
- set_vars_from_options(instance.options) unless instance.nil? || !instance.options || !instance.options.empty?
63
- options(instance.options) if instance.respond_to?(:options)
64
-
65
- @os = os.to_s.downcase.to_sym
66
- loaded
67
- end
68
- # Callback after initialized
69
- def loaded(opts={}, parent=self)
70
- end
71
-
72
- ### Installation tasks
73
-
74
- # This is the actual runner for the installation
75
- def install
76
- valid? ? install_string : error
77
- end
78
- # Write the installation tasks to a file in the storage directory
79
- def write_install_file
80
- error unless valid?
81
- ::FileUtils.mkdir_p Base.storage_directory unless ::File.exists?(Base.storage_directory)
82
- provisioner_file = ::File.join(Base.storage_directory, "install_#{name}.sh")
83
- ::File.open(provisioner_file, "w+") {|f| f << install }
84
- end
85
- def name
86
- @instance.name
87
- end
88
- # TODO: Clean up this method
89
- def process_install!(testing=false)
90
- error unless valid?
91
- write_install_file
92
- setup_runner
93
-
94
- unless testing
95
- vputs "Logging on to #{@instance.ip} (#{@instance.name})"
96
- @cloud.rsync_storage_files_to(@instance)
97
- vputs "Preparing configuration on the master"
98
-
99
- before_install(@instance)
100
-
101
- process_clean_reconfigure_for!(@instance, testing)
102
-
103
- vputs "Logging in and running provisioning on #{@instance.name}"
104
- cmd = "cd #{Base.remote_storage_path} && /bin/chmod +x install_#{name}.sh && /bin/sh install_#{name}.sh; /bin/rm install_#{name}.sh"
105
- verbose ? @cloud.run_command_on(cmd, @instance) : hide_output {@cloud.run_command_on(cmd, @instance)}
106
-
107
- process_clean_reconfigure_for!(@instance, testing)
108
-
109
- after_install(@instance)
110
- end
111
- end
112
- # Install callbacks
113
- # Before installation callback
114
- def before_install(instance)
115
- end
116
- def after_install(instance)
117
- end
118
-
119
- ### Configuraton tasks
120
-
121
- def configure
122
- valid? ? configure_string : error
123
- end
124
- def write_configure_file
125
- error unless valid?
126
- provisioner_file = ::File.join(Base.storage_directory, "configure_#{name}.sh")
127
- ::File.open(provisioner_file, "w+") {|f| f << configure }
128
- end
129
- def process_configure!(testing=false)
130
- error unless valid?
131
- write_configure_file
132
- setup_runner
133
-
134
- unless testing
135
- vputs "Logging on to #{@instance.ip}"
136
- @cloud.rsync_storage_files_to(@instance)
137
-
138
- cmd = "cd #{Base.remote_storage_path} && /bin/chmod +x configure_#{name}.sh && /bin/sh configure_#{name}.sh && /bin/rm configure_#{name}.sh"
139
- verbose ? @cloud.run_command_on(cmd, @instance) : hide_output {@cloud.run_command_on(cmd, @instance)}
140
- end
141
- end
142
- def process_clean_reconfigure_for!(instance, testing=false)
143
- if instance.is_a?(String)
144
- name = instance
145
- instance = MyOpenStruct.new(:name => name)
146
- end
147
- vputs "Cleaning certs from master: #{instance.name}"
148
- # puppetca --clean #{instance.name}.compute-1.internal; puppetca --clean #{instance.name}.ec2.internal
149
- # find /etc/puppet/ssl -type f -exec rm {} \;
150
- unless testing
151
- # @cloud.run_command_on("rm -rf /etc/puppet/ssl", instance) unless instance.master?
152
- str = returning String.new do |s|
153
- s << "puppetca --clean #{instance.name}.compute-1.internal 2>&1 > /dev/null;"
154
- s << "puppetca --clean #{instance.name}.ec2.internal 2>&1 > /dev/null"
155
- end
156
- @cloud.run_command_on(str, @cloud.master)
157
- end
158
- end
159
- def clear_master_ssl_certs
160
- str = returning String.new do |s|
161
- s << "puppetca --clean master.compute-1.internal 2>&1 > /dev/null;"
162
- s << "puppetca --clean master.ec2.internal 2>&1 > /dev/null"
163
- end
164
- @cloud.run_command_on("if [ -f '/usr/bin/puppetcleaner' ]; then /usr/bin/env puppetcleaner; else #{str}; fi", @cloud.master)
165
- end
166
- def process_reconfigure!(testing=false)
167
- @cloud.run_command_on(PoolParty::Remote::RemoteInstance.puppet_runner_command, @instance) unless testing
168
- end
169
- # Tasks that need to be performed everytime we do any
170
- # remote ssh'ing into any instance
171
- def setup_runner(force=false)
172
- @cloud.prepare_for_configuration
173
- @cloud.build_and_store_new_config_file(force)
174
- end
175
- def valid?
176
- true
177
- end
178
- def error
179
- "Error in installation"
180
- end
181
- # Gather all the tasks into one string
182
- def install_string
183
- [default_install_tasks, last_install_tasks].flatten.each do |task|
184
- case task.class
185
- when String
186
- task
187
- when Method
188
- self.send(task.to_sym)
189
- end
190
- end.nice_runnable
191
- end
192
- def last_install_tasks
193
- []
194
- end
195
- def configure_string
196
- [default_configure_tasks, last_configure_tasks].flatten.each do |task|
197
- case task.class
198
- when String
199
- task
200
- when Method
201
- self.send(task.to_sym)
202
- end
203
- end.nice_runnable
204
- end
205
- def last_configure_tasks
206
- []
207
- end
208
- # Tasks with default tasks
209
- # These are run on all the provisioners, master or slave
210
- def default_install_tasks
211
- [
212
- "#!/usr/bin/env sh",
213
- upgrade_system,
214
- fix_rubygems,
215
- make_logger_directory,
216
- install_puppet,
217
- custom_install_tasks
218
- ] << install_tasks
219
- end
220
- # Tasks with default configuration tasks
221
- # This is run on the provisioner, regardless
222
- def default_configure_tasks
223
- [
224
- custom_configure_tasks
225
- ] << configure_tasks
226
- end
227
- # Build a list of the tasks to run on the instance
228
- def install_tasks(a=[])
229
- @install_task ||= a
230
- end
231
- def configure_tasks(a=[])
232
- @configure_tasks ||= a
233
- end
234
- # Custom installation tasks
235
- # Allow the remoter bases to attach their own tasks on the
236
- # installation process
237
- def custom_install_tasks
238
- @cloud.custom_install_tasks_for(@instance) || []
239
- end
240
- # Custom configure tasks
241
- # Allows the remoter bases to attach their own
242
- # custom configuration tasks to the configuration process
243
- def custom_configure_tasks
244
- @cloud.custom_configure_tasks_for(@instance) || []
245
- end
246
-
247
- # Get the packages associated with each os
248
- def puppet_packages
249
- case @os
250
- when :fedora
251
- "puppet-server puppet factor"
252
- else
253
- "puppet puppetmaster"
254
- end
255
- end
256
- # Package installers for general *nix operating systems
257
- def self.installers
258
- @installers ||= {
259
- :ubuntu => "aptitude install -y",
260
- :fedora => "yum install",
261
- :gentoo => "emerge"
262
- }
263
- end
264
- # Convenience method to grab the installer
265
- def installer_for(names=[])
266
- packages = names.is_a?(Array) ? names.join(" ") : names
267
- "#{self.class.installers[@os]} #{packages}"
268
- end
269
-
270
- # Install from the class-level
271
- def self.install(instance, cl=self)
272
- new(instance, cl).install
273
- end
274
-
275
- def self.configure(instance, cl=self)
276
- new(instance, cl).configure
277
- end
278
-
279
- # Template directory from the provisioner base
280
- def template_directory
281
- File.join(File.dirname(__FILE__), "..", "templates")
282
- end
283
-
284
- def fix_rubygems
285
- <<-EOE
286
- #{installer_for("ruby rubygems")}
287
- gem update --system # Force rubygems update
288
- echo '#{open(::File.join(template_directory, "gem")).read}' > /usr/bin/gem
289
- EOE
290
- end
291
-
292
- def create_local_node
293
- str = <<-EOS
294
- node default {
295
- include poolparty
296
- }
297
- EOS
298
- @cloud.list_of_running_instances.each do |ri|
299
- str << <<-EOS
300
- node "#{ri.name}" {}
301
- EOS
302
- end
303
- "echo '#{str}' > /etc/puppet/manifests/nodes/nodes.pp"
304
- end
305
-
306
- def upgrade_system
307
- case @os
308
- when :ubuntu
309
- "
310
- if grep -q 'http://mirrors.kernel.org/ubuntu hardy main universe' /etc/apt/sources.list
311
- then
312
- echo 'Updated already'
313
- else
314
- touch /etc/apt/sources.list
315
- echo 'deb http://mirrors.kernel.org/ubuntu hardy main universe' >> /etc/apt/sources.list
316
- aptitude update -y #{unix_hide_string} <<heredoc
317
- Y
318
-
319
- heredoc
320
- fi
321
- "
322
- else
323
- "# No system upgrade needed"
324
- end
325
- end
326
-
327
- def install_puppet
328
- "#{installer_for( puppet_packages )}"
329
- end
330
-
331
- def make_logger_directory
332
- "mkdir -p /var/log/poolparty"
333
- end
334
-
335
- def create_poolparty_manifest
336
- <<-EOS
337
- cp #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes
338
- EOS
339
- end
340
- end
341
- end
342
- end
343
- ## Load the provisioners
344
- Dir[File.dirname(__FILE__) + "/provisioners/*.rb"].each do |file|
345
- require file
346
- end
@@ -1,205 +0,0 @@
1
- module PoolParty
2
- module Provisioner
3
- class Master < ProvisionerBase
4
-
5
- def initialize(cl=self, os=:ubuntu)
6
- raise MasterException.new(:no_ip) unless cl.master && cl.master.ip
7
- super(cl.master, cl, os)
8
- @master_ip = cl.master.ip
9
- end
10
-
11
- def valid?
12
- !(@cloud.nil? || @cloud.master.nil?)
13
- end
14
-
15
- def error
16
- raise RemoteException.new(:could_not_install, "Your cloud does not have a master")
17
- end
18
-
19
- def install_tasks
20
- [
21
- create_local_hosts_entry,
22
- setup_basic_structure,
23
- setup_configs,
24
- setup_fileserver,
25
- setup_autosigning,
26
- install_poolparty,
27
- setup_poolparty,
28
- restart_puppetmaster,
29
- run_first_time,
30
- create_local_node,
31
- ] << configure_tasks
32
- end
33
-
34
- def configure_tasks
35
- [
36
- create_local_node,
37
- move_templates,
38
- create_poolparty_manifest,
39
- restart_puppetd
40
- ]
41
- end
42
-
43
- # If the master is not in the hosts file, then add it to the hosts file
44
- def create_local_hosts_entry
45
- <<-EOS
46
- echo "Creating local host entry"
47
- if [ -z \"$(grep -v '#' /etc/hosts | grep 'puppet')" ]; then echo '#{@master_ip} puppet master localhost' >> /etc/hosts; fi
48
- hostname master
49
- EOS
50
- end
51
-
52
- def setup_basic_structure
53
- <<-EOS
54
- echo "Creating basic structure for poolparty"
55
- mkdir -p /etc/puppet/manifests/nodes
56
- mkdir -p /etc/puppet/manifests/classes
57
- echo "import 'nodes/*.pp'" > /etc/puppet/manifests/site.pp
58
- echo "import 'classes/*.pp'" >> /etc/puppet/manifests/site.pp
59
- cp #{Base.remote_storage_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
60
- EOS
61
- end
62
-
63
- def setup_configs
64
- <<-EOS
65
- echo "Setting up configuration"
66
- echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
67
- EOS
68
- end
69
-
70
- def setup_fileserver
71
- <<-EOS
72
- echo "Setting up the master fileserver"
73
- echo "
74
- [files]
75
- path #{Base.remote_storage_path}
76
- allow *" > /etc/puppet/fileserver.conf
77
- mkdir -p /var/poolparty/facts
78
- mkdir -p /var/poolparty/files
79
- mkdir -p /etc/poolparty
80
- EOS
81
- end
82
- # Change this eventually for better security supportsetup_fileserver
83
- def setup_autosigning
84
- <<-EOS
85
- echo "Creating accessibility for the nodes"
86
- echo "*" > /etc/puppet/autosign.conf
87
- EOS
88
- end
89
-
90
- def setup_poolparty
91
- <<-EOS
92
- echo "Setting the poolparty configuration"
93
- cp #{Base.remote_storage_path}/#{Base.key_file_locations.first} "#{Base.base_config_directory}/.ppkeys"
94
- cp #{Base.remote_storage_path}/#{Base.default_specfile_name} #{Base.base_config_directory}/#{Base.default_specfile_name}
95
- EOS
96
- end
97
-
98
- def copy_ssh_app
99
- "cp #{Base.remote_storage_path}/#{@cloud.full_keypair_name} #{@cloud.remote_keypair_path}" if @cloud.remote_keypair_path != "#{Base.remote_storage_path}/#{@cloud.full_keypair_name}"
100
- end
101
-
102
- def install_poolparty
103
- <<-EOE
104
- echo "Installing poolparty"
105
- cd /var/poolparty
106
- wget http://rubyforge.org/frs/download.php/44731/logging-0.9.4.gem -O logging.gem 2>&1
107
- wget http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem -O ZenTest.gem 2>&1
108
- wget http://rubyforge.org/frs/download.php/45600/ParseTree-3.0.1.gem -O ParseTree.gem 2>&1
109
- wget http://rubyforge.org/frs/download.php/45587/ruby2ruby-1.2.0.gem -O ruby2ruby.gem 2>&1
110
- wget http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem -O activesupport.gem 2>&1
111
- wget http://rubyforge.org/frs/download.php/18366/xml-simple-1.0.11.gem -O xml-simple.gem 2>&1
112
- wget http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem -O RubyInline.gem 2>&1
113
- wget http://rubyforge.org/frs/download.php/42580/flexmock-0.8.3.gem -O flexmock.gem 2>&1
114
- wget http://rubyforge.org/frs/download.php/45685/hoe-1.8.2.gem -O hoe.gem 2>&1
115
- wget http://rubyforge.org/frs/download.php/18698/lockfile-1.4.3.gem -O lockfile.gem 2>&1
116
- wget http://rubyforge.org/frs/download.php/45546/rubyforge-1.0.1.gem -O rubyforge.gem 2>&1
117
- wget http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem -O rake.gem 2>&1
118
- wget http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem -O sexp_processor.gem 2>&1
119
- wget http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true -O poolparty.gem 2>&1
120
- # wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon-ec2.gem 2>&1
121
-
122
- #{
123
- %w(rake lockfile rubyforge hoe ZenTest sexp_processor flexmock logging activesupport
124
- RubyInline ParseTree ruby2ruby xml-simple poolparty).map do |dep|
125
- "gem install --ignore-dependencies -y --no-ri --no-rdoc #{dep}.gem #{unix_hide_string}"
126
- end.join("\n")
127
- }
128
- EOE
129
- end
130
-
131
- # ps aux | grep puppetmasterd | awk '{print $2}' | xargs kill
132
- # /etc/init.d/puppetmaster stop; rm -rf /etc/puppet/ssl; /etc/init.d/puppetmaster start
133
- def restart_puppetmaster
134
- <<-EOS
135
- echo "(Re)starting poolparty"
136
- . /etc/profile
137
- # /etc/init.d/puppetmaster stop #{unix_hide_string}
138
- ps aux | grep puppetmaster | awk '{print $2}' | xargs kill;rm -rf /etc/puppet/ssl;puppetmasterd --verbose;/etc/init.d/puppetmaster start
139
- EOS
140
- end
141
-
142
- def run_first_time
143
- <<-EOE
144
- echo "Running first time run"
145
- cp #{Base.remote_storage_path}/#{Base.template_directory}/puppetrerun /usr/bin/puppetrerun
146
- cp #{Base.remote_storage_path}/#{Base.template_directory}/puppetrunner /usr/bin/puppetrunner
147
- chmod +x /usr/bin/puppetrerun
148
- chmod +x /usr/bin/puppetrunner
149
- EOE
150
- end
151
-
152
- # TODO:
153
- # Consider this method in the manifest
154
- def create_local_node
155
- str = <<-EOS
156
- node default {
157
- include poolparty
158
- }
159
- EOS
160
- @cloud.list_of_running_instances.each do |ri|
161
- str << <<-EOS
162
- node "#{ri.name}" inherits default {}
163
- EOS
164
- end
165
- "echo '#{str}' > #{Base.manifest_path}/nodes/nodes.pp"
166
- end
167
-
168
- def move_templates
169
- <<-EOS
170
- echo "Moving templates into place"
171
- mkdir -p #{Base.template_path}
172
- cp -R #{Base.remote_storage_path}/#{Base.template_directory}/* #{Base.template_path}
173
- EOS
174
- end
175
-
176
- def create_poolparty_manifest
177
- <<-EOS
178
- echo "Creating the manifest"
179
- cp #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes/poolparty.pp
180
- #{copy_ssh_app}
181
- EOS
182
- end
183
-
184
- def clean_master_certs
185
- str = returning Array.new do |s|
186
- s << "puppetca --clean master.compute-1.internal 2>&1 > /dev/null"
187
- s << "puppetca --clean master.ec2.internal 2>&1 > /dev/null"
188
- end.join(";")
189
- "if [ -f '/usr/bin/puppetcleaner' ]; then /usr/bin/env puppetcleaner; else #{str}; fi"
190
- end
191
-
192
- def restart_puppetd
193
- <<-EOS
194
- echo "Running puppet manifest"
195
- /usr/bin/puppetrunner
196
- EOS
197
- end
198
- def last_install_tasks
199
- [
200
- "/usr/bin/puppetrerun"
201
- ]
202
- end
203
- end
204
- end
205
- end
@@ -1,64 +0,0 @@
1
- module PoolParty
2
- module Provisioner
3
- class Slave < ProvisionerBase
4
-
5
- def install_tasks
6
- [
7
- setup_poolparty,
8
- setup_puppet,
9
- setup_configs,
10
- ] << configure_tasks
11
- end
12
-
13
- def configure_tasks
14
- [
15
- start_puppet
16
- ]
17
- end
18
-
19
- def setup_poolparty
20
- <<-EOE
21
- echo "Running first time run"
22
- cp #{Base.remote_storage_path}/#{Base.template_directory}/puppetrunner /usr/bin/puppetrunner
23
- chmod +x /usr/bin/puppetrunner
24
- EOE
25
- end
26
-
27
- def setup_puppet
28
- <<-EOE
29
- if [ -z "$(grep -v '#' /etc/hosts | grep 'master')" ]; then echo "#{master_ip} puppet master" >> /etc/hosts; else echo "host already set"; fi
30
- cp #{Base.remote_storage_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
31
- EOE
32
- end
33
-
34
- def setup_configs
35
- <<-EOS
36
- echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
37
- /etc/init.d/puppetmaster stop #{unix_hide_string}
38
- rm -rf /etc/puppet/ssl
39
- # /usr/bin/puppetrerun
40
- EOS
41
- end
42
-
43
- # /etc/init.d/puppetmasterd stop
44
- # puppetd --listen --fqdn #{@instance.name}
45
- def start_puppet
46
- <<-EOS
47
- /bin/sh /usr/bin/puppetrunner
48
- EOS
49
- end
50
-
51
- def last_install_tasks
52
- [
53
- "rm -rf /etc/puppet/ssl",
54
- "/usr/bin/puppetrerun"
55
- ]
56
- end
57
-
58
- def master_ip
59
- @cloud.master.ip
60
- end
61
-
62
- end
63
- end
64
- end