lobot 2.0.0pre → 2.1.0

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 (297) hide show
  1. data/.gitignore +7 -10
  2. data/.gitmodules +1 -1
  3. data/.pairs +15 -0
  4. data/.rvmrc +1 -1
  5. data/.travis.yml +5 -0
  6. data/Gemfile +2 -2
  7. data/LICENSE.txt +1 -1
  8. data/README.md +67 -29
  9. data/Rakefile +11 -6
  10. data/Vagrantfile +8 -5
  11. data/bin/lobot +2 -4
  12. data/chef/cookbooks/pivotal_ci/attributes/jenkins.rb +1 -0
  13. data/chef/cookbooks/pivotal_ci/files/default/tests/minitest/default_test.rb +40 -2
  14. data/chef/cookbooks/pivotal_ci/recipes/id_rsa.rb +5 -0
  15. data/chef/cookbooks/pivotal_ci/recipes/jenkins_config.rb +5 -2
  16. data/chef/cookbooks/pivotal_ci/recipes/limited_travis_ci_environment.rb +4 -0
  17. data/chef/cookbooks/pivotal_ci/templates/default/jenkins-job-config.xml.erb +8 -6
  18. data/chef/cookbooks/pivotal_ci/test/kitchen/cookbooks/pivotal_ci_test/attributes/default.rb +0 -1
  19. data/chef/cookbooks/pivotal_ci/test/kitchen/cookbooks/pivotal_ci_test/recipes/bootstrap.rb +41 -0
  20. data/chef/cookbooks/pivotal_ci/test/kitchen/cookbooks/pivotal_ci_test/recipes/default.rb +1 -41
  21. data/chef/travis-cookbooks/ci_environment/apt/recipes/default.rb +8 -7
  22. data/chef/travis-cookbooks/ci_environment/bazaar/recipes/default.rb +1 -1
  23. data/chef/travis-cookbooks/ci_environment/cassandra/attributes/default.rb +6 -3
  24. data/chef/travis-cookbooks/ci_environment/cassandra/recipes/datastax.rb +1 -1
  25. data/chef/travis-cookbooks/ci_environment/cassandra/recipes/package.rb +1 -1
  26. data/chef/travis-cookbooks/ci_environment/cassandra/recipes/tarball.rb +6 -2
  27. data/chef/travis-cookbooks/ci_environment/cassandra/templates/default/cassandra.init.erb +58 -131
  28. data/chef/travis-cookbooks/ci_environment/chromium/recipes/default.rb +1 -1
  29. data/chef/travis-cookbooks/ci_environment/clang/attributes/tarball.rb +2 -7
  30. data/chef/travis-cookbooks/ci_environment/clang/recipes/default.rb +1 -1
  31. data/chef/travis-cookbooks/ci_environment/clang/recipes/tarball.rb +2 -4
  32. data/chef/travis-cookbooks/ci_environment/couchdb/recipes/default.rb +1 -1
  33. data/chef/travis-cookbooks/ci_environment/couchdb/recipes/ppa.rb +1 -1
  34. data/chef/travis-cookbooks/ci_environment/couchdb/recipes/ubuntu-12.04.rb +1 -1
  35. data/chef/travis-cookbooks/ci_environment/couchdb/recipes/ubuntu1110_ppa.rb +1 -1
  36. data/chef/travis-cookbooks/ci_environment/couchdb/recipes/ubuntu1204_ppa.rb +1 -1
  37. data/chef/travis-cookbooks/ci_environment/doxygen/recipes/default.rb +24 -0
  38. data/chef/travis-cookbooks/ci_environment/elasticsearch/attributes/default.rb +4 -1
  39. data/chef/travis-cookbooks/ci_environment/elasticsearch/recipes/default.rb +8 -5
  40. data/chef/travis-cookbooks/ci_environment/emacs/recipes/nox.rb +1 -1
  41. data/chef/travis-cookbooks/ci_environment/firefox/recipes/default.rb +1 -1
  42. data/chef/travis-cookbooks/ci_environment/git/recipes/default.rb +1 -1
  43. data/chef/travis-cookbooks/ci_environment/git/recipes/ppa.rb +1 -1
  44. data/chef/travis-cookbooks/ci_environment/golang/attributes/default.rb +3 -3
  45. data/chef/travis-cookbooks/ci_environment/gradle/attributes/tarball.rb +1 -1
  46. data/chef/travis-cookbooks/ci_environment/haskell/recipes/default.rb +1 -1
  47. data/chef/travis-cookbooks/ci_environment/haskell/recipes/ghc_package.rb +1 -1
  48. data/chef/travis-cookbooks/ci_environment/haskell/recipes/ghc_source.rb +1 -1
  49. data/chef/travis-cookbooks/ci_environment/haskell/recipes/platform_package.rb +1 -1
  50. data/chef/travis-cookbooks/ci_environment/haskell/recipes/platform_ppa.rb +1 -1
  51. data/chef/travis-cookbooks/ci_environment/haskell/recipes/platform_source.rb +1 -1
  52. data/chef/travis-cookbooks/ci_environment/haskell/recipes/source.rb +1 -1
  53. data/chef/travis-cookbooks/ci_environment/hbase/recipes/cdh4.rb +1 -1
  54. data/chef/travis-cookbooks/ci_environment/java/attributes/default.rb +4 -2
  55. data/chef/travis-cookbooks/ci_environment/java/recipes/default.rb +1 -1
  56. data/chef/travis-cookbooks/ci_environment/java/recipes/oraclejdk7.rb +6 -1
  57. data/chef/travis-cookbooks/ci_environment/kerl/attributes/source.rb +1 -1
  58. data/chef/travis-cookbooks/ci_environment/kerl/files/default/erlang.cookie +1 -0
  59. data/chef/travis-cookbooks/ci_environment/kerl/recipes/source.rb +8 -0
  60. data/chef/travis-cookbooks/ci_environment/kestrel/recipes/tarball.rb +1 -1
  61. data/chef/travis-cookbooks/ci_environment/leiningen/attributes/default.rb +1 -1
  62. data/chef/travis-cookbooks/ci_environment/leiningen/recipes/default.rb +1 -1
  63. data/chef/travis-cookbooks/ci_environment/leiningen/recipes/lein1x.rb +1 -1
  64. data/chef/travis-cookbooks/ci_environment/leiningen/recipes/lein2x.rb +1 -1
  65. data/chef/travis-cookbooks/ci_environment/libffi/recipes/default.rb +1 -1
  66. data/chef/travis-cookbooks/ci_environment/libgdbm/recipes/default.rb +1 -1
  67. data/chef/travis-cookbooks/ci_environment/libncurses/recipes/default.rb +1 -1
  68. data/chef/travis-cookbooks/ci_environment/libossp-uuid/recipes/default.rb +1 -1
  69. data/chef/travis-cookbooks/ci_environment/libreadline/recipes/default.rb +1 -1
  70. data/chef/travis-cookbooks/ci_environment/libssl/recipes/098.rb +1 -1
  71. data/chef/travis-cookbooks/ci_environment/libssl/recipes/default.rb +1 -1
  72. data/chef/travis-cookbooks/ci_environment/libxml/recipes/default.rb +1 -1
  73. data/chef/travis-cookbooks/ci_environment/lighttpd/recipes/default.rb +1 -1
  74. data/chef/travis-cookbooks/ci_environment/maven3/recipes/default.rb +5 -2
  75. data/chef/travis-cookbooks/ci_environment/maven3/recipes/package.rb +1 -1
  76. data/chef/travis-cookbooks/ci_environment/maven3/recipes/ppa.rb +1 -1
  77. data/chef/travis-cookbooks/ci_environment/maven3/recipes/tarball.rb +1 -1
  78. data/chef/travis-cookbooks/ci_environment/memcached/attributes/default.rb +1 -1
  79. data/chef/travis-cookbooks/ci_environment/memcached/attributes/ppa.rb +1 -1
  80. data/chef/travis-cookbooks/ci_environment/memcached/recipes/default.rb +1 -1
  81. data/chef/travis-cookbooks/ci_environment/memcached/recipes/ppa.rb +1 -1
  82. data/chef/travis-cookbooks/ci_environment/mercurial/recipes/default.rb +1 -1
  83. data/chef/travis-cookbooks/ci_environment/mercurial/recipes/ppa.rb +36 -0
  84. data/chef/travis-cookbooks/ci_environment/mongodb/attributes/mongodb.rb +1 -1
  85. data/chef/travis-cookbooks/ci_environment/mongodb/files/default/mongodb.sysvinit.sh +1 -1
  86. data/chef/travis-cookbooks/ci_environment/mongodb/recipes/apt.rb +5 -5
  87. data/chef/travis-cookbooks/ci_environment/mongodb/recipes/server.rb +5 -2
  88. data/chef/travis-cookbooks/ci_environment/mysql/attributes/default.rb +1 -3
  89. data/chef/travis-cookbooks/ci_environment/mysql/recipes/server_on_ramfs.rb +6 -1
  90. data/chef/travis-cookbooks/ci_environment/mysql/templates/default/my.cnf.erb +0 -2
  91. data/chef/travis-cookbooks/ci_environment/mysql/templates/default/ramfs/my.cnf.erb +0 -2
  92. data/chef/travis-cookbooks/ci_environment/neo4j-server/attributes/tarball.rb +13 -2
  93. data/chef/travis-cookbooks/ci_environment/neo4j-server/recipes/tarball.rb +26 -2
  94. data/chef/travis-cookbooks/ci_environment/networking_basic/recipes/default.rb +4 -1
  95. data/chef/travis-cookbooks/ci_environment/nodejs/attributes/multi.rb +3 -3
  96. data/chef/travis-cookbooks/ci_environment/nodejs/recipes/multi.rb +1 -1
  97. data/chef/travis-cookbooks/ci_environment/openssh/recipes/default.rb +1 -1
  98. data/chef/travis-cookbooks/ci_environment/perlbrew/attributes/multi.rb +1 -1
  99. data/chef/travis-cookbooks/ci_environment/phantomjs/attributes/default.rb +2 -2
  100. data/chef/travis-cookbooks/ci_environment/phantomjs/metadata.rb +3 -0
  101. data/chef/travis-cookbooks/ci_environment/phantomjs/recipes/default.rb +3 -1
  102. data/chef/travis-cookbooks/ci_environment/phantomjs/recipes/tarball.rb +3 -2
  103. data/chef/travis-cookbooks/ci_environment/php/attributes/default.rb +40 -2
  104. data/chef/travis-cookbooks/ci_environment/php/providers/pecl.rb +73 -0
  105. data/chef/travis-cookbooks/ci_environment/php/recipes/extensions.rb +25 -0
  106. data/chef/travis-cookbooks/ci_environment/php/recipes/multi.rb +5 -4
  107. data/chef/travis-cookbooks/ci_environment/php/resources/pecl.rb +10 -0
  108. data/chef/travis-cookbooks/ci_environment/phpbuild/attributes/default.rb +2 -2
  109. data/chef/travis-cookbooks/ci_environment/phpbuild/files/default/after-install.d/phpunit.sh +58 -0
  110. data/chef/travis-cookbooks/ci_environment/phpbuild/files/default/definitions/5.2.17 +3 -1
  111. data/chef/travis-cookbooks/ci_environment/phpbuild/files/default/definitions/5.3.3 +2 -1
  112. data/chef/travis-cookbooks/ci_environment/phpbuild/providers/build.rb +1 -1
  113. data/chef/travis-cookbooks/ci_environment/phpbuild/recipes/default.rb +8 -10
  114. data/chef/travis-cookbooks/ci_environment/phpbuild/templates/default/default_configure_options.erb +4 -0
  115. data/chef/travis-cookbooks/ci_environment/phpenv/attributes/default.rb +6 -0
  116. data/chef/travis-cookbooks/ci_environment/phpenv/recipes/default.rb +11 -7
  117. data/chef/travis-cookbooks/ci_environment/postgresql/recipes/server_on_ramfs.rb +2 -2
  118. data/chef/travis-cookbooks/ci_environment/python/attributes/default.rb +2 -2
  119. data/chef/travis-cookbooks/ci_environment/python/recipes/multi.rb +10 -3
  120. data/chef/travis-cookbooks/ci_environment/rabbitmq/attributes/default.rb +3 -0
  121. data/chef/travis-cookbooks/ci_environment/rabbitmq/recipes/default.rb +6 -2
  122. data/chef/travis-cookbooks/ci_environment/ragel/recipes/custom.rb +1 -1
  123. data/chef/travis-cookbooks/ci_environment/ragel/recipes/default.rb +1 -1
  124. data/chef/travis-cookbooks/ci_environment/redis/attributes/default.rb +3 -0
  125. data/chef/travis-cookbooks/ci_environment/redis/recipes/default.rb +6 -3
  126. data/chef/travis-cookbooks/ci_environment/redis/recipes/ppa.rb +1 -1
  127. data/chef/travis-cookbooks/ci_environment/riak/attributes/default.rb +1 -0
  128. data/chef/travis-cookbooks/ci_environment/riak/attributes/package.rb +3 -3
  129. data/chef/travis-cookbooks/{messaging_broker/openssl/recipes/default.rb → ci_environment/riak/attributes/service.rb} +4 -3
  130. data/chef/travis-cookbooks/ci_environment/riak/recipes/config.rb +2 -2
  131. data/chef/travis-cookbooks/ci_environment/riak/recipes/default.rb +12 -5
  132. data/chef/travis-cookbooks/ci_environment/rvm/attributes/default.rb +1 -1
  133. data/chef/travis-cookbooks/ci_environment/rvm/attributes/multi.rb +2 -0
  134. data/chef/travis-cookbooks/ci_environment/rvm/files/default/gemsets/global.gems +1 -1
  135. data/chef/travis-cookbooks/ci_environment/rvm/files/default/gemsets/jruby/global.gems +1 -1
  136. data/chef/travis-cookbooks/ci_environment/rvm/files/default/gemsets/ruby/2.0.0/global.gems +2 -0
  137. data/chef/travis-cookbooks/ci_environment/rvm/files/default/gemsets/ruby/head/global.gems +2 -0
  138. data/chef/travis-cookbooks/ci_environment/rvm/recipes/default.rb +23 -1
  139. data/chef/travis-cookbooks/ci_environment/rvm/recipes/multi.rb +2 -2
  140. data/chef/travis-cookbooks/ci_environment/rvm/templates/default/bundler_config.yml.erb +2 -0
  141. data/chef/travis-cookbooks/ci_environment/sbt/CHANGELOG.md +20 -0
  142. data/chef/travis-cookbooks/ci_environment/sbt/LICENSE +201 -0
  143. data/chef/travis-cookbooks/ci_environment/sbt/README.md +78 -2
  144. data/chef/travis-cookbooks/ci_environment/sbt/attributes/default.rb +36 -10
  145. data/chef/travis-cookbooks/ci_environment/sbt/metadata.json +27 -17
  146. data/chef/travis-cookbooks/ci_environment/sbt/metadata.rb +13 -6
  147. data/chef/travis-cookbooks/ci_environment/sbt/recipes/default.rb +101 -51
  148. data/chef/travis-cookbooks/ci_environment/sbt/templates/default/jvmopts.erb +7 -0
  149. data/chef/travis-cookbooks/ci_environment/sbt/templates/default/sbtopts.erb +54 -0
  150. data/chef/travis-cookbooks/ci_environment/sphinx/attributes/default.rb +2 -2
  151. data/chef/travis-cookbooks/ci_environment/sphinx/metadata.rb +4 -4
  152. data/chef/travis-cookbooks/ci_environment/sphinx/recipes/all.rb +1 -1
  153. data/chef/travis-cookbooks/ci_environment/sphinx/recipes/default.rb +1 -1
  154. data/chef/travis-cookbooks/{messaging_broker/build-essential/recipes/default.rb → ci_environment/sqlite/recipes/ppa.rb} +13 -24
  155. data/chef/travis-cookbooks/ci_environment/subversion/recipes/default.rb +1 -1
  156. data/chef/travis-cookbooks/ci_environment/sweeper/recipes/default.rb +1 -1
  157. data/chef/travis-cookbooks/ci_environment/travis_build_environment/attributes/default.rb +2 -0
  158. data/chef/travis-cookbooks/ci_environment/travis_build_environment/recipes/ci_user.rb +2 -2
  159. data/chef/travis-cookbooks/ci_environment/travis_build_environment/recipes/default.rb +1 -3
  160. data/chef/travis-cookbooks/ci_environment/travis_build_environment/recipes/root.rb +5 -1
  161. data/chef/travis-cookbooks/ci_environment/travis_build_environment/templates/default/ci_user/{dot_bashrc.sh → dot_bashrc.sh.erb} +0 -4
  162. data/chef/travis-cookbooks/ci_environment/unarchivers/recipes/default.rb +1 -1
  163. data/chef/travis-cookbooks/ci_environment/xserver/metadata.rb +3 -0
  164. data/chef/travis-cookbooks/ci_environment/xserver/recipes/default.rb +1 -1
  165. data/chef/travis-cookbooks/ci_environment/zeromq/recipes/default.rb +6 -23
  166. data/chef/travis-cookbooks/ci_environment/zeromq/recipes/{20x.rb → ppa.rb} +14 -14
  167. data/chef/travis-cookbooks/ci_environment/zookeeper/recipes/cdh4.rb +1 -1
  168. data/chef/travis-cookbooks/worker_host/java/metadata.rb +1 -1
  169. data/chef/travis-cookbooks/worker_host/java/recipes/openjdk.rb +6 -0
  170. data/chef/travis-cookbooks/worker_host/jruby/attributes/default.rb +1 -1
  171. data/chef/travis-cookbooks/worker_host/jruby/metadata.rb +1 -1
  172. data/chef/travis-cookbooks/worker_host/jruby/recipes/default.rb +1 -0
  173. data/chef/travis-cookbooks/worker_host/monit/recipes/default.rb +21 -17
  174. data/chef/travis-cookbooks/worker_host/networking_basic/metadata.rb +1 -1
  175. data/chef/travis-cookbooks/worker_host/networking_basic/recipes/default.rb +0 -6
  176. data/chef/travis-cookbooks/worker_host/ntp/.gitignore +1 -0
  177. data/chef/travis-cookbooks/worker_host/ntp/.travis.yml +6 -0
  178. data/chef/travis-cookbooks/worker_host/ntp/CHANGELOG.md +35 -0
  179. data/chef/travis-cookbooks/worker_host/ntp/CONTRIBUTING +29 -0
  180. data/chef/travis-cookbooks/worker_host/ntp/LICENSE +201 -0
  181. data/chef/travis-cookbooks/worker_host/ntp/README.md +163 -0
  182. data/chef/travis-cookbooks/worker_host/ntp/Rakefile +19 -0
  183. data/chef/travis-cookbooks/worker_host/ntp/TESTING.md +213 -0
  184. data/chef/travis-cookbooks/worker_host/ntp/attributes/default.rb +54 -0
  185. data/chef/travis-cookbooks/{messaging_broker/rabbitmq/resources/vhost.rb → worker_host/ntp/attributes/ntpdate.rb} +6 -7
  186. data/chef/travis-cookbooks/worker_host/ntp/chefignore +19 -0
  187. data/chef/travis-cookbooks/worker_host/ntp/files/default/ntp.leapseconds +222 -0
  188. data/chef/travis-cookbooks/worker_host/ntp/metadata.json +117 -0
  189. data/chef/travis-cookbooks/worker_host/ntp/metadata.rb +45 -0
  190. data/chef/travis-cookbooks/worker_host/ntp/recipes/default.rb +50 -0
  191. data/chef/travis-cookbooks/worker_host/ntp/recipes/disable.rb +22 -0
  192. data/chef/travis-cookbooks/worker_host/ntp/recipes/ntpdate.rb +36 -0
  193. data/chef/travis-cookbooks/{messaging_broker/openssl/libraries/secure_password.rb → worker_host/ntp/recipes/undo.rb} +17 -18
  194. data/chef/travis-cookbooks/worker_host/ntp/templates/default/ntp.conf.erb +55 -0
  195. data/chef/travis-cookbooks/worker_host/ntp/templates/default/ntpdate.erb +14 -0
  196. data/chef/travis-cookbooks/worker_host/rvm/recipes/multi.rb +1 -1
  197. data/chef/travis-cookbooks/worker_host/travis_worker/attributes/default.rb +10 -3
  198. data/chef/travis-cookbooks/worker_host/travis_worker/files/default/signal_wrapper.rb +22 -0
  199. data/chef/travis-cookbooks/worker_host/travis_worker/metadata.rb +2 -2
  200. data/chef/travis-cookbooks/worker_host/travis_worker/recipes/bluebox.rb +97 -0
  201. data/chef/travis-cookbooks/worker_host/travis_worker/recipes/default.rb +25 -15
  202. data/chef/travis-cookbooks/worker_host/travis_worker/templates/default/sv-travis-worker-run.erb +1 -1
  203. data/chef/travis-cookbooks/worker_host/travis_worker/templates/default/worker-bluebox.yml.erb +21 -0
  204. data/chef/travis-cookbooks/worker_host/travis_worker/templates/default/worker.yml.erb +0 -4
  205. data/chef/travis-cookbooks/worker_host/travis_worker_collectd/metadata.rb +1 -0
  206. data/chef/travis-cookbooks/worker_host/travis_worker_collectd/recipes/bluebox.rb +15 -0
  207. data/chef/travis-cookbooks/worker_host/travis_worker_collectd/recipes/default.rb +1 -0
  208. data/chef/travis-cookbooks/worker_host/users/recipes/default.rb +5 -0
  209. data/cookbooks/.gitkeep +3 -0
  210. data/lib/lobot.rb +8 -4
  211. data/lib/lobot/amazon.rb +33 -19
  212. data/lib/lobot/cli.rb +70 -46
  213. data/lib/lobot/config.rb +151 -19
  214. data/lib/lobot/configuration_wizard.rb +117 -0
  215. data/lib/lobot/keychain.rb +36 -0
  216. data/lib/lobot/password.rb +13 -0
  217. data/lib/lobot/sobo.rb +57 -13
  218. data/lib/lobot/templates/default_rails_build_script.sh +13 -0
  219. data/lib/lobot/version.rb +2 -2
  220. data/lobot.gemspec +4 -5
  221. data/script/bootstrap_server.sh +1 -1
  222. data/script/ci_build.sh +13 -0
  223. data/spec/assets/test_cert.crt +18 -0
  224. data/spec/fixtures/ssh_keys/vagrant_test_key +27 -0
  225. data/spec/fixtures/ssh_keys/vagrant_test_key.pub +1 -0
  226. data/spec/lib/lobot/amazon_spec.rb +80 -39
  227. data/spec/lib/lobot/cli_spec.rb +223 -154
  228. data/spec/lib/lobot/config_spec.rb +207 -5
  229. data/spec/lib/lobot/configuration_wizard_spec.rb +347 -0
  230. data/spec/lib/lobot/keychain_spec.rb +33 -0
  231. data/spec/lib/lobot/password_spec.rb +15 -0
  232. data/spec/spec_helper.rb +19 -1
  233. data/templates/Gemfile-remote +4 -0
  234. metadata +83 -100
  235. data/chef/travis-cookbooks/ci_environment/rvm/files/default/gemsets/ruby/1.8.6/global.gems +0 -2
  236. data/chef/travis-cookbooks/ci_environment/travis_build_environment/files/default/root/dot_bashrc.sh +0 -86
  237. data/chef/travis-cookbooks/ci_environment/zeromq/attributes/default.rb +0 -7
  238. data/chef/travis-cookbooks/messaging_broker/build-essential/README.md +0 -24
  239. data/chef/travis-cookbooks/messaging_broker/build-essential/metadata.rb +0 -10
  240. data/chef/travis-cookbooks/messaging_broker/emacs/metadata.rb +0 -11
  241. data/chef/travis-cookbooks/messaging_broker/emacs/recipes/default.rb +0 -21
  242. data/chef/travis-cookbooks/messaging_broker/erlang/attributes/default.rb +0 -1
  243. data/chef/travis-cookbooks/messaging_broker/erlang/metadata.rb +0 -11
  244. data/chef/travis-cookbooks/messaging_broker/erlang/recipes/default.rb +0 -27
  245. data/chef/travis-cookbooks/messaging_broker/git/README.rdoc +0 -37
  246. data/chef/travis-cookbooks/messaging_broker/git/metadata.rb +0 -16
  247. data/chef/travis-cookbooks/messaging_broker/git/recipes/default.rb +0 -24
  248. data/chef/travis-cookbooks/messaging_broker/git/recipes/server.rb +0 -34
  249. data/chef/travis-cookbooks/messaging_broker/git/templates/default/sv-git-daemon-log-run.erb +0 -2
  250. data/chef/travis-cookbooks/messaging_broker/git/templates/default/sv-git-daemon-run.erb +0 -3
  251. data/chef/travis-cookbooks/messaging_broker/haproxy/README.md +0 -79
  252. data/chef/travis-cookbooks/messaging_broker/haproxy/attributes/default.rb +0 -22
  253. data/chef/travis-cookbooks/messaging_broker/haproxy/metadata.rb +0 -13
  254. data/chef/travis-cookbooks/messaging_broker/haproxy/recipes/app_lb.rb +0 -50
  255. data/chef/travis-cookbooks/messaging_broker/haproxy/recipes/default.rb +0 -42
  256. data/chef/travis-cookbooks/messaging_broker/haproxy/templates/default/haproxy-app_lb.cfg.erb +0 -34
  257. data/chef/travis-cookbooks/messaging_broker/haproxy/templates/default/haproxy-default.erb +0 -4
  258. data/chef/travis-cookbooks/messaging_broker/haproxy/templates/default/haproxy.cfg.erb +0 -27
  259. data/chef/travis-cookbooks/messaging_broker/iptables/definitions/iptables_rule.rb +0 -35
  260. data/chef/travis-cookbooks/messaging_broker/iptables/files/default/rebuild-iptables +0 -284
  261. data/chef/travis-cookbooks/messaging_broker/iptables/metadata.rb +0 -10
  262. data/chef/travis-cookbooks/messaging_broker/iptables/recipes/default.rb +0 -50
  263. data/chef/travis-cookbooks/messaging_broker/iptables/templates/default/all_established.erb +0 -2
  264. data/chef/travis-cookbooks/messaging_broker/iptables/templates/default/all_icmp.erb +0 -2
  265. data/chef/travis-cookbooks/messaging_broker/iptables/templates/default/iptables_load.erb +0 -3
  266. data/chef/travis-cookbooks/messaging_broker/openssl/README.md +0 -37
  267. data/chef/travis-cookbooks/messaging_broker/openssl/metadata.rb +0 -8
  268. data/chef/travis-cookbooks/messaging_broker/rabbitmq/README.md +0 -86
  269. data/chef/travis-cookbooks/messaging_broker/rabbitmq/attributes/default.rb +0 -10
  270. data/chef/travis-cookbooks/messaging_broker/rabbitmq/metadata.rb +0 -63
  271. data/chef/travis-cookbooks/messaging_broker/rabbitmq/providers/user.rb +0 -66
  272. data/chef/travis-cookbooks/messaging_broker/rabbitmq/providers/vhost.rb +0 -34
  273. data/chef/travis-cookbooks/messaging_broker/rabbitmq/recipes/cluster.rb +0 -35
  274. data/chef/travis-cookbooks/messaging_broker/rabbitmq/recipes/default.rb +0 -51
  275. data/chef/travis-cookbooks/messaging_broker/rabbitmq/resources/user.rb +0 -25
  276. data/chef/travis-cookbooks/messaging_broker/rabbitmq/templates/default/doterlang.cookie.erb +0 -1
  277. data/chef/travis-cookbooks/messaging_broker/rabbitmq/templates/default/rabbitmq-env.conf.erb +0 -10
  278. data/chef/travis-cookbooks/messaging_broker/rabbitmq/templates/default/rabbitmq_cluster.config.erb +0 -5
  279. data/ci_build.sh +0 -20
  280. data/docs/ci_yml.md +0 -39
  281. data/features/ci.feature +0 -29
  282. data/features/config/secrets.yml.example +0 -4
  283. data/features/step_definitions/ci_steps.rb +0 -137
  284. data/features/support/env.rb +0 -12
  285. data/lib/generators/lobot/USAGE +0 -15
  286. data/lib/generators/lobot/config_generator.rb +0 -141
  287. data/lib/generators/lobot/install_generator.rb +0 -25
  288. data/lib/generators/lobot/templates/Capfile +0 -6
  289. data/lib/generators/lobot/templates/ci.yml +0 -22
  290. data/lib/generators/lobot/templates/ci_build.sh +0 -22
  291. data/lib/generators/lobot/templates/deploy-ci.rb +0 -7
  292. data/lib/generators/lobot/templates/soloistrc +0 -23
  293. data/lib/lobot/jenkins.rb +0 -17
  294. data/lib/lobot/railtie.rb +0 -20
  295. data/lib/lobot/recipes/ci.rb +0 -78
  296. data/lib/lobot/tasks/ci.rake +0 -93
  297. data/spec/lib/lobot/jenkins_spec.rb +0 -14
