foreman_discovery 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1366) hide show
  1. data/LICENSE +619 -0
  2. data/README.md +128 -0
  3. data/Rakefile +111 -0
  4. data/app/controllers/discovers_controller.rb +151 -0
  5. data/app/helpers/discovers_helper.rb +37 -0
  6. data/app/models/host/discovered.rb +97 -0
  7. data/app/models/host/managed_extensions.rb +32 -0
  8. data/app/models/setting/discovered.rb +28 -0
  9. data/app/overrides/add_build_flag.rb +4 -0
  10. data/app/views/discovers/_discovers_list.html.erb +54 -0
  11. data/app/views/discovers/_selected_hosts.html.erb +29 -0
  12. data/app/views/discovers/index.html.erb +2 -0
  13. data/app/views/discovers/multiple_destroy.html.erb +5 -0
  14. data/app/views/discovers/select_multiple_location.html.erb +10 -0
  15. data/app/views/discovers/select_multiple_organization.html.erb +10 -0
  16. data/app/views/discovers/show.html.erb +16 -0
  17. data/config/environment.rb +0 -0
  18. data/config/initializers/discovery_setup.rb +20 -0
  19. data/config/routes.rb +26 -0
  20. data/lib/discovery_home_helper_patch.rb +21 -0
  21. data/lib/foreman_discovery.rb +4 -0
  22. data/lib/foreman_discovery/engine.rb +32 -0
  23. data/lib/foreman_discovery/facts.rb +12 -0
  24. data/lib/foreman_discovery/version.rb +3 -0
  25. data/lib/tasks.rake +72 -0
  26. data/test/foreman_app/CHANGELOG +3969 -0
  27. data/test/foreman_app/Contributors +94 -0
  28. data/test/foreman_app/Gemfile +33 -0
  29. data/test/foreman_app/README.md +17 -0
  30. data/test/foreman_app/Rakefile +7 -0
  31. data/test/foreman_app/VERSION +1 -0
  32. data/test/foreman_app/app/assets/images/Archlinux.png +0 -0
  33. data/test/foreman_app/app/assets/images/Centos.png +0 -0
  34. data/test/foreman_app/app/assets/images/Darwin.png +0 -0
  35. data/test/foreman_app/app/assets/images/Debian.png +0 -0
  36. data/test/foreman_app/app/assets/images/Fedora.png +0 -0
  37. data/test/foreman_app/app/assets/images/Redhat.png +0 -0
  38. data/test/foreman_app/app/assets/images/SLC.png +0 -0
  39. data/test/foreman_app/app/assets/images/Scientific.png +0 -0
  40. data/test/foreman_app/app/assets/images/Solaris.png +0 -0
  41. data/test/foreman_app/app/assets/images/Suse.png +0 -0
  42. data/test/foreman_app/app/assets/images/Ubuntu.png +0 -0
  43. data/test/foreman_app/app/assets/images/Windows.png +0 -0
  44. data/test/foreman_app/app/assets/images/bullet_toggle_plus.png +0 -0
  45. data/test/foreman_app/app/assets/images/edit-hover.png +0 -0
  46. data/test/foreman_app/app/assets/images/edit.png +0 -0
  47. data/test/foreman_app/app/assets/images/false.png +0 -0
  48. data/test/foreman_app/app/assets/images/foreman.png +0 -0
  49. data/test/foreman_app/app/assets/images/foreman_background.png +0 -0
  50. data/test/foreman_app/app/assets/images/foreman_large.png +0 -0
  51. data/test/foreman_app/app/assets/images/foreman_white.png +0 -0
  52. data/test/foreman_app/app/assets/images/pie_chart_icon.png +0 -0
  53. data/test/foreman_app/app/assets/images/pie_overlay.png +0 -0
  54. data/test/foreman_app/app/assets/images/spinner.gif +0 -0
  55. data/test/foreman_app/app/assets/images/switch.png +0 -0
  56. data/test/foreman_app/app/assets/images/toggle_check.png +0 -0
  57. data/test/foreman_app/app/assets/images/true.png +0 -0
  58. data/test/foreman_app/app/assets/images/user.jpg +0 -0
  59. data/test/foreman_app/app/assets/javascripts/application.js +348 -0
  60. data/test/foreman_app/app/assets/javascripts/charts.js +317 -0
  61. data/test/foreman_app/app/assets/javascripts/compute_resource.js +120 -0
  62. data/test/foreman_app/app/assets/javascripts/config_template.js +153 -0
  63. data/test/foreman_app/app/assets/javascripts/host_checkbox.js +151 -0
  64. data/test/foreman_app/app/assets/javascripts/host_edit.js +591 -0
  65. data/test/foreman_app/app/assets/javascripts/lookup_keys.js +184 -0
  66. data/test/foreman_app/app/assets/javascripts/nfs_visibility.js +33 -0
  67. data/test/foreman_app/app/assets/javascripts/noVNC.js +47 -0
  68. data/test/foreman_app/app/assets/javascripts/reports.js +27 -0
  69. data/test/foreman_app/app/assets/javascripts/spice.js +53 -0
  70. data/test/foreman_app/app/assets/javascripts/taxonomy.js +18 -0
  71. data/test/foreman_app/app/assets/javascripts/topbar.js +39 -0
  72. data/test/foreman_app/app/assets/javascripts/trends.js +10 -0
  73. data/test/foreman_app/app/assets/stylesheets/application.scss +350 -0
  74. data/test/foreman_app/app/assets/stylesheets/bootstrap_and_overrides.scss +130 -0
  75. data/test/foreman_app/app/assets/stylesheets/charts.scss +138 -0
  76. data/test/foreman_app/app/assets/stylesheets/dashboard.scss +42 -0
  77. data/test/foreman_app/app/assets/stylesheets/login.scss +77 -0
  78. data/test/foreman_app/app/assets/stylesheets/topbar.scss +83 -0
  79. data/test/foreman_app/app/assets/stylesheets/wizard.scss +60 -0
  80. data/test/foreman_app/app/controllers/api/base_controller.rb +162 -0
  81. data/test/foreman_app/app/controllers/api/v1/architectures_controller.rb +53 -0
  82. data/test/foreman_app/app/controllers/api/v1/audits_controller.rb +26 -0
  83. data/test/foreman_app/app/controllers/api/v1/auth_source_ldaps_controller.rb +72 -0
  84. data/test/foreman_app/app/controllers/api/v1/base_controller.rb +12 -0
  85. data/test/foreman_app/app/controllers/api/v1/bookmarks_controller.rb +59 -0
  86. data/test/foreman_app/app/controllers/api/v1/common_parameters_controller.rb +53 -0
  87. data/test/foreman_app/app/controllers/api/v1/compute_resources_controller.rb +71 -0
  88. data/test/foreman_app/app/controllers/api/v1/config_templates_controller.rb +102 -0
  89. data/test/foreman_app/app/controllers/api/v1/dashboard_controller.rb +20 -0
  90. data/test/foreman_app/app/controllers/api/v1/domains_controller.rb +74 -0
  91. data/test/foreman_app/app/controllers/api/v1/environments_controller.rb +50 -0
  92. data/test/foreman_app/app/controllers/api/v1/fact_values_controller.rb +23 -0
  93. data/test/foreman_app/app/controllers/api/v1/home_controller.rb +25 -0
  94. data/test/foreman_app/app/controllers/api/v1/hostgroups_controller.rb +70 -0
  95. data/test/foreman_app/app/controllers/api/v1/hosts_controller.rb +113 -0
  96. data/test/foreman_app/app/controllers/api/v1/images_controller.rb +73 -0
  97. data/test/foreman_app/app/controllers/api/v1/lookup_keys_controller.rb +63 -0
  98. data/test/foreman_app/app/controllers/api/v1/media_controller.rb +75 -0
  99. data/test/foreman_app/app/controllers/api/v1/models_controller.rb +56 -0
  100. data/test/foreman_app/app/controllers/api/v1/operatingsystems_controller.rb +79 -0
  101. data/test/foreman_app/app/controllers/api/v1/ptables_controller.rb +55 -0
  102. data/test/foreman_app/app/controllers/api/v1/puppetclasses_controller.rb +56 -0
  103. data/test/foreman_app/app/controllers/api/v1/reports_controller.rb +43 -0
  104. data/test/foreman_app/app/controllers/api/v1/roles_controller.rb +49 -0
  105. data/test/foreman_app/app/controllers/api/v1/settings_controller.rb +35 -0
  106. data/test/foreman_app/app/controllers/api/v1/smart_proxies_controller.rb +69 -0
  107. data/test/foreman_app/app/controllers/api/v1/subnets_controller.rb +77 -0
  108. data/test/foreman_app/app/controllers/api/v1/template_kinds_controller.rb +14 -0
  109. data/test/foreman_app/app/controllers/api/v1/usergroups_controller.rb +51 -0
  110. data/test/foreman_app/app/controllers/api/v1/users_controller.rb +102 -0
  111. data/test/foreman_app/app/controllers/api/v2/base_controller.rb +12 -0
  112. data/test/foreman_app/app/controllers/api/v2/compute_resources_controller.rb +20 -0
  113. data/test/foreman_app/app/controllers/api/v2/config_templates_controller.rb +26 -0
  114. data/test/foreman_app/app/controllers/api/v2/domains_controller.rb +20 -0
  115. data/test/foreman_app/app/controllers/api/v2/environments_controller.rb +20 -0
  116. data/test/foreman_app/app/controllers/api/v2/host_classes_controller.rb +49 -0
  117. data/test/foreman_app/app/controllers/api/v2/hostgroup_classes_controller.rb +44 -0
  118. data/test/foreman_app/app/controllers/api/v2/hostgroups_controller.rb +20 -0
  119. data/test/foreman_app/app/controllers/api/v2/locations_controller.rb +9 -0
  120. data/test/foreman_app/app/controllers/api/v2/media_controller.rb +20 -0
  121. data/test/foreman_app/app/controllers/api/v2/organizations_controller.rb +9 -0
  122. data/test/foreman_app/app/controllers/api/v2/parameters_controller.rb +131 -0
  123. data/test/foreman_app/app/controllers/api/v2/puppetclasses_controller.rb +60 -0
  124. data/test/foreman_app/app/controllers/api/v2/smart_proxies_controller.rb +20 -0
  125. data/test/foreman_app/app/controllers/api/v2/subnets_controller.rb +20 -0
  126. data/test/foreman_app/app/controllers/api/v2/template_combinations_controller.rb +46 -0
  127. data/test/foreman_app/app/controllers/api/v2/users_controller.rb +20 -0
  128. data/test/foreman_app/app/controllers/application_controller.rb +349 -0
  129. data/test/foreman_app/app/controllers/architectures_controller.rb +51 -0
  130. data/test/foreman_app/app/controllers/audits_controller.rb +19 -0
  131. data/test/foreman_app/app/controllers/auth_source_ldaps_controller.rb +49 -0
  132. data/test/foreman_app/app/controllers/bookmarks_controller.rb +55 -0
  133. data/test/foreman_app/app/controllers/common_parameters_controller.rb +46 -0
  134. data/test/foreman_app/app/controllers/compute_resources_controller.rb +103 -0
  135. data/test/foreman_app/app/controllers/compute_resources_vms_controller.rb +78 -0
  136. data/test/foreman_app/app/controllers/concerns/api/taxonomy_scope.rb +15 -0
  137. data/test/foreman_app/app/controllers/concerns/api/v2/taxonomies_controller.rb +99 -0
  138. data/test/foreman_app/app/controllers/config_templates_controller.rb +105 -0
  139. data/test/foreman_app/app/controllers/dashboard_controller.rb +21 -0
  140. data/test/foreman_app/app/controllers/domains_controller.rb +55 -0
  141. data/test/foreman_app/app/controllers/environments_controller.rb +59 -0
  142. data/test/foreman_app/app/controllers/fact_values_controller.rb +60 -0
  143. data/test/foreman_app/app/controllers/facts_controller.rb +25 -0
  144. data/test/foreman_app/app/controllers/home_controller.rb +37 -0
  145. data/test/foreman_app/app/controllers/hostgroups_controller.rb +115 -0
  146. data/test/foreman_app/app/controllers/hosts_controller.rb +570 -0
  147. data/test/foreman_app/app/controllers/images_controller.rb +57 -0
  148. data/test/foreman_app/app/controllers/locations_controller.rb +4 -0
  149. data/test/foreman_app/app/controllers/lookup_keys_controller.rb +60 -0
  150. data/test/foreman_app/app/controllers/lookup_values_controller.rb +58 -0
  151. data/test/foreman_app/app/controllers/media_controller.rb +56 -0
  152. data/test/foreman_app/app/controllers/models_controller.rb +49 -0
  153. data/test/foreman_app/app/controllers/notices_controller.rb +9 -0
  154. data/test/foreman_app/app/controllers/operatingsystems_controller.rb +77 -0
  155. data/test/foreman_app/app/controllers/organizations_controller.rb +4 -0
  156. data/test/foreman_app/app/controllers/ptables_controller.rb +56 -0
  157. data/test/foreman_app/app/controllers/puppetclasses_controller.rb +85 -0
  158. data/test/foreman_app/app/controllers/reports_controller.rb +60 -0
  159. data/test/foreman_app/app/controllers/roles_controller.rb +78 -0
  160. data/test/foreman_app/app/controllers/settings_controller.rb +21 -0
  161. data/test/foreman_app/app/controllers/smart_proxies/autosign_controller.rb +47 -0
  162. data/test/foreman_app/app/controllers/smart_proxies/puppetca_controller.rb +59 -0
  163. data/test/foreman_app/app/controllers/smart_proxies_controller.rb +43 -0
  164. data/test/foreman_app/app/controllers/statistics_controller.rb +27 -0
  165. data/test/foreman_app/app/controllers/subnets_controller.rb +88 -0
  166. data/test/foreman_app/app/controllers/tasks_controller.rb +16 -0
  167. data/test/foreman_app/app/controllers/topbar_sweeper.rb +24 -0
  168. data/test/foreman_app/app/controllers/trends_controller.rb +56 -0
  169. data/test/foreman_app/app/controllers/unattended_controller.rb +257 -0
  170. data/test/foreman_app/app/controllers/usergroups_controller.rb +44 -0
  171. data/test/foreman_app/app/controllers/users_controller.rb +150 -0
  172. data/test/foreman_app/app/helpers/application_helper.rb +317 -0
  173. data/test/foreman_app/app/helpers/architecture_helper.rb +2 -0
  174. data/test/foreman_app/app/helpers/architectures_helper.rb +2 -0
  175. data/test/foreman_app/app/helpers/audits_helper.rb +138 -0
  176. data/test/foreman_app/app/helpers/auth_source_ldaps_helper.rb +8 -0
  177. data/test/foreman_app/app/helpers/auth_sources_helper.rb +2 -0
  178. data/test/foreman_app/app/helpers/bookmarks_helper.rb +2 -0
  179. data/test/foreman_app/app/helpers/common_parameters_helper.rb +22 -0
  180. data/test/foreman_app/app/helpers/compute_resources_helper.rb +28 -0
  181. data/test/foreman_app/app/helpers/compute_resources_vms_helper.rb +45 -0
  182. data/test/foreman_app/app/helpers/config_templates_helper.rb +10 -0
  183. data/test/foreman_app/app/helpers/dashboard_helper.rb +35 -0
  184. data/test/foreman_app/app/helpers/domains_helper.rb +3 -0
  185. data/test/foreman_app/app/helpers/environments_helper.rb +3 -0
  186. data/test/foreman_app/app/helpers/fact_values_helper.rb +8 -0
  187. data/test/foreman_app/app/helpers/home_helper.rb +116 -0
  188. data/test/foreman_app/app/helpers/hostgroups_helper.rb +14 -0
  189. data/test/foreman_app/app/helpers/hosts_and_hostgroups_helper.rb +99 -0
  190. data/test/foreman_app/app/helpers/hosts_helper.rb +267 -0
  191. data/test/foreman_app/app/helpers/images_helper.rb +11 -0
  192. data/test/foreman_app/app/helpers/layout_helper.rb +214 -0
  193. data/test/foreman_app/app/helpers/lookup_keys_helper.rb +108 -0
  194. data/test/foreman_app/app/helpers/media_helper.rb +2 -0
  195. data/test/foreman_app/app/helpers/medium_helper.rb +2 -0
  196. data/test/foreman_app/app/helpers/model_helper.rb +2 -0
  197. data/test/foreman_app/app/helpers/models_helper.rb +2 -0
  198. data/test/foreman_app/app/helpers/notices_helper.rb +3 -0
  199. data/test/foreman_app/app/helpers/operatingsystems_helper.rb +40 -0
  200. data/test/foreman_app/app/helpers/organization_helper.rb +2 -0
  201. data/test/foreman_app/app/helpers/ptables_helper.rb +2 -0
  202. data/test/foreman_app/app/helpers/puppetclasses_and_environments_helper.rb +39 -0
  203. data/test/foreman_app/app/helpers/puppetclasses_helper.rb +16 -0
  204. data/test/foreman_app/app/helpers/reports_helper.rb +48 -0
  205. data/test/foreman_app/app/helpers/settings_helper.rb +27 -0
  206. data/test/foreman_app/app/helpers/smart_proxies/autosign_helper.rb +6 -0
  207. data/test/foreman_app/app/helpers/smart_proxies/puppetca_helper.rb +20 -0
  208. data/test/foreman_app/app/helpers/smart_proxies_helper.rb +2 -0
  209. data/test/foreman_app/app/helpers/statistics_helper.rb +16 -0
  210. data/test/foreman_app/app/helpers/subnets_helper.rb +9 -0
  211. data/test/foreman_app/app/helpers/tasks_helper.rb +22 -0
  212. data/test/foreman_app/app/helpers/taxonomy_helper.rb +107 -0
  213. data/test/foreman_app/app/helpers/trends_helper.rb +46 -0
  214. data/test/foreman_app/app/helpers/unattended_helper.rb +16 -0
  215. data/test/foreman_app/app/helpers/usergroups_helper.rb +2 -0
  216. data/test/foreman_app/app/helpers/users_helper.rb +21 -0
  217. data/test/foreman_app/app/models/architecture.rb +23 -0
  218. data/test/foreman_app/app/models/archlinux.rb +27 -0
  219. data/test/foreman_app/app/models/auth_source.rb +70 -0
  220. data/test/foreman_app/app/models/auth_source_internal.rb +17 -0
  221. data/test/foreman_app/app/models/auth_source_ldap.rb +147 -0
  222. data/test/foreman_app/app/models/authorization.rb +51 -0
  223. data/test/foreman_app/app/models/bookmark.rb +30 -0
  224. data/test/foreman_app/app/models/classification.rb +126 -0
  225. data/test/foreman_app/app/models/common_parameter.rb +13 -0
  226. data/test/foreman_app/app/models/compute_resource.rb +232 -0
  227. data/test/foreman_app/app/models/config_template.rb +172 -0
  228. data/test/foreman_app/app/models/dashboard.rb +53 -0
  229. data/test/foreman_app/app/models/debian.rb +47 -0
  230. data/test/foreman_app/app/models/domain.rb +90 -0
  231. data/test/foreman_app/app/models/domain_parameter.rb +22 -0
  232. data/test/foreman_app/app/models/environment.rb +57 -0
  233. data/test/foreman_app/app/models/environment_class.rb +25 -0
  234. data/test/foreman_app/app/models/fact_name.rb +17 -0
  235. data/test/foreman_app/app/models/fact_trend.rb +57 -0
  236. data/test/foreman_app/app/models/fact_value.rb +83 -0
  237. data/test/foreman_app/app/models/facts_importer.rb +121 -0
  238. data/test/foreman_app/app/models/feature.rb +4 -0
  239. data/test/foreman_app/app/models/foreman_trend.rb +38 -0
  240. data/test/foreman_app/app/models/group_parameter.rb +22 -0
  241. data/test/foreman_app/app/models/host.rb +30 -0
  242. data/test/foreman_app/app/models/host/base.rb +141 -0
  243. data/test/foreman_app/app/models/host/hostmix.rb +13 -0
  244. data/test/foreman_app/app/models/host/managed.rb +854 -0
  245. data/test/foreman_app/app/models/host_class.rb +13 -0
  246. data/test/foreman_app/app/models/host_common.rb +95 -0
  247. data/test/foreman_app/app/models/host_mailer.rb +77 -0
  248. data/test/foreman_app/app/models/host_observer.rb +19 -0
  249. data/test/foreman_app/app/models/host_parameter.rb +20 -0
  250. data/test/foreman_app/app/models/host_template_helpers.rb +43 -0
  251. data/test/foreman_app/app/models/hostext/search.rb +128 -0
  252. data/test/foreman_app/app/models/hostgroup.rb +159 -0
  253. data/test/foreman_app/app/models/hostgroup_class.rb +15 -0
  254. data/test/foreman_app/app/models/image.rb +14 -0
  255. data/test/foreman_app/app/models/key_pair.rb +5 -0
  256. data/test/foreman_app/app/models/location.rb +25 -0
  257. data/test/foreman_app/app/models/log.rb +25 -0
  258. data/test/foreman_app/app/models/lookup_key.rb +261 -0
  259. data/test/foreman_app/app/models/lookup_value.rb +61 -0
  260. data/test/foreman_app/app/models/medium.rb +58 -0
  261. data/test/foreman_app/app/models/message.rb +19 -0
  262. data/test/foreman_app/app/models/model.rb +14 -0
  263. data/test/foreman_app/app/models/nic.rb +61 -0
  264. data/test/foreman_app/app/models/nic/bmc.rb +22 -0
  265. data/test/foreman_app/app/models/nic/bootable.rb +31 -0
  266. data/test/foreman_app/app/models/nic/interface.rb +23 -0
  267. data/test/foreman_app/app/models/nic/managed.rb +57 -0
  268. data/test/foreman_app/app/models/notice.rb +36 -0
  269. data/test/foreman_app/app/models/operatingsystem.rb +196 -0
  270. data/test/foreman_app/app/models/orchestration.rb +184 -0
  271. data/test/foreman_app/app/models/orchestration/compute.rb +157 -0
  272. data/test/foreman_app/app/models/orchestration/dhcp.rb +154 -0
  273. data/test/foreman_app/app/models/orchestration/dns.rb +130 -0
  274. data/test/foreman_app/app/models/orchestration/puppetca.rb +79 -0
  275. data/test/foreman_app/app/models/orchestration/ssh_provision.rb +115 -0
  276. data/test/foreman_app/app/models/orchestration/tftp.rb +133 -0
  277. data/test/foreman_app/app/models/organization.rb +24 -0
  278. data/test/foreman_app/app/models/os_default_template.rb +11 -0
  279. data/test/foreman_app/app/models/os_parameter.rb +16 -0
  280. data/test/foreman_app/app/models/parameter.rb +34 -0
  281. data/test/foreman_app/app/models/ptable.rb +25 -0
  282. data/test/foreman_app/app/models/puppet_class_importer.rb +269 -0
  283. data/test/foreman_app/app/models/puppetclass.rb +172 -0
  284. data/test/foreman_app/app/models/redhat.rb +61 -0
  285. data/test/foreman_app/app/models/report.rb +356 -0
  286. data/test/foreman_app/app/models/report_common.rb +52 -0
  287. data/test/foreman_app/app/models/role.rb +156 -0
  288. data/test/foreman_app/app/models/setting.rb +174 -0
  289. data/test/foreman_app/app/models/setting/auth.rb +29 -0
  290. data/test/foreman_app/app/models/setting/general.rb +27 -0
  291. data/test/foreman_app/app/models/setting/provisioning.rb +28 -0
  292. data/test/foreman_app/app/models/setting/puppet.rb +36 -0
  293. data/test/foreman_app/app/models/smart_proxies/puppet_ca.rb +66 -0
  294. data/test/foreman_app/app/models/smart_proxy.rb +96 -0
  295. data/test/foreman_app/app/models/solaris.rb +114 -0
  296. data/test/foreman_app/app/models/source.rb +18 -0
  297. data/test/foreman_app/app/models/subnet.rb +146 -0
  298. data/test/foreman_app/app/models/subnet_domain.rb +12 -0
  299. data/test/foreman_app/app/models/suse.rb +22 -0
  300. data/test/foreman_app/app/models/tax_host.rb +181 -0
  301. data/test/foreman_app/app/models/taxable_taxonomy.rb +14 -0
  302. data/test/foreman_app/app/models/taxonomix.rb +47 -0
  303. data/test/foreman_app/app/models/taxonomy.rb +135 -0
  304. data/test/foreman_app/app/models/template_combination.rb +12 -0
  305. data/test/foreman_app/app/models/template_kind.rb +6 -0
  306. data/test/foreman_app/app/models/token.rb +23 -0
  307. data/test/foreman_app/app/models/trend.rb +22 -0
  308. data/test/foreman_app/app/models/trend_counter.rb +7 -0
  309. data/test/foreman_app/app/models/trend_importer.rb +50 -0
  310. data/test/foreman_app/app/models/user.rb +251 -0
  311. data/test/foreman_app/app/models/user_fact.rb +26 -0
  312. data/test/foreman_app/app/models/user_hostgroup.rb +10 -0
  313. data/test/foreman_app/app/models/user_role.rb +32 -0
  314. data/test/foreman_app/app/models/usergroup.rb +61 -0
  315. data/test/foreman_app/app/models/usergroup_member.rb +5 -0
  316. data/test/foreman_app/app/models/windows.rb +20 -0
  317. data/test/foreman_app/app/views/api/v1/architectures/create.json.rabl +3 -0
  318. data/test/foreman_app/app/views/api/v1/architectures/index.json.rabl +3 -0
  319. data/test/foreman_app/app/views/api/v1/architectures/show.json.rabl +3 -0
  320. data/test/foreman_app/app/views/api/v1/audits/index.json.rabl +3 -0
  321. data/test/foreman_app/app/views/api/v1/audits/show.json.rabl +5 -0
  322. data/test/foreman_app/app/views/api/v1/auth_source_ldaps/index.json.rabl +3 -0
  323. data/test/foreman_app/app/views/api/v1/auth_source_ldaps/show.json.rabl +3 -0
  324. data/test/foreman_app/app/views/api/v1/bookmarks/create.json.rabl +2 -0
  325. data/test/foreman_app/app/views/api/v1/bookmarks/index.json.rabl +3 -0
  326. data/test/foreman_app/app/views/api/v1/bookmarks/show.json.rabl +2 -0
  327. data/test/foreman_app/app/views/api/v1/bookmarks/update.json.rabl +8 -0
  328. data/test/foreman_app/app/views/api/v1/common_parameters/create.json.rabl +3 -0
  329. data/test/foreman_app/app/views/api/v1/common_parameters/index.json.rabl +3 -0
  330. data/test/foreman_app/app/views/api/v1/common_parameters/show.json.rabl +3 -0
  331. data/test/foreman_app/app/views/api/v1/compute_resources/create.json.rabl +3 -0
  332. data/test/foreman_app/app/views/api/v1/compute_resources/ec2.json.rabl +1 -0
  333. data/test/foreman_app/app/views/api/v1/compute_resources/index.json.rabl +3 -0
  334. data/test/foreman_app/app/views/api/v1/compute_resources/libvirt.json.rabl +0 -0
  335. data/test/foreman_app/app/views/api/v1/compute_resources/openstack.json.rabl +1 -0
  336. data/test/foreman_app/app/views/api/v1/compute_resources/ovirt.json.rabl +1 -0
  337. data/test/foreman_app/app/views/api/v1/compute_resources/rackspace.json.rabl +1 -0
  338. data/test/foreman_app/app/views/api/v1/compute_resources/show.json.rabl +8 -0
  339. data/test/foreman_app/app/views/api/v1/compute_resources/vmware.json.rabl +1 -0
  340. data/test/foreman_app/app/views/api/v1/config_templates/create.json.rabl +3 -0
  341. data/test/foreman_app/app/views/api/v1/config_templates/index.json.rabl +3 -0
  342. data/test/foreman_app/app/views/api/v1/config_templates/show.json.rabl +11 -0
  343. data/test/foreman_app/app/views/api/v1/domains/index.json.rabl +3 -0
  344. data/test/foreman_app/app/views/api/v1/domains/show.json.rabl +2 -0
  345. data/test/foreman_app/app/views/api/v1/environments/create.json.rabl +3 -0
  346. data/test/foreman_app/app/views/api/v1/environments/index.json.rabl +3 -0
  347. data/test/foreman_app/app/views/api/v1/environments/show.json.rabl +5 -0
  348. data/test/foreman_app/app/views/api/v1/errors/access_denied.json.rabl +4 -0
  349. data/test/foreman_app/app/views/api/v1/errors/not_found.json.rabl +3 -0
  350. data/test/foreman_app/app/views/api/v1/errors/param_error.json.rabl +7 -0
  351. data/test/foreman_app/app/views/api/v1/errors/route_error.json.rabl +4 -0
  352. data/test/foreman_app/app/views/api/v1/errors/standard_error.json.rabl +5 -0
  353. data/test/foreman_app/app/views/api/v1/errors/unauthorized.json.rabl +3 -0
  354. data/test/foreman_app/app/views/api/v1/errors/unprocessable_entity.json.rabl +6 -0
  355. data/test/foreman_app/app/views/api/v1/home/index.json.rabl +24 -0
  356. data/test/foreman_app/app/views/api/v1/home/status.json.rabl +6 -0
  357. data/test/foreman_app/app/views/api/v1/hostgroups/create.json.rabl +3 -0
  358. data/test/foreman_app/app/views/api/v1/hostgroups/index.json.rabl +3 -0
  359. data/test/foreman_app/app/views/api/v1/hostgroups/show.json.rabl +3 -0
  360. data/test/foreman_app/app/views/api/v1/hosts/create.json.rabl +3 -0
  361. data/test/foreman_app/app/views/api/v1/hosts/index.json.rabl +3 -0
  362. data/test/foreman_app/app/views/api/v1/hosts/show.json.rabl +12 -0
  363. data/test/foreman_app/app/views/api/v1/images/index.json.rabl +3 -0
  364. data/test/foreman_app/app/views/api/v1/images/show.json.rabl +3 -0
  365. data/test/foreman_app/app/views/api/v1/lookup_keys/index.json.rabl +3 -0
  366. data/test/foreman_app/app/views/api/v1/lookup_keys/show.json.rabl +3 -0
  367. data/test/foreman_app/app/views/api/v1/media/index.json.rabl +3 -0
  368. data/test/foreman_app/app/views/api/v1/media/show.json.rabl +9 -0
  369. data/test/foreman_app/app/views/api/v1/models/index.rabl +4 -0
  370. data/test/foreman_app/app/views/api/v1/models/show.rabl +3 -0
  371. data/test/foreman_app/app/views/api/v1/operatingsystems/create.json.rabl +4 -0
  372. data/test/foreman_app/app/views/api/v1/operatingsystems/index.json.rabl +3 -0
  373. data/test/foreman_app/app/views/api/v1/operatingsystems/show.json.rabl +22 -0
  374. data/test/foreman_app/app/views/api/v1/operatingsystems/update.json.rabl +3 -0
  375. data/test/foreman_app/app/views/api/v1/ptables/index.json.rabl +3 -0
  376. data/test/foreman_app/app/views/api/v1/ptables/show.json.rabl +3 -0
  377. data/test/foreman_app/app/views/api/v1/reports/index.json.rabl +3 -0
  378. data/test/foreman_app/app/views/api/v1/reports/show.json.rabl +16 -0
  379. data/test/foreman_app/app/views/api/v1/roles/create.json.rabl +3 -0
  380. data/test/foreman_app/app/views/api/v1/roles/index.json.rabl +3 -0
  381. data/test/foreman_app/app/views/api/v1/roles/show.json.rabl +3 -0
  382. data/test/foreman_app/app/views/api/v1/settings/index.json.rabl +3 -0
  383. data/test/foreman_app/app/views/api/v1/settings/show.json.rabl +3 -0
  384. data/test/foreman_app/app/views/api/v1/smart_proxies/index.json.rabl +3 -0
  385. data/test/foreman_app/app/views/api/v1/smart_proxies/show.json.rabl +9 -0
  386. data/test/foreman_app/app/views/api/v1/subnets/create.json.rabl +3 -0
  387. data/test/foreman_app/app/views/api/v1/subnets/index.json.rabl +5 -0
  388. data/test/foreman_app/app/views/api/v1/subnets/show.json.rabl +17 -0
  389. data/test/foreman_app/app/views/api/v1/subnets/update.json.rabl +3 -0
  390. data/test/foreman_app/app/views/api/v1/template_kinds/index.json.rabl +3 -0
  391. data/test/foreman_app/app/views/api/v1/template_kinds/show.json.rabl +3 -0
  392. data/test/foreman_app/app/views/api/v1/usergroups/index.json.rabl +3 -0
  393. data/test/foreman_app/app/views/api/v1/usergroups/show.json.rabl +3 -0
  394. data/test/foreman_app/app/views/api/v1/users/create.json.rabl +3 -0
  395. data/test/foreman_app/app/views/api/v1/users/index.json.rabl +5 -0
  396. data/test/foreman_app/app/views/api/v1/users/show.json.rabl +13 -0
  397. data/test/foreman_app/app/views/api/v2/config_templates/create.json.rabl +3 -0
  398. data/test/foreman_app/app/views/api/v2/config_templates/index.json.rabl +3 -0
  399. data/test/foreman_app/app/views/api/v2/config_templates/show.json.rabl +33 -0
  400. data/test/foreman_app/app/views/api/v2/errors/access_denied.json.rabl +4 -0
  401. data/test/foreman_app/app/views/api/v2/errors/not_found.json.rabl +3 -0
  402. data/test/foreman_app/app/views/api/v2/errors/param_error.json.rabl +7 -0
  403. data/test/foreman_app/app/views/api/v2/errors/route_error.json.rabl +4 -0
  404. data/test/foreman_app/app/views/api/v2/errors/standard_error.json.rabl +5 -0
  405. data/test/foreman_app/app/views/api/v2/errors/unauthorized.json.rabl +3 -0
  406. data/test/foreman_app/app/views/api/v2/errors/unprocessable_entity.json.rabl +6 -0
  407. data/test/foreman_app/app/views/api/v2/parameters/create.json.rabl +3 -0
  408. data/test/foreman_app/app/views/api/v2/parameters/index.json.rabl +3 -0
  409. data/test/foreman_app/app/views/api/v2/parameters/show.json.rabl +3 -0
  410. data/test/foreman_app/app/views/api/v2/parameters/update.json.rabl +3 -0
  411. data/test/foreman_app/app/views/api/v2/puppetclasses/show.json.rabl +7 -0
  412. data/test/foreman_app/app/views/api/v2/taxonomies/index.json.rabl +3 -0
  413. data/test/foreman_app/app/views/api/v2/taxonomies/show.json.rabl +7 -0
  414. data/test/foreman_app/app/views/api/v2/taxonomies/update.json.rabl +3 -0
  415. data/test/foreman_app/app/views/api/v2/template_combinations/create.json.rabl +3 -0
  416. data/test/foreman_app/app/views/api/v2/template_combinations/index.json.rabl +3 -0
  417. data/test/foreman_app/app/views/api/v2/template_combinations/show.json.rabl +3 -0
  418. data/test/foreman_app/app/views/architectures/_form.html.erb +6 -0
  419. data/test/foreman_app/app/views/architectures/edit.html.erb +3 -0
  420. data/test/foreman_app/app/views/architectures/index.html.erb +21 -0
  421. data/test/foreman_app/app/views/architectures/new.html.erb +3 -0
  422. data/test/foreman_app/app/views/architectures/welcome.html.erb +14 -0
  423. data/test/foreman_app/app/views/audits/_list.erb +24 -0
  424. data/test/foreman_app/app/views/audits/index.html.erb +6 -0
  425. data/test/foreman_app/app/views/audits/show.html.erb +56 -0
  426. data/test/foreman_app/app/views/auth_source_ldaps/_form.html.erb +23 -0
  427. data/test/foreman_app/app/views/auth_source_ldaps/edit.html.erb +3 -0
  428. data/test/foreman_app/app/views/auth_source_ldaps/index.html.erb +22 -0
  429. data/test/foreman_app/app/views/auth_source_ldaps/new.html.erb +3 -0
  430. data/test/foreman_app/app/views/auth_source_ldaps/welcome.html.erb +8 -0
  431. data/test/foreman_app/app/views/bookmarks/_form.html.erb +8 -0
  432. data/test/foreman_app/app/views/bookmarks/_list.html.erb +7 -0
  433. data/test/foreman_app/app/views/bookmarks/edit.html.erb +3 -0
  434. data/test/foreman_app/app/views/bookmarks/index.html.erb +25 -0
  435. data/test/foreman_app/app/views/bookmarks/new.html.erb +3 -0
  436. data/test/foreman_app/app/views/bookmarks/welcome.html.erb +8 -0
  437. data/test/foreman_app/app/views/common/403.html.erb +9 -0
  438. data/test/foreman_app/app/views/common/404.html.erb +8 -0
  439. data/test/foreman_app/app/views/common/500.html.erb +19 -0
  440. data/test/foreman_app/app/views/common/_domain.html.erb +9 -0
  441. data/test/foreman_app/app/views/common/_domain_subnet.html.erb +10 -0
  442. data/test/foreman_app/app/views/common/_edit_habtm.erb +20 -0
  443. data/test/foreman_app/app/views/common/_notice.erb +20 -0
  444. data/test/foreman_app/app/views/common/_puppetclasses_or_envs_changed.html.erb +32 -0
  445. data/test/foreman_app/app/views/common/_searchbar.erb +37 -0
  446. data/test/foreman_app/app/views/common/_show_habtm.html.erb +1 -0
  447. data/test/foreman_app/app/views/common/os_selection/_architecture.html.erb +9 -0
  448. data/test/foreman_app/app/views/common/os_selection/_image_details.html.erb +7 -0
  449. data/test/foreman_app/app/views/common/os_selection/_initial.html.erb +15 -0
  450. data/test/foreman_app/app/views/common/os_selection/_operatingsystem.html.erb +15 -0
  451. data/test/foreman_app/app/views/common_parameters/_form.html.erb +6 -0
  452. data/test/foreman_app/app/views/common_parameters/_inherited_parameters.erb +23 -0
  453. data/test/foreman_app/app/views/common_parameters/_parameter.erb +14 -0
  454. data/test/foreman_app/app/views/common_parameters/_parameters.erb +6 -0
  455. data/test/foreman_app/app/views/common_parameters/_puppetclass_parameter.erb +16 -0
  456. data/test/foreman_app/app/views/common_parameters/_puppetclasses_parameters.erb +7 -0
  457. data/test/foreman_app/app/views/common_parameters/_show_parameter.html.erb +5 -0
  458. data/test/foreman_app/app/views/common_parameters/edit.html.erb +3 -0
  459. data/test/foreman_app/app/views/common_parameters/index.html.erb +22 -0
  460. data/test/foreman_app/app/views/common_parameters/new.html.erb +3 -0
  461. data/test/foreman_app/app/views/compute_resources/_form.html.erb +44 -0
  462. data/test/foreman_app/app/views/compute_resources/edit.html.erb +3 -0
  463. data/test/foreman_app/app/views/compute_resources/form/_ec2.html.erb +8 -0
  464. data/test/foreman_app/app/views/compute_resources/form/_libvirt.html.erb +9 -0
  465. data/test/foreman_app/app/views/compute_resources/form/_openstack.html.erb +9 -0
  466. data/test/foreman_app/app/views/compute_resources/form/_ovirt.html.erb +8 -0
  467. data/test/foreman_app/app/views/compute_resources/form/_rackspace.html.erb +8 -0
  468. data/test/foreman_app/app/views/compute_resources/form/_vmware.html.erb +8 -0
  469. data/test/foreman_app/app/views/compute_resources/index.html.erb +24 -0
  470. data/test/foreman_app/app/views/compute_resources/new.html.erb +3 -0
  471. data/test/foreman_app/app/views/compute_resources/show.html.erb +56 -0
  472. data/test/foreman_app/app/views/compute_resources_vms/form/_ec2.html.erb +10 -0
  473. data/test/foreman_app/app/views/compute_resources_vms/form/_libvirt.html.erb +33 -0
  474. data/test/foreman_app/app/views/compute_resources_vms/form/_openstack.html.erb +9 -0
  475. data/test/foreman_app/app/views/compute_resources_vms/form/_ovirt.html.erb +43 -0
  476. data/test/foreman_app/app/views/compute_resources_vms/form/_rackspace.html.erb +7 -0
  477. data/test/foreman_app/app/views/compute_resources_vms/form/_vmware.html.erb +37 -0
  478. data/test/foreman_app/app/views/compute_resources_vms/form/libvirt/_network.html.erb +9 -0
  479. data/test/foreman_app/app/views/compute_resources_vms/form/libvirt/_volume.html.erb +6 -0
  480. data/test/foreman_app/app/views/compute_resources_vms/form/ovirt/_network.html.erb +13 -0
  481. data/test/foreman_app/app/views/compute_resources_vms/form/ovirt/_volume.html.erb +18 -0
  482. data/test/foreman_app/app/views/compute_resources_vms/form/vmware/_network.html.erb +8 -0
  483. data/test/foreman_app/app/views/compute_resources_vms/form/vmware/_volume.html.erb +8 -0
  484. data/test/foreman_app/app/views/compute_resources_vms/index.html.erb +3 -0
  485. data/test/foreman_app/app/views/compute_resources_vms/index/_ec2.html.erb +25 -0
  486. data/test/foreman_app/app/views/compute_resources_vms/index/_libvirt.html.erb +23 -0
  487. data/test/foreman_app/app/views/compute_resources_vms/index/_openstack.html.erb +23 -0
  488. data/test/foreman_app/app/views/compute_resources_vms/index/_ovirt.html.erb +24 -0
  489. data/test/foreman_app/app/views/compute_resources_vms/index/_rackspace.html.erb +22 -0
  490. data/test/foreman_app/app/views/compute_resources_vms/index/_vmware.html.erb +27 -0
  491. data/test/foreman_app/app/views/compute_resources_vms/new.html.erb +9 -0
  492. data/test/foreman_app/app/views/compute_resources_vms/show.html.erb +8 -0
  493. data/test/foreman_app/app/views/compute_resources_vms/show/_ec2.html.erb +19 -0
  494. data/test/foreman_app/app/views/compute_resources_vms/show/_libvirt.html.erb +53 -0
  495. data/test/foreman_app/app/views/compute_resources_vms/show/_openstack.html.erb +19 -0
  496. data/test/foreman_app/app/views/compute_resources_vms/show/_ovirt.html.erb +47 -0
  497. data/test/foreman_app/app/views/compute_resources_vms/show/_rackspace.html.erb +19 -0
  498. data/test/foreman_app/app/views/compute_resources_vms/show/_vmware.html.erb +16 -0
  499. data/test/foreman_app/app/views/config_templates/_combination.html.erb +5 -0
  500. data/test/foreman_app/app/views/config_templates/_combinations.html.erb +6 -0
  501. data/test/foreman_app/app/views/config_templates/_diff.erb +14 -0
  502. data/test/foreman_app/app/views/config_templates/_form.html.erb +94 -0
  503. data/test/foreman_app/app/views/config_templates/edit.html.erb +3 -0
  504. data/test/foreman_app/app/views/config_templates/index.html.erb +31 -0
  505. data/test/foreman_app/app/views/config_templates/new.html.erb +3 -0
  506. data/test/foreman_app/app/views/dashboard/_status_table.html.erb +32 -0
  507. data/test/foreman_app/app/views/dashboard/index.html.erb +24 -0
  508. data/test/foreman_app/app/views/dashboard/welcome.html.erb +118 -0
  509. data/test/foreman_app/app/views/domains/_form.html.erb +43 -0
  510. data/test/foreman_app/app/views/domains/edit.html.erb +3 -0
  511. data/test/foreman_app/app/views/domains/index.html.erb +20 -0
  512. data/test/foreman_app/app/views/domains/new.html.erb +3 -0
  513. data/test/foreman_app/app/views/domains/welcome.html.erb +13 -0
  514. data/test/foreman_app/app/views/environments/_form.html.erb +38 -0
  515. data/test/foreman_app/app/views/environments/edit.html.erb +3 -0
  516. data/test/foreman_app/app/views/environments/index.html.erb +27 -0
  517. data/test/foreman_app/app/views/environments/new.html.erb +3 -0
  518. data/test/foreman_app/app/views/environments/welcome.html.erb +15 -0
  519. data/test/foreman_app/app/views/fact_values/index.html.erb +40 -0
  520. data/test/foreman_app/app/views/fact_values/welcome.html.erb +9 -0
  521. data/test/foreman_app/app/views/facts/show.html.erb +3 -0
  522. data/test/foreman_app/app/views/home/_location_dropdown.html.erb +17 -0
  523. data/test/foreman_app/app/views/home/_org_switcher.html.erb +11 -0
  524. data/test/foreman_app/app/views/home/_organization_dropdown.html.erb +17 -0
  525. data/test/foreman_app/app/views/home/_settings.html.erb +22 -0
  526. data/test/foreman_app/app/views/home/_topbar.html.erb +33 -0
  527. data/test/foreman_app/app/views/home/_user_dropdown.html.erb +10 -0
  528. data/test/foreman_app/app/views/host_mailer/_active_hosts.html.erb +30 -0
  529. data/test/foreman_app/app/views/host_mailer/_link_to_host.html.erb +5 -0
  530. data/test/foreman_app/app/views/host_mailer/_list.html.erb +13 -0
  531. data/test/foreman_app/app/views/host_mailer/_nonactive_hosts.html.erb +30 -0
  532. data/test/foreman_app/app/views/host_mailer/error_state.html.erb +10 -0
  533. data/test/foreman_app/app/views/host_mailer/summary.html.erb +17 -0
  534. data/test/foreman_app/app/views/hostgroups/_form.html.erb +69 -0
  535. data/test/foreman_app/app/views/hostgroups/edit.html.erb +3 -0
  536. data/test/foreman_app/app/views/hostgroups/index.html.erb +23 -0
  537. data/test/foreman_app/app/views/hostgroups/new.html.erb +3 -0
  538. data/test/foreman_app/app/views/hostgroups/welcome.html.erb +20 -0
  539. data/test/foreman_app/app/views/hosts/_assign_hosts.html.erb +42 -0
  540. data/test/foreman_app/app/views/hosts/_compute.html.erb +12 -0
  541. data/test/foreman_app/app/views/hosts/_conflicts.html.erb +28 -0
  542. data/test/foreman_app/app/views/hosts/_form.html.erb +109 -0
  543. data/test/foreman_app/app/views/hosts/_interfaces.html.erb +29 -0
  544. data/test/foreman_app/app/views/hosts/_list.html.erb +47 -0
  545. data/test/foreman_app/app/views/hosts/_metrics.html.erb +13 -0
  546. data/test/foreman_app/app/views/hosts/_operating_system.erb +41 -0
  547. data/test/foreman_app/app/views/hosts/_overview.html.erb +25 -0
  548. data/test/foreman_app/app/views/hosts/_progress.erb +8 -0
  549. data/test/foreman_app/app/views/hosts/_provisioning.html.erb +9 -0
  550. data/test/foreman_app/app/views/hosts/_selected_hosts.html.erb +31 -0
  551. data/test/foreman_app/app/views/hosts/_taxonomy_import_option.html.erb +2 -0
  552. data/test/foreman_app/app/views/hosts/_unattended.html.erb +34 -0
  553. data/test/foreman_app/app/views/hosts/assign_hosts.html.erb +5 -0
  554. data/test/foreman_app/app/views/hosts/console/log.html.erb +17 -0
  555. data/test/foreman_app/app/views/hosts/console/spice.html.erb +18 -0
  556. data/test/foreman_app/app/views/hosts/console/vnc.html.erb +21 -0
  557. data/test/foreman_app/app/views/hosts/edit.html.erb +7 -0
  558. data/test/foreman_app/app/views/hosts/index.html.erb +4 -0
  559. data/test/foreman_app/app/views/hosts/multiple_build.html.erb +6 -0
  560. data/test/foreman_app/app/views/hosts/multiple_destroy.html.erb +6 -0
  561. data/test/foreman_app/app/views/hosts/multiple_disable.html.erb +6 -0
  562. data/test/foreman_app/app/views/hosts/multiple_enable.html.erb +6 -0
  563. data/test/foreman_app/app/views/hosts/multiple_parameters.html.erb +12 -0
  564. data/test/foreman_app/app/views/hosts/multiple_puppetrun.html.erb +5 -0
  565. data/test/foreman_app/app/views/hosts/new.html.erb +3 -0
  566. data/test/foreman_app/app/views/hosts/query.html.erb +3 -0
  567. data/test/foreman_app/app/views/hosts/select_multiple_environment.html.erb +8 -0
  568. data/test/foreman_app/app/views/hosts/select_multiple_hostgroup.html.erb +6 -0
  569. data/test/foreman_app/app/views/hosts/select_multiple_location.html.erb +6 -0
  570. data/test/foreman_app/app/views/hosts/select_multiple_organization.html.erb +6 -0
  571. data/test/foreman_app/app/views/hosts/show.html.erb +55 -0
  572. data/test/foreman_app/app/views/hosts/storeconfig_klasses.html.erb +12 -0
  573. data/test/foreman_app/app/views/hosts/update_multiple_parameters.html.erb +18 -0
  574. data/test/foreman_app/app/views/hosts/welcome.html.erb +10 -0
  575. data/test/foreman_app/app/views/images/_form.html.erb +16 -0
  576. data/test/foreman_app/app/views/images/edit.html.erb +3 -0
  577. data/test/foreman_app/app/views/images/index.html.erb +26 -0
  578. data/test/foreman_app/app/views/images/new.html.erb +4 -0
  579. data/test/foreman_app/app/views/layouts/application.html.erb +69 -0
  580. data/test/foreman_app/app/views/locations/welcome.html.erb +9 -0
  581. data/test/foreman_app/app/views/lookup_keys/_fields.html.erb +42 -0
  582. data/test/foreman_app/app/views/lookup_keys/_value.html.erb +6 -0
  583. data/test/foreman_app/app/views/lookup_keys/edit.html.erb +7 -0
  584. data/test/foreman_app/app/views/lookup_keys/index.html.erb +22 -0
  585. data/test/foreman_app/app/views/media/_form.html.erb +53 -0
  586. data/test/foreman_app/app/views/media/edit.html.erb +3 -0
  587. data/test/foreman_app/app/views/media/index.html.erb +26 -0
  588. data/test/foreman_app/app/views/media/new.html.erb +3 -0
  589. data/test/foreman_app/app/views/media/welcome.html.erb +19 -0
  590. data/test/foreman_app/app/views/models/_form.html.erb +8 -0
  591. data/test/foreman_app/app/views/models/edit.html.erb +3 -0
  592. data/test/foreman_app/app/views/models/index.html.erb +26 -0
  593. data/test/foreman_app/app/views/models/new.html.erb +3 -0
  594. data/test/foreman_app/app/views/operatingsystems/_form.html.erb +38 -0
  595. data/test/foreman_app/app/views/operatingsystems/_template_defaults.html.erb +19 -0
  596. data/test/foreman_app/app/views/operatingsystems/_templates.html.erb +2 -0
  597. data/test/foreman_app/app/views/operatingsystems/edit.html.erb +3 -0
  598. data/test/foreman_app/app/views/operatingsystems/index.html.erb +22 -0
  599. data/test/foreman_app/app/views/operatingsystems/new.html.erb +3 -0
  600. data/test/foreman_app/app/views/organizations/welcome.html.erb +14 -0
  601. data/test/foreman_app/app/views/ptables/_form.html.erb +8 -0
  602. data/test/foreman_app/app/views/ptables/edit.html.erb +3 -0
  603. data/test/foreman_app/app/views/ptables/index.html.erb +23 -0
  604. data/test/foreman_app/app/views/ptables/new.html.erb +3 -0
  605. data/test/foreman_app/app/views/ptables/welcome.html.erb +52 -0
  606. data/test/foreman_app/app/views/puppetclasses/_class_parameters.html.erb +16 -0
  607. data/test/foreman_app/app/views/puppetclasses/_class_selection.html.erb +44 -0
  608. data/test/foreman_app/app/views/puppetclasses/_classes.html.erb +23 -0
  609. data/test/foreman_app/app/views/puppetclasses/_classes_parameters.html.erb +14 -0
  610. data/test/foreman_app/app/views/puppetclasses/_form.html.erb +90 -0
  611. data/test/foreman_app/app/views/puppetclasses/_selectedClasses.html.erb +4 -0
  612. data/test/foreman_app/app/views/puppetclasses/edit.html.erb +3 -0
  613. data/test/foreman_app/app/views/puppetclasses/index.html.erb +33 -0
  614. data/test/foreman_app/app/views/puppetclasses/new.html.erb +3 -0
  615. data/test/foreman_app/app/views/puppetclasses/no_route.html.erb +11 -0
  616. data/test/foreman_app/app/views/reports/_list.html.erb +34 -0
  617. data/test/foreman_app/app/views/reports/_metrics.html.erb +25 -0
  618. data/test/foreman_app/app/views/reports/_output.html.erb +13 -0
  619. data/test/foreman_app/app/views/reports/index.html.erb +3 -0
  620. data/test/foreman_app/app/views/reports/show.html.erb +37 -0
  621. data/test/foreman_app/app/views/reports/welcome.html.erb +11 -0
  622. data/test/foreman_app/app/views/roles/_form.html.erb +28 -0
  623. data/test/foreman_app/app/views/roles/edit.html.erb +3 -0
  624. data/test/foreman_app/app/views/roles/index.html.erb +28 -0
  625. data/test/foreman_app/app/views/roles/new.html.erb +3 -0
  626. data/test/foreman_app/app/views/roles/report.html.erb +52 -0
  627. data/test/foreman_app/app/views/settings/index.html.erb +29 -0
  628. data/test/foreman_app/app/views/smart_proxies/_form.html.erb +38 -0
  629. data/test/foreman_app/app/views/smart_proxies/autosign/_form.html.erb +9 -0
  630. data/test/foreman_app/app/views/smart_proxies/autosign/index.html.erb +21 -0
  631. data/test/foreman_app/app/views/smart_proxies/autosign/new.html.erb +3 -0
  632. data/test/foreman_app/app/views/smart_proxies/edit.html.erb +3 -0
  633. data/test/foreman_app/app/views/smart_proxies/index.html.erb +37 -0
  634. data/test/foreman_app/app/views/smart_proxies/new.html.erb +3 -0
  635. data/test/foreman_app/app/views/smart_proxies/puppetca/index.html.erb +36 -0
  636. data/test/foreman_app/app/views/statistics/index.html.erb +5 -0
  637. data/test/foreman_app/app/views/subnets/_fields.html.erb +17 -0
  638. data/test/foreman_app/app/views/subnets/_form.html.erb +34 -0
  639. data/test/foreman_app/app/views/subnets/edit.html.erb +3 -0
  640. data/test/foreman_app/app/views/subnets/import.html.erb +26 -0
  641. data/test/foreman_app/app/views/subnets/index.html.erb +28 -0
  642. data/test/foreman_app/app/views/subnets/new.html.erb +3 -0
  643. data/test/foreman_app/app/views/tasks/_list.html.erb +5 -0
  644. data/test/foreman_app/app/views/tasks/show.html.erb +1 -0
  645. data/test/foreman_app/app/views/taxonomies/_form.html.erb +111 -0
  646. data/test/foreman_app/app/views/taxonomies/_step1.html.erb +14 -0
  647. data/test/foreman_app/app/views/taxonomies/_step2.html.erb +18 -0
  648. data/test/foreman_app/app/views/taxonomies/clone.html.erb +3 -0
  649. data/test/foreman_app/app/views/taxonomies/edit.html.erb +4 -0
  650. data/test/foreman_app/app/views/taxonomies/index.html.erb +39 -0
  651. data/test/foreman_app/app/views/taxonomies/mismatches.html.erb +37 -0
  652. data/test/foreman_app/app/views/taxonomies/new.html.erb +3 -0
  653. data/test/foreman_app/app/views/taxonomies/step2.html.erb +3 -0
  654. data/test/foreman_app/app/views/trends/_fields.html.erb +7 -0
  655. data/test/foreman_app/app/views/trends/_form.html.erb +9 -0
  656. data/test/foreman_app/app/views/trends/_hosts.html.erb +13 -0
  657. data/test/foreman_app/app/views/trends/edit.html.erb +33 -0
  658. data/test/foreman_app/app/views/trends/index.html.erb +47 -0
  659. data/test/foreman_app/app/views/trends/new.html.erb +3 -0
  660. data/test/foreman_app/app/views/trends/show.html.erb +19 -0
  661. data/test/foreman_app/app/views/unattended/autowaik.xml.erb +2 -0
  662. data/test/foreman_app/app/views/unattended/autoyast.xml.erb +80 -0
  663. data/test/foreman_app/app/views/unattended/gpxe_kickstart_config.erb +5 -0
  664. data/test/foreman_app/app/views/unattended/grubby.erb +9 -0
  665. data/test/foreman_app/app/views/unattended/jumpstart.html.erb +10 -0
  666. data/test/foreman_app/app/views/unattended/jumpstart_finish.html.erb +51 -0
  667. data/test/foreman_app/app/views/unattended/kickstart.html.erb +71 -0
  668. data/test/foreman_app/app/views/unattended/preseed.html.erb +66 -0
  669. data/test/foreman_app/app/views/unattended/preseed_finish.html.erb +7 -0
  670. data/test/foreman_app/app/views/unattended/pxe_autowaik.erb +3 -0
  671. data/test/foreman_app/app/views/unattended/pxe_autoyast.erb +4 -0
  672. data/test/foreman_app/app/views/unattended/pxe_debian_config.erb +4 -0
  673. data/test/foreman_app/app/views/unattended/pxe_default.erb +23 -0
  674. data/test/foreman_app/app/views/unattended/pxe_jumpstart_config.erb +10 -0
  675. data/test/foreman_app/app/views/unattended/pxe_kickstart_config.erb +4 -0
  676. data/test/foreman_app/app/views/unattended/pxe_local.erb +11 -0
  677. data/test/foreman_app/app/views/unattended/snippets/_epel.erb +15 -0
  678. data/test/foreman_app/app/views/unattended/snippets/_http_proxy.erb +8 -0
  679. data/test/foreman_app/app/views/unattended/snippets/_puppet.conf.erb +15 -0
  680. data/test/foreman_app/app/views/unattended/snippets/_puppet.init.erb +8 -0
  681. data/test/foreman_app/app/views/unattended/snippets/_redhat_register.erb +67 -0
  682. data/test/foreman_app/app/views/unattended/snippets/_vmware.erb +62 -0
  683. data/test/foreman_app/app/views/usergroups/_form.html.erb +7 -0
  684. data/test/foreman_app/app/views/usergroups/edit.html.erb +3 -0
  685. data/test/foreman_app/app/views/usergroups/index.html.erb +24 -0
  686. data/test/foreman_app/app/views/usergroups/new.html.erb +3 -0
  687. data/test/foreman_app/app/views/users/_filters.html.erb +38 -0
  688. data/test/foreman_app/app/views/users/_form.html.erb +58 -0
  689. data/test/foreman_app/app/views/users/_user_fact.html.erb +14 -0
  690. data/test/foreman_app/app/views/users/edit.html.erb +3 -0
  691. data/test/foreman_app/app/views/users/index.html.erb +31 -0
  692. data/test/foreman_app/app/views/users/login.html.erb +22 -0
  693. data/test/foreman_app/app/views/users/new.html.erb +3 -0
  694. data/test/foreman_app/bundler.d/Gemfile.local.rb +2 -0
  695. data/test/foreman_app/bundler.d/assets.rb +12 -0
  696. data/test/foreman_app/bundler.d/console.rb +5 -0
  697. data/test/foreman_app/bundler.d/development.rb +17 -0
  698. data/test/foreman_app/bundler.d/fog.rb +3 -0
  699. data/test/foreman_app/bundler.d/i18n.rb +5 -0
  700. data/test/foreman_app/bundler.d/jsonp.rb +3 -0
  701. data/test/foreman_app/bundler.d/libvirt.rb +3 -0
  702. data/test/foreman_app/bundler.d/mysql.rb +3 -0
  703. data/test/foreman_app/bundler.d/mysql2.rb +3 -0
  704. data/test/foreman_app/bundler.d/openid.rb +3 -0
  705. data/test/foreman_app/bundler.d/ovirt.rb +3 -0
  706. data/test/foreman_app/bundler.d/postgresql.rb +3 -0
  707. data/test/foreman_app/bundler.d/sqlite.rb +3 -0
  708. data/test/foreman_app/bundler.d/test.rb +17 -0
  709. data/test/foreman_app/bundler.d/vmware.rb +3 -0
  710. data/test/foreman_app/config.ru +8 -0
  711. data/test/foreman_app/config/application.rb +114 -0
  712. data/test/foreman_app/config/boot.rb +6 -0
  713. data/test/foreman_app/config/database.yml +22 -0
  714. data/test/foreman_app/config/database.yml.example +22 -0
  715. data/test/foreman_app/config/email.yaml.example +9 -0
  716. data/test/foreman_app/config/environment.rb +5 -0
  717. data/test/foreman_app/config/environments/development.rb +38 -0
  718. data/test/foreman_app/config/environments/production.rb +112 -0
  719. data/test/foreman_app/config/environments/test.rb +42 -0
  720. data/test/foreman_app/config/ignored_environments.yml.sample +9 -0
  721. data/test/foreman_app/config/initializers/apipie.rb +71 -0
  722. data/test/foreman_app/config/initializers/backtrace_silencers.rb +7 -0
  723. data/test/foreman_app/config/initializers/email.rb +17 -0
  724. data/test/foreman_app/config/initializers/fast_gettext.rb +49 -0
  725. data/test/foreman_app/config/initializers/foreman.rb +24 -0
  726. data/test/foreman_app/config/initializers/hostable.rb +3 -0
  727. data/test/foreman_app/config/initializers/inflections.rb +10 -0
  728. data/test/foreman_app/config/initializers/local_secret_token.rb.example +10 -0
  729. data/test/foreman_app/config/initializers/mime_types.rb +6 -0
  730. data/test/foreman_app/config/initializers/puppet.rb +22 -0
  731. data/test/foreman_app/config/initializers/rack_openid.rb +8 -0
  732. data/test/foreman_app/config/initializers/secret_token.rb +15 -0
  733. data/test/foreman_app/config/initializers/session_store.rb +8 -0
  734. data/test/foreman_app/config/initializers/will_paginate.rb +27 -0
  735. data/test/foreman_app/config/initializers/wrap_parameters.rb +13 -0
  736. data/test/foreman_app/config/locales/README +24 -0
  737. data/test/foreman_app/config/locales/de.yml +203 -0
  738. data/test/foreman_app/config/locales/en.yml +205 -0
  739. data/test/foreman_app/config/locales/es.yml +199 -0
  740. data/test/foreman_app/config/locales/ja.yml +197 -0
  741. data/test/foreman_app/config/model.mappings.example +342 -0
  742. data/test/foreman_app/config/routes.rb +332 -0
  743. data/test/foreman_app/config/routes/api/apipiedoc.rb +4 -0
  744. data/test/foreman_app/config/routes/api/v1.rb +65 -0
  745. data/test/foreman_app/config/routes/api/v2.rb +208 -0
  746. data/test/foreman_app/config/settings.rb +13 -0
  747. data/test/foreman_app/config/settings.yaml +18 -0
  748. data/test/foreman_app/config/settings.yaml.example +17 -0
  749. data/test/foreman_app/db/migrate/20090714132448_create_hosts.rb +47 -0
  750. data/test/foreman_app/db/migrate/20090714132449_add_audits_table.rb +27 -0
  751. data/test/foreman_app/db/migrate/20090715143858_create_architectures.rb +19 -0
  752. data/test/foreman_app/db/migrate/20090717025820_create_media.rb +19 -0
  753. data/test/foreman_app/db/migrate/20090718060746_create_domains.rb +15 -0
  754. data/test/foreman_app/db/migrate/20090718064254_create_subnets.rb +18 -0
  755. data/test/foreman_app/db/migrate/20090720134126_create_operatingsystems.rb +16 -0
  756. data/test/foreman_app/db/migrate/20090722140138_create_models.rb +16 -0
  757. data/test/foreman_app/db/migrate/20090722141107_create_environments.rb +18 -0
  758. data/test/foreman_app/db/migrate/20090729132209_create_reports.rb +14 -0
  759. data/test/foreman_app/db/migrate/20090730152224_create_ptables.rb +24 -0
  760. data/test/foreman_app/db/migrate/20090802062223_create_puppetclasses.rb +26 -0
  761. data/test/foreman_app/db/migrate/20090804130144_create_parameters.rb +13 -0
  762. data/test/foreman_app/db/migrate/20090820130541_create_auth_sources.rb +25 -0
  763. data/test/foreman_app/db/migrate/20090905150131_create_hostgroups.rb +24 -0
  764. data/test/foreman_app/db/migrate/20090905155444_add_type_to_parameter.rb +9 -0
  765. data/test/foreman_app/db/migrate/20090907045751_add_domain_to_parameter.rb +10 -0
  766. data/test/foreman_app/db/migrate/20090915030726_change_report_field_type_to_text.rb +13 -0
  767. data/test/foreman_app/db/migrate/20090916053824_change_host_build_default_to_false.rb +11 -0
  768. data/test/foreman_app/db/migrate/20090920043521_add_index_to_host.rb +25 -0
  769. data/test/foreman_app/db/migrate/20090920064156_add_index_to_parameters.rb +15 -0
  770. data/test/foreman_app/db/migrate/20090920065522_add_index_to_reports.rb +9 -0
  771. data/test/foreman_app/db/migrate/20091012135004_create_users.rb +19 -0
  772. data/test/foreman_app/db/migrate/20091016031017_create_sessions.rb +16 -0
  773. data/test/foreman_app/db/migrate/20091022054108_add_status_to_report.rb +15 -0
  774. data/test/foreman_app/db/migrate/20091214045923_calc_existing_reports.rb +19 -0
  775. data/test/foreman_app/db/migrate/20091219132338_create_lookup_keys.rb +14 -0
  776. data/test/foreman_app/db/migrate/20091219132839_create_lookup_values.rb +17 -0
  777. data/test/foreman_app/db/migrate/20100115021803_change_mysql_reports_column.rb +14 -0
  778. data/test/foreman_app/db/migrate/20100310080727_add_family_to_os.rb +33 -0
  779. data/test/foreman_app/db/migrate/20100325142616_update_fact_names_and_values_to_bin.rb +15 -0
  780. data/test/foreman_app/db/migrate/20100414125652_add_releasename_to_os.rb +24 -0
  781. data/test/foreman_app/db/migrate/20100416124600_create_usergroups.rb +17 -0
  782. data/test/foreman_app/db/migrate/20100419151910_add_owner_to_hosts.rb +26 -0
  783. data/test/foreman_app/db/migrate/20100523114430_add_ubuntu_custom_lvm_ptable.rb +67 -0
  784. data/test/foreman_app/db/migrate/20100523141204_create_media_operatingsystems_and_migrate_data.rb +34 -0
  785. data/test/foreman_app/db/migrate/20100524080302_migrate_installation_medium_uri.rb +15 -0
  786. data/test/foreman_app/db/migrate/20100525094200_simplify_parameters.rb +62 -0
  787. data/test/foreman_app/db/migrate/20100601221000_update_os_minor.rb +13 -0
  788. data/test/foreman_app/db/migrate/20100616114400_change_family_in_os.rb +50 -0
  789. data/test/foreman_app/db/migrate/20100625155400_create_notices.rb +21 -0
  790. data/test/foreman_app/db/migrate/20100628123400_add_internal_auth.rb +33 -0
  791. data/test/foreman_app/db/migrate/20100629093200_create_roles.rb +23 -0
  792. data/test/foreman_app/db/migrate/20100701081235_add_user_domains_and_hostgroups.rb +20 -0
  793. data/test/foreman_app/db/migrate/20100822072954_create_user_facts.rb +18 -0
  794. data/test/foreman_app/db/migrate/20100823181036_add_enabled_to_hosts.rb +9 -0
  795. data/test/foreman_app/db/migrate/20100914092104_add_my_booleans_to_user.rb +13 -0
  796. data/test/foreman_app/db/migrate/20101018120548_create_messages.rb +18 -0
  797. data/test/foreman_app/db/migrate/20101018120603_create_sources.rb +18 -0
  798. data/test/foreman_app/db/migrate/20101018120621_create_logs.rb +22 -0
  799. data/test/foreman_app/db/migrate/20101019122857_add_metrics_to_report.rb +9 -0
  800. data/test/foreman_app/db/migrate/20101019183859_convert_reports.rb +38 -0
  801. data/test/foreman_app/db/migrate/20101103150254_add_owned_filter_to_user.rb +9 -0
  802. data/test/foreman_app/db/migrate/20101118130026_correct_media.rb +35 -0
  803. data/test/foreman_app/db/migrate/20101121080425_create_config_templates.rb +15 -0
  804. data/test/foreman_app/db/migrate/20101121135521_create_template_combinations.rb +15 -0
  805. data/test/foreman_app/db/migrate/20101122132041_create_operatingsystems_config_templates.rb +12 -0
  806. data/test/foreman_app/db/migrate/20101123152150_create_template_kinds.rb +18 -0
  807. data/test/foreman_app/db/migrate/20101123153303_create_os_default_templates.rb +15 -0
  808. data/test/foreman_app/db/migrate/20101125153351_add_default_templates.rb +59 -0
  809. data/test/foreman_app/db/migrate/20101130093613_add_sub_systems_to_subnet.rb +13 -0
  810. data/test/foreman_app/db/migrate/20101130100315_create_proxies.rb +13 -0
  811. data/test/foreman_app/db/migrate/20101202104444_add_proxy_to_domain.rb +11 -0
  812. data/test/foreman_app/db/migrate/20101213085232_add_grubby_template.rb +15 -0
  813. data/test/foreman_app/db/migrate/20110117162722_add_host_group_defaults.rb +21 -0
  814. data/test/foreman_app/db/migrate/20110128130239_add_default_pxe_menu_template.rb +15 -0
  815. data/test/foreman_app/db/migrate/20110213104226_create_proxy_features.rb +28 -0
  816. data/test/foreman_app/db/migrate/20110216101848_change_puppetmaster_column.rb +21 -0
  817. data/test/foreman_app/db/migrate/20110301154453_add_managed_to_hosts.rb +15 -0
  818. data/test/foreman_app/db/migrate/20110321070954_revert_face_names_and_values_to_text_records.rb +13 -0
  819. data/test/foreman_app/db/migrate/20110327123639_add_priority_to_parameter.rb +11 -0
  820. data/test/foreman_app/db/migrate/20110404150043_add_media_path_to_medium.rb +13 -0
  821. data/test/foreman_app/db/migrate/20110407091150_add_image_to_host.rb +15 -0
  822. data/test/foreman_app/db/migrate/20110412103238_remove_unused_fields_from_puppet_classes.rb +9 -0
  823. data/test/foreman_app/db/migrate/20110417102947_add_table_bookmarks.rb +31 -0
  824. data/test/foreman_app/db/migrate/20110420150600_add_solaris_templates.rb +42 -0
  825. data/test/foreman_app/db/migrate/20110613141800_add_solaris_disks.rb +16 -0
  826. data/test/foreman_app/db/migrate/20110616080444_add_look_up_key_id_to_puppet_class.rb +28 -0
  827. data/test/foreman_app/db/migrate/20110617190131_add_sparc_info_to_model.rb +11 -0
  828. data/test/foreman_app/db/migrate/20110619130336_add_ancestry_to_hostgroup.rb +11 -0
  829. data/test/foreman_app/db/migrate/20110628115422_create_settings.rb +18 -0
  830. data/test/foreman_app/db/migrate/20110712064120_update_audits_table.rb +16 -0
  831. data/test/foreman_app/db/migrate/20110712070522_create_host_class.rb +11 -0
  832. data/test/foreman_app/db/migrate/20110725142054_add_suse_templates.rb +46 -0
  833. data/test/foreman_app/db/migrate/20110801090318_add_vm_defaults_to_hostgroup.rb +9 -0
  834. data/test/foreman_app/db/migrate/20110803114134_add_subnet_and_domain_to_host_groups.rb +11 -0
  835. data/test/foreman_app/db/migrate/20111124095053_rename_changes_to_audited_changes.rb +9 -0
  836. data/test/foreman_app/db/migrate/20111124095054_add_remote_address_to_audits.rb +10 -0
  837. data/test/foreman_app/db/migrate/20111124095055_rename_parent_to_association.rb +11 -0
  838. data/test/foreman_app/db/migrate/20111205231500_add_gateway_and_dns_to_subnets.rb +13 -0
  839. data/test/foreman_app/db/migrate/20111227095806_ensure_all_hostnames_are_lowercase.rb +9 -0
  840. data/test/foreman_app/db/migrate/20120102071633_add_from_and_to_ranges_to_subnets.rb +13 -0
  841. data/test/foreman_app/db/migrate/20120110113051_create_subnet_domain.rb +21 -0
  842. data/test/foreman_app/db/migrate/20120122131037_create_compute_resources.rb +19 -0
  843. data/test/foreman_app/db/migrate/20120126113850_add_uuid_and_compute_id_to_host.rb +11 -0
  844. data/test/foreman_app/db/migrate/20120127141602_add_windows_templates.rb +47 -0
  845. data/test/foreman_app/db/migrate/20120311081257_create_nics.rb +52 -0
  846. data/test/foreman_app/db/migrate/20120313081913_add_puppet_master_proxy_to_host_and_host_group.rb +41 -0
  847. data/test/foreman_app/db/migrate/20120502105518_update_report_field_to_large_int.rb +9 -0
  848. data/test/foreman_app/db/migrate/20120506143325_create_images.rb +18 -0
  849. data/test/foreman_app/db/migrate/20120509131302_add_cert_name_to_host.rb +12 -0
  850. data/test/foreman_app/db/migrate/20120510113417_create_key_pairs.rb +15 -0
  851. data/test/foreman_app/db/migrate/20120521142924_add_dns_id_to_subnet.rb +9 -0
  852. data/test/foreman_app/db/migrate/20120523065531_add_image_id_to_host.rb +9 -0
  853. data/test/foreman_app/db/migrate/20120529113900_add_user_compute_resources.rb +14 -0
  854. data/test/foreman_app/db/migrate/20120529115814_add_compute_resources_boolean_to_user.rb +9 -0
  855. data/test/foreman_app/db/migrate/20120604114049_add_epel_snippets.rb +10 -0
  856. data/test/foreman_app/db/migrate/20120607074318_convert_params_to_text.rb +11 -0
  857. data/test/foreman_app/db/migrate/20120612070100_change_bookmark_column_to_text.rb +10 -0
  858. data/test/foreman_app/db/migrate/20120613082125_rename_association_to_associated.rb +25 -0
  859. data/test/foreman_app/db/migrate/20120620124658_fix_auditable_type.rb +9 -0
  860. data/test/foreman_app/db/migrate/20120620124659_fix_associated_type.rb +9 -0
  861. data/test/foreman_app/db/migrate/20120621135042_create_taxonomies.rb +14 -0
  862. data/test/foreman_app/db/migrate/20120623002052_add_ok_hosts_book_mark.rb +13 -0
  863. data/test/foreman_app/db/migrate/20120624081510_add_auditable_name_and_associated_name_to_audit.rb +29 -0
  864. data/test/foreman_app/db/migrate/20120624093958_add_os_family_to_media.rb +14 -0
  865. data/test/foreman_app/db/migrate/20120624094034_add_os_family_to_ptable.rb +17 -0
  866. data/test/foreman_app/db/migrate/20120705130038_add_attributes_to_compute_resources.rb +9 -0
  867. data/test/foreman_app/db/migrate/20120824142048_add_some_indexes.rb +23 -0
  868. data/test/foreman_app/db/migrate/20120905095532_create_environment_classes.rb +16 -0
  869. data/test/foreman_app/db/migrate/20120905131841_add_lookup_keys_override_and_required.rb +15 -0
  870. data/test/foreman_app/db/migrate/20120916080843_add_lookup_values_count_to_lookup_keys.rb +9 -0
  871. data/test/foreman_app/db/migrate/20120916080926_cache_lookup_values_count.rb +8 -0
  872. data/test/foreman_app/db/migrate/20120921000313_add_iam_role_to_images.rb +9 -0
  873. data/test/foreman_app/db/migrate/20120921105349_create_tokens.rb +15 -0
  874. data/test/foreman_app/db/migrate/20120927020752_add_bmc_feature_to_proxy.rb +8 -0
  875. data/test/foreman_app/db/migrate/20121003172526_add_taxonomy_ids_to_hosts.rb +11 -0
  876. data/test/foreman_app/db/migrate/20121011115320_change_domain_character_count.rb +9 -0
  877. data/test/foreman_app/db/migrate/20121012170851_create_trends.rb +25 -0
  878. data/test/foreman_app/db/migrate/20121012170936_create_trend_counters.rb +16 -0
  879. data/test/foreman_app/db/migrate/20121015113502_update_media_path_limit.rb +9 -0
  880. data/test/foreman_app/db/migrate/20121018152459_create_hostgroup_classes.rb +11 -0
  881. data/test/foreman_app/db/migrate/20121026160433_add_localboot_template.rb +15 -0
  882. data/test/foreman_app/db/migrate/20121029164911_rename_reply_adress_setting.rb +9 -0
  883. data/test/foreman_app/db/migrate/20121101141448_add_locations_organizations.rb +12 -0
  884. data/test/foreman_app/db/migrate/20121118120028_migrate_hypervisors_to_compute_resources.rb +20 -0
  885. data/test/foreman_app/db/migrate/20121118125341_create_taxable_taxonomies.rb +19 -0
  886. data/test/foreman_app/db/migrate/20121119102104_add_my_taxonomy_to_user.rb +11 -0
  887. data/test/foreman_app/db/migrate/20121218084123_change_smart_variable_length.rb +9 -0
  888. data/test/foreman_app/db/migrate/20121219040534_remove_replay_address_setting.rb +8 -0
  889. data/test/foreman_app/db/migrate/20130109155024_add_ignore_types_to_taxonomy.rb +9 -0
  890. data/test/foreman_app/db/migrate/20130121130826_add_digest_to_messages.rb +18 -0
  891. data/test/foreman_app/db/migrate/20130211160200_add_sti_to_hosts.rb +11 -0
  892. data/test/foreman_app/db/migrate/20130228145456_add_digest_to_sources.rb +22 -0
  893. data/test/foreman_app/db/migrate/20130329195742_remove_duplicate_snippets.rb +20 -0
  894. data/test/foreman_app/db/migrate/20130409081924_add_label_to_host_group.rb +18 -0
  895. data/test/foreman_app/db/migrate/20130417110127_add_sti_to_settings.rb +17 -0
  896. data/test/foreman_app/db/migrate/20130418134513_fix_sti_host_auditable_type.rb +9 -0
  897. data/test/foreman_app/db/migrate/20130419145808_add_id_to_user_hostgroup.rb +9 -0
  898. data/test/foreman_app/db/schema.rb +746 -0
  899. data/test/foreman_app/db/seeds.rb +9 -0
  900. data/test/foreman_app/db/test.sqlite3 +0 -0
  901. data/test/foreman_app/doc/README_FOR_APP +2 -0
  902. data/test/foreman_app/doc/apipie_examples.yml +4645 -0
  903. data/test/foreman_app/extras/changelog +39 -0
  904. data/test/foreman_app/extras/ci/migration.sh +64 -0
  905. data/test/foreman_app/extras/ci/setup.sh +19 -0
  906. data/test/foreman_app/extras/cli/foremancli +210 -0
  907. data/test/foreman_app/extras/dbmigrate +10 -0
  908. data/test/foreman_app/extras/foreman-release.spec +41 -0
  909. data/test/foreman_app/extras/foreman.repo +11 -0
  910. data/test/foreman_app/extras/git2nightly_snapshot +9 -0
  911. data/test/foreman_app/extras/git2release +22 -0
  912. data/test/foreman_app/extras/ignored_environments.yml.sample +10 -0
  913. data/test/foreman_app/extras/jumpstart/README +2 -0
  914. data/test/foreman_app/extras/jumpstart/admin +11 -0
  915. data/test/foreman_app/extras/jumpstart/curl +0 -0
  916. data/test/foreman_app/extras/jumpstart/curl-license +22 -0
  917. data/test/foreman_app/extras/jumpstart/curl.i386 +0 -0
  918. data/test/foreman_app/extras/jumpstart/curl.sparc +0 -0
  919. data/test/foreman_app/extras/jumpstart/dynamic_finish +18 -0
  920. data/test/foreman_app/extras/jumpstart/dynamic_profile +17 -0
  921. data/test/foreman_app/extras/jumpstart/nsswitch.conf +34 -0
  922. data/test/foreman_app/extras/jumpstart/rules +1 -0
  923. data/test/foreman_app/extras/jumpstart/rules.ok +2 -0
  924. data/test/foreman_app/extras/jumpstart/sysidcfg/sysidcfg_primary/sysidcfg +12 -0
  925. data/test/foreman_app/extras/noVNC/websockify.py +5 -0
  926. data/test/foreman_app/extras/noVNC/websockify/__init__.py +2 -0
  927. data/test/foreman_app/extras/noVNC/websockify/websocket.py +982 -0
  928. data/test/foreman_app/extras/noVNC/websockify/websocketproxy.py +393 -0
  929. data/test/foreman_app/extras/packaging/rpm/rel-eng/comps/comps-foreman-fedora18.xml +76 -0
  930. data/test/foreman_app/extras/packaging/rpm/rel-eng/comps/comps-foreman-rhel6.xml +115 -0
  931. data/test/foreman_app/extras/packaging/rpm/rel-eng/packages/foreman +1 -0
  932. data/test/foreman_app/extras/packaging/rpm/rel-eng/releasers.conf +59 -0
  933. data/test/foreman_app/extras/packaging/rpm/rel-eng/tito.props +3 -0
  934. data/test/foreman_app/extras/packaging/rpm/sources/0001-rubygem-actionmailer-fix-dep-versions.patch +19 -0
  935. data/test/foreman_app/extras/packaging/rpm/sources/foreman.cron.d +27 -0
  936. data/test/foreman_app/extras/packaging/rpm/sources/foreman.init +154 -0
  937. data/test/foreman_app/extras/packaging/rpm/sources/foreman.logrotate +10 -0
  938. data/test/foreman_app/extras/packaging/rpm/sources/foreman.repo +11 -0
  939. data/test/foreman_app/extras/packaging/rpm/sources/foreman.spec-devel.patch +55 -0
  940. data/test/foreman_app/extras/packaging/rpm/sources/foreman.sysconfig +21 -0
  941. data/test/foreman_app/extras/query/ssh_using_foreman +136 -0
  942. data/test/foreman_app/extras/rdoc/rdoc_prepare_script.rb +51 -0
  943. data/test/foreman_app/foreman.spec +621 -0
  944. data/test/foreman_app/lib/api/api_responder.rb +17 -0
  945. data/test/foreman_app/lib/api/authorization.rb +78 -0
  946. data/test/foreman_app/lib/api/version1.rb +7 -0
  947. data/test/foreman_app/lib/api/version2.rb +7 -0
  948. data/test/foreman_app/lib/api_constraints.rb +15 -0
  949. data/test/foreman_app/lib/audit_extensions.rb +63 -0
  950. data/test/foreman_app/lib/core_extensions.rb +100 -0
  951. data/test/foreman_app/lib/fog_extensions.rb +45 -0
  952. data/test/foreman_app/lib/fog_extensions/aws/flavor.rb +9 -0
  953. data/test/foreman_app/lib/fog_extensions/aws/server.rb +18 -0
  954. data/test/foreman_app/lib/fog_extensions/libvirt/server.rb +24 -0
  955. data/test/foreman_app/lib/fog_extensions/model.rb +27 -0
  956. data/test/foreman_app/lib/fog_extensions/openstack/flavor.rb +13 -0
  957. data/test/foreman_app/lib/fog_extensions/openstack/server.rb +40 -0
  958. data/test/foreman_app/lib/fog_extensions/ovirt/server.rb +15 -0
  959. data/test/foreman_app/lib/fog_extensions/ovirt/volume.rb +11 -0
  960. data/test/foreman_app/lib/fog_extensions/vsphere/folder.rb +14 -0
  961. data/test/foreman_app/lib/fog_extensions/vsphere/mini_server.rb +20 -0
  962. data/test/foreman_app/lib/fog_extensions/vsphere/mini_servers.rb +22 -0
  963. data/test/foreman_app/lib/fog_extensions/vsphere/server.rb +19 -0
  964. data/test/foreman_app/lib/foreman.rb +14 -0
  965. data/test/foreman_app/lib/foreman/access_control.rb +120 -0
  966. data/test/foreman_app/lib/foreman/access_permissions.rb +572 -0
  967. data/test/foreman_app/lib/foreman/controller.rb +2 -0
  968. data/test/foreman_app/lib/foreman/controller/auto_complete_search.rb +23 -0
  969. data/test/foreman_app/lib/foreman/controller/environments.rb +36 -0
  970. data/test/foreman_app/lib/foreman/controller/host_details.rb +69 -0
  971. data/test/foreman_app/lib/foreman/controller/smart_proxy_auth.rb +68 -0
  972. data/test/foreman_app/lib/foreman/controller/taxonomies_controller.rb +178 -0
  973. data/test/foreman_app/lib/foreman/controller/taxonomy_multiple.rb +56 -0
  974. data/test/foreman_app/lib/foreman/default_data/loader.rb +166 -0
  975. data/test/foreman_app/lib/foreman/exception.rb +37 -0
  976. data/test/foreman_app/lib/foreman/importer_puppetclass.rb +48 -0
  977. data/test/foreman_app/lib/foreman/model.rb +2 -0
  978. data/test/foreman_app/lib/foreman/model/ec2.rb +128 -0
  979. data/test/foreman_app/lib/foreman/model/libvirt.rb +150 -0
  980. data/test/foreman_app/lib/foreman/model/openstack.rb +130 -0
  981. data/test/foreman_app/lib/foreman/model/ovirt.rb +250 -0
  982. data/test/foreman_app/lib/foreman/model/rackspace.rb +108 -0
  983. data/test/foreman_app/lib/foreman/model/vmware.rb +181 -0
  984. data/test/foreman_app/lib/foreman/provision.rb +3 -0
  985. data/test/foreman_app/lib/foreman/provision/ssh.rb +102 -0
  986. data/test/foreman_app/lib/foreman/renderer.rb +68 -0
  987. data/test/foreman_app/lib/foreman/sti.rb +30 -0
  988. data/test/foreman_app/lib/foreman/thread_session.rb +163 -0
  989. data/test/foreman_app/lib/foreman/util.rb +25 -0
  990. data/test/foreman_app/lib/foreman/wrapped_exception.rb +23 -0
  991. data/test/foreman_app/lib/net.rb +50 -0
  992. data/test/foreman_app/lib/net/dhcp.rb +6 -0
  993. data/test/foreman_app/lib/net/dhcp/record.rb +56 -0
  994. data/test/foreman_app/lib/net/dhcp/sparc_record.rb +25 -0
  995. data/test/foreman_app/lib/net/dns.rb +78 -0
  996. data/test/foreman_app/lib/net/dns/a_record.rb +47 -0
  997. data/test/foreman_app/lib/net/dns/ptr_record.rb +52 -0
  998. data/test/foreman_app/lib/net/validations.rb +47 -0
  999. data/test/foreman_app/lib/orchestration/queue.rb +58 -0
  1000. data/test/foreman_app/lib/proxy_api.rb +6 -0
  1001. data/test/foreman_app/lib/proxy_api/bmc.rb +120 -0
  1002. data/test/foreman_app/lib/proxy_api/dhcp.rb +70 -0
  1003. data/test/foreman_app/lib/proxy_api/dns.rb +26 -0
  1004. data/test/foreman_app/lib/proxy_api/features.rb +12 -0
  1005. data/test/foreman_app/lib/proxy_api/puppet.rb +28 -0
  1006. data/test/foreman_app/lib/proxy_api/puppetca.rb +38 -0
  1007. data/test/foreman_app/lib/proxy_api/resource.rb +90 -0
  1008. data/test/foreman_app/lib/proxy_api/tftp.rb +54 -0
  1009. data/test/foreman_app/lib/puppet_setting.rb +69 -0
  1010. data/test/foreman_app/lib/regexp_extensions.rb +14 -0
  1011. data/test/foreman_app/lib/sso.rb +13 -0
  1012. data/test/foreman_app/lib/sso/apache.rb +16 -0
  1013. data/test/foreman_app/lib/sso/base.rb +27 -0
  1014. data/test/foreman_app/lib/sso/signo.rb +60 -0
  1015. data/test/foreman_app/lib/task.rb +39 -0
  1016. data/test/foreman_app/lib/tasks/convert.rake +127 -0
  1017. data/test/foreman_app/lib/tasks/exception.rake +32 -0
  1018. data/test/foreman_app/lib/tasks/gettext.rake +9 -0
  1019. data/test/foreman_app/lib/tasks/hosts.rake +67 -0
  1020. data/test/foreman_app/lib/tasks/jenkins.rake +19 -0
  1021. data/test/foreman_app/lib/tasks/load_default_data.rake +16 -0
  1022. data/test/foreman_app/lib/tasks/locale.rake +43 -0
  1023. data/test/foreman_app/lib/tasks/model.rake +83 -0
  1024. data/test/foreman_app/lib/tasks/patches.rake +19 -0
  1025. data/test/foreman_app/lib/tasks/pkg.rake +19 -0
  1026. data/test/foreman_app/lib/tasks/puppet.rake +178 -0
  1027. data/test/foreman_app/lib/tasks/reports.rake +82 -0
  1028. data/test/foreman_app/lib/tasks/reset_permissions.rake +20 -0
  1029. data/test/foreman_app/lib/tasks/security.rake +21 -0
  1030. data/test/foreman_app/lib/tasks/smartproxy.rake +58 -0
  1031. data/test/foreman_app/lib/tasks/test_api_dir.rake +10 -0
  1032. data/test/foreman_app/lib/tasks/test_lib_dir.rake +14 -0
  1033. data/test/foreman_app/lib/tasks/trends.rake +32 -0
  1034. data/test/foreman_app/lib/timed_cached_store.rb +55 -0
  1035. data/test/foreman_app/lib/ws_proxy.rb +78 -0
  1036. data/test/foreman_app/locale/Makefile +54 -0
  1037. data/test/foreman_app/locale/README +26 -0
  1038. data/test/foreman_app/locale/de/foreman.po +4477 -0
  1039. data/test/foreman_app/locale/en/foreman.po +4198 -0
  1040. data/test/foreman_app/locale/es/foreman.po +4494 -0
  1041. data/test/foreman_app/locale/foreman.pot +4198 -0
  1042. data/test/foreman_app/locale/ja/foreman.po +4215 -0
  1043. data/test/foreman_app/locale/model_attributes.rb +442 -0
  1044. data/test/foreman_app/log/test.log +36021 -0
  1045. data/test/foreman_app/public/404.html +26 -0
  1046. data/test/foreman_app/public/422.html +26 -0
  1047. data/test/foreman_app/public/500.html +26 -0
  1048. data/test/foreman_app/public/blank.html +33 -0
  1049. data/test/foreman_app/public/favicon.ico +0 -0
  1050. data/test/foreman_app/public/robots.txt +5 -0
  1051. data/test/foreman_app/script/foreman-config +147 -0
  1052. data/test/foreman_app/script/performance/benchmarker +3 -0
  1053. data/test/foreman_app/script/performance/profiler +3 -0
  1054. data/test/foreman_app/script/rails +6 -0
  1055. data/test/foreman_app/script/show-missing-rails-locales.sh +25 -0
  1056. data/test/foreman_app/script/update-rails-locales.sh +16 -0
  1057. data/test/foreman_app/test/fixtures/architectures.yml +10 -0
  1058. data/test/foreman_app/test/fixtures/audits.yml +18 -0
  1059. data/test/foreman_app/test/fixtures/auth_sources.yml +20 -0
  1060. data/test/foreman_app/test/fixtures/bookmarks.yml +13 -0
  1061. data/test/foreman_app/test/fixtures/brslc022.facts.yaml +68 -0
  1062. data/test/foreman_app/test/fixtures/compute_resources.yml +28 -0
  1063. data/test/foreman_app/test/fixtures/config_templates.yml +47 -0
  1064. data/test/foreman_app/test/fixtures/domains.yml +18 -0
  1065. data/test/foreman_app/test/fixtures/environment_classes.yml +15 -0
  1066. data/test/foreman_app/test/fixtures/environments.yml +10 -0
  1067. data/test/foreman_app/test/fixtures/fact_names.yml +5 -0
  1068. data/test/foreman_app/test/fixtures/fact_values.yml +11 -0
  1069. data/test/foreman_app/test/fixtures/features.yml +23 -0
  1070. data/test/foreman_app/test/fixtures/host_classes.yml +9 -0
  1071. data/test/foreman_app/test/fixtures/hostgroup_classes.yml +9 -0
  1072. data/test/foreman_app/test/fixtures/hostgroups.yml +24 -0
  1073. data/test/foreman_app/test/fixtures/hosts.yml +198 -0
  1074. data/test/foreman_app/test/fixtures/images.yml +16 -0
  1075. data/test/foreman_app/test/fixtures/key_pairs.yml +7 -0
  1076. data/test/foreman_app/test/fixtures/logs.yml +11 -0
  1077. data/test/foreman_app/test/fixtures/lookup_keys.yml +32 -0
  1078. data/test/foreman_app/test/fixtures/media.yml +25 -0
  1079. data/test/foreman_app/test/fixtures/messages.yml +7 -0
  1080. data/test/foreman_app/test/fixtures/models.yml +10 -0
  1081. data/test/foreman_app/test/fixtures/notices.yml +7 -0
  1082. data/test/foreman_app/test/fixtures/operatingsystems.yml +49 -0
  1083. data/test/foreman_app/test/fixtures/os_default_templates.yml +21 -0
  1084. data/test/foreman_app/test/fixtures/parameters.yml +30 -0
  1085. data/test/foreman_app/test/fixtures/ptables.yml +17 -0
  1086. data/test/foreman_app/test/fixtures/puppetclasses.yml +13 -0
  1087. data/test/foreman_app/test/fixtures/report-2.6.12-noops.yaml +627 -0
  1088. data/test/foreman_app/test/fixtures/report-2.6.5-errors.yaml +60 -0
  1089. data/test/foreman_app/test/fixtures/report-2.6.5.yaml +413 -0
  1090. data/test/foreman_app/test/fixtures/report-3.0.1.yaml +283 -0
  1091. data/test/foreman_app/test/fixtures/report-applied.yaml +86 -0
  1092. data/test/foreman_app/test/fixtures/report-empty.yaml +31 -0
  1093. data/test/foreman_app/test/fixtures/report-errors.yaml +66 -0
  1094. data/test/foreman_app/test/fixtures/report-skipped.yaml +86 -0
  1095. data/test/foreman_app/test/fixtures/reports.yml +13 -0
  1096. data/test/foreman_app/test/fixtures/roles.yml +198 -0
  1097. data/test/foreman_app/test/fixtures/sample_http_preseed_template +66 -0
  1098. data/test/foreman_app/test/fixtures/sample_tokenised_template +66 -0
  1099. data/test/foreman_app/test/fixtures/settings.yml +176 -0
  1100. data/test/foreman_app/test/fixtures/smart_proxies.yml +23 -0
  1101. data/test/foreman_app/test/fixtures/sources.yml +7 -0
  1102. data/test/foreman_app/test/fixtures/subnet_domains.yml +9 -0
  1103. data/test/foreman_app/test/fixtures/subnets.yml +26 -0
  1104. data/test/foreman_app/test/fixtures/taxable_taxonomies.yml +15 -0
  1105. data/test/foreman_app/test/fixtures/taxonomies.yml +15 -0
  1106. data/test/foreman_app/test/fixtures/template_combinations.yml +19 -0
  1107. data/test/foreman_app/test/fixtures/template_kinds.yml +14 -0
  1108. data/test/foreman_app/test/fixtures/trend_counters.yml +9 -0
  1109. data/test/foreman_app/test/fixtures/trends.yml +9 -0
  1110. data/test/foreman_app/test/fixtures/trends_controller_test.rb +8 -0
  1111. data/test/foreman_app/test/fixtures/user_facts.yml +7 -0
  1112. data/test/foreman_app/test/fixtures/usergroups.yml +7 -0
  1113. data/test/foreman_app/test/fixtures/users.yml +52 -0
  1114. data/test/foreman_app/test/functional/api/v1/architectures_controller_test.rb +79 -0
  1115. data/test/foreman_app/test/functional/api/v1/audits_controller_test.rb +20 -0
  1116. data/test/foreman_app/test/functional/api/v1/auth_source_ldaps_controller_test.rb +41 -0
  1117. data/test/foreman_app/test/functional/api/v1/bookmarks_controller_test.rb +60 -0
  1118. data/test/foreman_app/test/functional/api/v1/common_parameters_controller_test.rb +41 -0
  1119. data/test/foreman_app/test/functional/api/v1/compute_resources_controller_test.rb +50 -0
  1120. data/test/foreman_app/test/functional/api/v1/config_templates_controller_test.rb +82 -0
  1121. data/test/foreman_app/test/functional/api/v1/dashboard_controller_test.rb +12 -0
  1122. data/test/foreman_app/test/functional/api/v1/domains_controller_test.rb +50 -0
  1123. data/test/foreman_app/test/functional/api/v1/environments_controller_test.rb +40 -0
  1124. data/test/foreman_app/test/functional/api/v1/fact_values_controller_test.rb +19 -0
  1125. data/test/foreman_app/test/functional/api/v1/home_controller_test.rb +11 -0
  1126. data/test/foreman_app/test/functional/api/v1/hostgroups_controller_test.rb +41 -0
  1127. data/test/foreman_app/test/functional/api/v1/hosts_controller_test.rb +66 -0
  1128. data/test/foreman_app/test/functional/api/v1/images_controller_test.rb +47 -0
  1129. data/test/foreman_app/test/functional/api/v1/lookup_keys_controller_test.rb +41 -0
  1130. data/test/foreman_app/test/functional/api/v1/media_controller_test.rb +48 -0
  1131. data/test/foreman_app/test/functional/api/v1/models_controller_test.rb +43 -0
  1132. data/test/foreman_app/test/functional/api/v1/operatingsystems_controller_test.rb +55 -0
  1133. data/test/foreman_app/test/functional/api/v1/ptables_controller_test.rb +48 -0
  1134. data/test/foreman_app/test/functional/api/v1/puppetclasses_controller_test.rb +40 -0
  1135. data/test/foreman_app/test/functional/api/v1/reports_controller_test.rb +66 -0
  1136. data/test/foreman_app/test/functional/api/v1/roles_controller_test.rb +41 -0
  1137. data/test/foreman_app/test/functional/api/v1/settings_controller_test.rb +25 -0
  1138. data/test/foreman_app/test/functional/api/v1/smart_proxies_controller_test.rb +72 -0
  1139. data/test/foreman_app/test/functional/api/v1/subnets_controller_test.rb +58 -0
  1140. data/test/foreman_app/test/functional/api/v1/template_kinds_controller_test.rb +11 -0
  1141. data/test/foreman_app/test/functional/api/v1/usergroups_controller_test.rb +41 -0
  1142. data/test/foreman_app/test/functional/api/v1/users_controller_test.rb +137 -0
  1143. data/test/foreman_app/test/functional/api/v2/config_templates_controller_test.rb +80 -0
  1144. data/test/foreman_app/test/functional/api/v2/domains_controller_test.rb +32 -0
  1145. data/test/foreman_app/test/functional/api/v2/host_classes_controller_test.rb +29 -0
  1146. data/test/foreman_app/test/functional/api/v2/hostgroup_class_controller_test.rb +29 -0
  1147. data/test/foreman_app/test/functional/api/v2/locations_controller_test.rb +85 -0
  1148. data/test/foreman_app/test/functional/api/v2/parameters_controller_test.rb +180 -0
  1149. data/test/foreman_app/test/functional/api/v2/puppetclasses_controller_test.rb +103 -0
  1150. data/test/foreman_app/test/functional/api/v2/template_combinations_controller_test.rb +38 -0
  1151. data/test/foreman_app/test/functional/architectures_controller_test.rb +97 -0
  1152. data/test/foreman_app/test/functional/audits_controller_test.rb +29 -0
  1153. data/test/foreman_app/test/functional/auth_source_ldaps_controller_test.rb +66 -0
  1154. data/test/foreman_app/test/functional/bookmarks_controller_test.rb +51 -0
  1155. data/test/foreman_app/test/functional/common_parameters_controller_test.rb +69 -0
  1156. data/test/foreman_app/test/functional/compute_resources_controller_test.rb +157 -0
  1157. data/test/foreman_app/test/functional/compute_resources_vms_controller_test.rb +160 -0
  1158. data/test/foreman_app/test/functional/config_templates_controller_test.rb +132 -0
  1159. data/test/foreman_app/test/functional/dashboard_controller_test.rb +38 -0
  1160. data/test/foreman_app/test/functional/domains_controller_test.rb +101 -0
  1161. data/test/foreman_app/test/functional/environments_controller_test.rb +234 -0
  1162. data/test/foreman_app/test/functional/fact_values_controller_test.rb +138 -0
  1163. data/test/foreman_app/test/functional/facts_controller_test.rb +12 -0
  1164. data/test/foreman_app/test/functional/home_controller_test.rb +9 -0
  1165. data/test/foreman_app/test/functional/hostgroups_controller_test.rb +125 -0
  1166. data/test/foreman_app/test/functional/hosts_controller_test.rb +830 -0
  1167. data/test/foreman_app/test/functional/images_controller_test.rb +55 -0
  1168. data/test/foreman_app/test/functional/locations_controller_test.rb +149 -0
  1169. data/test/foreman_app/test/functional/lookup_keys_controller_test.rb +43 -0
  1170. data/test/foreman_app/test/functional/lookup_values_controller_test.rb +8 -0
  1171. data/test/foreman_app/test/functional/media_controller_test.rb +95 -0
  1172. data/test/foreman_app/test/functional/models_controller_test.rb +66 -0
  1173. data/test/foreman_app/test/functional/notices_controller_test.rb +36 -0
  1174. data/test/foreman_app/test/functional/operatingsystems_controller_test.rb +104 -0
  1175. data/test/foreman_app/test/functional/organizations_controller_test.rb +148 -0
  1176. data/test/foreman_app/test/functional/ptables_controller_test.rb +142 -0
  1177. data/test/foreman_app/test/functional/puppetclasses_controller_test.rb +66 -0
  1178. data/test/foreman_app/test/functional/reports_controller_test.rb +191 -0
  1179. data/test/foreman_app/test/functional/roles_controller_test.rb +124 -0
  1180. data/test/foreman_app/test/functional/settings_controller_test.rb +34 -0
  1181. data/test/foreman_app/test/functional/smart_proxies/autosign_controller_test.rb +8 -0
  1182. data/test/foreman_app/test/functional/smart_proxies/puppetca_controller_test.rb +8 -0
  1183. data/test/foreman_app/test/functional/smart_proxies_controller_test.rb +85 -0
  1184. data/test/foreman_app/test/functional/statistics_controller_test.rb +21 -0
  1185. data/test/foreman_app/test/functional/subnets_controller_test.rb +89 -0
  1186. data/test/foreman_app/test/functional/tasks_controller_test.rb +8 -0
  1187. data/test/foreman_app/test/functional/unattended_controller_test.rb +141 -0
  1188. data/test/foreman_app/test/functional/usergroups_controller_test.rb +66 -0
  1189. data/test/foreman_app/test/functional/users_controller_test.rb +147 -0
  1190. data/test/foreman_app/test/lib/foreman/access_permissions_test.rb +50 -0
  1191. data/test/foreman_app/test/lib/foreman/default_settings/loader_test.rb +39 -0
  1192. data/test/foreman_app/test/lib/foreman/model/ovirt_test.rb +72 -0
  1193. data/test/foreman_app/test/lib/foreman/renderer_test.rb +32 -0
  1194. data/test/foreman_app/test/lib/foreman/util_test.rb +40 -0
  1195. data/test/foreman_app/test/lib/net/dhcp_test.rb +39 -0
  1196. data/test/foreman_app/test/lib/net/net_test.rb +21 -0
  1197. data/test/foreman_app/test/lib/net/validations_test.rb +19 -0
  1198. data/test/foreman_app/test/lib/proxy_api/bmc_test.rb +256 -0
  1199. data/test/foreman_app/test/lib/proxy_api/dhcp_test.rb +60 -0
  1200. data/test/foreman_app/test/lib/puppet_setting_test.rb +92 -0
  1201. data/test/foreman_app/test/performance/browsing_test.rb +9 -0
  1202. data/test/foreman_app/test/test_helper.rb +164 -0
  1203. data/test/foreman_app/test/unit/architecture_test.rb +106 -0
  1204. data/test/foreman_app/test/unit/auth_source_ldap_test.rb +205 -0
  1205. data/test/foreman_app/test/unit/auth_source_test.rb +34 -0
  1206. data/test/foreman_app/test/unit/bookmark_test.rb +32 -0
  1207. data/test/foreman_app/test/unit/classification_test.rb +46 -0
  1208. data/test/foreman_app/test/unit/common_parameter_test.rb +100 -0
  1209. data/test/foreman_app/test/unit/compute_resource_test.rb +88 -0
  1210. data/test/foreman_app/test/unit/config_template_test.rb +67 -0
  1211. data/test/foreman_app/test/unit/domain_parameter_test.rb +106 -0
  1212. data/test/foreman_app/test/unit/domain_test.rb +161 -0
  1213. data/test/foreman_app/test/unit/environment_class_test.rb +9 -0
  1214. data/test/foreman_app/test/unit/environment_test.rb +35 -0
  1215. data/test/foreman_app/test/unit/fact_value_test.rb +25 -0
  1216. data/test/foreman_app/test/unit/facts.yml +91 -0
  1217. data/test/foreman_app/test/unit/facts_importer_test.rb +50 -0
  1218. data/test/foreman_app/test/unit/facts_with_caps.yml +91 -0
  1219. data/test/foreman_app/test/unit/feature_test.rb +8 -0
  1220. data/test/foreman_app/test/unit/group_parameter_test.rb +108 -0
  1221. data/test/foreman_app/test/unit/helpers/architecture_helper_test.rb +4 -0
  1222. data/test/foreman_app/test/unit/helpers/audit_helper_test.rb +4 -0
  1223. data/test/foreman_app/test/unit/helpers/auth_sources_helper_test.rb +4 -0
  1224. data/test/foreman_app/test/unit/helpers/bookmarks_helper_test.rb +4 -0
  1225. data/test/foreman_app/test/unit/helpers/compute_resources_helper_test.rb +4 -0
  1226. data/test/foreman_app/test/unit/helpers/dashboard_helper_test.rb +4 -0
  1227. data/test/foreman_app/test/unit/helpers/domain_helper_test.rb +4 -0
  1228. data/test/foreman_app/test/unit/helpers/environments_helper_test.rb +4 -0
  1229. data/test/foreman_app/test/unit/helpers/fact_values_helper_test.rb +4 -0
  1230. data/test/foreman_app/test/unit/helpers/home_helper_test.rb +4 -0
  1231. data/test/foreman_app/test/unit/helpers/host_groups_helper_test.rb +14 -0
  1232. data/test/foreman_app/test/unit/helpers/hosts_helper_test.rb +4 -0
  1233. data/test/foreman_app/test/unit/helpers/images_helper_test.rb +4 -0
  1234. data/test/foreman_app/test/unit/helpers/lookup_keys_helper_test.rb +4 -0
  1235. data/test/foreman_app/test/unit/helpers/medium_helper_test.rb +4 -0
  1236. data/test/foreman_app/test/unit/helpers/model_helper_test.rb +4 -0
  1237. data/test/foreman_app/test/unit/helpers/operatingsystem_helper_test.rb +4 -0
  1238. data/test/foreman_app/test/unit/helpers/parameters_helper_test.rb +4 -0
  1239. data/test/foreman_app/test/unit/helpers/ptables_helper_test.rb +4 -0
  1240. data/test/foreman_app/test/unit/helpers/puppetclasses_helper_test.rb +4 -0
  1241. data/test/foreman_app/test/unit/helpers/reports_helper_test.rb +4 -0
  1242. data/test/foreman_app/test/unit/helpers/smart_proxies/autosign_helper_test.rb +4 -0
  1243. data/test/foreman_app/test/unit/helpers/smart_proxies/puppetca_helper_test.rb +4 -0
  1244. data/test/foreman_app/test/unit/helpers/statistics_helper_test.rb +4 -0
  1245. data/test/foreman_app/test/unit/helpers/tasks_helper_test.rb +4 -0
  1246. data/test/foreman_app/test/unit/helpers/trends_helper_test.rb +4 -0
  1247. data/test/foreman_app/test/unit/helpers/unattended_helper_test.rb +4 -0
  1248. data/test/foreman_app/test/unit/helpers/usergroups_helper_test.rb +4 -0
  1249. data/test/foreman_app/test/unit/helpers/users_helper_test.rb +4 -0
  1250. data/test/foreman_app/test/unit/host_class_test.rb +8 -0
  1251. data/test/foreman_app/test/unit/host_mailer_test.rb +70 -0
  1252. data/test/foreman_app/test/unit/host_observer_test.rb +35 -0
  1253. data/test/foreman_app/test/unit/host_parameter_test.rb +119 -0
  1254. data/test/foreman_app/test/unit/host_test.rb +606 -0
  1255. data/test/foreman_app/test/unit/hostgroup_class_test.rb +11 -0
  1256. data/test/foreman_app/test/unit/hostgroup_test.rb +178 -0
  1257. data/test/foreman_app/test/unit/image_test.rb +5 -0
  1258. data/test/foreman_app/test/unit/key_pair_test.rb +4 -0
  1259. data/test/foreman_app/test/unit/location_test.rb +162 -0
  1260. data/test/foreman_app/test/unit/log_test.rb +8 -0
  1261. data/test/foreman_app/test/unit/lookup_key_test.rb +88 -0
  1262. data/test/foreman_app/test/unit/medium_test.rb +120 -0
  1263. data/test/foreman_app/test/unit/message_test.rb +8 -0
  1264. data/test/foreman_app/test/unit/model_test.rb +90 -0
  1265. data/test/foreman_app/test/unit/nic_test.rb +49 -0
  1266. data/test/foreman_app/test/unit/notice_test.rb +19 -0
  1267. data/test/foreman_app/test/unit/operatingsystem_test.rb +139 -0
  1268. data/test/foreman_app/test/unit/orchestration/dhcp_test.rb +161 -0
  1269. data/test/foreman_app/test/unit/orchestration/dns_test.rb +54 -0
  1270. data/test/foreman_app/test/unit/orchestration/pxe_local_template +11 -0
  1271. data/test/foreman_app/test/unit/orchestration/pxe_template +4 -0
  1272. data/test/foreman_app/test/unit/orchestration/tftp_test.rb +49 -0
  1273. data/test/foreman_app/test/unit/orchestration_test.rb +25 -0
  1274. data/test/foreman_app/test/unit/organization_test.rb +163 -0
  1275. data/test/foreman_app/test/unit/os_default_template_test.rb +8 -0
  1276. data/test/foreman_app/test/unit/parameter_test.rb +44 -0
  1277. data/test/foreman_app/test/unit/ptable_test.rb +119 -0
  1278. data/test/foreman_app/test/unit/puppet_class_importer_test.rb +67 -0
  1279. data/test/foreman_app/test/unit/puppetclass_test.rb +90 -0
  1280. data/test/foreman_app/test/unit/report_test.rb +196 -0
  1281. data/test/foreman_app/test/unit/role_test.rb +104 -0
  1282. data/test/foreman_app/test/unit/setting_test.rb +158 -0
  1283. data/test/foreman_app/test/unit/smart_proxy_test.rb +27 -0
  1284. data/test/foreman_app/test/unit/source_test.rb +8 -0
  1285. data/test/foreman_app/test/unit/sso.rb +26 -0
  1286. data/test/foreman_app/test/unit/sso/apache_test.rb +38 -0
  1287. data/test/foreman_app/test/unit/sso/base_test.rb +14 -0
  1288. data/test/foreman_app/test/unit/sso/signo_test.rb +81 -0
  1289. data/test/foreman_app/test/unit/subnet_domain_test.rb +8 -0
  1290. data/test/foreman_app/test/unit/subnet_test.rb +182 -0
  1291. data/test/foreman_app/test/unit/suse_test.rb +46 -0
  1292. data/test/foreman_app/test/unit/taxable_taxonomy_test.rb +8 -0
  1293. data/test/foreman_app/test/unit/template_combination_test.rb +8 -0
  1294. data/test/foreman_app/test/unit/template_kind_test.rb +8 -0
  1295. data/test/foreman_app/test/unit/token_test.rb +67 -0
  1296. data/test/foreman_app/test/unit/trend_counter_test.rb +8 -0
  1297. data/test/foreman_app/test/unit/trend_test.rb +8 -0
  1298. data/test/foreman_app/test/unit/user_fact_test.rb +8 -0
  1299. data/test/foreman_app/test/unit/user_test.rb +196 -0
  1300. data/test/foreman_app/test/unit/usergroup_test.rb +161 -0
  1301. data/test/foreman_app/tmp/cache/505/030/idle_timeout +1 -0
  1302. data/test/foreman_app/tmp/cache/505/C00/use_gravatar +1 -0
  1303. data/test/foreman_app/tmp/cache/7D9/CD0/email_reply_address +1 -0
  1304. data/test/foreman_app/tmp/cache/94D/A30/discovery_organization +1 -0
  1305. data/test/foreman_app/tmp/cache/ACF/DB0/authorize_login_delegation +1 -0
  1306. data/test/foreman_app/tmp/secret_token +1 -0
  1307. data/test/foreman_app/vendor/assets/fonts/overpass_bold-web.eot +0 -0
  1308. data/test/foreman_app/vendor/assets/fonts/overpass_bold-web.svg +470 -0
  1309. data/test/foreman_app/vendor/assets/fonts/overpass_bold-web.ttf +0 -0
  1310. data/test/foreman_app/vendor/assets/fonts/overpass_bold-web.woff +0 -0
  1311. data/test/foreman_app/vendor/assets/fonts/overpass_regular-web.eot +0 -0
  1312. data/test/foreman_app/vendor/assets/fonts/overpass_regular-web.svg +470 -0
  1313. data/test/foreman_app/vendor/assets/fonts/overpass_regular-web.ttf +0 -0
  1314. data/test/foreman_app/vendor/assets/fonts/overpass_regular-web.woff +0 -0
  1315. data/test/foreman_app/vendor/assets/javascripts/ace/ace.js +10 -0
  1316. data/test/foreman_app/vendor/assets/javascripts/ace/cockpit.js +1 -0
  1317. data/test/foreman_app/vendor/assets/javascripts/ace/ext-static_highlight.js +1 -0
  1318. data/test/foreman_app/vendor/assets/javascripts/ace/ext-textarea.js +1 -0
  1319. data/test/foreman_app/vendor/assets/javascripts/ace/keybinding-emacs.js +1 -0
  1320. data/test/foreman_app/vendor/assets/javascripts/ace/keybinding-vim.js +1 -0
  1321. data/test/foreman_app/vendor/assets/javascripts/ace/mode-diff.js +165 -0
  1322. data/test/foreman_app/vendor/assets/javascripts/ace/mode-ruby.js +1 -0
  1323. data/test/foreman_app/vendor/assets/javascripts/ace/mode-sh.js +1 -0
  1324. data/test/foreman_app/vendor/assets/javascripts/ace/theme-clouds.js +137 -0
  1325. data/test/foreman_app/vendor/assets/javascripts/ace/theme-dawn.js +1 -0
  1326. data/test/foreman_app/vendor/assets/javascripts/ace/theme-textmate.js +1 -0
  1327. data/test/foreman_app/vendor/assets/javascripts/ace/theme-twilight.js +1 -0
  1328. data/test/foreman_app/vendor/assets/javascripts/ace/worker-coffee.js +1 -0
  1329. data/test/foreman_app/vendor/assets/javascripts/ace/worker-css.js +1 -0
  1330. data/test/foreman_app/vendor/assets/javascripts/ace/worker-javascript.js +1 -0
  1331. data/test/foreman_app/vendor/assets/javascripts/ace/worker-json.js +1 -0
  1332. data/test/foreman_app/vendor/assets/javascripts/ace/worker-xquery.js +1 -0
  1333. data/test/foreman_app/vendor/assets/javascripts/background-size.htc +7 -0
  1334. data/test/foreman_app/vendor/assets/javascripts/diff.js +296 -0
  1335. data/test/foreman_app/vendor/assets/javascripts/flot.js +5 -0
  1336. data/test/foreman_app/vendor/assets/javascripts/jquery.cookie.js +91 -0
  1337. data/test/foreman_app/vendor/assets/javascripts/jquery.dataTables.bootstrap-paging.js +101 -0
  1338. data/test/foreman_app/vendor/assets/javascripts/jquery.dataTables.min.js +155 -0
  1339. data/test/foreman_app/vendor/assets/javascripts/jquery.jeditable.js +556 -0
  1340. data/test/foreman_app/vendor/assets/javascripts/jquery.jnotify.js +209 -0
  1341. data/test/foreman_app/vendor/assets/javascripts/jquery.multi-select.js +503 -0
  1342. data/test/foreman_app/vendor/assets/javascripts/noVNC/base64.js +147 -0
  1343. data/test/foreman_app/vendor/assets/javascripts/noVNC/des.js +273 -0
  1344. data/test/foreman_app/vendor/assets/javascripts/noVNC/display.js +700 -0
  1345. data/test/foreman_app/vendor/assets/javascripts/noVNC/input.js +1911 -0
  1346. data/test/foreman_app/vendor/assets/javascripts/noVNC/jsunzip.js +668 -0
  1347. data/test/foreman_app/vendor/assets/javascripts/noVNC/logo.js +1 -0
  1348. data/test/foreman_app/vendor/assets/javascripts/noVNC/playback.js +90 -0
  1349. data/test/foreman_app/vendor/assets/javascripts/noVNC/rfb.js +1846 -0
  1350. data/test/foreman_app/vendor/assets/javascripts/noVNC/ui.js +649 -0
  1351. data/test/foreman_app/vendor/assets/javascripts/noVNC/util.js +303 -0
  1352. data/test/foreman_app/vendor/assets/javascripts/noVNC/web-socket-js/README.txt +109 -0
  1353. data/test/foreman_app/vendor/assets/javascripts/noVNC/web-socket-js/swfobject.js +4 -0
  1354. data/test/foreman_app/vendor/assets/javascripts/noVNC/web-socket-js/web_socket.js +341 -0
  1355. data/test/foreman_app/vendor/assets/javascripts/noVNC/websock.js +356 -0
  1356. data/test/foreman_app/vendor/assets/javascripts/noVNC/webutil.js +148 -0
  1357. data/test/foreman_app/vendor/assets/javascripts/vendor.js +7 -0
  1358. data/test/foreman_app/vendor/assets/stylesheets/jquery.jnotify.css +97 -0
  1359. data/test/foreman_app/vendor/assets/stylesheets/multi-select.scss +126 -0
  1360. data/test/foreman_app/vendor/assets/stylesheets/vendor.css +3 -0
  1361. data/test/functional/discovers_controller_test.rb +40 -0
  1362. data/test/test_helper.rb +28 -0
  1363. data/test/unit/facts.yml +91 -0
  1364. data/test/unit/host_discovered_test.rb +23 -0
  1365. data/test/unit/setting_discovered_test.rb +9 -0
  1366. metadata +2816 -0
