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,244 @@
1
+ #
2
+ # Copyright 2011, edelight GmbH
3
+ #
4
+ # Authors:
5
+ # Markus Korn <markus.korn@edelight.de>
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require "rubygems"
21
+ require "test/unit"
22
+ require "chef"
23
+
24
+ # mocking chef such that it thinks it's running as chef-solo and knows about
25
+ # the location of the data_bag
26
+ Chef::Config[:solo] = true
27
+ Chef::Config[:data_bag_path] = "#{File.dirname(__FILE__)}/data/data_bags"
28
+
29
+ # load the extension
30
+ require File.expand_path('../../libraries/search', __FILE__)
31
+
32
+ module SearchDbTests
33
+
34
+ def test_search_all
35
+ # try to get data of all users
36
+ nodes = search(:users, "*:*")
37
+ assert_equal nodes.length, 4
38
+ nodes = search(:users)
39
+ assert_equal nodes.length, 4
40
+ nodes = search(:users, nil)
41
+ assert_equal nodes.length, 4
42
+ end
43
+
44
+ def test_search_exact_match
45
+ nodes = search(:users, "username:speedy")
46
+ assert_equal nodes.length, 1
47
+ assert_equal nodes[0]["username"], "speedy"
48
+ end
49
+
50
+ def test_get_all_with_field
51
+ nodes = search(:users, "username:*")
52
+ assert nodes.length > 0
53
+ assert nodes.all?{|x| !x["username"].nil?}
54
+ end
55
+
56
+ def test_get_all_without_field
57
+ nodes = search(:users, "(NOT username:*)")
58
+ assert nodes.length == 0
59
+ nodes = search(:users, "(NOT color:*)")
60
+ assert nodes.length == 3
61
+ assert nodes.all?{|x| x["color"].nil?}
62
+ end
63
+
64
+ def test_get_all_but_speedy
65
+ nodes = search(:users, "NOT username:speedy")
66
+ assert nodes.length > 0
67
+ assert nodes.all?{|x| x["username"] != "speedy"}
68
+ end
69
+
70
+ def test_array_includes
71
+ nodes = search(:users, "children:tom")
72
+ assert nodes.length == 2
73
+ assert nodes.all?{ |x| x["children"].include?("tom") }
74
+ nodes = search(:users, "children:jerry")
75
+ assert nodes.length == 1
76
+ assert nodes.all?{ |x| x["children"].include?("jerry") }
77
+ end
78
+
79
+ def test_boolean
80
+ nodes = search(:users, "married:true")
81
+ assert nodes.length == 3
82
+ assert nodes.all?{ |x| x["married"] == true }
83
+ nodes = search(:users, "married:false")
84
+ assert nodes.length == 1
85
+ assert nodes[0]["married"] == false
86
+ end
87
+
88
+ def test_integer
89
+ nodes = search(:users, "age:35")
90
+ assert nodes.length == 1
91
+ assert nodes[0]["age"] == 35
92
+ end
93
+
94
+ def test_AND_condition
95
+ nodes = search(:users, "married:true AND age:35")
96
+ assert nodes.length == 1
97
+ assert nodes[0]["username"] == "lea"
98
+ end
99
+
100
+ def test_OR_condition
101
+ nodes = search(:users, "age:42 OR age:22")
102
+ assert nodes.length == 2
103
+ end
104
+
105
+ def test_NOT_condition
106
+ nodes = search(:users, "children:tom AND (NOT gender:female)")
107
+ assert nodes.length == 1
108
+ nodes = search(:users, "children:tom AND (NOT gender:female) AND age:42")
109
+ assert nodes.length == 1
110
+ nodes = search(:users, "children:tom AND (NOT gender:female) AND (NOT age:42)")
111
+ assert nodes.length == 0
112
+ end
113
+
114
+ def test_any_value
115
+ nodes = search(:users, "children:*")
116
+ assert nodes.length == 2
117
+ end
118
+
119
+ def test_any_value_lucene_range
120
+ nodes = search(:users, "address:[* TO *]")
121
+ assert nodes.length == 2
122
+ end
123
+
124
+ def test_general_lucene_range_fails
125
+ assert_raises RuntimeError do
126
+ nodes = search(:users, "children:[aaa TO zzz]")
127
+ end
128
+ end
129
+
130
+ def test_block_usage
131
+ # bracket syntax
132
+ result = []
133
+ search(:users, "*:*") {|x| result << x["id"]}
134
+ assert result.length == 4
135
+
136
+ # do...end syntax
137
+ result = []
138
+ search(:users) do |x|
139
+ result << x["id"]
140
+ end
141
+ assert result.length == 4
142
+ end
143
+
144
+ def test_check_escaped_chars
145
+ nodes = search(:users, 'tag:tag\:\:test')
146
+ assert nodes.length == 1
147
+ nodes = search(:users, "tag:tag\\:\\:test")
148
+ assert nodes.length == 1
149
+ nodes = search(:users, 'tags:tag\:\:first')
150
+ assert nodes.length == 1
151
+ nodes = search(:users, "tags:tag\\:\\:first")
152
+ assert nodes.length == 1
153
+ nodes = search(:users, 'tags:tag\:\:*')
154
+ assert nodes.length == 1
155
+ nodes = search(:users, "tags:tag\\:\\:*")
156
+ assert nodes.length == 1
157
+ end
158
+
159
+ def test_wildcards
160
+ nodes = search(:users, "gender:f??ale")
161
+ assert nodes.length == 1
162
+ nodes = search(:users, "username:spee?y")
163
+ assert nodes.length == 1
164
+ nodes = search(:users, "username:spee*")
165
+ assert nodes.length == 1
166
+ end
167
+
168
+ def test_empty_field_value
169
+ assert_raise(RuntimeError) {
170
+ search(:users, "gender:#{nil} AND age:35")
171
+ }
172
+ assert_raise(RuntimeError) {
173
+ search(:users, "gender: AND age:35")
174
+ }
175
+ assert_raise(RuntimeError) {
176
+ search(:users, "gender:\"\" AND age:35")
177
+ }
178
+ end
179
+
180
+ def test_OR_group
181
+ nodes = search(:users, "id:(mike OR tom)")
182
+ assert nodes.length == 2
183
+ end
184
+
185
+ def test_nested_fieldnames
186
+ nodes = search(:users, "address_street:wilhelmsstrasse")
187
+ assert nodes.length == 1
188
+ nodes = search(:users, "address_street_floor:1")
189
+ assert nodes.length == 1
190
+ end
191
+ end
192
+
193
+ module SearchNodeTests
194
+ def test_list_nodes
195
+ nodes = search(:node)
196
+ assert_equal Chef::Node, nodes.find{ |n| n["hostname"] == "alpha.example.com" }.class
197
+ assert_equal Chef::Node, nodes.find{ |n| n["hostname"] == "beta.example.com" }.class
198
+ assert_equal Hash, nodes.find{ |n| n["hostname"] == "wjc.example.com" }.class
199
+ assert_equal 3, nodes.length
200
+ end
201
+
202
+ def test_search_node_with_wide_filter
203
+ nodes = search(:node, "role:test_server AND chef_environment:default")
204
+ assert_equal 2, nodes.length
205
+ end
206
+
207
+ def test_search_node_with_narrow_filter
208
+ nodes = search(:node, "role:beta_server")
209
+ assert_equal 1, nodes.length
210
+ end
211
+
212
+ def test_search_node_with_attr_filter
213
+ nodes = search(:node, "hostname:beta.example.com")
214
+ assert_equal 1, nodes.length
215
+ end
216
+
217
+ def test_search_node_without_json_class
218
+ nodes = search(:node, "chef_environment:default")
219
+ assert_equal 3, nodes.length
220
+ end
221
+ end
222
+
223
+ class TestImplicitSearchDB < Test::Unit::TestCase
224
+ include SearchDbTests
225
+ include SearchNodeTests
226
+
227
+ def search(*args, &block)
228
+ # wrapper around creating a new Recipe instance and calling search on it
229
+ node = Chef::Node.new()
230
+ cookbooks = Chef::CookbookCollection.new()
231
+ run_context = Chef::RunContext.new(node, cookbooks, nil)
232
+ return Chef::Recipe.new("test_cookbook", "test_recipe", run_context).search(*args, &block)
233
+ end
234
+ end
235
+
236
+ class TestExplicitSearchDB < Test::Unit::TestCase
237
+ include SearchDbTests
238
+ include SearchNodeTests
239
+
240
+ def search(*args, &block)
241
+ Chef::Search::Query.new.search(*args, &block)
242
+ end
243
+ end
244
+
@@ -0,0 +1,8 @@
1
+
2
+ include_attribute "lxc::start_lxc"
3
+
4
+ # among others, load required attributes:
5
+ # - node["lxc"]["use_copy_on_write"]
6
+ # - node["lxc"]["host"]["btrfs_img_path"]
7
+ include_attribute "lxc::setup_host"
8
+
@@ -0,0 +1,15 @@
1
+
2
+ default["lxc"]["root_path"] = "/lxc/"
3
+ default["lxc"]["use_copy_on_write"] = false
4
+ default["lxc"]["mount_volume"] = false
5
+ default["lxc"]["store_containers_on_volume"] = false
6
+ default["lxc"]["use_docker.io"] = true
7
+ if !platform_family?("debian")
8
+ set["lxc"]["use_docker.io"] = false
9
+ end
10
+
11
+ default["network"]["gateway"] = "192.168.100.2"
12
+ default["network"]["ip_pattern"] = "192.168.100.*"
13
+ default["network"]["bridge_dev"] = "docker0"
14
+
15
+ default["path"]["chroot"] = "/usr/sbin/chroot"
@@ -0,0 +1,15 @@
1
+
2
+ include_attribute "lxc::general"
3
+
4
+ default["lxc"]["bare_os"]["distribution"] = "ubuntu"
5
+ if node["lxc"]["bare_os"]["distribution"] == "ubuntu"
6
+ default["lxc"]["bare_os"]["release"] = "quantal"
7
+ elsif node["lxc"]["bare_os"]["distribution"] == "fedora"
8
+ default["lxc"]["bare_os"]["release"] = "16"
9
+ end
10
+ default["lxc"]["bare_os"]["arch"] = "amd64"
11
+ default["lxc"]["bare_os"]["cachedir"] = "/var/cache/lxc/" +
12
+ "#{node["lxc"]["bare_os"]["distribution"]}/" +
13
+ "#{node["lxc"]["bare_os"]["arch"]}/" +
14
+ "#{node["lxc"]["bare_os"]["release"]}"
15
+
@@ -0,0 +1,18 @@
1
+
2
+ include_attribute "lxc::general"
3
+ include_attribute "lxc::init_bare_os"
4
+ include_attribute "lxc::setup_host"
5
+ include_attribute "lxc::start_lxc"
6
+ include_attribute "lxc::install_ruby"
7
+
8
+ default["lxc"]["proto"]["name"] = "prototype_ubuntu1"
9
+ default["lxc"]["proto"]["root_path"] = "#{node["lxc"]["root_path"]}/#{node["lxc"]["proto"]["name"]}"
10
+ default["lxc"]["proto"]["root_fs"] = "#{node["lxc"]["proto"]["root_path"]}/rootfs/"
11
+ default["lxc"]["proto"]["config_file"] = "#{node["lxc"]["proto"]["root_path"]}/config"
12
+
13
+ default["lxc"]["proto"]["root_pass"] = "passw0rd"
14
+
15
+ default["lxc"]["proto"]["network_type"] = "veth"
16
+ default["lxc"]["proto"]["network_link"] = node["network"]["bridge_dev"]
17
+ default["lxc"]["proto"]["ip_address"] = "192.168.100.250"
18
+ default["lxc"]["proto"]["ssh_user"] = "root"
@@ -0,0 +1,51 @@
1
+
2
+ default['ruby']['version'] = "2.0.0-p0"
3
+ default['ruby']['version_short'] = "2.0.0"
4
+
5
+ require "erb"
6
+ require "ostruct"
7
+ class NamespacedERB < OpenStruct
8
+ def render(template)
9
+ ERB.new(template).result(binding)
10
+ end
11
+ end
12
+ file = File.read(File.join(File.dirname(__FILE__), "..", "files", "install.chef.sh"))
13
+ erb = NamespacedERB.new(:node => node)
14
+ set['ruby']['_install_script'] = erb.render(file)
15
+
16
+ set['ruby']['install_script']['fedora'] = <<-EOH
17
+
18
+ # install some dependencies
19
+ yum -y install bison autoconf automake zlib git libyaml gcc-c++ patch readline readline-devel sed
20
+ yum -y install zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 libtool iconv-devel
21
+
22
+ # start the actual RVM installation
23
+ #{node['ruby']['_install_script']}
24
+ EOH
25
+
26
+
27
+ set['ruby']['install_script']['ubuntu'] = <<-EOH
28
+
29
+ # force non-interactive install mode
30
+ export DEBIAN_FRONTEND=noninteractive
31
+
32
+ # install some dependencies
33
+
34
+ # The following line fails under Ubuntu quantal..
35
+ apt-get -y --force-yes install libc6-dev-amd6
36
+ apt-get -y --force-yes install libeditline-dev build-essential
37
+ # removed from list: package rubygems (automatically installs Ruby 1.8, which is undesired)
38
+ apt-get -y --force-yes install bison git autoconf automake patch make bzip2 zlib1g-dev sed libtool
39
+ apt-get -y --force-yes install less screen whiptail tar lsof unzip curl wget patch apt-utils make vim
40
+
41
+ # RVM wants us to install even more dependencies...
42
+ # removed package "openssl" from list
43
+ apt-get -y --force-yes install libreadline-dev libedit-dev
44
+ apt-get -y --force-yes install libssl-dev
45
+ apt-get -y --force-yes install git-core zlib1g zlib1g-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev curl
46
+ apt-get -y --force-yes install libxslt-dev autoconf libc6-dev ncurses-dev automake bison subversion pkg-config
47
+ apt-get -y --force-yes install lib32z1-dev
48
+
49
+ # start the actual RVM installation
50
+ #{node['ruby']['_install_script']}
51
+ EOH
@@ -0,0 +1,11 @@
1
+
2
+ include_attribute "lxc::general"
3
+
4
+ #default["lxc"]["mount"]["dev_disk"] = "/dev/vda"
5
+ #default["lxc"]["mount"]["dev_partition"] = "/dev/vda3"
6
+ default["lxc"]["mount"]["last_sector"] = "125829086"
7
+
8
+ default["lxc"]["mount"]["dev_disk"] = "/dev/vdb"
9
+ default["lxc"]["mount"]["dev_partition"] = "/dev/vdb1"
10
+ default["lxc"]["mount"]["last_sector"] = "" # leave blank for auto-detection
11
+
@@ -0,0 +1,9 @@
1
+
2
+ include_attribute "lxc::general"
3
+
4
+ default["lxc"]["host"]["use_proxy"] = false
5
+ default["lxc"]["host"]["btrfs_img_size_MB"] = 35000
6
+ default["lxc"]["host"]["btrfs_img_path"] = "/data/btrfs.img"
7
+ default["network"]["host"]["wan_device"] = "eth0"
8
+ default["network"]["host"]["bridge_device"] = node["network"]["bridge_dev"]
9
+
@@ -0,0 +1,3 @@
1
+
2
+ default["lxc"]["proxy"]["cache_dir"] = "/data/squid"
3
+
@@ -0,0 +1,11 @@
1
+
2
+ include_attribute "lxc::general"
3
+
4
+ default["lxc"]["cont"]["use_proxy"] = true
5
+ default["lxc"]["cont"]["proxy_ip"] = node["network"]["gateway"]
6
+ default["lxc"]["cont"]["name"] = "lxc1"
7
+ default["lxc"]["cont"]["ip_address"] = nil
8
+ default["lxc"]["cont"]["root_path"] = "#{node["lxc"]["root_path"]}/#{node["lxc"]["cont"]["name"]}"
9
+ default["lxc"]["cont"]["config_file"] = "#{node["lxc"]["cont"]["root_path"]}/config"
10
+ default["lxc"]["cont"]["root_fs"] = "#{node["lxc"]["cont"]["root_path"]}/rootfs"
11
+
@@ -0,0 +1,3 @@
1
+
2
+ include_attribute "lxc::start_lxc"
3
+
@@ -0,0 +1,78 @@
1
+ # update installation of Ruby using RVM
2
+
3
+ distribution=""
4
+ if [ "`cat /etc/issue | grep Fedora`" != "" ]; then
5
+ distribution="fedora"
6
+ elif [ "`cat /etc/issue | grep Ubuntu`" != "" ]; then
7
+ distribution="ubuntu"
8
+ fi
9
+
10
+ INST_RUBY_VERSION='<%= node["ruby"]["version"] %>'
11
+ if [ "${INST_RUBY_VERSION:0:1}" == "<" ]; then
12
+ INST_RUBY_VERSION=ruby-2.0.0-p0
13
+ fi
14
+
15
+ gem_opts="--no-ri --no-rdoc"
16
+
17
+ existing=`which ruby`
18
+ if [ "$existing" == "" ]; then
19
+
20
+ echo "INFO: updating installation of Ruby using RVM"
21
+ # code removed (see chef/cookbooks/lxc/attributes/install_ruby.rb)
22
+ #if [ "$distribution" == "fedora" ]; then
23
+ # ...
24
+ #elif [ "$distribution" == "ubuntu" ]; then
25
+ # ...
26
+ #fi
27
+
28
+ curl -L https://get.rvm.io | bash -s stable
29
+ source /usr/local/rvm/scripts/rvm
30
+ source /etc/profile.d/rvm.sh
31
+
32
+ if [ "$rvm_path" == "" ]; then
33
+ rvm_path=/usr/local/rvm
34
+ fi
35
+ #rvm get head
36
+ rvm get stable
37
+
38
+ # enable "autolibs" feature in new RVM versions
39
+ rvm autolibs enable
40
+
41
+ rvm install $INST_RUBY_VERSION
42
+
43
+ source /usr/local/rvm/scripts/rvm
44
+
45
+ # install common gems
46
+ gem install $gem_opts rspec format
47
+ # gem bundler required for Ruby 2.0.0
48
+ gem install bundler --pre
49
+
50
+ rvm use $INST_RUBY_VERSION
51
+
52
+ fi
53
+
54
+ existing=`cat /root/.bashrc | grep "rvm use"`
55
+ if [ "$existing" == "" ]; then
56
+
57
+ # add two lines to the beginning (!) of /root/.bashrc
58
+ if [ "`cat /root/.bashrc | grep 'rvm use'`" == "" ]; then
59
+ sed -i "2isource /usr/local/rvm/scripts/rvm" /root/.bashrc
60
+ sed -i "3irvm use $INST_RUBY_VERSION" /root/.bashrc
61
+ fi
62
+
63
+ echo "INFO: You might have to run 'bash' to load required Ruby environment variables."
64
+
65
+ fi
66
+
67
+ existing=`which chef-solo > /dev/null 2>&1`
68
+ if [ "$existing" == "" ]; then
69
+ gem install $gem_opts chef
70
+ fi
71
+
72
+ # update gem system to avoid incompatibilities later on, e.g.:
73
+ # http://efreedom.net/Question/1-15266444/Unable-Install-Bson-Ext-182-Gem
74
+ gem update --system
75
+ gem update
76
+ gem clean
77
+
78
+
@@ -0,0 +1,6 @@
1
+ {
2
+ "dependencies": {
3
+ "mysql": ">= 0.0.0"
4
+ },
5
+ "version": "1.0.0"
6
+ }
@@ -0,0 +1,106 @@
1
+
2
+ # check if copy-on-write (btrfs) configuration is up-to-date.
3
+ # (required, e.g., if the host machine has rebooted)
4
+ if node["lxc"]["use_copy_on_write"]
5
+ if !File.exist?(node["lxc"]["host"]["btrfs_img_path"])
6
+ include_recipe "lxc::setup_host"
7
+ end
8
+ end
9
+
10
+ bash "lxc_check_existence" do
11
+ code <<-EOH
12
+ echo "LXC configuration '#{node["lxc"]["root_path"]}/#{node["lxc"]["cont"]["name"]}/config' already exists."
13
+ echo "Please provide a different container name or use recipe lxc::start_lxc"
14
+ exit 1
15
+ EOH
16
+ only_if "test -f #{node["lxc"]["root_path"]}/#{node["lxc"]["cont"]["name"]}/config"
17
+ end
18
+
19
+ bash "lxc_prepare_rootdir" do
20
+ if node["lxc"]["use_copy_on_write"]
21
+ code <<-EOH
22
+ name=#{node["lxc"]["cont"]["name"]}
23
+ prototype_name=#{node["lxc"]["proto"]["name"]}
24
+ rm -rf #{node["lxc"]["root_path"]}/$name
25
+ /sbin/btrfs subvolume snapshot #{node["lxc"]["root_path"]}/$prototype_name #{node["lxc"]["root_path"]}/$name
26
+ EOH
27
+ else
28
+ code <<-EOH
29
+ name=#{node["lxc"]["cont"]["name"]}
30
+ prototype_name=#{node["lxc"]["proto"]["name"]}
31
+ mkdir -p #{node["lxc"]["root_path"]}/$name
32
+ cp #{node["lxc"]["root_path"]}/$prototype_name/config #{node["lxc"]["root_path"]}/$name/config
33
+ EOH
34
+ end
35
+ end
36
+
37
+ bash "lxc_copy_rootfs" do
38
+ if !node["lxc"]["use_copy_on_write"]
39
+ code <<-EOH
40
+ name=#{node["lxc"]["cont"]["name"]}
41
+ prototype_name=#{node["lxc"]["proto"]["name"]}
42
+ root_path=#{node["lxc"]["root_path"]}
43
+ echo "INFO: Copying container root directory from $root_path/$prototype_name to $root_path/$name"
44
+ cp -r $root_path/$prototype_name/* $root_path/$name/
45
+ EOH
46
+ end
47
+ # don't execute if we use docker.io tools
48
+ not_if do node["lxc"]["use_docker.io"] end
49
+ end
50
+
51
+ bash "lxc_adjust_config" do
52
+ code <<-EOH
53
+ name=#{node["lxc"]["cont"]["name"]}
54
+ prototype_name=#{node["lxc"]["proto"]["name"]}
55
+ root_path=#{node["lxc"]["root_path"]}
56
+
57
+ # adjust values in config files
58
+ sed -i "s|lxc.utsname = $prototype_name|lxc.utsname = $name|g" $root_path/$name/config
59
+ sed -i "s|lxc.rootfs = $root_path/[/]*$prototype_name/[/]*rootfs|lxc.rootfs = $root_path/$name/rootfs|g" $root_path/$name/config
60
+ sed -i "s|lxc.mount = $root_path/[/]*$prototype_name/[/]*fstab|lxc.mount = $root_path/$name/fstab|g" $root_path/$name/config
61
+ sed -i "s|lxc.network.ipv4 = .*\\$|lxc.network.ipv4 = #{node["lxc"]["cont"]["ip_address"]}|g" $root_path/$name/config
62
+ if [ -f $root_path/$name/fstab ]; then
63
+ sed -i "s|$root_path/[/]*$prototype_name/|$root_path/$name/|g" $root_path/$name/fstab
64
+ fi
65
+
66
+ # create a file which contains the container's prototype name
67
+ echo "$prototype_name" > #{node["lxc"]["root_path"]}/$name/container.prototype.name
68
+ EOH
69
+ end
70
+
71
+ bash "lxc_fix_network_config" do
72
+ code <<-EOH
73
+ name=#{node["lxc"]["cont"]["name"]}
74
+ root_path=#{node["lxc"]["root_path"]}
75
+
76
+ # turn /etc/resolv.conf symlink to an actual file
77
+ cp $root_path/$name/rootfs/etc/resolv.conf $root_path/$name/rootfs/etc/resolv.conf.bak
78
+ rm $root_path/$name/rootfs/etc/resolv.conf
79
+ cp $root_path/$name/rootfs/etc/resolv.conf.bak $root_path/$name/rootfs/etc/resolv.conf
80
+
81
+ # fix hostname files
82
+ echo "$name" > #{node["lxc"]["root_path"]}/$name/rootfs/etc/hostname
83
+ echo "127.0.0.1 $name $name" > #{node["lxc"]["root_path"]}/$name/rootfs/etc/hosts
84
+
85
+ EOH
86
+ # don't execute if we use docker.io tools
87
+ not_if do node["lxc"]["use_docker.io"] end
88
+ end
89
+
90
+ # start the newly created LXC container
91
+ include_recipe "lxc::start_lxc"
92
+
93
+ bash "lxc_fix_started_container" do
94
+ code <<-EOH
95
+ name=#{node["lxc"]["cont"]["name"]}
96
+
97
+ # make /tmp directory writable to everyone
98
+ chmod 777 #{node["lxc"]["root_path"]}/$name/rootfs/tmp
99
+ EOH
100
+ end
101
+
102
+ ruby_block "lxc_welcome_message" do
103
+ block do
104
+ puts "INFO: SSH into the instance using root@""#{node["lxc"]["cont"]["ip_address"]}"
105
+ end
106
+ end
@@ -0,0 +1,82 @@
1
+
2
+ cache="#{node["lxc"]["bare_os"]["cachedir"]}"
3
+
4
+ bash "os_init" do
5
+ code <<-EOH
6
+ INSTALL_ROOT=#{cache}/partial
7
+ mkdir -p $INSTALL_ROOT
8
+ if [ $? -ne 0 ]; then
9
+ echo "Failed to create '$INSTALL_ROOT' directory"
10
+ exit 1
11
+ fi
12
+ EOH
13
+ # don't execute if we use docker.io tools
14
+ not_if do node["lxc"]["use_docker.io"] end
15
+ end
16
+
17
+ bash "os_download" do
18
+
19
+ if node["lxc"]["bare_os"]["distribution"] == "ubuntu"
20
+ code <<-EOH
21
+
22
+ INSTALL_ROOT=#{cache}/partial
23
+
24
+ # download latest version of debootstrap
25
+ if [ ! -f /usr/share/debootstrap/scripts/#{node["lxc"]["bare_os"]["release"]} ]; then
26
+ wget ftp://fr2.rpmfind.net/linux/fedora/linux/updates/17/i386/debootstrap-1.0.42-1.fc17.noarch.rpm -O /tmp/debootstrap-1.0.42-1.fc17.noarch.rpm
27
+ if [ -s /tmp/debootstrap-1.0.42-1.fc17.noarch.rpm ]; then
28
+ yum install -y --nogpgcheck /tmp/debootstrap-1.0.42-1.fc17.noarch.rpm
29
+ else
30
+ yum install -y debootstrap
31
+ fi
32
+ fi
33
+
34
+ # download a mini OS into a cache
35
+ echo "Downloading ubuntu minimal ..."
36
+ yum update --skip-broken -y
37
+
38
+ # on some systems "gpgv" has been renamed to "gpgv2"
39
+ if [ "`which gpgv`" == "" ]; then
40
+ ln -s /usr/bin/gpgv2 /usr/bin/gpgv
41
+ fi
42
+
43
+ if [ ! -f /usr/share/keyrings/ubuntu-archive-keyring.gpg ]; then
44
+ mkdir -p /usr/share/keyrings/
45
+ wget http://archive.ubuntu.com/ubuntu/project/ubuntu-archive-keyring.gpg -O /usr/share/keyrings/ubuntu-archive-keyring.gpg
46
+ fi
47
+ debootstrap --verbose --arch #{node["lxc"]["bare_os"]["arch"]} --variant=minbase --include console-setup #{node["lxc"]["bare_os"]["release"]} $INSTALL_ROOT
48
+
49
+ # sometimes debootstrap fails on some packages, e.g., cron and rsyslog. Re-install here
50
+ #{node["path"]["chroot"]} $INSTALL_ROOT apt-get update --skip-broken -y
51
+ #{node["path"]["chroot"]} $INSTALL_ROOT apt-get remove -y cron rsyslog
52
+ #{node["path"]["chroot"]} $INSTALL_ROOT apt-get upgrade -y
53
+
54
+ # disable udevd on startup
55
+ for f in `ls $INSTALL_ROOT/etc/init/*udev*`; do
56
+ mv "$f" "$f.bak"
57
+ done
58
+
59
+ # add additional repositories
60
+ existing=`cat $INSTALL_ROOT/etc/apt/sources.list | grep universe`
61
+ if [ "$existing" == "" ]; then
62
+ echo "deb http://archive.ubuntu.com/ubuntu #{node["lxc"]["bare_os"]["release"]} universe #restricted multiverse" >> $INSTALL_ROOT/etc/apt/sources.list
63
+ fi
64
+
65
+ #{node["path"]["chroot"]} $INSTALL_ROOT apt-get update
66
+ #{node["path"]["chroot"]} $INSTALL_ROOT apt-get install -y passwd #rsyslog chkconfig
67
+
68
+ mv "$INSTALL_ROOT" "#{cache}/rootfs"
69
+ echo "Download complete."
70
+ EOH
71
+ elsif node["lxc"]["bare_os"]["distribution"] == "fedora"
72
+ code <<-EOH
73
+ echo "ERROR: Fedora is currenly not supported."
74
+ exit 1
75
+ EOH
76
+ end
77
+
78
+ not_if "test -e '#{cache}/rootfs'"
79
+ # don't execute if we use docker.io tools
80
+ not_if do node["lxc"]["use_docker.io"] end
81
+ end
82
+