data/.gitignore CHANGED
@@ -1,11 +1,8 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- features/config/secrets.yml
6
- .idea
7
- spec/tmp
8
- spec/reports/
1
+ /tmp
9
2
  .vagrant
10
- .kitchen
11
- .env
3
+ /spec/reports
4
+ Gemfile.lock
5
+ /config
6
+ /pkg
7
+ .env*
8
+ *.log
@@ -1,3 +1,3 @@
1
1
  [submodule "chef/travis-cookbooks"]
2
2
  path = chef/travis-cookbooks
3
- url = https://github.com/pivotalexperimental/travis-cookbooks
3
+ url = https://github.com/travis-ci/travis-cookbooks.git
data/.pairs ADDED
@@ -0,0 +1,15 @@
1
+ # This file is managed by Chef!
2
+ # Override node.default["git_pairs_authors"] and node.default["git_pairs_domain"] in attributes/git_pairs.rb to modify.
3
+
4
+ pairs:
5
+ dr: Doc Ritezel; doc
6
+ mk: Matthew Kocher; mkocher
7
+ km: Ken Mayer; ken
8
+ dv: David Varvel; dvarvel
9
+ am: Alexander Murmann; Alexander
10
+
11
+ email:
12
+ prefix: pair
13
+ domain: pivotallabs.com
14
+
15
+ global: true
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm --create use ruby-1.9.3-p194@lobot
1
+ rvm --create ruby-1.9.3-p327@lobot
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 1.9.2
5
+ script: bundle exec rspec spec --tag ~slow --tag ~vagrant --tag ~osx
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
- gem "builder", "~> 3.0.0" # Bundler goes into an infinite loop looking for this dep. Feel free to remove.
3
+ #gem "builder", "~> 3.0.0" # Bundler occasionally goes into an infinite loop looking for this dep if version isn't specified.
4
4
 