@@ -0,0 +1,13 @@
1
+ module Host
2
+ module Hostmix
3
+
4
+ def has_many_hosts(options = {})
5
+ has_many :hosts, {:class_name => "Host::Managed"}.merge(options)
6
+ end
7
+
8
+ def belongs_to_host(options = {})
9
+ belongs_to :host, {:class_name => "Host::Managed", :foreign_key => :host_id}.merge(options)
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,854 @@
1
+ class Host::Managed < Host::Base
2
+ include Authorization
3
+ include ReportCommon
4
+ include Hostext::Search
5
+
6
+ has_many :host_classes, :dependent => :destroy, :foreign_key => :host_id
7
+ has_many :puppetclasses, :through => :host_classes
8
+ belongs_to :hostgroup
9
+ has_many :reports, :dependent => :destroy, :foreign_key => :host_id
10
+ has_many :host_parameters, :dependent => :destroy, :foreign_key => :reference_id
11
+ has_many :parameters, :dependent => :destroy, :foreign_key => :reference_id, :class_name => "HostParameter"
12
+ accepts_nested_attributes_for :host_parameters, :reject_if => lambda { |a| a[:value].blank? }, :allow_destroy => true
13
+ has_many :interfaces, :dependent => :destroy, :inverse_of => :host, :class_name => 'Nic::Base', :foreign_key => :host_id
14
+ accepts_nested_attributes_for :interfaces, :reject_if => lambda { |a| a[:mac].blank? }, :allow_destroy => true
15
+ belongs_to :owner, :polymorphic => true
16
+ belongs_to :compute_resource
17
+ belongs_to :image
18
+
19
+ belongs_to :location
20
+ belongs_to :organization
21
+
22
+ has_one :token, :foreign_key => :host_id, :dependent => :destroy, :conditions => Proc.new {"expires >= '#{Time.now.utc.to_s(:db)}'"}
23
+
24
+ has_many :lookup_values, :finder_sql => Proc.new { normalize_hostname; %Q{ SELECT lookup_values.* FROM lookup_values WHERE (lookup_values.match = 'fqdn=#{fqdn}') } }, :dependent => :destroy
25
+ # See "def lookup_values_attributes=" under, for the implementation of accepts_nested_attributes_for :lookup_values
26
+ accepts_nested_attributes_for :lookup_values
27
+
28
+ # Define custom hook that can be called in model by magic methods (before, after, around)
29
+ define_model_callbacks :build, :only => :after
30
+ define_model_callbacks :provision, :only => :before
31
+
32
+ # Custom hooks will be executed after_commit
33
+ after_commit :build_hooks
34
+
35
+ def build_hooks
36
+ return unless respond_to?(:old) && old && (build? != old.build?)
37
+ if build?
38
+ run_callbacks :build do
39
+ logger.debug { "custom hook after_build on #{name} will be executed if defined." }
40
+ end
41
+ else
42
+ run_callbacks :provision do
43
+ logger.debug { "custom hook before_provision on #{name} will be executed if defined." }
44
+ end
45
+ end
46
+ end
47
+
48
+ include HostCommon
49
+
50
+ class Jail < ::Safemode::Jail
51
+ allow :name, :diskLayout, :puppetmaster, :puppet_ca_server, :operatingsystem, :os, :environment, :ptable, :hostgroup, :location,
52
+ :organization, :url_for_boot, :params, :info, :hostgroup, :compute_resource, :domain, :ip, :mac, :shortname, :architecture,
53
+ :model, :certname, :capabilities, :provider, :subnet, :token, :location, :organization
54
+ end
55
+
56
+ attr_reader :cached_host_params
57
+
58
+ default_scope lambda {
59
+ org = Organization.current
60
+ loc = Location.current
61
+ conditions = {}
62
+ conditions[:organization_id] = Array.wrap(org).map(&:id) if org
63
+ conditions[:location_id] = Array.wrap(loc).map(&:id) if loc
64
+ where(conditions)
65
+ }
66
+
67
+ scope :recent, lambda { |*args| {:conditions => ["last_report > ?", (args.first || (Setting[:puppet_interval] + 5).minutes.ago)]} }
68
+ scope :out_of_sync, lambda { |*args| {:conditions => ["last_report < ? and enabled != ?", (args.first || (Setting[:puppet_interval] + 5).minutes.ago), false]} }
69
+
70
+ scope :with_os, lambda { where('hosts.operatingsystem_id IS NOT NULL') }
71
+ scope :no_location, lambda { where(:location_id => nil) }
72
+ scope :no_organization, lambda { where(:organization_id => nil) }
73
+
74
+ scope :with_error, { :conditions => "(puppet_status > 0) and
75
+ ( ((puppet_status >> #{BIT_NUM*METRIC.index("failed")} & #{MAX}) != 0) or
76
+ ((puppet_status >> #{BIT_NUM*METRIC.index("failed_restarts")} & #{MAX}) != 0) )"
77
+ }
78
+
79
+ scope :without_error, { :conditions =>
80
+ "((puppet_status >> #{BIT_NUM*METRIC.index("failed")} & #{MAX}) = 0) and
81
+ ((puppet_status >> #{BIT_NUM*METRIC.index("failed_restarts")} & #{MAX}) = 0)"
82
+ }
83
+
84
+ scope :with_changes, { :conditions => "(puppet_status > 0) and
85
+ ( ((puppet_status >> #{BIT_NUM*METRIC.index("applied")} & #{MAX}) != 0) or
86
+ ((puppet_status >> #{BIT_NUM*METRIC.index("restarted")} & #{MAX}) != 0) )"
87
+ }
88
+
89
+ scope :without_changes, { :conditions =>
90
+ "((puppet_status >> #{BIT_NUM*METRIC.index("applied")} & #{MAX}) = 0) and
91
+ ((puppet_status >> #{BIT_NUM*METRIC.index("restarted")} & #{MAX}) = 0)"
92
+ }
93
+
94
+ scope :with_pending_changes, { :conditions =>
95
+ "(puppet_status > 0) and ((puppet_status >> #{BIT_NUM*METRIC.index("pending")} & #{MAX}) != 0)" }
96
+ scope :without_pending_changes, { :conditions =>
97
+ "((puppet_status >> #{BIT_NUM*METRIC.index("pending")} & #{MAX}) = 0)" }
98
+
99
+ scope :successful, lambda { without_changes.without_error.without_pending_changes}
100
+
101
+ scope :alerts_disabled, {:conditions => ["enabled = ?", false] }
102
+
103
+ scope :alerts_enabled, {:conditions => ["enabled = ?", true] }
104
+
105
+ scope :my_hosts, lambda {
106
+ user = User.current
107
+ return { :conditions => "" } if user.admin? # Admin can see all hosts
108
+
109
+ owner_conditions = sanitize_sql_for_conditions(["((hosts.owner_id in (?) AND hosts.owner_type = 'Usergroup') OR (hosts.owner_id = ? AND hosts.owner_type = 'User'))", user.my_usergroups.map(&:id), user.id])
110
+ domain_conditions = sanitize_sql_for_conditions([" (hosts.domain_id in (?))",dms = (user.domain_ids)])
111
+ compute_resource_conditions = sanitize_sql_for_conditions([" (hosts.compute_resource_id in (?))",(crs = user.compute_resource_ids)])
112
+ hostgroup_conditions = sanitize_sql_for_conditions([" (hosts.hostgroup_id in (?))",(hgs = user.hostgroup_ids)])
113
+ organization_conditions = sanitize_sql_for_conditions([" (hosts.organization_id in (?))",orgs = (user.organization_ids)])
114
+ location_conditions = sanitize_sql_for_conditions([" (hosts.location_id in (?))",locs = (user.location_ids)])
115
+
116
+ fact_conditions = ""
117
+ for user_fact in (ufs = user.user_facts)
118
+ fact_conditions += sanitize_sql_for_conditions ["(hosts.id = fact_values.host_id and fact_values.fact_name_id = ? and fact_values.value #{user_fact.operator} ?)", user_fact.fact_name_id, user_fact.criteria]
119
+ fact_conditions = user_fact.andor == "and" ? "(#{fact_conditions}) and " : "#{fact_conditions} or "
120
+ end
121
+ if (match = fact_conditions.match(/^(.*).....$/))
122
+ fact_conditions = "(#{match[1]})"
123
+ end
124
+
125
+ conditions = ""
126
+ if user.filtering?
127
+ conditions = "#{owner_conditions}" if user.filter_on_owner
128
+ (conditions = (user.domains_andor == "and") ? "(#{conditions}) and #{domain_conditions} " : "#{conditions} or #{domain_conditions} ") unless dms.empty?
129
+ (conditions = (user.compute_resources_andor == "and") ? "(#{conditions}) and #{compute_resource_conditions} " : "#{conditions} or #{compute_resource_conditions} ") unless crs.empty?
130
+ (conditions = (user.hostgroups_andor == "and") ? "(#{conditions}) and #{hostgroup_conditions} " : "#{conditions} or #{hostgroup_conditions} ") unless hgs.empty?
131
+ (conditions = (user.facts_andor == "and") ? "(#{conditions}) and #{fact_conditions} " : "#{conditions} or #{fact_conditions} ") unless ufs.empty?
132
+ (conditions = (user.organizations_andor == "and") ? "(#{conditions}) and #{organization_conditions} " : "#{conditions} or #{organization_conditions} ") unless orgs.empty?
133
+ (conditions = (user.locations_andor == "and") ? "(#{conditions}) and #{location_conditions} " : "#{conditions} or #{location_conditions} ") unless locs.empty?
134
+ conditions.sub!(/\s*\(\)\s*/, "")
135
+ conditions.sub!(/^(?:\(\))?\s?(?:and|or)\s*/, "")
136
+ conditions.sub!(/\(\s*(?:or|and)\s*\(/, "((")
137
+ end
138
+ {:conditions => conditions}
139
+ }
140
+
141
+ scope :completer_scope, lambda { my_hosts }
142
+
143
+ scope :run_distribution, lambda { |fromtime,totime|
144
+ if fromtime.nil? or totime.nil?
145
+ raise ::Foreman.Exception.new(N_("invalid time range"))
146
+ else
147
+ { :joins => "INNER JOIN reports ON reports.host_id = hosts.id",
148
+ :conditions => ["reports.reported_at BETWEEN ? AND ?", fromtime, totime] }
149
+ end
150
+ }
151
+
152
+ scope :for_token, lambda { |token| joins(:token).where(:tokens => { :value => token }).select('hosts.*') }
153
+
154
+ # audit the changes to this model
155
+ audited :except => [:last_report, :puppet_status, :last_compile]
156
+ has_associated_audits
157
+
158
+ # some shortcuts
159
+ alias_attribute :os, :operatingsystem
160
+ alias_attribute :arch, :architecture
161
+ alias_attribute :fqdn, :name
162
+
163
+ validates_presence_of :environment_id
164
+
165
+ if SETTINGS[:unattended]
166
+ # handles all orchestration of smart proxies.
167
+ include Foreman::Renderer
168
+ include Orchestration
169
+ include Orchestration::DHCP
170
+ include Orchestration::DNS
171
+ include Orchestration::Compute
172
+ include Orchestration::TFTP
173
+ include Orchestration::Puppetca
174
+ include Orchestration::SSHProvision
175
+ include HostTemplateHelpers
176
+
177
+ validates_uniqueness_of :ip, :if => Proc.new {|host| host.require_ip_validation?}
178
+ validates_uniqueness_of :mac, :unless => Proc.new { |host| host.compute? or !host.managed }
179
+ validates_presence_of :architecture_id, :operatingsystem_id, :if => Proc.new {|host| host.managed}
180
+ validates_presence_of :domain_id, :if => Proc.new {|host| host.managed}
181
+ validates_presence_of :mac, :unless => Proc.new { |host| host.compute? or !host.managed }
182
+
183
+ validates_length_of :root_pass, :minimum => 8, :too_short => _('should be 8 characters or more')
184
+ validates_format_of :mac, :with => Net::Validations::MAC_REGEXP, :unless => Proc.new { |host| host.compute? or !host.managed }
185
+ validates_format_of :ip, :with => Net::Validations::IP_REGEXP, :if => Proc.new { |host| host.require_ip_validation? }
186
+ validates_presence_of :ptable_id, :message => N_("cant be blank unless a custom partition has been defined"),
187
+ :if => Proc.new { |host| host.managed and host.disk.empty? and not defined?(Rake) and capabilities.include?(:build) }
188
+ validates_format_of :serial, :with => /[01],\d{3,}n\d/, :message => N_("should follow this format: 0,9600n8"), :allow_blank => true, :allow_nil => true
189
+
190
+ validates_presence_of :puppet_proxy_id, :if => Proc.new {|h| h.managed? } if SETTINGS[:unattended]
191
+ end
192
+
193
+ before_validation :set_hostgroup_defaults, :set_ip_address, :set_default_user, :normalize_addresses, :normalize_hostname, :force_lookup_value_matcher
194
+ after_validation :ensure_associations
195
+ before_validation :set_certname, :if => Proc.new {|h| h.managed? and Setting[:use_uuid_for_certificates] } if SETTINGS[:unattended]
196
+
197
+ # Replacement of accepts_nested_attributes_for :lookup_values,
198
+ # to work around the lack of `host_id` column in lookup_values.
199
+ def lookup_values_attributes= lookup_values_attributes
200
+ lookup_values_attributes.each_value do |attribute|
201
+ attr = attribute.dup
202
+ if attr.has_key? :id
203
+ lookup_value = lookup_values.find attr.delete(:id)
204
+ if lookup_value
205
+ mark_for_destruction = ActiveRecord::ConnectionAdapters::Column.value_to_boolean attr.delete(:_destroy)
206
+ lookup_value.attributes = attr
207
+ mark_for_destruction ? lookup_values.delete(lookup_value) : lookup_value.save!
208
+ end
209
+ elsif !ActiveRecord::ConnectionAdapters::Column.value_to_boolean attr.delete(:_destroy)
210
+ lookup_values.build(attr)
211
+ end
212
+ end
213
+ end
214
+
215
+ def <=>(other)
216
+ self.name <=> other.name
217
+ end
218
+
219
+ def shortname
220
+ domain.nil? ? name : name.chomp("." + domain.name)
221
+ end
222
+
223
+ # method to return the correct owner list for host edit owner select dropbox
224
+ def is_owned_by
225
+ owner.id_and_type if owner
226
+ end
227
+
228
+ def self.model_name
229
+ ActiveModel::Name.new(Host)
230
+ end
231
+
232
+ # virtual attributes which sets the owner based on the user selection
233
+ # supports a simple user, or a usergroup
234
+ # selection parameter is expected to be an ActiveRecord id_and_type method (see Foreman's AR extentions).
235
+ def is_owned_by=(selection)
236
+ oid = User.find(selection.to_i) if selection =~ (/-Users$/)
237
+ oid = Usergroup.find(selection.to_i) if selection =~ (/-Usergroups$/)
238
+ self.owner = oid
239
+ end
240
+
241
+ def clearReports
242
+ # Remove any reports that may be held against this host
243
+ Report.delete_all("host_id = #{id}")
244
+ end
245
+
246
+ def clearFacts
247
+ FactValue.delete_all("host_id = #{id}")
248
+ end
249
+
250
+ def set_token
251
+ return unless Setting[:token_duration] != 0
252
+ self.create_token(:value => Foreman.uuid,
253
+ :expires => Time.now.utc + Setting[:token_duration].minutes)
254
+ end
255
+
256
+ def expire_tokens
257
+ # this clean up other hosts as well, but reduce the need for another task to cleanup tokens.
258
+ Token.delete_all(["expires < ? or host_id = ?", Time.now.utc.to_s(:db), id])
259
+ end
260
+
261
+ # Called from the host build post install process to indicate that the base build has completed
262
+ # Build is cleared and the boot link and autosign entries are removed
263
+ # A site specific build script is called at this stage that can do site specific tasks
264
+ def built(installed = true)
265
+
266
+ # delete all expired tokens
267
+ self.build = false
268
+ self.installed_at = Time.now.utc if installed
269
+ self.save
270
+ rescue => e
271
+ logger.warn "Failed to set Build on #{self}: #{e}"
272
+ false
273
+ end
274
+
275
+ #retuns fqdn of host puppetmaster
276
+ def pm_fqdn
277
+ puppetmaster == "puppet" ? "puppet.#{domain.name}" : "#{puppetmaster}"
278
+ end
279
+
280
+ # Cleans Certificate and enable Autosign
281
+ # Called after a host is given their provisioning template
282
+ # Returns : Boolean status of the operation
283
+ def handle_ca
284
+ return true if Rails.env == "test"
285
+ return true unless Setting[:manage_puppetca]
286
+ if puppetca?
287
+ respond_to?(:initialize_puppetca) && initialize_puppetca && delCertificate && setAutosign
288
+ end
289
+ end
290
+
291
+ # returns the host correct disk layout, custom or common
292
+ def diskLayout
293
+ @host = self
294
+ pxe_render((disk.empty? ? ptable.layout : disk).gsub("\r",""))
295
+ end
296
+
297
+ # returns a configuration template (such as kickstart) to a given host
298
+ def configTemplate opts = {}
299
+ opts[:kind] ||= "provision"
300
+ opts[:operatingsystem_id] ||= operatingsystem_id
301
+ opts[:hostgroup_id] ||= hostgroup_id
302
+ opts[:environment_id] ||= environment_id
303
+
304
+ ConfigTemplate.find_template opts
305
+ end
306
+
307
+ # reports methods
308
+
309
+ def error_count
310
+ %w[failed failed_restarts].sum {|f| status f}
311
+ end
312
+
313
+ def no_report
314
+ last_report.nil? or last_report < Time.now - (Setting[:puppet_interval] + 3).minutes and enabled?
315
+ end
316
+
317
+ def disabled?
318
+ not enabled?
319
+ end
320
+
321
+ # returns the list of puppetclasses a host is in.
322
+ def puppetclasses_names
323
+ all_puppetclasses.collect {|c| c.name}
324
+ end
325
+
326
+ def all_puppetclasses
327
+ hostgroup.nil? ? puppetclasses : (hostgroup.classes + puppetclasses).uniq
328
+ end
329
+
330
+ # provide information about each node, mainly used for puppet external nodes
331
+ # TODO: remove hard coded default parameters into some selectable values in the database.
332
+ def info
333
+ # Static parameters
334
+ param = {}
335
+ # maybe these should be moved to the common parameters, leaving them in for now
336
+ param["puppetmaster"] = puppetmaster
337
+ param["domainname"] = domain.fullname unless domain.nil? or domain.fullname.nil?
338
+ param["hostgroup"] = hostgroup.to_label unless hostgroup.nil?
339
+ if SETTINGS[:locations_enabled]
340
+ param["location"] = location.name unless location.blank?
341
+ end
342
+ if SETTINGS[:organizations_enabled]
343
+ param["organization"] = organization.name unless organization.blank?
344
+ end
345
+ if SETTINGS[:unattended]
346
+ param["root_pw"] = root_pass
347
+ param["puppet_ca"] = puppet_ca_server if puppetca?
348
+ end
349
+ param["comment"] = comment unless comment.blank?
350
+ param["foreman_env"] = environment.to_s unless environment.nil? or environment.name.nil?
351
+ if SETTINGS[:login] and owner
352
+ param["owner_name"] = owner.name
353
+ param["owner_email"] = owner.is_a?(User) ? owner.mail : owner.users.map(&:mail)
354
+ end
355
+
356
+ if Setting[:ignore_puppet_facts_for_provisioning]
357
+ param["ip"] = ip
358
+ param["mac"] = mac
359
+ end
360
+ param.update self.params
361
+
362
+ classes = if Setting[:Parametrized_Classes_in_ENC] && Setting[:Enable_Smart_Variables_in_ENC]
363
+ lookup_keys_class_params
364
+ else
365
+ self.puppetclasses_names
366
+ end
367
+
368
+ info_hash = {}
369
+ info_hash['classes'] = classes
370
+ info_hash['parameters'] = param
371
+ info_hash['environment'] = param["foreman_env"] if Setting["enc_environment"]
372
+
373
+ info_hash
374
+ end
375
+
376
+ def params
377
+ host_params.update(lookup_keys_params)
378
+ end
379
+ def clear_host_parameters_cache!
380
+ @cached_host_params = nil
381
+ end
382
+
383
+ def host_inherited_params include_source = false
384
+ hp = {}
385
+ # read common parameters
386
+ CommonParameter.all.each {|p| hp.update Hash[p.name => include_source ? {:value => p.value, :source => :common} : p.value] }
387
+ # read domain parameters
388
+ domain.domain_parameters.each {|p| hp.update Hash[p.name => include_source ? {:value => p.value, :source => :domain} : p.value] } unless domain.nil?
389
+ # read OS parameters
390
+ operatingsystem.os_parameters.each {|p| hp.update Hash[p.name => include_source ? {:value => p.value, :source => :os} : p.value] } unless operatingsystem.nil?
391
+ # read group parameters only if a host belongs to a group
392
+ hp.update hostgroup.parameters(include_source) unless hostgroup.nil?
393
+ hp
394
+ end
395
+
396
+ def host_params
397
+ return cached_host_params unless cached_host_params.blank?
398
+ hp = host_inherited_params
399
+ # and now read host parameters, override if required
400
+ host_parameters.each {|p| hp.update Hash[p.name => p.value] }
401
+ @cached_host_params = hp
402
+ end
403
+
404
+ def self.importHostAndFacts yaml
405
+ facts = YAML::load yaml
406
+ case facts
407
+ when Puppet::Node::Facts
408
+ certname = facts.values["certname"]
409
+ name = facts.values["fqdn"].downcase
410
+ values = facts.values
411
+ when Hash
412
+ certname = facts["certname"]
413
+ name = facts["fqdn"].downcase
414
+ values = facts
415
+ return raise(::Foreman::Exception.new(N_("invalid facts hash"))) unless name and values
416
+ else
417
+ return raise(::Foreman::Exception.new(N_("Invalid Facts, much be a Puppet::Node::Facts or a Hash")))
418
+ end
419
+
420
+ if name == certname or certname.nil?
421
+ h = Host.find_by_name name
422
+ else
423
+ h = Host.find_by_certname certname
424
+ h ||= Host.find_by_name name
425
+ end
426
+ h ||= Host.new :name => name
427
+
428
+ h.save(:validate => false) if h.new_record?
429
+ h.importFacts(name, values)
430
+ end
431
+
432
+ def attributes_to_import_from_facts
433
+ attrs = []
434
+ attrs = [:mac, :ip] unless managed? and Setting[:ignore_puppet_facts_for_provisioning]
435
+ super + [:domain, :architecture, :operatingsystem, :model, :certname] + attrs
436
+ end
437
+
438
+ def populateFieldsFromFacts facts = self.facts_hash
439
+ importer = super
440
+ normalize_addresses
441
+ if Setting[:update_environment_from_facts]
442
+ set_non_empty_values importer, [:environment]
443
+ else
444
+ self.environment ||= importer.environment unless importer.environment.blank?
445
+ end
446
+
447
+ self.save(:validate => false)
448
+ end
449
+
450
+ # Called by build link in the list
451
+ # Build is set
452
+ # The boot link and autosign entry are created
453
+ # Any existing puppet certificates are deleted
454
+ # Any facts are discarded
455
+ def setBuild
456
+ clearFacts
457
+ clearReports
458
+
459
+ self.build = true
460
+ self.save
461
+ errors.empty?
462
+ end
463
+
464
+ # this method accepts a puppets external node yaml output and generate a node in our setup
465
+ # it is assumed that you already have the node (e.g. imported by one of the rack tasks)
466
+ def importNode nodeinfo
467
+ myklasses= []
468
+ # puppet classes
469
+ nodeinfo["classes"].each do |klass|
470
+ if (pc = Puppetclass.find_by_name(klass))
471
+ myklasses << pc
472
+ else
473
+ error = _("Failed to import %{klass} for %{name}: doesn't exists in our database - ignoring") % { :klass => klass, :name => name }
474
+ logger.warn error
475
+ $stdout.puts error
476
+ end
477
+ self.puppetclasses = myklasses
478
+ end
479
+
480
+ # parameters are a bit more tricky, as some classifiers provide the facts as parameters as well
481
+ # not sure what is puppet priority about it, but we ignore it if has a fact with the same name.
482
+ # additionally, we don't import any non strings values, as puppet don't know what to do with those as well.
483
+
484
+ myparams = self.info["parameters"]
485
+ nodeinfo["parameters"].each_pair do |param,value|
486
+ next if fact_names.exists? :name => param
487
+ next unless value.is_a?(String)
488
+
489
+ # we already have this parameter
490
+ next if myparams.has_key?(param) and myparams[param] == value
491
+
492
+ unless (hp = self.host_parameters.create(:name => param, :value => value))
493
+ logger.warn "Failed to import #{param}/#{value} for #{name}: #{hp.errors.full_messages.join(", ")}"
494
+ $stdout.puts $!
495
+ end
496
+ end
497
+
498
+ self.save
499
+ end
500
+
501
+ # counts each association of a given host
502
+ # e.g. how many hosts belongs to each os
503
+ # returns sorted hash
504
+ def self.count_distribution assocication
505
+ output = []
506
+ count(:group => assocication).each do |k,v|
507
+ begin
508
+ output << {:label => k.to_label, :data => v } unless v == 0
509
+ rescue
510
+ logger.info "skipped #{k} as it has has no label"
511
+ end
512
+ end
513
+ output
514
+ end
515
+
516
+ # counts each association of a given host for HABTM relationships
517
+ # TODO: Merge these two into one method
518
+ # e.g. how many hosts belongs to each os
519
+ # returns sorted hash
520
+ def self.count_habtm association
521
+ counter = Host::Managed.joins(association.tableize.to_sym).group("#{association.tableize.to_sym}.id").count
522
+ #Puppetclass.find(counter.keys.compact)...
523
+ association.camelize.constantize.find(counter.keys.compact).map {|i| {:label=>i.to_label, :data =>counter[i.id]}}
524
+ end
525
+
526
+ def classes_from_storeconfigs
527
+ klasses = resources.select(:title).where(:restype => "Class").where("title <> ? AND title <> ?", "main", "Settings").order(:title)
528
+ klasses.map!(&:title).delete(:main)
529
+ klasses
530
+ end
531
+
532
+ def can_be_built?
533
+ managed? and SETTINGS[:unattended] and capabilities.include?(:build) ? build == false : false
534
+ end
535
+
536
+ def enforce_permissions operation
537
+ if operation == "edit" and new_record?
538
+ return true # We get called again with the operation being set to create
539
+ end
540
+ current = User.current
541
+ if (operation == "edit") or operation == "destroy"
542
+ if current.allowed_to?("#{operation}_hosts".to_sym)
543
+ return true if Host.my_hosts.include? self
544
+ end
545
+ else # create
546
+ if current.allowed_to?(:create_hosts)
547
+ # We are unconstrained
548
+ return true if current.domains.empty? and current.hostgroups.empty?
549
+ # We are constrained and the constraint is matched
550
+ return true if (!current.domains.empty? and current.domains.include?(domain)) or
551
+ (!current.hostgroups.empty? and current.hostgroups.include?(hostgroup))
552
+ end
553
+ end
554
+ errors.add(:base, _("You do not have permission to %s this host") % operation)
555
+ false
556
+ end
557
+
558
+ def jumpstart?
559
+ operatingsystem.family == "Solaris" and architecture.name =~/Sparc/i rescue false
560
+ end
561
+
562
+ def set_hostgroup_defaults
563
+ return unless hostgroup
564
+ assign_hostgroup_attributes(%w{environment domain puppet_proxy puppet_ca_proxy})
565
+ if SETTINGS[:unattended] and (new_record? or managed?)
566
+ assign_hostgroup_attributes(%w{operatingsystem architecture})
567
+ assign_hostgroup_attributes(%w{medium ptable subnet}) if capabilities.include?(:build)
568
+ end
569
+ end
570
+
571
+ def set_ip_address
572
+ self.ip ||= subnet.unused_ip if subnet and SETTINGS[:unattended] and (new_record? or managed?)
573
+ end
574
+
575
+ # returns a rundeck output
576
+ def rundeck
577
+ rdecktags = puppetclasses_names.map{|k| "class=#{k}"}
578
+ unless self.params["rundeckfacts"].empty?
579
+ rdecktags += self.params["rundeckfacts"].split(",").map{|rdf| "#{rdf}=#{fact(rdf)[0].value}"}
580
+ end
581
+ { name => { "description" => comment, "hostname" => name, "nodename" => name,
582
+ "osArch" => arch.name, "osFamily" => os.family, "osName" => os.name,
583
+ "osVersion" => os.release, "tags" => rdecktags, "username" => self.params["rundeckuser"] || "root" }
584
+ }
585
+ rescue => e
586
+ logger.warn "Failed to fetch rundeck info for #{to_s}: #{e}"
587
+ {}
588
+ end
589
+
590
+ def puppetrun!
591
+ unless puppet_proxy.present?
592
+ errors.add(:base, _("no puppet proxy defined - cant continue"))
593
+ logger.warn "unable to execute puppet run, no puppet proxies defined"
594
+ return false
595
+ end
596
+ ProxyAPI::Puppet.new({:url => puppet_proxy.url}).run fqdn
597
+ rescue => e
598
+ errors.add(:base, _("failed to execute puppetrun: %s") % e)
599
+ false
600
+ end
601
+
602
+ def overwrite?
603
+ @overwrite ||= false
604
+ end
605
+
606
+ # We have to coerce the value back to boolean. It is not done for us by the framework.
607
+ def overwrite=(value)
608
+ @overwrite = value == "true"
609
+ end
610
+
611
+ def require_ip_validation?
612
+ managed? and !compute? or (compute? and !compute_resource.provided_attributes.keys.include?(:ip))
613
+ end
614
+
615
+ # if certname does not exist, use hostname instead
616
+ def certname
617
+ read_attribute(:certname) || name
618
+ end
619
+
620
+ def progress_report_id
621
+ @progress_report_id ||= Foreman.uuid
622
+ end
623
+
624
+ def progress_report_id=(value)
625
+ @progress_report_id = value
626
+ end
627
+
628
+ def capabilities
629
+ compute_resource_id ? compute_resource.capabilities : [:build]
630
+ end
631
+
632
+ def provider
633
+ if compute_resource_id
634
+ compute_resource.provider_friendly_name
635
+ else
636
+ "BareMetal"
637
+ end
638
+ end
639
+
640
+ # no need to store anything in the db if the password is our default
641
+ def root_pass
642
+ read_attribute(:root_pass) || hostgroup.try(:root_pass) || Setting[:root_pass]
643
+ end
644
+
645
+ def clone
646
+ new = super
647
+ new.puppetclasses = puppetclasses
648
+ # Clone any parameters as well
649
+ host_parameters.each{|param| new.host_parameters << HostParameter.new(:name => param.name, :value => param.value, :nested => true)}
650
+ interfaces.each {|int| new.interfaces << int.clone }
651
+ # clear up the system specific attributes
652
+ [:name, :mac, :ip, :uuid, :certname, :last_report].each do |attr|
653
+ new.send "#{attr}=", nil
654
+ end
655
+ new.puppet_status = 0
656
+ new
657
+ end
658
+
659
+ def sp_ip
660
+ bmc_nic.try(:ip)
661
+ end
662
+
663
+ def sp_mac
664
+ bmc_nic.try(:mac)
665
+ end
666
+
667
+ def sp_subnet_id
668
+ bmc_nic.try(:subnet_id)
669
+ end
670
+
671
+ def sp_subnet
672
+ bmc_nic.try(:subnet)
673
+ end
674
+
675
+ def sp_name
676
+ bmc_nic.try(:name)
677
+ end
678
+
679
+ def host_status
680
+ if build
681
+ N_("Pending Installation")
682
+ elsif respond_to?(:enabled) && !enabled
683
+ N_("Alerts disabled")
684
+ elsif respond_to?(:last_report) && last_report.nil?
685
+ N_("No reports")
686
+ elsif no_report
687
+ N_("Out of sync")
688
+ elsif error?
689
+ N_("Error")
690
+ elsif changes?
691
+ N_("Active")
692
+ elsif pending?
693
+ N_("Pending")
694
+ else
695
+ N_("No changes")
696
+ end
697
+ end
698
+
699
+ def smart_proxies
700
+ SmartProxy.where(:id => smart_proxy_ids)
701
+ end
702
+
703
+ def smart_proxy_ids
704
+ ids = []
705
+ [subnet, hostgroup.try(:subnet)].compact.each do |s|
706
+ ids << s.dhcp_id
707
+ ids << s.tftp_id
708
+ ids << s.dns_id
709
+ end
710
+
711
+ [domain, hostgroup.try(:domain)].compact.each do |d|
712
+ ids << d.dns_id
713
+ end
714
+
715
+ [puppet_proxy_id, puppet_ca_proxy_id, hostgroup.try(:puppet_proxy_id), hostgroup.try(:puppet_ca_proxy_id)].compact.each do |p|
716
+ ids << p
717
+ end
718
+ ids.uniq.compact
719
+ end
720
+
721
+ def matching?
722
+ missing_ids.empty?
723
+ end
724
+
725
+ def missing_ids
726
+ Array.wrap(tax_location.try(:missing_ids)) + Array.wrap(tax_organization.try(:missing_ids))
727
+ end
728
+
729
+ def import_missing_ids
730
+ tax_location.import_missing_ids if location
731
+ tax_organization.import_missing_ids if organization
732
+ end
733
+
734
+ private
735
+
736
+ def lookup_keys_params
737
+ return {} unless Setting["Enable_Smart_Variables_in_ENC"]
738
+
739
+ p = {}
740
+ klasses = all_puppetclasses.map(&:id).flatten
741
+ LookupKey.where(:puppetclass_id => klasses ).each do |k|
742
+ p[k.to_s] = k.value_for(self)
743
+ end unless klasses.empty?
744
+ p
745
+ end
746
+
747
+ def lookup_keys_class_params
748
+ Classification.new(:host => self).enc
749
+ end
750
+
751
+ def bmc_nic
752
+ interfaces.bmc.first
753
+ end
754
+
755
+ # ensure that host name is fqdn
756
+ # if the user inputted short name, the domain name will be appended
757
+ # this is done to ensure compatibility with puppet storeconfigs
758
+ def normalize_hostname
759
+ # no hostname was given or a domain was selected, since this is before validation we need to ignore
760
+ # it and let the validations to produce an error
761
+ return if name.empty?
762
+
763
+ # Remove whitespace
764
+ self.name.gsub!(/\s/,'')
765
+
766
+ if domain.nil? and name.match(/\./)
767
+ # try to assign the domain automatically based on our existing domains from the host FQDN
768
+ self.domain = Domain.all.select{|d| name.match(d.name)}.first rescue nil
769
+ else
770
+ # if our host is in short name, append the domain name
771
+ if !new_record? and changed_attributes['domain_id'].present?
772
+ old_domain = Domain.find(changed_attributes["domain_id"])
773
+ self.name.gsub(old_domain.to_s,"")
774
+ end
775
+ self.name += ".#{domain}" unless name =~ /.#{domain}$/i
776
+ end
777
+ end
778
+
779
+ def assign_hostgroup_attributes attrs = []
780
+ attrs.each do |attr|
781
+ eval("self.#{attr.to_s} ||= hostgroup.#{attr.to_s}")
782
+ end
783
+ end
784
+
785
+ # checks if the host association is a valid association for this host
786
+ def ensure_associations
787
+ status = true
788
+ %w{ ptable medium architecture}.each do |e|
789
+ value = self.send(e.to_sym)
790
+ next if value.blank?
791
+ unless os.send(e.pluralize.to_sym).include?(value)
792
+ errors.add("#{e}_id".to_sym, _("%{value} does not belong to %{os} operating system") % { :value => value, :os => os })
793
+ status = false
794
+ end
795
+ end if SETTINGS[:unattended] and managed? and os and capabilities.include?(:build)
796
+
797
+ puppetclasses.select("puppetclasses.id,puppetclasses.name").uniq.each do |e|
798
+ unless environment.puppetclasses.map(&:id).include?(e.id)
799
+ errors.add(:puppetclasses, "#{e} does not belong to the #{environment} environment")
800
+ status = false
801
+ end
802
+ end if environment
803
+ status
804
+ end
805
+
806
+ # alias to ensure same method that resolves the last report between the hosts and reports tables.
807
+ def reported_at
808
+ last_report
809
+ end
810
+
811
+ # puppet report status table column name
812
+ def self.report_status
813
+ "puppet_status"
814
+ end
815
+
816
+ # converts a name into ip address using DNS.
817
+ # if we are managing DNS, we can query the correct DNS server
818
+ # otherwise, use normal systems dns settings to resolv
819
+ def to_ip_address name_or_ip
820
+ return name_or_ip if name_or_ip =~ Net::Validations::IP_REGEXP
821
+ return dns_ptr_record.dns_lookup(name_or_ip).ip if dns_ptr_record
822
+ # fall back to normal dns resolution
823
+ domain.resolver.getaddress(name_or_ip).to_s
824
+ end
825
+
826
+ def set_default_user
827
+ self.owner ||= User.current
828
+ end
829
+
830
+ def set_certname
831
+ self.certname = Foreman.uuid if read_attribute(:certname).blank? or new_record?
832
+ end
833
+
834
+ def normalize_addresses
835
+ self.mac = Net::Validations.normalize_mac(mac)
836
+ self.ip = Net::Validations.normalize_ip(ip)
837
+ end
838
+
839
+ def force_lookup_value_matcher
840
+ lookup_values.each { |v| v.match = "fqdn=#{fqdn}" }
841
+ end
842
+
843
+ def tax_location
844
+ return nil unless location_id
845
+ @tax_location ||= TaxHost.new(location, self)
846
+ end
847
+
848
+ def tax_organization
849
+ return nil unless organization_id
850
+ @tax_organization ||= TaxHost.new(organization, self)
851
+ end
852
+
853
+
854
+ end