cloud-toaster 1.1.2

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 (515) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE +202 -0
  3. data/README.md +54 -0
  4. data/Rakefile +51 -0
  5. data/VERSION +1 -0
  6. data/bin/strace-4.8_patched/strace-i686 +0 -0
  7. data/bin/strace-4.8_patched/strace-x86_64 +0 -0
  8. data/bin/toaster +74 -0
  9. data/chef/cookbooks/chef-solo-search/CHANGELOG +16 -0
  10. data/chef/cookbooks/chef-solo-search/Gemfile +8 -0
  11. data/chef/cookbooks/chef-solo-search/LICENSE +202 -0
  12. data/chef/cookbooks/chef-solo-search/NOTICE +18 -0
  13. data/chef/cookbooks/chef-solo-search/README.md +143 -0
  14. data/chef/cookbooks/chef-solo-search/Rakefile +10 -0
  15. data/chef/cookbooks/chef-solo-search/libraries/search/overrides.rb +100 -0
  16. data/chef/cookbooks/chef-solo-search/libraries/search/parser.rb +222 -0
  17. data/chef/cookbooks/chef-solo-search/libraries/search.rb +75 -0
  18. data/chef/cookbooks/chef-solo-search/libraries/vendor/chef/solr_query/lucene.treetop +150 -0
  19. data/chef/cookbooks/chef-solo-search/libraries/vendor/chef/solr_query/lucene_nodes.rb +285 -0
  20. data/chef/cookbooks/chef-solo-search/libraries/vendor/chef/solr_query/query_transform.rb +65 -0
  21. data/chef/cookbooks/chef-solo-search/metadata.rb +11 -0
  22. data/chef/cookbooks/chef-solo-search/recipes/default.rb +3 -0
  23. data/chef/cookbooks/chef-solo-search/tests/data/data_bags/node/alpha.json +10 -0
  24. data/chef/cookbooks/chef-solo-search/tests/data/data_bags/node/beta.json +10 -0
  25. data/chef/cookbooks/chef-solo-search/tests/data/data_bags/node/without_json_class.json +7 -0
  26. data/chef/cookbooks/chef-solo-search/tests/data/data_bags/users/jerry.json +8 -0
  27. data/chef/cookbooks/chef-solo-search/tests/data/data_bags/users/lea.json +10 -0
  28. data/chef/cookbooks/chef-solo-search/tests/data/data_bags/users/mike.json +13 -0
  29. data/chef/cookbooks/chef-solo-search/tests/data/data_bags/users/tom.json +10 -0
  30. data/chef/cookbooks/chef-solo-search/tests/gemfiles/Gemfile.10 +4 -0
  31. data/chef/cookbooks/chef-solo-search/tests/gemfiles/Gemfile.11 +5 -0
  32. data/chef/cookbooks/chef-solo-search/tests/test_data_bags.rb +45 -0
  33. data/chef/cookbooks/chef-solo-search/tests/test_search.rb +244 -0
  34. data/chef/cookbooks/lxc/attributes/create_lxc.rb +8 -0
  35. data/chef/cookbooks/lxc/attributes/general.rb +15 -0
  36. data/chef/cookbooks/lxc/attributes/init_bare_os.rb +15 -0
  37. data/chef/cookbooks/lxc/attributes/init_proto.rb +18 -0
  38. data/chef/cookbooks/lxc/attributes/install_ruby.rb +51 -0
  39. data/chef/cookbooks/lxc/attributes/mount_volume.rb +11 -0
  40. data/chef/cookbooks/lxc/attributes/setup_host.rb +9 -0
  41. data/chef/cookbooks/lxc/attributes/setup_proxy.rb +3 -0
  42. data/chef/cookbooks/lxc/attributes/start_lxc.rb +11 -0
  43. data/chef/cookbooks/lxc/attributes/stop_lxc.rb +3 -0
  44. data/chef/cookbooks/lxc/files/install.chef.sh +78 -0
  45. data/chef/cookbooks/lxc/metadata.json +6 -0
  46. data/chef/cookbooks/lxc/recipes/create_lxc.rb +106 -0
  47. data/chef/cookbooks/lxc/recipes/init_bare_os.rb +82 -0
  48. data/chef/cookbooks/lxc/recipes/init_proto.rb +417 -0
  49. data/chef/cookbooks/lxc/recipes/install_docker.rb +61 -0
  50. data/chef/cookbooks/lxc/recipes/install_ruby.rb +28 -0
  51. data/chef/cookbooks/lxc/recipes/mount_volume.rb +63 -0
  52. data/chef/cookbooks/lxc/recipes/setup_database.rb +22 -0
  53. data/chef/cookbooks/lxc/recipes/setup_host.rb +179 -0
  54. data/chef/cookbooks/lxc/recipes/setup_proxy.rb +157 -0
  55. data/chef/cookbooks/lxc/recipes/start_lxc.rb +180 -0
  56. data/chef/cookbooks/lxc/recipes/stop_lxc.rb +86 -0
  57. data/chef/cookbooks/mysql/CHANGELOG.md +391 -0
  58. data/chef/cookbooks/mysql/README.md +211 -0
  59. data/chef/cookbooks/mysql/attributes/default.rb +22 -0
  60. data/chef/cookbooks/mysql/libraries/helpers.rb +277 -0
  61. data/chef/cookbooks/mysql/libraries/matchers.rb +17 -0
  62. data/chef/cookbooks/mysql/libraries/provider_mysql_client.rb +10 -0
  63. data/chef/cookbooks/mysql/libraries/provider_mysql_client_debian.rb +37 -0
  64. data/chef/cookbooks/mysql/libraries/provider_mysql_client_fedora.rb +38 -0
  65. data/chef/cookbooks/mysql/libraries/provider_mysql_client_freebsd.rb +33 -0
  66. data/chef/cookbooks/mysql/libraries/provider_mysql_client_omnios.rb +41 -0
  67. data/chef/cookbooks/mysql/libraries/provider_mysql_client_rhel.rb +42 -0
  68. data/chef/cookbooks/mysql/libraries/provider_mysql_client_smartos.rb +33 -0
  69. data/chef/cookbooks/mysql/libraries/provider_mysql_client_suse.rb +37 -0
  70. data/chef/cookbooks/mysql/libraries/provider_mysql_client_ubuntu.rb +37 -0
  71. data/chef/cookbooks/mysql/libraries/provider_mysql_service.rb +10 -0
  72. data/chef/cookbooks/mysql/libraries/provider_mysql_service_debian.rb +193 -0
  73. data/chef/cookbooks/mysql/libraries/provider_mysql_service_fedora.rb +157 -0
  74. data/chef/cookbooks/mysql/libraries/provider_mysql_service_freebsd.rb +151 -0
  75. data/chef/cookbooks/mysql/libraries/provider_mysql_service_omnios.rb +232 -0
  76. data/chef/cookbooks/mysql/libraries/provider_mysql_service_rhel.rb +318 -0
  77. data/chef/cookbooks/mysql/libraries/provider_mysql_service_smartos.rb +216 -0
  78. data/chef/cookbooks/mysql/libraries/provider_mysql_service_suse.rb +170 -0
  79. data/chef/cookbooks/mysql/libraries/provider_mysql_service_ubuntu.rb +218 -0
  80. data/chef/cookbooks/mysql/libraries/resource_mysql_client.rb +11 -0
  81. data/chef/cookbooks/mysql/libraries/resource_mysql_service.rb +194 -0
  82. data/chef/cookbooks/mysql/metadata.json +40 -0
  83. data/chef/cookbooks/mysql/metadata.rb +20 -0
  84. data/chef/cookbooks/mysql/recipes/client.rb +22 -0
  85. data/chef/cookbooks/mysql/recipes/server.rb +33 -0
  86. data/chef/cookbooks/mysql/recipes/server_deprecated.rb +23 -0
  87. data/chef/cookbooks/mysql/templates/default/5.0/my.cnf.erb +38 -0
  88. data/chef/cookbooks/mysql/templates/default/5.1/my.cnf.erb +38 -0
  89. data/chef/cookbooks/mysql/templates/default/5.5/my.cnf.erb +38 -0
  90. data/chef/cookbooks/mysql/templates/default/5.6/my.cnf.erb +39 -0
  91. data/chef/cookbooks/mysql/templates/default/apparmor/usr.sbin.mysqld.erb +40 -0
  92. data/chef/cookbooks/mysql/templates/default/debian/debian.cnf.erb +12 -0
  93. data/chef/cookbooks/mysql/templates/default/debian/mysql-server.seed.erb +10 -0
  94. data/chef/cookbooks/mysql/templates/default/deprecated/my.cnf.erb +374 -0
  95. data/chef/cookbooks/mysql/templates/default/grants/grants.sql.erb +27 -0
  96. data/chef/cookbooks/mysql/templates/default/omnios/mysql.xml.erb +26 -0
  97. data/chef/cookbooks/mysql/templates/default/omnios/svc.method.mysqld.erb +29 -0
  98. data/chef/cookbooks/mysql/templates/default/smartos/mysql.xml.erb +32 -0
  99. data/chef/cookbooks/mysql/templates/default/smartos/svc.method.mysqld.erb +29 -0
  100. data/chef/cookbooks/openssl/README.md +37 -0
  101. data/chef/cookbooks/openssl/libraries/secure_password.rb +37 -0
  102. data/chef/cookbooks/openssl/metadata.json +30 -0
  103. data/chef/cookbooks/openssl/metadata.rb +8 -0
  104. data/chef/cookbooks/openssl/recipes/default.rb +19 -0
  105. data/chef/cookbooks/ssh/attributes/default.rb +8 -0
  106. data/chef/cookbooks/ssh/recipes/authorize_key.rb +20 -0
  107. data/chef/cookbooks/toaster/attributes/testing.rb +37 -0
  108. data/chef/cookbooks/toaster/libraries/default.rb +61 -0
  109. data/chef/cookbooks/toaster/recipes/post__cakephp__default.rb +27 -0
  110. data/chef/cookbooks/toaster/recipes/post__cube__default.rb +26 -0
  111. data/chef/cookbooks/toaster/recipes/post__drupal__default.rb +16 -0
  112. data/chef/cookbooks/toaster/recipes/post__icinga__default.rb +9 -0
  113. data/chef/cookbooks/toaster/recipes/post__node__default.rb +16 -0
  114. data/chef/cookbooks/toaster/recipes/post__virtualbox__default.rb +12 -0
  115. data/chef/cookbooks/toaster/recipes/post__wordpress__default.rb +12 -0
  116. data/chef/cookbooks/toaster/recipes/pre__aegir__default.rb +12 -0
  117. data/chef/cookbooks/toaster/recipes/pre__app__default.rb +3 -0
  118. data/chef/cookbooks/toaster/recipes/pre__cakephp__default.rb +24 -0
  119. data/chef/cookbooks/toaster/recipes/pre__cube__default.rb +9 -0
  120. data/chef/cookbooks/toaster/recipes/pre__disco__default.rb +21 -0
  121. data/chef/cookbooks/toaster/recipes/pre__drbd__default.rb +7 -0
  122. data/chef/cookbooks/toaster/recipes/pre__eaccelerator__default.rb +2 -0
  123. data/chef/cookbooks/toaster/recipes/pre__elasticsearch-head__default.rb +11 -0
  124. data/chef/cookbooks/toaster/recipes/pre__elasticsearch__default.rb +6 -0
  125. data/chef/cookbooks/toaster/recipes/pre__gitosis__default.rb +17 -0
  126. data/chef/cookbooks/toaster/recipes/pre__kafka__default.rb +3 -0
  127. data/chef/cookbooks/toaster/recipes/pre__munin__server.rb +6 -0
  128. data/chef/cookbooks/toaster/recipes/pre__mysql__server.rb +4 -0
  129. data/chef/cookbooks/toaster/recipes/pre__nagios__default.rb +3 -0
  130. data/chef/cookbooks/toaster/recipes/pre__netkernel__default.rb +24 -0
  131. data/chef/cookbooks/toaster/recipes/pre__php__default.rb +2 -0
  132. data/chef/cookbooks/toaster/recipes/pre__postgresql__server.rb +3 -0
  133. data/chef/cookbooks/toaster/recipes/pre__pxe_dust__default.rb +9 -0
  134. data/chef/cookbooks/toaster/recipes/pre__pxe_install_server__default.rb +6 -0
  135. data/chef/cookbooks/toaster/recipes/pre__riak__default.rb +40 -0
  136. data/chef/cookbooks/toaster/recipes/pre__sensu__default.rb +9 -0
  137. data/chef/cookbooks/toaster/recipes/pre__sol__default.rb +2 -0
  138. data/chef/cookbooks/toaster/recipes/pre__solr__default.rb +6 -0
  139. data/chef/cookbooks/toaster/recipes/pre__sonar__default.rb +2 -0
  140. data/chef/cookbooks/toaster/recipes/pre__storm__default.rb +3 -0
  141. data/chef/cookbooks/toaster/recipes/pre__vmware__tools.rb +4 -0
  142. data/chef/cookbooks/toaster/recipes/pre__wordpress__default.rb +17 -0
  143. data/chef/cookbooks/toaster/recipes/pre__xen__default.rb +7 -0
  144. data/chef/cookbooks/toaster/recipes/pre__znc__default.rb +7 -0
  145. data/chef/cookbooks/toaster/recipes/testing.rb +241 -0
  146. data/chef/cookbooks/toaster/recipes/testing_post.rb +36 -0
  147. data/chef/cookbooks/yum/CHANGELOG.md +212 -0
  148. data/chef/cookbooks/yum/README.md +268 -0
  149. data/chef/cookbooks/yum/attributes/main.rb +97 -0
  150. data/chef/cookbooks/yum/libraries/matchers.rb +27 -0
  151. data/chef/cookbooks/yum/metadata.json +34 -0
  152. data/chef/cookbooks/yum/metadata.rb +13 -0
  153. data/chef/cookbooks/yum/providers/globalconfig.rb +37 -0
  154. data/chef/cookbooks/yum/providers/repository.rb +85 -0
  155. data/chef/cookbooks/yum/recipes/default.rb +34 -0
  156. data/chef/cookbooks/yum/resources/globalconfig.rb +105 -0
  157. data/chef/cookbooks/yum/resources/repository.rb +63 -0
  158. data/chef/cookbooks/yum/templates/default/main.erb +251 -0
  159. data/chef/cookbooks/yum/templates/default/repo.erb +109 -0
  160. data/chef/cookbooks/yum-mysql-community/CHANGELOG.md +67 -0
  161. data/chef/cookbooks/yum-mysql-community/README.md +137 -0
  162. data/chef/cookbooks/yum-mysql-community/attributes/mysql-connectors-community.rb +31 -0
  163. data/chef/cookbooks/yum-mysql-community/attributes/mysql55-community.rb +29 -0
  164. data/chef/cookbooks/yum-mysql-community/attributes/mysql56-community.rb +31 -0
  165. data/chef/cookbooks/yum-mysql-community/files/default/mysql_pubkey.asc +33 -0
  166. data/chef/cookbooks/yum-mysql-community/metadata.json +30 -0
  167. data/chef/cookbooks/yum-mysql-community/metadata.rb +8 -0
  168. data/chef/cookbooks/yum-mysql-community/recipes/connectors.rb +48 -0
  169. data/chef/cookbooks/yum-mysql-community/recipes/mysql55.rb +48 -0
  170. data/chef/cookbooks/yum-mysql-community/recipes/mysql56.rb +48 -0
  171. data/config.json +34 -0
  172. data/lib/toaster/api.rb +447 -0
  173. data/lib/toaster/chef/chef_listener.rb +514 -0
  174. data/lib/toaster/chef/chef_node_inspector.rb +165 -0
  175. data/lib/toaster/chef/chef_util.rb +865 -0
  176. data/lib/toaster/chef/failsafe_resource_parser.rb +140 -0
  177. data/lib/toaster/chef/resource_inspector.rb +536 -0
  178. data/lib/toaster/db/cache.rb +98 -0
  179. data/lib/toaster/db/cached_db.rb +53 -0
  180. data/lib/toaster/db/cgi_session_cache.rb +209 -0
  181. data/lib/toaster/db/db.rb +98 -0
  182. data/lib/toaster/db/mysql.rb +18 -0
  183. data/lib/toaster/db/ram_cache.rb +203 -0
  184. data/lib/toaster/markup/jdom-1.1.jar +0 -0
  185. data/lib/toaster/markup/jdom-b7.jar +0 -0
  186. data/lib/toaster/markup/markup_util.rb +437 -0
  187. data/lib/toaster/markup/vmtools-utils-0.5.jar +0 -0
  188. data/lib/toaster/markup/xmldiff.sh +5 -0
  189. data/lib/toaster/model/additional_property.rb +11 -0
  190. data/lib/toaster/model/automation.rb +218 -0
  191. data/lib/toaster/model/automation_attribute.rb +13 -0
  192. data/lib/toaster/model/automation_run.rb +104 -0
  193. data/lib/toaster/model/ignore_property.rb +11 -0
  194. data/lib/toaster/model/key_value_pair.rb +59 -0
  195. data/lib/toaster/model/run_attribute.rb +17 -0
  196. data/lib/toaster/model/state.rb +17 -0
  197. data/lib/toaster/model/state_change.rb +79 -0
  198. data/lib/toaster/model/task.rb +292 -0
  199. data/lib/toaster/model/task_execution.rb +76 -0
  200. data/lib/toaster/model/task_parameter.rb +66 -0
  201. data/lib/toaster/model/user.rb +32 -0
  202. data/lib/toaster/ohai/_disabled_/network_ports.rb +81 -0
  203. data/lib/toaster/ohai/apache/apache.rb +48 -0
  204. data/lib/toaster/ohai/cron/cron.rb +32 -0
  205. data/lib/toaster/ohai/files/_meta.rb +30 -0
  206. data/lib/toaster/ohai/files/files.rb +20 -0
  207. data/lib/toaster/ohai/gems/gems.rb +19 -0
  208. data/lib/toaster/ohai/groups/groups.rb +20 -0
  209. data/lib/toaster/ohai/iptables/iptables.rb +48 -0
  210. data/lib/toaster/ohai/mounts/mounts.rb +26 -0
  211. data/lib/toaster/ohai/mysql/mysql.rb +31 -0
  212. data/lib/toaster/ohai/packages/_meta.rb +86 -0
  213. data/lib/toaster/ohai/packages/packages.rb +33 -0
  214. data/lib/toaster/ohai/ports/ports.rb +21 -0
  215. data/lib/toaster/ohai/routes/routes.rb +25 -0
  216. data/lib/toaster/ohai/services/services.rb +42 -0
  217. data/lib/toaster/ohai/users/users.rb +17 -0
  218. data/lib/toaster/state/convergence.rb +197 -0
  219. data/lib/toaster/state/idempotence.rb +192 -0
  220. data/lib/toaster/state/ptrace_util.rb +48 -0
  221. data/lib/toaster/state/state_node.rb +105 -0
  222. data/lib/toaster/state/state_transition.rb +38 -0
  223. data/lib/toaster/state/state_transition_graph.rb +701 -0
  224. data/lib/toaster/state/syscall_tracer.rb +317 -0
  225. data/lib/toaster/state/system_state.rb +349 -0
  226. data/lib/toaster/state/transition_edge.rb +65 -0
  227. data/lib/toaster/test/test_attribute.rb +19 -0
  228. data/lib/toaster/test/test_case.rb +175 -0
  229. data/lib/toaster/test/test_coverage.rb +147 -0
  230. data/lib/toaster/test/test_coverage_goal.rb +108 -0
  231. data/lib/toaster/test/test_generator.rb +246 -0
  232. data/lib/toaster/test/test_orchestrator.rb +165 -0
  233. data/lib/toaster/test/test_result.rb +73 -0
  234. data/lib/toaster/test/test_runner.rb +394 -0
  235. data/lib/toaster/test/test_suite.rb +151 -0
  236. data/lib/toaster/test_manager.rb +281 -0
  237. data/lib/toaster/toaster_app_service.rb +141 -0
  238. data/lib/toaster/util/blocking_map.rb +80 -0
  239. data/lib/toaster/util/combinatorial.rb +58 -0
  240. data/lib/toaster/util/config.rb +103 -0
  241. data/lib/toaster/util/docker.rb +71 -0
  242. data/lib/toaster/util/logging.rb +19 -0
  243. data/lib/toaster/util/lxc.rb +383 -0
  244. data/lib/toaster/util/mem_dump.rb +38 -0
  245. data/lib/toaster/util/proxy.rb +23 -0
  246. data/lib/toaster/util/timestamp.rb +131 -0
  247. data/lib/toaster/util/util.rb +437 -0
  248. data/lib/toaster/web_ui.rb +7 -0
  249. data/webapp/Gemfile +46 -0
  250. data/webapp/Gemfile.lock +237 -0
  251. data/webapp/Rakefile +6 -0
  252. data/webapp/app/assets/fonts/font.woff +0 -0
  253. data/webapp/app/assets/images/final_state.gif +0 -0
  254. data/webapp/app/assets/images/initial_state.gif +0 -0
  255. data/webapp/app/assets/images/loading.gif +0 -0
  256. data/webapp/app/assets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  257. data/webapp/app/assets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  258. data/webapp/app/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  259. data/webapp/app/assets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  260. data/webapp/app/assets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  261. data/webapp/app/assets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  262. data/webapp/app/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  263. data/webapp/app/assets/images/ui-icons_222222_256x240.png +0 -0
  264. data/webapp/app/assets/javascripts/analysis.js.coffee +3 -0
  265. data/webapp/app/assets/javascripts/application.js +16 -0
  266. data/webapp/app/assets/javascripts/execs.js.coffee +3 -0
  267. data/webapp/app/assets/javascripts/graph.js +441 -0
  268. data/webapp/app/assets/javascripts/jquery-1.7.2.js +9404 -0
  269. data/webapp/app/assets/javascripts/jquery-ui-1.8.22.js +11529 -0
  270. data/webapp/app/assets/javascripts/jquery.cookie.js +96 -0
  271. data/webapp/app/assets/javascripts/jquery.hotkeys.js +99 -0
  272. data/webapp/app/assets/javascripts/jquery.jstree.js +4551 -0
  273. data/webapp/app/assets/javascripts/jsPlumb/jquery.jsPlumb-1.3.14-all-min.js +1 -0
  274. data/webapp/app/assets/javascripts/jstree.util.js +53 -0
  275. data/webapp/app/assets/javascripts/scripts.js.coffee +3 -0
  276. data/webapp/app/assets/javascripts/settings.js.coffee +3 -0
  277. data/webapp/app/assets/javascripts/test.js.coffee +3 -0
  278. data/webapp/app/assets/javascripts/util.js.coffee +3 -0
  279. data/webapp/app/assets/stylesheets/analysis.css.scss +3 -0
  280. data/webapp/app/assets/stylesheets/application.css +49 -0
  281. data/webapp/app/assets/stylesheets/execs.css.scss +3 -0
  282. data/webapp/app/assets/stylesheets/graph.css +159 -0
  283. data/webapp/app/assets/stylesheets/jquery-ui-1.8.6.custom.css +572 -0
  284. data/webapp/app/assets/stylesheets/layout.css +151 -0
  285. data/webapp/app/assets/stylesheets/menu.css +186 -0
  286. data/webapp/app/assets/stylesheets/reset.css +41 -0
  287. data/webapp/app/assets/stylesheets/scripts.css.scss +3 -0
  288. data/webapp/app/assets/stylesheets/settings.css.scss +3 -0
  289. data/webapp/app/assets/stylesheets/test.css.scss +3 -0
  290. data/webapp/app/assets/stylesheets/util.css.scss +3 -0
  291. data/webapp/app/assets/stylesheets/websymbols/websymbols-regular-webfont.eot +0 -0
  292. data/webapp/app/assets/stylesheets/websymbols/websymbols-regular-webfont.svg +1 -0
  293. data/webapp/app/assets/stylesheets/websymbols/websymbols-regular-webfont.ttf +0 -0
  294. data/webapp/app/assets/stylesheets/websymbols/websymbols-regular-webfont.woff +0 -0
  295. data/webapp/app/controllers/analysis_controller.rb +7 -0
  296. data/webapp/app/controllers/application_controller.rb +14 -0
  297. data/webapp/app/controllers/base_controller.rb +91 -0
  298. data/webapp/app/controllers/execs_controller.rb +59 -0
  299. data/webapp/app/controllers/graph_controller.rb +17 -0
  300. data/webapp/app/controllers/scripts_controller.rb +166 -0
  301. data/webapp/app/controllers/settings_controller.rb +10 -0
  302. data/webapp/app/controllers/test_controller.rb +127 -0
  303. data/webapp/app/controllers/util_controller.rb +6 -0
  304. data/webapp/app/helpers/analysis_helper.rb +2 -0
  305. data/webapp/app/helpers/application_helper.rb +2 -0
  306. data/webapp/app/helpers/automations_helper.rb +2 -0
  307. data/webapp/app/helpers/execs_helper.rb +2 -0
  308. data/webapp/app/helpers/scripts_helper.rb +2 -0
  309. data/webapp/app/helpers/settings_helper.rb +2 -0
  310. data/webapp/app/helpers/test_helper.rb +2 -0
  311. data/webapp/app/helpers/util_helper.rb +2 -0
  312. data/webapp/app/views/analysis/convergence.html.erb +156 -0
  313. data/webapp/app/views/analysis/idempotence.html.erb +2 -0
  314. data/webapp/app/views/execs/automation_runs.html.erb +98 -0
  315. data/webapp/app/views/execs/task_executions.html.erb +154 -0
  316. data/webapp/app/views/graph/graph_frame.html +101 -0
  317. data/webapp/app/views/layouts/application.html.erb +114 -0
  318. data/webapp/app/views/scripts/edit.html.erb +58 -0
  319. data/webapp/app/views/scripts/graph.html.erb +75 -0
  320. data/webapp/app/views/scripts/import_chef.html.erb +104 -0
  321. data/webapp/app/views/scripts/scripts.html.erb +116 -0
  322. data/webapp/app/views/scripts/tasks.html.erb +139 -0
  323. data/webapp/app/views/settings/containers.html.erb +161 -0
  324. data/webapp/app/views/settings/index.html.erb +51 -0
  325. data/webapp/app/views/test/cases.html.erb +2 -0
  326. data/webapp/app/views/test/gen.html.erb +229 -0
  327. data/webapp/app/views/test/suites.html.erb +205 -0
  328. data/webapp/app/views/util/chef.html.erb +53 -0
  329. data/webapp/bin/bundle +3 -0
  330. data/webapp/bin/rails +4 -0
  331. data/webapp/bin/rake +4 -0
  332. data/webapp/config/application.rb +28 -0
  333. data/webapp/config/boot.rb +18 -0
  334. data/webapp/config/database.yml +42 -0
  335. data/webapp/config/environment.rb +5 -0
  336. data/webapp/config/environments/development.rb +35 -0
  337. data/webapp/config/environments/production.rb +80 -0
  338. data/webapp/config/environments/test.rb +36 -0
  339. data/webapp/config/initializers/backtrace_silencers.rb +7 -0
  340. data/webapp/config/initializers/devise.rb +256 -0
  341. data/webapp/config/initializers/filter_parameter_logging.rb +4 -0
  342. data/webapp/config/initializers/inflections.rb +16 -0
  343. data/webapp/config/initializers/mime_types.rb +5 -0
  344. data/webapp/config/initializers/patches.rb +13 -0
  345. data/webapp/config/initializers/secret_token.rb +12 -0
  346. data/webapp/config/initializers/session_store.rb +6 -0
  347. data/webapp/config/initializers/wrap_parameters.rb +16 -0
  348. data/webapp/config/locales/devise.en.yml +59 -0
  349. data/webapp/config/locales/en.yml +23 -0
  350. data/webapp/config/routes.rb +113 -0
  351. data/webapp/config.ru +4 -0
  352. data/webapp/db/development.sqlite3 +0 -0
  353. data/webapp/db/migrate/20140624002037_devise_create_users.rb +42 -0
  354. data/webapp/db/migrate/20140628002058_create_all_tables.rb +159 -0
  355. data/webapp/db/schema.rb +162 -0
  356. data/webapp/db/seeds.rb +7 -0
  357. data/webapp/log/development.log +167823 -0
  358. data/webapp/public/404.html +58 -0
  359. data/webapp/public/422.html +58 -0
  360. data/webapp/public/500.html +57 -0
  361. data/webapp/public/favicon.ico +0 -0
  362. data/webapp/public/robots.txt +5 -0
  363. data/webapp/test/controllers/analysis_controller_test.rb +14 -0
  364. data/webapp/test/controllers/automations_controller_test.rb +49 -0
  365. data/webapp/test/controllers/execs_controller_test.rb +9 -0
  366. data/webapp/test/controllers/executions_controller_test.rb +9 -0
  367. data/webapp/test/controllers/runs_controller_test.rb +7 -0
  368. data/webapp/test/controllers/scripts_controller_test.rb +9 -0
  369. data/webapp/test/controllers/settings_controller_test.rb +9 -0
  370. data/webapp/test/controllers/test_controller_test.rb +14 -0
  371. data/webapp/test/controllers/util_controller_test.rb +9 -0
  372. data/webapp/test/fixtures/users.yml +11 -0
  373. data/webapp/test/helpers/analysis_helper_test.rb +4 -0
  374. data/webapp/test/helpers/automations_helper_test.rb +4 -0
  375. data/webapp/test/helpers/execs_helper_test.rb +4 -0
  376. data/webapp/test/helpers/executions_helper_test.rb +4 -0
  377. data/webapp/test/helpers/runs_helper_test.rb +4 -0
  378. data/webapp/test/helpers/scripts_helper_test.rb +4 -0
  379. data/webapp/test/helpers/settings_helper_test.rb +4 -0
  380. data/webapp/test/helpers/test_helper_test.rb +4 -0
  381. data/webapp/test/helpers/util_helper_test.rb +4 -0
  382. data/webapp/test/models/user_test.rb +7 -0
  383. data/webapp/test/test_helper.rb +15 -0
  384. data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/analysis.css.scssc +0 -0
  385. data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/automations.css.scssc +0 -0
  386. data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/execs.css.scssc +0 -0
  387. data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/executions.css.scssc +0 -0
  388. data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/scripts.css.scssc +0 -0
  389. data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/settings.css.scssc +0 -0
  390. data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/test.css.scssc +0 -0
  391. data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/util.css.scssc +0 -0
  392. data/webapp/tmp/cache/assets/development/sprockets/06a1cdb3d5472dd126cffc18f548c342 +0 -0
  393. data/webapp/tmp/cache/assets/development/sprockets/0dc0562647e703ca0535da3b9fcad796 +0 -0
  394. data/webapp/tmp/cache/assets/development/sprockets/113f1c71cb0f2a786729477989122982 +0 -0
  395. data/webapp/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  396. data/webapp/tmp/cache/assets/development/sprockets/151a1c6b128721d8923ba0c380a2af17 +0 -0
  397. data/webapp/tmp/cache/assets/development/sprockets/1722fb8a6daad566c8a6d5ef31969459 +0 -0
  398. data/webapp/tmp/cache/assets/development/sprockets/1a05555c46560c6b246aa0a996679bc6 +0 -0
  399. data/webapp/tmp/cache/assets/development/sprockets/1cb7fb6aa8bd1c2b7df8f7c52442e345 +0 -0
  400. data/webapp/tmp/cache/assets/development/sprockets/1d76f803b0a83adc5ea7e7c848657967 +0 -0
  401. data/webapp/tmp/cache/assets/development/sprockets/200152f95fc464d69c425ed8fdc2fbcc +0 -0
  402. data/webapp/tmp/cache/assets/development/sprockets/2049c8927ebd046c8a3291f81041d5f1 +0 -0
  403. data/webapp/tmp/cache/assets/development/sprockets/207907100aabd08a6767e39a95b364e3 +0 -0
  404. data/webapp/tmp/cache/assets/development/sprockets/249e2d4db815922fc72419c4a1407caf +0 -0
  405. data/webapp/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  406. data/webapp/tmp/cache/assets/development/sprockets/3034e4c334b1ebed9433e33050555f18 +0 -0
  407. data/webapp/tmp/cache/assets/development/sprockets/316c88d859cc3666044e51b1dd89e872 +0 -0
  408. data/webapp/tmp/cache/assets/development/sprockets/347f43d816178c8ba11a28a771696924 +0 -0
  409. data/webapp/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  410. data/webapp/tmp/cache/assets/development/sprockets/36ab92a3b8d527ed1eff0944b5f1263d +0 -0
  411. data/webapp/tmp/cache/assets/development/sprockets/3893b852ff196f05ff6ca8e38bb2237f +0 -0
  412. data/webapp/tmp/cache/assets/development/sprockets/3c358bd5fa32d151c7aa44971dd9b96f +0 -0
  413. data/webapp/tmp/cache/assets/development/sprockets/3ce88fad85146e0bed233f5419c24d29 +0 -0
  414. data/webapp/tmp/cache/assets/development/sprockets/3dabcb7c89677292e1e019a9bac446e5 +0 -0
  415. data/webapp/tmp/cache/assets/development/sprockets/4116fac01e6d379ede37af725a592477 +0 -0
  416. data/webapp/tmp/cache/assets/development/sprockets/42628e032b8f0b16a5ba01a1fcc7b6d7 +0 -0
  417. data/webapp/tmp/cache/assets/development/sprockets/437b258a98e8fe2c87fa8e24b7ce9abf +0 -0
  418. data/webapp/tmp/cache/assets/development/sprockets/43e98ed206f05738ae305e7e1b09a840 +0 -0
  419. data/webapp/tmp/cache/assets/development/sprockets/468da8933ba442b88b2f4b0e40c2ac30 +0 -0
  420. data/webapp/tmp/cache/assets/development/sprockets/48ef3fa68e9084c7cfa84e525decc318 +0 -0
  421. data/webapp/tmp/cache/assets/development/sprockets/4b68dcc030691297629a7156361018dc +0 -0
  422. data/webapp/tmp/cache/assets/development/sprockets/50368b1bd77c9130d821cbad89ab83ac +0 -0
  423. data/webapp/tmp/cache/assets/development/sprockets/511a980807b8d16fc3fb839991041865 +0 -0
  424. data/webapp/tmp/cache/assets/development/sprockets/516a0973874a73d0d15feec9448f7466 +0 -0
  425. data/webapp/tmp/cache/assets/development/sprockets/569e21b0ca1a230c7880f8d7a8b1febf +0 -0
  426. data/webapp/tmp/cache/assets/development/sprockets/5b5543d2ed5bed100f1739fc12ebf2c5 +0 -0
  427. data/webapp/tmp/cache/assets/development/sprockets/5c10dbffb918651dc0498579ba9a6853 +0 -0
  428. data/webapp/tmp/cache/assets/development/sprockets/5c366b5370316b3e9c03d1a58cb5eb44 +0 -0
  429. data/webapp/tmp/cache/assets/development/sprockets/5fcb9466e0d5cb0e31b35957fe2d3901 +0 -0
  430. data/webapp/tmp/cache/assets/development/sprockets/61da396fb86c5ecd844a2d83ac759b4b +0 -0
  431. data/webapp/tmp/cache/assets/development/sprockets/624ba87170059068845a4651b3cd2c7c +0 -0
  432. data/webapp/tmp/cache/assets/development/sprockets/6391f61b6121feda70da6d0a22520fdd +0 -0
  433. data/webapp/tmp/cache/assets/development/sprockets/653a981829c12a52bd57b7918168a148 +0 -0
  434. data/webapp/tmp/cache/assets/development/sprockets/66479793d9e5683d9f7fa67522d1962d +0 -0
  435. data/webapp/tmp/cache/assets/development/sprockets/69c589bd224ee0df5ab02e4568e0ab39 +0 -0
  436. data/webapp/tmp/cache/assets/development/sprockets/6dd7c564897b7e66eecbb180baeef2c6 +0 -0
  437. data/webapp/tmp/cache/assets/development/sprockets/6e2b92a4e6966cb78e63207bc7888391 +0 -0
  438. data/webapp/tmp/cache/assets/development/sprockets/70adb410f59a0edc5aea8c2b2ef8a441 +0 -0
  439. data/webapp/tmp/cache/assets/development/sprockets/72cbfd5bf33945bcce154f7a4feaf04d +0 -0
  440. data/webapp/tmp/cache/assets/development/sprockets/740ee9d355ada8cf5e9beb620f2cd5cc +0 -0
  441. data/webapp/tmp/cache/assets/development/sprockets/74770a22b5d1b0b3bc3527da83706f96 +0 -0
  442. data/webapp/tmp/cache/assets/development/sprockets/759bf97655af50852816720db7b59fcb +0 -0
  443. data/webapp/tmp/cache/assets/development/sprockets/76e9c19246c684413a02af695fa2b0bc +0 -0
  444. data/webapp/tmp/cache/assets/development/sprockets/7728beeace48ca12e336d2bce0158871 +0 -0
  445. data/webapp/tmp/cache/assets/development/sprockets/77f49730c7b689f75a2e174fbd3ace2a +0 -0
  446. data/webapp/tmp/cache/assets/development/sprockets/78021a57030fd36cf82699aad9910b26 +0 -0
  447. data/webapp/tmp/cache/assets/development/sprockets/796b349b06da691fe5f069f9e3947fcb +0 -0
  448. data/webapp/tmp/cache/assets/development/sprockets/79e7505c70697cc7d34d4a8351c3b840 +0 -0
  449. data/webapp/tmp/cache/assets/development/sprockets/7b2b7d9034fc7b77daf5da1436667e6f +0 -0
  450. data/webapp/tmp/cache/assets/development/sprockets/7c2ea2ca2cdd89b062bf23f44e8f599c +0 -0
  451. data/webapp/tmp/cache/assets/development/sprockets/7ea112af55e6df12cdff377052b71420 +0 -0
  452. data/webapp/tmp/cache/assets/development/sprockets/7f27632588dd316836b009a621c0176c +0 -0
  453. data/webapp/tmp/cache/assets/development/sprockets/7fcef9f644290dea8d0e4bf13f6bb8e9 +0 -0
  454. data/webapp/tmp/cache/assets/development/sprockets/81c6bf67419a29257ed79f442c24907d +0 -0
  455. data/webapp/tmp/cache/assets/development/sprockets/83656ce9260eb473c1654420e0180167 +0 -0
  456. data/webapp/tmp/cache/assets/development/sprockets/83e8bdddefc2dce069b56e6650135397 +0 -0
  457. data/webapp/tmp/cache/assets/development/sprockets/880c796f41e5d67ae68ed239acfc91e3 +0 -0
  458. data/webapp/tmp/cache/assets/development/sprockets/8c1c39dd537d2c9990fe9c70a5646b06 +0 -0
  459. data/webapp/tmp/cache/assets/development/sprockets/8d763042da5254015767385ce324b348 +0 -0
  460. data/webapp/tmp/cache/assets/development/sprockets/91e1ccbf65ff4d9b0f42b1159796bcf2 +0 -0
  461. data/webapp/tmp/cache/assets/development/sprockets/92cdfac7698b6bb68983cf317c1cedef +0 -0
  462. data/webapp/tmp/cache/assets/development/sprockets/94cab8cbc120e152ce4c444492a3fc1d +0 -0
  463. data/webapp/tmp/cache/assets/development/sprockets/96b918c3c041b6a089c8adc870fa3aaa +0 -0
  464. data/webapp/tmp/cache/assets/development/sprockets/97cbe306627b432ab3bfb52416690d1d +0 -0
  465. data/webapp/tmp/cache/assets/development/sprockets/98da83d396c0c00eb03937ecbc2e6bfa +0 -0
  466. data/webapp/tmp/cache/assets/development/sprockets/9db04db20ec9c4a0f84ed01caa5e6e2b +0 -0
  467. data/webapp/tmp/cache/assets/development/sprockets/9dc1c251f50c828fae95d6107619c53e +0 -0
  468. data/webapp/tmp/cache/assets/development/sprockets/9e91711ab34bbf89ad1cfb4351027d36 +0 -0
  469. data/webapp/tmp/cache/assets/development/sprockets/9f587881f98b328b656e6456178418b5 +0 -0
  470. data/webapp/tmp/cache/assets/development/sprockets/9fc981560caba00621bb95d0974ad076 +0 -0
  471. data/webapp/tmp/cache/assets/development/sprockets/9fd4385f8fda99f3ddd3f133a89231d1 +0 -0
  472. data/webapp/tmp/cache/assets/development/sprockets/a32ab71649e3db15eca95bcc3a7588da +0 -0
  473. data/webapp/tmp/cache/assets/development/sprockets/a497c976969bdbb1f69875358d39d3b5 +0 -0
  474. data/webapp/tmp/cache/assets/development/sprockets/b06058d455770c1d9db6b6670bc4bf4d +0 -0
  475. data/webapp/tmp/cache/assets/development/sprockets/b3da405f1e68470ad6146a1322f2438c +0 -0
  476. data/webapp/tmp/cache/assets/development/sprockets/b4ba5853663f6721d15942ce08dd76bf +0 -0
  477. data/webapp/tmp/cache/assets/development/sprockets/b6f1534bcdbff92a16c85487f363235a +0 -0
  478. data/webapp/tmp/cache/assets/development/sprockets/b9c57b9750f8af3551b1a5d9e27f0a92 +0 -0
  479. data/webapp/tmp/cache/assets/development/sprockets/bb5be6a0ee889a15214e2442aee8c6e1 +0 -0
  480. data/webapp/tmp/cache/assets/development/sprockets/bc80a81b2d67b5ad40f3c7a2bb6e6f22 +0 -0
  481. data/webapp/tmp/cache/assets/development/sprockets/bfaba27d5ce71d292f453659b0755511 +0 -0
  482. data/webapp/tmp/cache/assets/development/sprockets/bfac6cd2984fbd5e0d762389e3c37164 +0 -0
  483. data/webapp/tmp/cache/assets/development/sprockets/c17bec9e3b5db6d8385c3d6eb362e628 +0 -0
  484. data/webapp/tmp/cache/assets/development/sprockets/c1a9eceddc0a1e41eb2992e9204f71e6 +0 -0
  485. data/webapp/tmp/cache/assets/development/sprockets/c50cd87be040044504b5c3fde1047e24 +0 -0
  486. data/webapp/tmp/cache/assets/development/sprockets/c5907cfd07b24ad19b8c80e8af618a57 +0 -0
  487. data/webapp/tmp/cache/assets/development/sprockets/c8da5594caf845a183dd1c6cd45c5433 +0 -0
  488. data/webapp/tmp/cache/assets/development/sprockets/cbc6968ed49fa14db439a64dd0a46abc +0 -0
  489. data/webapp/tmp/cache/assets/development/sprockets/cedf710ee090647b81c08675583eca62 +0 -0
  490. data/webapp/tmp/cache/assets/development/sprockets/cf1e3cebfad43293c3c470a5e437ebc9 +0 -0
  491. data/webapp/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  492. data/webapp/tmp/cache/assets/development/sprockets/d5a14f86bb4b422fdd8eb4722d966c9a +0 -0
  493. data/webapp/tmp/cache/assets/development/sprockets/d66b9cdd3230f9e5354e495e17097c49 +0 -0
  494. data/webapp/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  495. data/webapp/tmp/cache/assets/development/sprockets/dfa0ed87d851222fe58ada385e3f037d +0 -0
  496. data/webapp/tmp/cache/assets/development/sprockets/e1aa402390382db4d97b27cb094485fa +0 -0
  497. data/webapp/tmp/cache/assets/development/sprockets/e4f1db35ef9d9fbbf53252a44e381eb8 +0 -0
  498. data/webapp/tmp/cache/assets/development/sprockets/e57eb6c1ad51fd8c13afc0e719a259b5 +0 -0
  499. data/webapp/tmp/cache/assets/development/sprockets/e7c37b542e914e392ec326190cea1aa2 +0 -0
  500. data/webapp/tmp/cache/assets/development/sprockets/e923d7e19c216d4a924831f3896e007a +0 -0
  501. data/webapp/tmp/cache/assets/development/sprockets/e96a414a621483bbc89e73f11be5e7b4 +0 -0
  502. data/webapp/tmp/cache/assets/development/sprockets/eafcfc3d2561c18743c1b32f0f710c68 +0 -0
  503. data/webapp/tmp/cache/assets/development/sprockets/ecdd630f5466d45a2afa7515aaa5fc3b +0 -0
  504. data/webapp/tmp/cache/assets/development/sprockets/ee60a0a35d60cff425373970547694bd +0 -0
  505. data/webapp/tmp/cache/assets/development/sprockets/eee2c36b75709b0c3797c2a151fdd5d3 +0 -0
  506. data/webapp/tmp/cache/assets/development/sprockets/f104b66c0f89b453d0c8c73980fbab18 +0 -0
  507. data/webapp/tmp/cache/assets/development/sprockets/f26d1bc86590415685e9836ad75d1774 +0 -0
  508. data/webapp/tmp/cache/assets/development/sprockets/f4081e868eb565527099dba2c9d8c4de +0 -0
  509. data/webapp/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  510. data/webapp/tmp/cache/assets/development/sprockets/f813030b97e30415ad276bbd1f7e1fb4 +0 -0
  511. data/webapp/tmp/cache/assets/development/sprockets/f8e3e28bc9640c25da58aea46c3ac4b3 +0 -0
  512. data/webapp/tmp/cache/assets/development/sprockets/f9169d0a8b70eaf95de52b3c6ad51105 +0 -0
  513. data/webapp/tmp/cache/assets/development/sprockets/f939450f7a481e3fbeb158b81b39c624 +0 -0
  514. data/webapp/tmp/cache/assets/development/sprockets/fce73296b8298ac4c74b3e95cde4dfdb +0 -0
  515. metadata +941 -0