5
5
  # Specify your gem's dependencies in lobot.gemspec
6
6
  gemspec
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2011 Pivotal Labs
3
+ Copyright (c) 2011, 2012 Pivotal Labs
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,9 +1,12 @@
1
- Lobot: Your Chief Administrative Aide on Cloud City
2
- ============================
1
+ # Lobot: Your Chief Administrative Aide on Cloud City
3
2
 
4
3
  ![Lobot](http://cheffiles.pivotallabs.com/lobot/logo.png)
5
4
 
6
- ### Easily create your CI server on EC2
5
+ [![Code Climate](https://codeclimate.com/github/pivotal/lobot.png)](https://codeclimate.com/github/pivotal/lobot)
6
+ [![Build Status](https://travis-ci.org/pivotal/lobot.png?branch=master)](https://travis-ci.org/pivotal/lobot)
7
+
8
+
9
+ ## Easily create your CI server on EC2
7
10
 
8
11
  Lando Calrissian relies on Lobot to keep Cloud City afloat, and now you can rely on Lobot to get your continuous integration server running in the cloud. Lobot is a gem that will help you spin-up, bootstrap, and install Jenkins CI for your Rails app on Amazon EC2.
9
12
 
@@ -13,41 +16,60 @@ Lando Calrissian relies on Lobot to keep Cloud City afloat, and now you can rely
13
16
  * The full [Travis CI](http://travis-ci.org) environment on Ubuntu 12.04
14
17
  * A Jenkins frontend for monitoring your builds
15
18
 
16
- After you add `gem "lobot"` to your Gemfile, all you'll need to do is run the following commands:
17
-
18
- [lobot configure] - COMING SOON - See Setup for now.
19
- lobot create
20
- lobot bootstrap
21
- lobot add_build BobTheBuild git@github.com:you/some_repo.git master script/ci_build.sh
22
- lobot chef
19
+ ```
20
+ Tasks:
21
+ lobot add_build <name> <repository> <branch> <command> # Adds a build to Lobot
22
+ lobot bootstrap # Configures Lobot's master node
23
+ lobot certificate # Dump the certificate
24
+ lobot chef # Uploads chef recipes and runs them
25
+ lobot config # Dumps all configuration data for Lobot
26
+ lobot create # Create a new Lobot server using EC2
27
+ lobot create_vagrant # Creates a vagrant instance
28
+ lobot destroy_ec2 # Destroys all the lobot resources on EC2
29
+ lobot help [TASK] # Describe available tasks or one specific task
30
+ lobot open # Open a browser to Lobot
31
+ lobot setup # Sets up lobot through a series of questions
32
+ lobot ssh # SSH into Lobot
33
+ lobot trust_certificate # Adds the current master's certificate to your OSX keychain
34
+ ```
23
35
 
24
36
  Read on for an explanation of what each one of these steps does.
25
37
 
26
38
  ## Install
27
39
 
28
- Add lobot to your Gemfile, in the development group:
40
+ gem install lobot
29
41
 
30
- gem "lobot", :group => :development
42
+ Lobot runs independently of your project and is not a dependency.
31
43
 
32
44
  ## Setup
33
45
 
34
- Create a config/lobot.yml file in your project:
46
+ If this is your first time running `lobot` and you do not have configuration file, yet, run:
35
47
 
36
- ---
37
- server_ssh_key: ~/.ssh/id_rsa
38
- github_ssh_key: ~/.ssh/id_rsa
39
- aws_key: <your AWS Key>
40
- aws_secret: <your AWS Secret>
41
- node_attributes:
42
- nginx:
43
- basic_auth_user: ci
44
- basic_auth_password: password
48
+ lobot setup
45
49
 
46
- See [https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key](https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key) to generate AWS key/secret.
50
+ It will ask you a series of questions that will get you up and running.
47
51
 
48
52
  ## Adjust Defaults (Optional)
49
53
 
50
- In your config/lobot.yml, there are defaults set for values that have the recommened value. For example, the instance size used for EC2 is set to "c1.medium".
54
+ If you don't like the default, Rails-centric, build script you can create your own:
55
+
56
+ ```sh
57
+ #!/bin/bash -le
58
+
59
+ source .rvmrc
60
+
61
+ # install bundler if necessary
62
+ set -e
63
+
64
+ gem install bundler --no-ri --no-rdoc && bundle install
65
+
66
+ # debugging info
67
+ echo USER=$USER && ruby --version && which ruby && which bundle
68
+
69
+ bundle exec rake spec
70
+ ```
71
+
72
+ In your config/lobot.yml, there are defaults set for recommended values. For example, the EC2 instance size is set to "c1.medium".
51
73
 
52
74
  You can save on EC2 costs by using a tool like [projectmonitor](https://github.com/pivotal/projectmonitor) or ylastic to schedule when your instances are online.
53
75
 
@@ -65,7 +87,7 @@ You can modify the chef run list by setting the `recipes` key in config/lobot.ym
65
87
 
66
88
  Because we're using the cookbooks from Travis CI, you can look through [all the recipes Travis has available](https://github.com/travis-ci/travis-cookbooks/), and add any that you need.
67
89
 
68
- ## Starting your lobot instance
90
+ ## Manually starting your lobot instance
69
91
 
70
92
  1. Launch an instance, allocate and associates an elastic IP and updates config/lobot.yml:
71
93
 
@@ -79,8 +101,15 @@ Because we're using the cookbooks from Travis CI, you can look through [all the
79
101
 
80
102
  lobot chef
81
103
 
82
- Your lobot instance should now be up and running. You will be able to access your CI server at: http://&lt;your instance address&gt;/ with the username and password you chose during configuration.
83
- For more information about Jenkins CI, see [http://jenkins-ci.org](http://jenkins-ci.org).
104
+ Your lobot instance should now be up and running. You will be able to access your CI server at: http://&lt;your instance address&gt;/ with the username and password you chose during configuration. Or, if you are on a Mac, run `lobot open`. For more information about Jenkins CI, see [http://jenkins-ci.org](http://jenkins-ci.org).
105
+
106
+ ## Custom Chef Recipes
107
+
108
+ If you need to write your own chef recipes to install your project's dependencies, you can add a cookbooks directory to
109
+ the root of your project. Make sure to delete the cookbook_paths section from your lobot.yml (to use the default values),
110
+ or add ./chef/project-cookbooks to the cookbook_paths section.
111
+
112
+ So, to have a bacon recipe, you should have cookbooks/pork/recipes/bacon.rb file in your repository.
84
113
 
85
114
  ## Troubleshooting
86
115
 
@@ -104,11 +133,20 @@ end
104
133
 
105
134
  ## Dependencies
106
135
 
107
- * fog
108
136
  * ci_reporter
109
- * thor
137
+ * fog
138
+ * godot
139
+ * haddock
110
140
  * hashie
141
+ * httpclient
111
142
  * net-ssh
143
+ * thor
144
+
145
+ ## Forking
146
+
147
+ Please be aware that Lobot uses git submodules. In order to git source Lobot in your `Gemfile`, you will need the following line:
148
+
149
+ gem "lobot", :github => "pivotal/lobot", :submodules => true
112
150
 
113
151
  ## Testing
114
152
 
data/Rakefile CHANGED
@@ -1,11 +1,16 @@
1
- require 'ci/reporter/rake/rspec'
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
2
3
  require 'rspec/core/rake_task'
3
- require 'bundler'
4
4
 
5
- Bundler::GemHelper.install_tasks
5
+ file "chef/travis-cookbooks/README.md" do
6
+ sh "git submodule init"
7
+ sh "git submodule update"
8
+ end
6
9
 
7
- task :default => ['ci:setup:rspec', :spec]
8
-
9
- desc "Run all specs in spec directory (excluding plugin specs)"
10
10
  RSpec::Core::RakeTask.new(:spec)
11
11
 
12
+ desc ""
13
+ task :spec => ["chef/travis-cookbooks/README.md"]
14
+
15
+ desc "Run specs"
16
+ task :default => :spec
@@ -3,13 +3,16 @@ Vagrant::Config.run do |config|
3
3
  config.vm.box_url = "http://files.vagrantup.com/#{config.vm.box}.box"
4
4
  config.vm.network :hostonly, "192.168.33.10"
5
5
 
6
- config.vm.provision :shell, :inline => "sudo mkdir /etc/skel/.ssh"
6
+ config.vm.provision :shell, :inline => "grep -q ubuntu /etc/passwd || sudo -n useradd -m ubuntu -G sudo,admin -s /bin/bash"
7
+
8
+ config.vm.provision :shell, :inline => "test -d /home/ubuntu/.ssh || sudo -n mkdir /home/ubuntu/.ssh"
9
+ config.vm.provision :shell, :inline => "sudo -n chmod 0700 /home/ubuntu/.ssh"
7
10
 
8
11
  config.vm.provision :shell do |shell|
9
- shell.inline = "echo $@ | sudo tee /etc/skel/.ssh/authorized_keys"
10
- ssh_key = ENV['LOBOT_SSH_KEY'] || File.expand_path("~/.ssh/id_rsa.pub")
12
+ shell.inline = "sudo -n echo $@ > /home/ubuntu/.ssh/authorized_keys"
13
+ ssh_key = File.join(File.dirname(__FILE__), 'spec', 'fixtures', 'ssh_keys', 'vagrant_test_key.pub')
11
14
  shell.args = File.read(ssh_key)
12
15
  end
13
16
 
14
- config.vm.provision :shell, :inline => "sudo useradd -m ubuntu -G sudo,admin -s /bin/bash"
15
- end
17
+ config.vm.provision :shell, :inline => "sudo -n chown -R ubuntu /home/ubuntu/.ssh"
18
+ end
data/bin/lobot CHANGED
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  $: << File.expand_path('../../lib', __FILE__)
3
3
 
4
- require "rubygems"
5
- require "lobot/cli"
6
-
7
- Lobot::CLI.start
4
+ require "lobot"
5
+ Lobot::CLI.start
@@ -1,2 +1,3 @@
1
1
  default["jenkins"] = {}
2
2
  default["jenkins"]["home"] = "/var/lib/jenkins"
3
+ default["jenkins"]["builds"] = []
@@ -1,4 +1,4 @@
1
- describe_recipe "pivotal_ci::jenkins" do
1
+ describe "pivotal_ci::jenkins" do
2
2
  include MiniTest::Chef::Assertions
3
3
  include MiniTest::Chef::Context
4
4
  include MiniTest::Chef::Resources
@@ -16,7 +16,45 @@ describe_recipe "pivotal_ci::jenkins" do
16
16
  end
17
17
  end
18
18
 
19
- describe_recipe "pivotal_ci::default" do
19
+ describe "pivotal_ci::id_rsa" do
20
+ include MiniTest::Chef::Assertions
21
+ include MiniTest::Chef::Context
22
+ include MiniTest::Chef::Resources
23
+
24
+ describe ".ssh/id_rsa" do
25
+ it "exists" do
26
+ file("/var/lib/jenkins/.ssh/id_rsa").must_exist
27
+ end
28
+
29
+ it "is user-writable" do
30
+ file("/var/lib/jenkins/.ssh/id_rsa").must_have(:mode, "600")
31
+ end
32
+
33
+ it "is owned by jenkins" do
34
+ file("/var/lib/jenkins/.ssh/id_rsa").must_have(:user, "jenkins")
35
+ end
36
+ end
37
+
38
+ describe ".ssh/known_hosts" do
39
+ it "exists" do
40
+ file("/var/lib/jenkins/.ssh/known_hosts").must_exist
41
+ end
42
+
43
+ it "is user-writable" do
44
+ file("/var/lib/jenkins/.ssh/known_hosts").must_have(:mode, "600")
45
+ end
46
+
47
+ it "is owned by jenkins" do
48
+ file("/var/lib/jenkins/.ssh/known_hosts").must_have(:user, "jenkins")
49
+ end
50
+ end
51
+ end
52
+
53
+ describe "pivotal_ci::default" do
54
+ include MiniTest::Chef::Assertions
55
+ include MiniTest::Chef::Context
56
+ include MiniTest::Chef::Resources
57
+
20
58
  def wait_for(match, options="")
21
59
  Timeout.timeout(10) do
22
60
  sleep 1 until `curl #{options} -ks https://localhost/` =~ match
@@ -20,6 +20,11 @@ file "#{node["jenkins"]["home"]}/.ssh/id_rsa" do
20
20
  owner "jenkins"
21
21
  end
22
22
 
23
+ file "#{node["jenkins"]["home"]}/.ssh/known_hosts" do
24
+ mode 0600
25
+ owner "jenkins"
26
+ end
27
+
23
28
  execute "add github to known hosts if necessary" do
24
29
  github_string = 'github.com,207.97.227.239 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=='
25
30
  command "echo '#{github_string}' >> #{node["jenkins"]["home"]}/.ssh/known_hosts"
@@ -15,7 +15,7 @@ execute "download lobot plugin" do
15
15
  jenkins_plugin.call(self, "lobot", "http://cheffiles.pivotallabs.com/lobot/lobot.hpi")
16
16
  end
17
17
 
18
- ['git', 'ansicolor', 'xvfb'].each do |plugin|
18
+ ['git-client', 'git', 'ansicolor', 'xvfb', 'greenballs'].each do |plugin|
19
19
  execute "download #{plugin} plugin" do
20
20
  jenkins_plugin.call(self, plugin, "http://mirrors.jenkins-ci.org/plugins/#{plugin}/latest/#{plugin}.hpi")
21
21
  end
@@ -32,14 +32,17 @@ node["jenkins"]["builds"].each do |build|
32
32
  owner "jenkins"
33
33
  end
34
34
 
35
+ require "cgi"
35
36
  template "#{node["jenkins"]["home"]}/jobs/#{build['name']}/config.xml" do
36
37
  source "jenkins-job-config.xml.erb"
37
38
  owner "jenkins"
38
39
  notifies :restart, "service[jenkins]"
40
+ junit_publisher = build['junit_publisher'].nil? ? true : build['junit_publisher']
39
41
  variables(
40
42
  :branch => build['branch'],
41
43
  :command => build['command'],
42
- :repository => build['repository']
44
+ :repository => build['repository'],
45
+ :junit_publisher => junit_publisher
43
46
  )
44
47
  end
45
48
  end
@@ -33,3 +33,7 @@ include_recipe "xserver"
33
33
  include_recipe "firefox"
34
34
  include_recipe "chromium"
35
35
  include_recipe "phantomjs::tarball"
36
+
37
+ # Packages for xserver
38
+ #
39
+ package "libicu48"
@@ -51,15 +51,17 @@
51
51
  <concurrentBuild>false</concurrentBuild>
52
52
  <builders>
53
53
  <hudson.tasks.Shell>
54
- <command><%= @command %></command>
54
+ <command><%= CGI.escapeHTML @command %></command>
55
55
  </hudson.tasks.Shell>
56
56
  </builders>
57
57
  <publishers>
58
- <hudson.tasks.junit.JUnitResultArchiver>
59
- <testResults>spec/reports/*.xml</testResults>
60
- <keepLongStdio>false</keepLongStdio>
61
- <testDataPublishers/>
62
- </hudson.tasks.junit.JUnitResultArchiver>
58
+ <% if @junit_publisher %>
59
+ <hudson.tasks.junit.JUnitResultArchiver>
60
+ <testResults>spec/reports/*.xml</testResults>
61
+ <keepLongStdio>false</keepLongStdio>
62
+ <testDataPublishers/>
63
+ </hudson.tasks.junit.JUnitResultArchiver>
64
+ <% end %>
63
65
  </publishers>
64
66
  <buildWrappers>
65
67
  <hudson.plugins.ansicolor.AnsiColorBuildWrapper>
@@ -1,3 +1,2 @@
1
1
  node['nginx']['basic_auth_user'] = "wheelbarrow"
2
2
  node['nginx']['basic_auth_password'] = "full-of-garbage"
3
- node['jenkins']['builds'] = []
@@ -0,0 +1,41 @@
1
+ bash "bootstrap" do
2
+ cwd "/home/vagrant"
3
+ code <<-BOOTSTRAP
4
+ #!/bin/bash
5
+
6
+ set -e
7
+
8
+ sudo apt-get update > /dev/null
9
+
10
+ packages="git build-essential openssl libreadline6 libreadline6-dev libreadline5 curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libc6-dev libncurses5-dev automake libtool bison subversion pkg-config"
11
+ selections=`dpkg --get-selections`
12
+
13
+ for package in $packages
14
+ do
15
+ if ! echo "$selections" | grep "^$package\s" > /dev/null
16
+ then
17
+ to_install="$to_install $package"
18
+ fi
19
+ done
20
+
21
+ if [ ! -z "$to_install" ]
22
+ then
23
+ sudo apt-get install -y $to_install
24
+ fi
25
+
26
+ test -d /usr/local/rvm || curl -L https://get.rvm.io | sudo bash -s stable
27
+
28
+ sudo tee /etc/profile.d/rvm.sh > /dev/null <<RVMSH_CONTENT
29
+ [[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm"
30
+ RVMSH_CONTENT
31
+
32
+ sudo tee /etc/rvmrc > /dev/null <<RVMRC_CONTENTS
33
+ rvm_install_on_use_flag=1
34
+ rvm_trust_rvmrcs_flag=1
35
+ rvm_gemset_create_on_use_flag=1
36
+ RVMRC_CONTENTS
37
+
38
+ sudo usermod vagrant -a -G rvm
39
+
40
+ BOOTSTRAP
41
+ end