@@ -0,0 +1,179 @@
1
+
2
+ if node["lxc"]["mount_volume"]
3
+ # if we are on an Openstack host, mount volume and create file system..
4
+ include_recipe "lxc::mount_volume"
5
+ else
6
+ # else, dont create the file system, but create the /data/ directory
7
+ bash "host_link_datadir" do
8
+ code <<-EOH
9
+ rm -rf /data
10
+ ln -s /mnt /data
11
+ EOH
12
+ not_if "ls /data/* > /dev/null 2>&1"
13
+ only_if "test -e /mnt"
14
+ end
15
+ bash "host_create_datadir" do
16
+ code <<-EOH
17
+ mkdir -p /data
18
+ EOH
19
+ not_if "test -e /data"
20
+ end
21
+ end
22
+
23
+ bash "host_mount_cgroup" do
24
+ code <<-EOH
25
+ # mount control group filesystem
26
+ mkdir -p /cgroup
27
+ mount none -t cgroup /cgroup 2> /dev/null
28
+ exit 0
29
+ EOH
30
+ not_if "(test -d /cgroup) && (df | grep '/cgroup')"
31
+ end
32
+
33
+ if platform_family?("debian")
34
+ apt_package "btrfs-tools" do
35
+ action :install
36
+ not_if "which btrfs"
37
+ only_if do node["lxc"]["host"]["use_copy_on_write"] end
38
+ end
39
+ apt_package "host" do
40
+ action :install
41
+ not_if "which host"
42
+ ignore_failure true
43
+ end
44
+ apt_package "openjdk-7-jdk" do
45
+ action :install
46
+ not_if "which javac"
47
+ ignore_failure true
48
+ only_if 'apt-cache search openjdk-7-jdk | grep ""'
49
+ end
50
+ # fallback to java 6 if java 7 is not available
51
+ apt_package "openjdk-6-jdk" do
52
+ action :install
53
+ not_if "which javac"
54
+ ignore_failure true
55
+ end
56
+ elsif platform_family?("fedora") || platform_family?("linux")
57
+ yum_package "btrfs-progs" do
58
+ action :install
59
+ not_if "which btrfs"
60
+ only_if do node["lxc"]["host"]["use_copy_on_write"] end
61
+ end
62
+ yum_package "bind-utils" do
63
+ action :install
64
+ not_if "which host"
65
+ end
66
+ yum_package "java-1.7.0-openjdk" do
67
+ action :install
68
+ not_if "which javac"
69
+ end
70
+ end
71
+
72
+
73
+ bash "host_create_btrfs_image" do
74
+ code <<-EOH
75
+ echo "INFO: Creating image file for btrfs filesystem under #{node["lxc"]["host"]["btrfs_img_path"]}"
76
+
77
+ # make sure the parent directory for the image file exists
78
+ mkdir -p #{node["lxc"]["host"]["btrfs_img_path"]}
79
+ rm -rf #{node["lxc"]["host"]["btrfs_img_path"]}
80
+
81
+ # create image file
82
+ dd if=/dev/zero of=#{node["lxc"]["host"]["btrfs_img_path"]} bs=1MB count=#{node["lxc"]["host"]["btrfs_img_size_MB"]}
83
+ mkfs.btrfs #{node["lxc"]["host"]["btrfs_img_path"]}
84
+ EOH
85
+ not_if "test -f #{node["lxc"]["host"]["btrfs_img_path"]}"
86
+ only_if do node["lxc"]["host"]["use_copy_on_write"] end
87
+ end
88
+
89
+ bash "host_config_btrfs" do
90
+ code <<-EOH
91
+ mkdir -p /mnt/btrfs
92
+ mount -t btrfs -o loop #{node["lxc"]["host"]["btrfs_img_path"]} /mnt/btrfs
93
+ if [ ! -e #{node["lxc"]["root_path"]} ]; then
94
+ ln -s /mnt/btrfs #{node["lxc"]["root_path"]}
95
+ fi
96
+ EOH
97
+ only_if do node["lxc"]["host"]["use_copy_on_write"] end
98
+ not_if "df | grep /mnt/btrfs"
99
+ end
100
+
101
+ bash "host_install_lxc" do
102
+ code <<-EOH
103
+ # install requirements for lxc and some tools
104
+ yum install --skip-broken -y libcap-devel febootstrap bridge-utils libvirt git screen
105
+ # install lxc
106
+ yum install --skip-broken -y lxc
107
+ # fix for https://bugs.archlinux.org/task/31211
108
+ mount --make-rprivate /
109
+ EOH
110
+ not_if "which lxc-ls 2> /dev/null"
111
+ # don't execute if we use docker.io tools
112
+ not_if do node["lxc"]["use_docker.io"] end
113
+ end
114
+
115
+ # configure SSH settings to disable strict host checking when connecting to LXC containers
116
+ bash "host_config_ssh" do
117
+ code <<-EOH
118
+ mkdir -p /root/.ssh
119
+ echo "Host #{node["network"]["ip_pattern"]}" >> /root/.ssh/config
120
+ echo ' UserKnownHostsFile=/dev/null' >> /root/.ssh/config
121
+ echo ' StrictHostKeyChecking=no' >> /root/.ssh/config
122
+ echo ' ConnectionAttempts=10' >> /root/.ssh/config
123
+ EOH
124
+ not_if "cat /root/.ssh/config | grep \"#{node["network"]["ip_pattern"]}\""
125
+ end
126
+
127
+ # install docker.io tools for LXC handling
128
+ if node["lxc"]["use_docker.io"]
129
+ include_recipe "lxc::install_docker"
130
+ end
131
+
132
+ # configure network bridge on host
133
+ bash "host_create_bridge" do
134
+ code <<-EOH
135
+ /usr/sbin/brctl addbr #{node["network"]["host"]["bridge_device"]}
136
+ /usr/sbin/brctl setfd #{node["network"]["host"]["bridge_device"]} 0
137
+ EOH
138
+ not_if "/sbin/iptables | grep #{node["network"]["host"]["bridge_device"]}"
139
+ # don't execute if we use docker.io tools
140
+ not_if do node["lxc"]["use_docker.io"] end
141
+ end
142
+
143
+ # configure network bridge on host
144
+ bash "host_config_bridge" do
145
+ code <<-EOH
146
+ /sbin/ifconfig #{node["network"]["host"]["bridge_device"]} #{node["network"]["gateway"]} netmask 255.255.0.0 promisc up
147
+ EOH
148
+ not_if "/sbin/iptables | grep #{node["network"]["host"]["bridge_device"]}"
149
+ end
150
+
151
+ bash "host_setup_bridge_iptables" do
152
+ code <<-EOH
153
+ /sbin/iptables -t nat -A POSTROUTING -o #{node["network"]["host"]["wan_device"]} -j MASQUERADE
154
+ echo 1 > /proc/sys/net/ipv4/ip_forward
155
+ EOH
156
+ not_if "/sbin/iptables -t nat -L POSTROUTING | grep MASQUERADE | grep anywhere"
157
+ end
158
+
159
+ # disable iptables if packet rejection is turned on
160
+ bash "host_disable_iptables_reject" do
161
+ code <<-EOH
162
+ /sbin/service iptables stop
163
+ EOH
164
+ only_if "iptables -L | grep 'reject-with icmp-host-prohibited'"
165
+ end
166
+
167
+
168
+ # setup squid proxy on host
169
+ include_recipe "lxc::setup_proxy"
170
+
171
+ # setup DB server on host
172
+ include_recipe "lxc::setup_database"
173
+
174
+ # required gem for adding encoding headers to avoid "invalid multibyte char" errors
175
+ gem_package "magic_encoding" do
176
+ action :install
177
+ ignore_failure true
178
+ end
179
+
@@ -0,0 +1,157 @@
1
+
2
+ # install squid
3
+ #package "squid" do
4
+ # action :install
5
+ # not_if "which squid"
6
+ #end
7
+ # due to some recent changes in squid, we have to use version <= 3.1 (--> manual install)
8
+ bash "proxy_install_squid" do
9
+ code <<-EOH
10
+ rm -rf /tmp/squidSetup
11
+ mkdir -p /tmp/squidSetup
12
+ cd /tmp/squidSetup
13
+ echo "INFO: Downloading squid archive"
14
+ squid_version=3.1.21
15
+ squid_shortversion=3.1
16
+ #squid_version=3.3.8
17
+ #squid_shortversion=3.3
18
+
19
+ wget http://www.squid-cache.org/Versions/v3/$squid_shortversion/squid-$squid_version.tar.gz -O squid-$squid_version.tar.gz
20
+ gzip -d squid-$squid_version.tar.gz
21
+ tar xf squid-$squid_version.tar
22
+ cd squid-$squid_version
23
+
24
+ # do NOT treat compile warnings as errors:
25
+ sed -i "s/-Werror//g" configure
26
+
27
+ ./configure
28
+ echo "INFO: Compiling squid binary, please be patient."
29
+ make > /dev/null
30
+ make install
31
+ EOH
32
+ not_if "which squid"
33
+ end
34
+
35
+ # link squid binary, config, and log files
36
+ bash "proxy_link_squid" do
37
+ code <<-EOH
38
+ ln -s /usr/local/squid/sbin/squid /usr/sbin/squid
39
+ chmod 777 /usr/local/squid/var/logs/
40
+ ln -s /usr/local/squid/var/logs/ /var/log/squid
41
+ mkdir -p /etc/squid
42
+ if [ -e /etc/squid/squid.conf ]; then
43
+ mv /etc/squid/squid.conf /etc/squid/squid.conf.bak
44
+ fi
45
+ mv /usr/local/squid/etc/squid.conf /etc/squid/squid.conf
46
+ # do not symlink the other way around..! The "sed -i" command later will
47
+ # turn /etc/squid/squid.conf into a regular file, even if it's a symlink...
48
+ # https://bugs.launchpad.net/ubuntu/+source/sed/+bug/367211
49
+ ln -s /etc/squid/squid.conf /usr/local/squid/etc/squid.conf
50
+ EOH
51
+ # "test -L" tests for symbolic link
52
+ not_if "test -L /usr/local/squid/etc/squid.conf"
53
+ end
54
+
55
+ # setup iptables for transparent use of squid proxy
56
+ bash "proxy_setup_iptables" do
57
+ code <<-EOH
58
+ echo "INFO: Setting up local iptables for transparent proxy"
59
+ /sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner squid -j REDIRECT --to-ports 3128
60
+ EOH
61
+ only_if do node["lxc"]["host"]["use_proxy"] end
62
+ not_if "/sbin/iptables -t nat -L OUTPUT | grep 3128 | grep REDIRECT"
63
+ end
64
+
65
+ # create cache directory
66
+ bash "proxy_create_cache_dir" do
67
+ code <<-EOH
68
+ mkdir -p #{node["lxc"]["proxy"]["cache_dir"]}
69
+ chmod 777 #{node["lxc"]["proxy"]["cache_dir"]}
70
+ EOH
71
+ only_if do node["lxc"]["host"]["use_proxy"] end
72
+ only_if do node["lxc"]["proxy"]["cache_dir"] != "" end
73
+ not_if "test -d #{node["lxc"]["proxy"]["cache_dir"]}"
74
+ end
75
+
76
+ # update squid config
77
+ bash "proxy_squid_config" do
78
+ code <<-EOH
79
+ # allow machines from certain subnets to access squid
80
+ # TODO make configurable
81
+ echo "acl localnet src 9.0.0.0/8" >> /etc/squid/squid.conf
82
+ echo "acl localnet src 128.131.0.0/16" >> /etc/squid/squid.conf
83
+ echo "acl localnet src 128.130.0.0/16" >> /etc/squid/squid.conf
84
+
85
+ # use squid cache directory
86
+ if [ "#{node["lxc"]["proxy"]["cache_dir"]}" != "" ]; then
87
+ echo "cache_dir ufs #{node["lxc"]["proxy"]["cache_dir"]} 200000 16 256 max-size=100000000" >> /etc/squid/squid.conf
88
+ fi
89
+
90
+ # increase maximum file size
91
+ echo "maximum_object_size 50000 KB" >> /etc/squid/squid.conf
92
+
93
+ # set refresh patterns/intervals
94
+ sed -i '1refresh_pattern github 60 20% 4320 override-expire ignore-private' /etc/squid/squid.conf
95
+
96
+ # don't cache files from certain servers
97
+ echo "#no_cache deny dont_cache" >> /etc/squid/squid.conf
98
+ echo "" >> /etc/squid/squid.conf
99
+
100
+ # make sure squid runs in "transparent" mode
101
+ sed -i 's/\\(http_port .*\\)$/#\\1/g' /etc/squid/squid.conf
102
+ echo "http_port 3128 transparent" >> /etc/squid/squid.conf
103
+ echo "" >> /etc/squid/squid.conf
104
+
105
+ # Note 1: this seems to fix an error related to some clients (git?) not handling "Expect: 100-continue" headers correctly
106
+ # see http://drupal.org/node/1101210
107
+ # Note 2: Dont add, because: "ERROR: Directive 'ignore_expect_100' is obsolete."
108
+ #echo "ignore_expect_100 on" >> /etc/squid/squid.conf
109
+
110
+ echo "#toaster_squid_config_added (dont remove this line)" >> /etc/squid/squid.conf
111
+
112
+ # force restart in next step below
113
+ if [ -f /etc/init.d/squid ]; then
114
+ /etc/init.d/squid stop
115
+ elif [ "`ps -A | grep squid`" != "" ]; then
116
+ killall squid
117
+ killall squid
118
+ fi
119
+ exit 0
120
+ EOH
121
+ not_if "cat /etc/squid/squid.conf | grep toaster_squid_config_added"
122
+ end
123
+
124
+ # start squid
125
+ bash "proxy_squid_start" do
126
+ code <<-EOH
127
+ if [ "#{node["lxc"]["proxy"]["cache_dir"]}" != "" ]; then
128
+ if [ ! -d #{node["lxc"]["proxy"]["cache_dir"]}/00 ]; then
129
+ mkdir /data/squid
130
+ chmod 777 /data/squid
131
+
132
+ # force squid to create data directories (-z parameter)..
133
+ screen -d -m /usr/sbin/squid -z
134
+ sleep 4
135
+ killall squid > /dev/null 2>&1
136
+ fi
137
+ fi
138
+ if [ -f /etc/init.d/squid ]; then
139
+ /etc/init.d/squid start
140
+ else
141
+ # DON'T run via screen! squid will go to background
142
+ # automatically and this line fails in EC2
143
+ #screen -d -m /usr/sbin/squid
144
+ /usr/sbin/squid
145
+ fi
146
+ sleep 2
147
+ running=`ps -A | grep squid`
148
+ if [ "$running" == "" ]; then
149
+ echo "ERROR: Squid failed to start using '/usr/sbin/squid'."
150
+ exit 1
151
+ end
152
+ fi
153
+ EOH
154
+ not_if "ps -A | grep squid"
155
+ end
156
+
157
+
@@ -0,0 +1,180 @@
1
+
2
+ rootfs = node["lxc"]["cont"]["root_fs"]
3
+
4
+ bash "lxc_prepare_proto" do
5
+ code <<-EOH
6
+ # do some additional tasks for prototypes
7
+ echo "INFO: Turn /etc/resolv.conf symlink within prototype into actual file"
8
+ # turn /etc/resolv.conf symlink into actual file
9
+ rm -f #{node["lxc"]["cont"]["root_fs"]}/etc/resolv.conf
10
+ cp /etc/resolv.conf #{node["lxc"]["cont"]["root_fs"]}/etc/resolv.conf
11
+ # enable forwarding on the host
12
+ echo 1 > /proc/sys/net/ipv4/ip_forward
13
+ EOH
14
+ only_if do node["lxc"]["cont"]["name"].match(/^prototype_.*/) end
15
+ # don't execute if we use docker.io tools
16
+ not_if do node["lxc"]["use_docker.io"] end
17
+ end
18
+
19
+ if node["lxc"]["use_docker.io"]
20
+ bash "lxc_start" do
21
+ code <<-EOH
22
+ ip_addr=#{node["lxc"]["cont"]["ip_address"]}
23
+ name=#{node["lxc"]["cont"]["name"]}
24
+ proto_name=#{node["lxc"]["proto"]["name"]}
25
+ echo "$proto_name" >> /tmp/tmp.lxc.protos
26
+ if [ "$proto_name" == "" ]; then
27
+ proto_name=`cat #{node["lxc"]["root_path"]}/$name/container.prototype.name`
28
+ fi
29
+ echo "$proto_name" >> /tmp/tmp.lxc.protos
30
+ if [ "$proto_name" == "" ]; then
31
+ proto_name=#{node["lxc"]["cont"]["name"]}
32
+ fi
33
+ cidfile=#{node["lxc"]["root_path"]}/$name/docker.container.id
34
+ rm -f $cidfile
35
+ screen -m -d docker run --cidfile=$cidfile --privileged prototypes:$proto_name bash -c "ifconfig eth0 $ip_addr && route add default gw #{node["network"]["gateway"]} && /usr/sbin/sshd -D"
36
+ echo "INFO: LXC container '#{node["lxc"]["cont"]["name"]}' started in the background using 'screen'."
37
+ sleep 2
38
+ #contID=`docker ps | grep -v IMAGE | head -n 1 | awk '{print $1}'`
39
+ contID=`cat "$cidfile"`
40
+ if [ "$contID" == "" ]; then
41
+ echo "WARN: Container could not be started. Name '$name', prototype '$proto_name', IP '$ip_addr'"
42
+ exit 1
43
+ fi
44
+ #contID=`ls /var/lib/docker/containers/ | grep "$contID"`
45
+ echo "$contID" >> /tmp/tmp.lxc.cont.ids
46
+ rm -f #{node["lxc"]["root_path"]}/$name/rootfs
47
+
48
+ # create a symlink to the rootfs folder. This
49
+ # differs in different versions of docker.. :/
50
+ if [ -d /var/lib/docker/aufs/mnt/$contID ]; then
51
+ ln -s /var/lib/docker/aufs/mnt/$contID #{node["lxc"]["root_path"]}/$name/rootfs
52
+ elif [ -d /var/lib/docker/containers/$contID/rootfs ]; then
53
+ ln -s /var/lib/docker/containers/$contID/rootfs #{node["lxc"]["root_path"]}/$name/rootfs
54
+ else
55
+ echo "ERROR: Unable to determine container root directory."
56
+ exit 1
57
+ fi
58
+
59
+ EOH
60
+ end
61
+ else
62
+ bash "lxc_start" do
63
+ code <<-EOH
64
+ lxc-create -f #{node["lxc"]["cont"]["config_file"]} -n #{node["lxc"]["cont"]["name"]}
65
+ screen -m -d lxc-start -n #{node["lxc"]["cont"]["name"]}
66
+ echo "INFO: LXC container '#{node["lxc"]["cont"]["name"]}' started in the background using 'screen'."
67
+ sleep 3
68
+ EOH
69
+ end
70
+ end
71
+
72
+
73
+ bash "auth_ssh" do
74
+ code <<-EOH
75
+ # authorize local ssh public key within container
76
+ if [ ! -f "/root/.ssh/id_rsa" ]; then
77
+ ssh-keygen -N "" -f /root/.ssh/id_rsa
78
+ fi
79
+ mkdir -p #{rootfs}/root/.ssh
80
+ touch #{rootfs}/root/.ssh/authorized_keys
81
+ key=`cat /root/.ssh/id_rsa.pub | head -n 1 | awk '{print $2}'`
82
+ existing=`cat #{rootfs}/root/.ssh/authorized_keys | grep "$key"`
83
+ if [ "$existing" == "" ]; then
84
+ cat /root/.ssh/id_rsa.pub >> #{rootfs}/root/.ssh/authorized_keys
85
+ fi
86
+
87
+ # make sure we have the right permissions (ssh will fail on too loose permissions)
88
+ chmod 700 #{rootfs}/root/.ssh
89
+ chmod 600 #{rootfs}/root/.ssh/authorized_keys
90
+
91
+ EOH
92
+ end
93
+
94
+
95
+ bash "lxc_adjust_iptables" do
96
+ code <<-EOH
97
+ iptables -F
98
+ EOH
99
+ only_if "iptables -L | grep REJECT | grep all"
100
+ end
101
+
102
+ bash "lxc_wait_for_connectivity" do
103
+ code <<-EOH
104
+ # sometimes the network is not immediately available
105
+ echo "INFO: ssh'ing into '#{node["lxc"]["cont"]["ip_address"]}'"
106
+ for i in {1..10}; do
107
+ ssh #{node["lxc"]["cont"]["ip_address"]} echo && break
108
+ sleep 1
109
+ if [ "$i" == "10" ]; then
110
+ echo "WARN: Unable to ssh into new container."
111
+ fi
112
+ done
113
+ EOH
114
+ end
115
+
116
+ file "lxc_create_setup_script" do
117
+ path "#{node["lxc"]["cont"]["root_fs"]}/tmp/setup.instance.inside.sh"
118
+ mode "0755"
119
+ content <<-EOH
120
+ #!/bin/bash
121
+
122
+ # make sure we have a default route
123
+ existing=`route | grep "^default"`
124
+ if [ "$existing" == "" ]; then
125
+ route add default gw #{node["network"]["gateway"]}
126
+ echo
127
+ fi
128
+
129
+ # this should fix problems with TTY when trying to ssh into ubuntu container
130
+ if [ "#{node["lxc"]["bare_os"]["distribution"]}" != "fedora" ]; then
131
+ mount -t devpts none /dev/pts -o rw,noexec,nosuid,gid=5,mode=0620 2> /dev/null
132
+ echo
133
+ fi
134
+
135
+ # setup transparent proxy forwarding
136
+ existing=`iptables -t nat -L OUTPUT | grep 3128 | grep DNAT`
137
+ if [ "$existing" == "" ] && [ "#{node["lxc"]["cont"]["proxy_ip"]}" != "" ]; then
138
+ echo "INFO: Setting up local iptables for transparent proxy residing under '#{node["lxc"]["cont"]["proxy_ip"]}:3128'"
139
+ if [ -f "/etc/init.d/iptables" ]; then
140
+ /etc/init.d/iptables start
141
+ fi
142
+ iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to #{node["lxc"]["cont"]["proxy_ip"]}:3128
143
+ fi
144
+
145
+ exit 0
146
+ EOH
147
+ end
148
+
149
+ bash "lxc_setup_inside" do
150
+ code <<-EOH
151
+ # again, wait for connectivity
152
+ echo "INFO: ssh'ing into '#{node["lxc"]["cont"]["ip_address"]}'"
153
+ for i in {1..3}; do
154
+ ssh #{node["lxc"]["cont"]["ip_address"]} echo && break
155
+ sleep 2
156
+ if [ "$i" == "3" ]; then
157
+ echo "WARN: Unable to ssh into new container."
158
+ exit 1
159
+ fi
160
+ done
161
+ # ssh into the container and run config scripts from there
162
+ echo "INFO: ssh'ing into the LXC container at '#{node["lxc"]["cont"]["ip_address"]}' to perform some configurations."
163
+ ssh #{node["lxc"]["cont"]["ip_address"]} /tmp/setup.instance.inside.sh
164
+ EOH
165
+ end
166
+
167
+ bash "lxc_wait_for_dns" do
168
+ code <<-EOH
169
+ # sometimes DNS is not immediately available
170
+ for i in {1..20}; do
171
+ ssh #{node["lxc"]["cont"]["ip_address"]} ping -c 1 www.google.com && break
172
+ sleep 1
173
+ if [ "$i" == "20" ]; then
174
+ echo "WARN: Unable to ssh into new container and ping host 'www.google.com'."
175
+ exit 1
176
+ fi
177
+ done
178
+ EOH
179
+ end
180
+
@@ -0,0 +1,86 @@
1
+
2
+ # save changes of prototype container with docker
3
+ bash "lxc_docker_commit" do
4
+ code <<-EOH
5
+ cont_name=#{node["lxc"]["cont"]["name"]}
6
+ ip_address=#{node["lxc"]["cont"]["ip_address"]}
7
+ root_path=#{node["lxc"]["root_path"]}
8
+
9
+ imgID=`cat $root_path/$cont_name/docker.image.id`
10
+ instID=`cat $root_path/$cont_name/docker.container.id`
11
+ if [ "$imgID" == "" ] || [ "$instID" == "" ]; then
12
+ echo "WARN: Invalid image ID or instance ID for prototype '$cont_name': '$imgID', '$instID'"
13
+ exit 1
14
+ fi
15
+ # TODO config.lxc now renamed to config.json in new docker versions!
16
+ cp /var/lib/docker/containers/$instID/config.lxc $root_path/$cont_name/config
17
+ echo "lxc.network.ipv4 = $ip_address/16" >> $root_path/$cont_name/config
18
+ newImgID=`docker commit $instID prototypes "$cont_name"` # old syntax
19
+ if [ "$newImgID" == "" ]; then
20
+ newImgID=`docker commit $instID prototypes:$cont_name` # new syntax
21
+ fi
22
+ if [ "$newImgID" != "" ]; then
23
+ # remove old docker image
24
+ docker rmi $imgID
25
+ # update new image id
26
+ echo $newImgID > $root_path/$cont_name/docker.image.id
27
+ else
28
+ echo "WARN: Unable to save/commit prototype with docker (invalid new image ID received)"
29
+ exit 1
30
+ fi
31
+ EOH
32
+ # only execute if we use docker.io tools
33
+ only_if do node["lxc"]["use_docker.io"] end
34
+ # only execute if this is a prototype container
35
+ only_if do node["lxc"]["cont"]["name"].match(/^prototype_.*/) end
36
+ end
37
+
38
+ bash "lxc_stop" do
39
+ if node["lxc"]["use_docker.io"]
40
+ code <<-EOH
41
+ name=#{node["lxc"]["cont"]["name"]}
42
+ contID=`cat #{node["lxc"]["root_path"]}/$name/docker.container.id`
43
+ docker kill $contID
44
+ docker rm $contID
45
+ EOH
46
+ else
47
+ code <<-EOH
48
+ name=#{node["lxc"]["cont"]["name"]}
49
+ lxc-stop -n $name
50
+ version=`lxc-version`
51
+ if [ "${version:0:3}" == "0.7" ]; then
52
+ lxc-destroy -n #{node["lxc"]["cont"]["name"]}
53
+ else
54
+ # WARN: starting with LXC 0.8.0, lxc-destroy deletes the rootfs!
55
+ root_path=#{node["lxc"]["root_path"]}
56
+
57
+ if [ #{node["lxc"]["use_copy_on_write"] ? 1 : 0} ]; then
58
+ mv $root_path/$name $root_path/$name.copy
59
+ #/sbin/btrfs subvolume snapshot $root_path/$name $root_path/$name.copy
60
+ lxc-destroy -n $name
61
+ #/sbin/btrfs subvolume delete $root_path/$name
62
+ else
63
+ cp -r $root_path/$name $root_path/$name.copy
64
+ lxc-destroy -n $name
65
+ rm -r $root_path/$name
66
+ fi
67
+ mv $root_path/$name.copy $root_path/$name
68
+ fi
69
+ EOH
70
+ end
71
+ end
72
+
73
+ bash "lxc_stop_proto" do
74
+ code <<-EOH
75
+ # do some additional tasks for prototypes
76
+
77
+ echo "INFO: Resetting /etc/resolv.conf within prototype to a symlink"
78
+ # reset /etc/resolv.conf to symlink
79
+ rm -f #{node["lxc"]["cont"]["root_fs"]}/etc/resolv.conf
80
+ ln -s /etc/resolv.conf #{node["lxc"]["cont"]["root_fs"]}/etc/resolv.conf
81
+ EOH
82
+ only_if do node["lxc"]["cont"]["name"].match(/^prototype_.*/) end
83
+ # don't execute if we use docker.io tools
84
+ not_if do node["lxc"]["use_docker.io"] end
85
+ end
86
+