foreman_puppet 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (247) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +619 -0
  3. data/README.md +38 -0
  4. data/Rakefile +31 -0
  5. data/app/assets/stylesheets/foreman_puppet.scss +117 -0
  6. data/app/controllers/concerns/foreman_puppet/api/import_puppetclasses_common_controller.rb +139 -0
  7. data/app/controllers/concerns/foreman_puppet/environments_import.rb +61 -0
  8. data/app/controllers/concerns/foreman_puppet/extensions/api_hostgroups_controller.rb +40 -0
  9. data/app/controllers/concerns/foreman_puppet/extensions/api_template_combinations_controller.rb +23 -0
  10. data/app/controllers/concerns/foreman_puppet/extensions/api_v2_hosts_controller.rb +48 -0
  11. data/app/controllers/concerns/foreman_puppet/extensions/hostgroups_controller_extensions.rb +58 -0
  12. data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +228 -0
  13. data/app/controllers/concerns/foreman_puppet/extensions/operatingsystems_controller.rb +11 -0
  14. data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +75 -0
  15. data/app/controllers/concerns/foreman_puppet/extensions/parameters_hostgroup.rb +70 -0
  16. data/app/controllers/concerns/foreman_puppet/extensions/parameters_template_combination.rb +21 -0
  17. data/app/controllers/concerns/foreman_puppet/parameters/config_group.rb +17 -0
  18. data/app/controllers/concerns/foreman_puppet/parameters/environment.rb +21 -0
  19. data/app/controllers/concerns/foreman_puppet/parameters/puppetclass.rb +24 -0
  20. data/app/controllers/concerns/foreman_puppet/parameters/puppetclass_lookup_key.rb +24 -0
  21. data/app/controllers/foreman_puppet/api/v2/base_controller.rb +26 -0
  22. data/app/controllers/foreman_puppet/api/v2/config_groups_controller.rb +57 -0
  23. data/app/controllers/foreman_puppet/api/v2/environments_controller.rb +91 -0
  24. data/app/controllers/foreman_puppet/api/v2/host_classes_controller.rb +59 -0
  25. data/app/controllers/foreman_puppet/api/v2/hostgroup_classes_controller.rb +46 -0
  26. data/app/controllers/foreman_puppet/api/v2/lookups_common_controller.rb +114 -0
  27. data/app/controllers/foreman_puppet/api/v2/override_values_controller.rb +99 -0
  28. data/app/controllers/foreman_puppet/api/v2/puppetclasses_controller.rb +99 -0
  29. data/app/controllers/foreman_puppet/api/v2/smart_class_parameters_controller.rb +76 -0
  30. data/app/controllers/foreman_puppet/config_groups_controller.rb +46 -0
  31. data/app/controllers/foreman_puppet/environments_controller.rb +51 -0
  32. data/app/controllers/foreman_puppet/puppet_smart_proxies_controller.rb +39 -0
  33. data/app/controllers/foreman_puppet/puppetclass_lookup_keys_controller.rb +33 -0
  34. data/app/controllers/foreman_puppet/puppetclasses_controller.rb +113 -0
  35. data/app/controllers/foreman_puppet/react_controller.rb +19 -0
  36. data/app/helpers/concerns/foreman_puppet/template_renderer_scope.rb +14 -0
  37. data/app/helpers/foreman_puppet/environments_helper.rb +17 -0
  38. data/app/helpers/foreman_puppet/hosts_and_hostgroups_helper.rb +96 -0
  39. data/app/helpers/foreman_puppet/hosts_helper.rb +32 -0
  40. data/app/helpers/foreman_puppet/puppet_smart_proxies_helper.rb +8 -0
  41. data/app/helpers/foreman_puppet/puppetclass_lookup_keys_helper.rb +135 -0
  42. data/app/helpers/foreman_puppet/puppetclasses_and_environments_helper.rb +55 -0
  43. data/app/helpers/foreman_puppet/puppetclasses_helper.rb +59 -0
  44. data/app/helpers/foreman_puppet/template_combinations_helper.rb +33 -0
  45. data/app/models/concerns/foreman_puppet/extensions/host.rb +88 -0
  46. data/app/models/concerns/foreman_puppet/extensions/hostgroup.rb +40 -0
  47. data/app/models/concerns/foreman_puppet/extensions/nic_managed.rb +11 -0
  48. data/app/models/concerns/foreman_puppet/extensions/operatingsystem.rb +11 -0
  49. data/app/models/concerns/foreman_puppet/extensions/provisioning_template.rb +64 -0
  50. data/app/models/concerns/foreman_puppet/extensions/report.rb +11 -0
  51. data/app/models/concerns/foreman_puppet/extensions/taxonomy.rb +19 -0
  52. data/app/models/concerns/foreman_puppet/extensions/template_combination.rb +23 -0
  53. data/app/models/concerns/foreman_puppet/extensions/user.rb +22 -0
  54. data/app/models/concerns/foreman_puppet/host_common.rb +90 -0
  55. data/app/models/concerns/foreman_puppet/puppet_lookup_value_extensions.rb +13 -0
  56. data/app/models/foreman_puppet/config_group.rb +45 -0
  57. data/app/models/foreman_puppet/config_group_class.rb +19 -0
  58. data/app/models/foreman_puppet/environment.rb +63 -0
  59. data/app/models/foreman_puppet/environment_class.rb +40 -0
  60. data/app/models/foreman_puppet/host_class.rb +23 -0
  61. data/app/models/foreman_puppet/host_config_group.rb +15 -0
  62. data/app/models/foreman_puppet/host_puppet_facet.rb +130 -0
  63. data/app/models/foreman_puppet/hostgroup_class.rb +23 -0
  64. data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +98 -0
  65. data/app/models/foreman_puppet/puppetclass.rb +132 -0
  66. data/app/models/foreman_puppet/puppetclass_lookup_key.rb +58 -0
  67. data/app/services/foreman_puppet/host_info_providers/config_groups_info.rb +10 -0
  68. data/app/services/foreman_puppet/host_info_providers/puppet_info.rb +92 -0
  69. data/app/services/foreman_puppet/input_type/puppet_parameter_input.rb +35 -0
  70. data/app/services/foreman_puppet/proxy_status/puppet.rb +17 -0
  71. data/app/services/foreman_puppet/puppet_class_importer.rb +355 -0
  72. data/app/views/api/v2/template_combinations/base.json.erb +9 -0
  73. data/app/views/foreman_puppet/api/v2/config_groups/base.json.rabl +3 -0
  74. data/app/views/foreman_puppet/api/v2/config_groups/create.json.rabl +3 -0
  75. data/app/views/foreman_puppet/api/v2/config_groups/index.json.rabl +3 -0
  76. data/app/views/foreman_puppet/api/v2/config_groups/main.json.rabl +8 -0
  77. data/app/views/foreman_puppet/api/v2/config_groups/show.json.rabl +3 -0
  78. data/app/views/foreman_puppet/api/v2/config_groups/update.json.rabl +3 -0
  79. data/app/views/foreman_puppet/api/v2/environments/base.json.rabl +3 -0
  80. data/app/views/foreman_puppet/api/v2/environments/create.json.rabl +3 -0
  81. data/app/views/foreman_puppet/api/v2/environments/index.json.rabl +3 -0
  82. data/app/views/foreman_puppet/api/v2/environments/main.json.rabl +5 -0
  83. data/app/views/foreman_puppet/api/v2/environments/show.json.rabl +15 -0
  84. data/app/views/foreman_puppet/api/v2/environments/update.json.rabl +3 -0
  85. data/app/views/foreman_puppet/api/v2/host_puppet_facets/base.json.rabl +1 -0
  86. data/app/views/foreman_puppet/api/v2/host_puppet_facets/host_single.json.rabl +17 -0
  87. data/app/views/foreman_puppet/api/v2/host_puppet_facets/show.json.rabl +11 -0
  88. data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/base.json.rabl +5 -0
  89. data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/hostgroup_single.json.rabl +16 -0
  90. data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/show.json.rabl +11 -0
  91. data/app/views/foreman_puppet/api/v2/import_puppetclasses/index.json.rabl +3 -0
  92. data/app/views/foreman_puppet/api/v2/import_puppetclasses/show.json.rabl +36 -0
  93. data/app/views/foreman_puppet/api/v2/override_values/create.json.rabl +3 -0
  94. data/app/views/foreman_puppet/api/v2/override_values/index.json.rabl +3 -0
  95. data/app/views/foreman_puppet/api/v2/override_values/show.json.rabl +3 -0
  96. data/app/views/foreman_puppet/api/v2/override_values/update.json.rabl +3 -0
  97. data/app/views/foreman_puppet/api/v2/puppetclasses/base.json.rabl +3 -0
  98. data/app/views/foreman_puppet/api/v2/puppetclasses/create.json.rabl +3 -0
  99. data/app/views/foreman_puppet/api/v2/puppetclasses/index.json.rabl +4 -0
  100. data/app/views/foreman_puppet/api/v2/puppetclasses/list.json.rabl +3 -0
  101. data/app/views/foreman_puppet/api/v2/puppetclasses/main.json.rabl +5 -0
  102. data/app/views/foreman_puppet/api/v2/puppetclasses/show.json.rabl +15 -0
  103. data/app/views/foreman_puppet/api/v2/puppetclasses/update.json.rabl +3 -0
  104. data/app/views/foreman_puppet/api/v2/smart_class_parameters/base.json.rabl +4 -0
  105. data/app/views/foreman_puppet/api/v2/smart_class_parameters/create.json.rabl +3 -0
  106. data/app/views/foreman_puppet/api/v2/smart_class_parameters/destroy.json.rabl +3 -0
  107. data/app/views/foreman_puppet/api/v2/smart_class_parameters/index.json.rabl +3 -0
  108. data/app/views/foreman_puppet/api/v2/smart_class_parameters/main.json.rabl +23 -0
  109. data/app/views/foreman_puppet/api/v2/smart_class_parameters/show.json.rabl +19 -0
  110. data/app/views/foreman_puppet/api/v2/smart_class_parameters/update.json.rabl +3 -0
  111. data/app/views/foreman_puppet/config_groups/_config_group.html.erb +34 -0
  112. data/app/views/foreman_puppet/config_groups/_config_groups_selection.html.erb +36 -0
  113. data/app/views/foreman_puppet/config_groups/_form.html.erb +9 -0
  114. data/app/views/foreman_puppet/config_groups/edit.html.erb +3 -0
  115. data/app/views/foreman_puppet/config_groups/index.html.erb +31 -0
  116. data/app/views/foreman_puppet/config_groups/new.html.erb +3 -0
  117. data/app/views/foreman_puppet/config_groups/welcome.html.erb +12 -0
  118. data/app/views/foreman_puppet/environments/_form.html.erb +20 -0
  119. data/app/views/foreman_puppet/environments/edit.html.erb +8 -0
  120. data/app/views/foreman_puppet/environments/index.html.erb +32 -0
  121. data/app/views/foreman_puppet/environments/new.html.erb +7 -0
  122. data/app/views/foreman_puppet/environments/welcome.html.erb +16 -0
  123. data/app/views/foreman_puppet/layouts/application_react.html.erb +15 -0
  124. data/app/views/foreman_puppet/puppet_smart_proxies/_dashboard.html.erb +9 -0
  125. data/app/views/foreman_puppet/puppet_smart_proxies/_environments.html.erb +30 -0
  126. data/app/views/foreman_puppet/puppetclass_lookup_keys/edit.html.erb +3 -0
  127. data/app/views/foreman_puppet/puppetclass_lookup_keys/index.html.erb +22 -0
  128. data/app/views/foreman_puppet/puppetclass_lookup_keys/welcome.html.erb +9 -0
  129. data/app/views/foreman_puppet/puppetclasses/_class_parameters.html.erb +37 -0
  130. data/app/views/foreman_puppet/puppetclasses/_class_selection.html.erb +70 -0
  131. data/app/views/foreman_puppet/puppetclasses/_classes.html.erb +22 -0
  132. data/app/views/foreman_puppet/puppetclasses/_classes_in_groups.html.erb +5 -0
  133. data/app/views/foreman_puppet/puppetclasses/_classes_parameters.html.erb +16 -0
  134. data/app/views/foreman_puppet/puppetclasses/_form.html.erb +62 -0
  135. data/app/views/foreman_puppet/puppetclasses/_selected_classes.html.erb +4 -0
  136. data/app/views/foreman_puppet/puppetclasses/edit.html.erb +4 -0
  137. data/app/views/foreman_puppet/puppetclasses/index.html.erb +47 -0
  138. data/app/views/hosts/_form_puppet_enc_tab.html.erb +24 -0
  139. data/app/views/hosts/foreman_puppet/_form_main_tab_fields.html.erb +1 -0
  140. data/app/views/hosts/select_multiple_environment.html.erb +8 -0
  141. data/app/views/provisioning_templates/_combination.html.erb +5 -0
  142. data/app/views/provisioning_templates/_combinations.html.erb +6 -0
  143. data/app/views/smart_proxies/plugins/_puppet.html.erb +24 -0
  144. data/config/api_routes.rb +81 -0
  145. data/config/routes.rb +89 -0
  146. data/db/migrate/20101121140000_add_environment_to_template_combinations.foreman_puppet.rb +9 -0
  147. data/db/migrate/20200720123005_migrate_puppet_core_types.foreman_puppet.rb +19 -0
  148. data/db/migrate/20200722171017_create_host_puppet_facet.foreman_puppet.rb +10 -0
  149. data/db/migrate/20200803113531_create_hostgroup_puppet_facet.foreman_puppet.rb +10 -0
  150. data/db/migrate/20200803113803_migrate_environment_to_puppet_facet.foreman_puppet.rb +22 -0
  151. data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +29 -0
  152. data/db/migrate/20201125113903_migrate_puppetclasses_to_facets.foreman_puppet.rb +47 -0
  153. data/db/migrate_foreman/20090722141107_create_environments.rb +17 -0
  154. data/db/migrate_foreman/20120905095532_create_environment_classes.rb +15 -0
  155. data/db/migrate_foreman/20140407161817_create_config_groups.rb +9 -0
  156. data/db/migrate_foreman/20140407162007_create_config_group_classes.rb +10 -0
  157. data/db/migrate_foreman/20140407162059_create_host_config_groups.rb +11 -0
  158. data/db/migrate_foreman/20161205142618_delete_orphaned_smart_class_parameters.rb +10 -0
  159. data/db/migrate_foreman/20170109115157_fix_lookup_key_auditable_type.rb +15 -0
  160. data/db/migrate_foreman/20180816134832_cast_lookup_key_values.rb +35 -0
  161. data/db/migrate_foreman/20181023112532_add_environment_puppetclass_id.rb +7 -0
  162. data/db/migrate_foreman/20181224174419_add_index_to_environment_class_by_lookup_key_and_puppetclass.rb +6 -0
  163. data/db/seeds.d/111_puppet_proxy_feature.rb +8 -0
  164. data/lib/foreman_puppet.rb +10 -0
  165. data/lib/foreman_puppet/engine.rb +82 -0
  166. data/lib/foreman_puppet/register.rb +218 -0
  167. data/lib/foreman_puppet/version.rb +3 -0
  168. data/lib/tasks/foreman_puppet_tasks.rake +31 -0
  169. data/locale/Makefile +60 -0
  170. data/locale/action_names.rb +5 -0
  171. data/locale/en/foreman_puppet.edit.po +911 -0
  172. data/locale/en/foreman_puppet.po +690 -0
  173. data/locale/en/foreman_puppet.po.time_stamp +0 -0
  174. data/locale/foreman_puppet.pot +1076 -0
  175. data/locale/gemspec.rb +2 -0
  176. data/test/controllers/foreman_puppet/api/v2/config_groups_controller_test.rb +28 -0
  177. data/test/controllers/foreman_puppet/api/v2/environments_controller_test.rb +346 -0
  178. data/test/controllers/foreman_puppet/api/v2/host_classes_controller_test.rb +48 -0
  179. data/test/controllers/foreman_puppet/api/v2/hostgroup_classes_controller_test.rb +41 -0
  180. data/test/controllers/foreman_puppet/api/v2/hostgroups_controller_test.rb +79 -0
  181. data/test/controllers/foreman_puppet/api/v2/hosts_controller_test.rb +101 -0
  182. data/test/controllers/foreman_puppet/api/v2/lookups_common_controller_test.rb +29 -0
  183. data/test/controllers/foreman_puppet/api/v2/override_values_controller_test.rb +169 -0
  184. data/test/controllers/foreman_puppet/api/v2/puppetclasses_controller_test.rb +144 -0
  185. data/test/controllers/foreman_puppet/api/v2/smart_class_parameters_controller_test.rb +557 -0
  186. data/test/controllers/foreman_puppet/api/v2/template_combinations_controller_test.rb +81 -0
  187. data/test/controllers/foreman_puppet/config_groups_controller_test.rb +47 -0
  188. data/test/controllers/foreman_puppet/environments_controller_test.rb +230 -0
  189. data/test/controllers/foreman_puppet/hostgroups_controller_test.rb +72 -0
  190. data/test/controllers/foreman_puppet/hosts_controller_test.rb +346 -0
  191. data/test/controllers/foreman_puppet/puppet_smart_proxies_controller_test.rb +29 -0
  192. data/test/controllers/foreman_puppet/puppetclass_lookup_keys_controller_test.rb +59 -0
  193. data/test/controllers/foreman_puppet/puppetclasses_controller_test.rb +235 -0
  194. data/test/controllers/provisioning_templates_controller_test.rb +70 -0
  195. data/test/factories/foreman_puppet_factories.rb +134 -0
  196. data/test/factories/host_puppet_enhancements.rb +61 -0
  197. data/test/factories/proxy_puppet_enhancements.rb +33 -0
  198. data/test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb +65 -0
  199. data/test/helpers/foreman_puppet/puppetclasses_helper_test.rb +33 -0
  200. data/test/integration/foreman_puppet/environment_js_test.rb +27 -0
  201. data/test/integration/foreman_puppet/host_js_test.rb +371 -0
  202. data/test/integration/foreman_puppet/hostgroup_js_test.rb +100 -0
  203. data/test/integration/foreman_puppet/puppetclass_js_test.rb +37 -0
  204. data/test/integration/foreman_puppet/smartclass_parameter_js_test.rb +84 -0
  205. data/test/models/foreman_puppet/config_group_class_test.rb +9 -0
  206. data/test/models/foreman_puppet/config_group_test.rb +8 -0
  207. data/test/models/foreman_puppet/environment_test.rb +92 -0
  208. data/test/models/foreman_puppet/host_config_group_test.rb +39 -0
  209. data/test/models/foreman_puppet/host_puppet_facet_test.rb +116 -0
  210. data/test/models/foreman_puppet/host_test.rb +288 -0
  211. data/test/models/foreman_puppet/hostgroup_puppet_facet_test.rb +200 -0
  212. data/test/models/foreman_puppet/hostgroup_test.rb +14 -0
  213. data/test/models/foreman_puppet/lookup_value_test.rb +69 -0
  214. data/test/models/foreman_puppet/provisioning_template_test.rb +124 -0
  215. data/test/models/foreman_puppet/puppetclass_lookup_key_test.rb +81 -0
  216. data/test/models/foreman_puppet/puppetclass_test.rb +144 -0
  217. data/test/models/foreman_puppet/smart_proxy_test.rb +28 -0
  218. data/test/qraphql/queries/host_puppet_query_test.rb +36 -0
  219. data/test/qraphql/queries/hostgroup_puppet_query_test.rb +36 -0
  220. data/test/services/foreman_puppet/host_info_providers/puppet_info_test.rb +791 -0
  221. data/test/services/foreman_puppet/input_type/puppet_parameter_input_test.rb +14 -0
  222. data/test/test_puppet_helper.rb +30 -0
  223. data/test/unit/foreman_puppet/access_permissions_test.rb +16 -0
  224. data/test/unit/foreman_puppet/puppet_class_importer_test.rb +247 -0
  225. data/test/unit/foreman_puppet/template_rendering_test.rb +20 -0
  226. data/test/unit/foreman_puppet_test.rb +11 -0
  227. data/webpack/__mocks__/foremanReact/common/I18n.js +7 -0
  228. data/webpack/__mocks__/foremanReact/components/Layout/LayoutActions.js +2 -0
  229. data/webpack/__mocks__/foremanReact/readme.md +11 -0
  230. data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +10 -0
  231. data/webpack/__mocks__/foremanReact/redux/API/index.js +10 -0
  232. data/webpack/__mocks__/foremanReact/redux/actions/toasts.js +8 -0
  233. data/webpack/__mocks__/foremanReact/redux/index.js +1 -0
  234. data/webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js +5 -0
  235. data/webpack/fills_index.js +30 -0
  236. data/webpack/index.js +18 -0
  237. data/webpack/src/ForemanPuppet.js +11 -0
  238. data/webpack/src/Router/__snapshots__/routes.test.js.snap +3 -0
  239. data/webpack/src/Router/index.js +14 -0
  240. data/webpack/src/Router/routes.js +3 -0
  241. data/webpack/src/Router/routes.test.js +16 -0
  242. data/webpack/src/foreman_class_edit.js +224 -0
  243. data/webpack/src/foreman_puppet_host_form.js +140 -0
  244. data/webpack/src/foreman_puppet_host_form.test.js +65 -0
  245. data/webpack/src/index.js +1 -0
  246. data/webpack/src/reducers.js +7 -0
  247. metadata +340 -0
@@ -0,0 +1,4 @@
1
+ <%= content_tag :li, id: "selected_puppet_class_#{klass.id}", class: [dom_class(klass, 'selected'), cycle('even', 'odd'), ('unavailable' unless klass.environments.include?(@environment))] do %>
2
+ <%= link_to_remove_puppetclass(klass, obj) %>
3
+ <%= hidden_field_tag "#{resource_type}[puppetclass_ids][]", klass.id %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% title(_("Edit Puppet Class %s") % @puppetclass) %>
2
+ <% breadcrumbs(switchable: true) %>
3
+
4
+ <%= render 'form', puppetclass: @puppetclass %>
@@ -0,0 +1,47 @@
1
+ <% title _("Puppet Classes") %>
2
+
3
+ <% title_actions import_proxy_select(hash_for_import_environments_puppetclasses_path),
4
+ documentation_button('4.2.2Classes') %>
5
+
6
+ <table class="<%= table_css_classes 'table-fixed' %>">
7
+ <thead>
8
+ <tr>
9
+ <th class="col-md-3"><%= sort :name, as: s_("Puppetclass|Name") %></th>
10
+ <th class="col-md-3"><%= sort :environment, as: _("Environments") %></th>
11
+ <th class="col-md-2"><%= _('Host Groups') %></th>
12
+ <th class="col-md-1"><%= _('Hosts') %></th>
13
+ <th class="col-md-1"><%= _('Parameters') %></th>
14
+ <th class="col-md-1"><%= _("Actions") %></th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <% for puppetclass in @puppetclasses %>
19
+ <tr>
20
+ <td class="ellipsis">
21
+ <%= link_to_if_authorized puppetclass.name, hash_for_edit_puppetclass_path(id: puppetclass).merge(engine: foreman_puppet, auth_object: puppetclass, authorizer: authorizer) %>
22
+ </td>
23
+ <td class="ellipsis">
24
+ <%= puppetclass.environments.uniq.to_sentence %>
25
+ </td>
26
+ <td class="">
27
+ <%= puppetclass.all_hostgroups(with_descendants: false).map do |hg|
28
+ link_to_if_authorized trunc_with_tooltip(hg, 24),
29
+ main_app.hash_for_edit_hostgroup_path(id: hg).merge(auth_object: hg, authorizer: @hostgroups_authorizer)
30
+ end.to_sentence.html_safe %>
31
+ </td>
32
+ <td><%= link_to puppetclass.hosts_count, main_app.hosts_path(search: "class = #{puppetclass.name}")%></td>
33
+ <td><%= puppetclass.class_params.size %> </td>
34
+ <td>
35
+ <%
36
+ links = [display_delete_if_authorized(hash_for_puppetclass_path(id: puppetclass).merge(engine: foreman_puppet, auth_object: puppetclass, authorizer: authorizer), data: { confirm: _("Delete %s?") % puppetclass.name }, action: :delete)]
37
+ links.push(display_link_if_authorized(_('Override all parameters'), hash_for_override_puppetclass_path(enable: true, id: puppetclass).merge(engine: foreman_puppet, auth_object: puppetclass, authorizer: authorizer, permission: 'edit_puppetclasses'), method: :post, data: { confirm: _("This will set all parameters of the class %s as overridden. Continue?") % puppetclass.name })) if puppetclass.class_params.present? && !overridden?(puppetclass)
38
+ links.push(display_link_if_authorized(_('Set parameters to defaults'), hash_for_override_puppetclass_path(enable: false, id: puppetclass).merge(engine: foreman_puppet, auth_object: puppetclass, authorizer: authorizer, permission: 'edit_puppetclasses'), method: :post, data: { confirm: _("This will reset parameters of the class %s to their default values. Continue?") % puppetclass.name })) if puppetclass.class_params.present? && overridden?(puppetclass)
39
+ %>
40
+ <%= action_buttons(*links) %>
41
+ </td>
42
+ </tr>
43
+ <% end %>
44
+ </tbody>
45
+ </table>
46
+
47
+ <%= will_paginate_with_info @puppetclasses %>
@@ -0,0 +1,24 @@
1
+ <% resource_type ||= pagelet.opts[:resource_type] %>
2
+ <% host_or_hostgroup ||= local_assigns[resource_type] %>
3
+ <% obj = (host_or_hostgroup.puppet || host_or_hostgroup.build_puppet) if %i[host hostgroup].include?(resource_type) %>
4
+ <% if resource_type == :host %>
5
+ <span id="puppet_klasses_reload_url" data-url="<%= foreman_puppet.hostgroup_or_environment_selected_hosts_path %>"></span>
6
+ <% elsif resource_type == :hostgroup %>
7
+ <span id="puppet_klasses_reload_url" data-url="<%= foreman_puppet.environment_selected_hostgroups_path %>"></span>
8
+ <% end %>
9
+ <% if @environment.present? || obj.environment.present? %>
10
+ <% if accessible_resource_records(:config_group).exists? %>
11
+ <%= render 'foreman_puppet/config_groups/config_groups_selection', obj: obj, resource_type: resource_type %>
12
+ <% end %>
13
+
14
+ <%= render 'foreman_puppet/puppetclasses/class_selection', obj: obj, resource_type: resource_type %>
15
+ <% else %>
16
+ <%= alert(class: alert_class(:info),
17
+ header: _('Notice'),
18
+ text: _('Please select an environment first')) %>
19
+ <% end %>
20
+
21
+ <fieldset id="puppet_klasses_parameters" data-url="<%= foreman_puppet.url_for(action: :puppetclass_parameters, only_path: true) %>">
22
+ <h2><%= _('Puppet Class Parameters') %></h2>
23
+ <%= render 'foreman_puppet/puppetclasses/classes_parameters', obj: host_or_hostgroup %>
24
+ </fieldset>
@@ -0,0 +1 @@
1
+ <%= public_send("#{pagelet.opts[:resource_type]}_puppet_environment_field", form) %>
@@ -0,0 +1,8 @@
1
+ <%= render 'hosts/selected_hosts', hosts: @hosts %>
2
+
3
+ <%= form_for :environment, url: foreman_puppet.update_multiple_environment_hosts_path(host_ids: params[:host_ids]) do |f| %>
4
+ <%= selectable_f f, :id, [[_('Select environment'), 'disabled'],
5
+ [_('*Clear environment*'), '' ],
6
+ [_('*Inherit from host group*'), 'inherit']] + Environment.all.map{|e| [e.name, e.id]}, {},
7
+ label: _('Environment'), onchange: 'tfm.hosts.table.toggleMultipleOkButton(this)' %>
8
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <div class="fields">
2
+ <%= select_f f, :hostgroup_id, Hostgroup.all, :id, :to_label, {:include_blank => true}, :label => _("Hostgroup") %>
3
+ <%= select_f f, :environment_id, Environment.all, :id, :name, {:include_blank => true},
4
+ :label => _("Environment"), :help_inline => link_to_remove_fields(_('Remove'), f, :title => _("Remove Combination")) %>
5
+ </div>
@@ -0,0 +1,6 @@
1
+ <%= field_set_tag _("Valid Host Group and Environment Combinations"), :id => "template_combination" do %>
2
+ <%= f.fields_for :template_combinations do |builder| %>
3
+ <%= render 'provisioning_templates/combination', :f => builder %>
4
+ <% end %>
5
+ <% end %>
6
+ <p><%= link_to_add_fields('+ ' + _("Add Combination"), f, :template_combinations, "provisioning_templates/combination", { :target => '#template_combination', :primary_button => false }) %></p>
@@ -0,0 +1,24 @@
1
+ <% javascript 'charts' %>
2
+ <ul id="proxy-puppet-tab" class="nav nav-tabs nav-tabs-pf">
3
+ <li class="active"><a href="#puppet_dashboard" data-toggle="tab"><%= _('General')%></a></li>
4
+ <li><a href="#puppet_envs" data-toggle="tab"><%= _('Environments') %></a></li>
5
+ </ul>
6
+ <div class="tab-content" id="proxy-puppet-tab-content">
7
+ <div class="tab-pane active in dashboard" id="puppet_dashboard">
8
+ <div class="row">
9
+ <div class="col-md-6">
10
+ <%= show_feature_version('puppet') %>
11
+ <div class="row">
12
+ <div class="col-md-4"><strong><%= _('Hosts managed:') %></strong></div>
13
+ <div class="col-md-8">
14
+ <%= link_to Host::Managed.where(puppet_proxy_id: @smart_proxy.id).count, hosts_path(search: "puppetmaster = \"#{@smart_proxy.name}\"") %>
15
+ </div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ <div class="clearfix row container-cards-pf container-fluid" data-ajax-url="<%= foreman_puppet.dashboard_puppet_smart_proxy_path(@smart_proxy) %>" data-on-complete="refreshCharts"><%= spinner %></div>
20
+ </div>
21
+ <div class="tab-pane" id="puppet_envs" data-ajax-url="<%= foreman_puppet.environments_puppet_smart_proxy_path(@smart_proxy) %>">
22
+ <%= spinner %>
23
+ </div>
24
+ </div>
@@ -0,0 +1,81 @@
1
+ ForemanPuppet::Engine.routes.draw do
2
+ namespace :api, defaults: { format: 'json' } do
3
+ scope '(:apiv)', module: :v2, defaults: { apiv: 'v2' }, apiv: /v1|v2/, constraints: ApiConstraints.new(version: 2, default: true) do
4
+ constraints(id: %r{[^/]+}) do
5
+ resources :puppet_smart_proxies, only: [] do
6
+ post :import_puppetclasses, on: :member, controller: 'environments'
7
+
8
+ resources :environments, only: [] do
9
+ post :import_puppetclasses, on: :member
10
+ end
11
+ end
12
+
13
+ resources :config_groups, except: %i[new edit]
14
+
15
+ resources :hosts, only: [] do
16
+ resources :puppetclasses, except: %i[new edit]
17
+ resources :smart_class_parameters, except: %i[new edit create] do
18
+ resources :override_values, except: %i[new edit]
19
+ end
20
+ resources :host_classes, path: :puppetclass_ids, only: %i[index create destroy]
21
+ end
22
+
23
+ resources :hostgroups, only: [] do
24
+ resources :puppetclasses, except: %i[new edit]
25
+ resources :smart_class_parameters, except: %i[new edit create] do
26
+ resources :override_values, except: %i[new edit]
27
+ end
28
+ resources :hostgroup_classes, path: :puppetclass_ids, only: %i[index create destroy]
29
+ end
30
+
31
+ resources :environments, except: %i[new edit] do
32
+ resources :locations, only: %i[index show], controller: '/api/v2/locations'
33
+ resources :organizations, only: %i[index show], controller: '/api/v2/organizations'
34
+ resources :smart_class_parameters, except: %i[new edit create] do
35
+ resources :override_values, except: %i[new edit]
36
+ end
37
+ resources :puppetclasses, except: %i[new edit] do
38
+ resources :smart_class_parameters, except: %i[new edit create] do
39
+ resources :override_values, except: %i[new edit destroy]
40
+ end
41
+ end
42
+ resources :hosts, only: %i[index show], controller: '/api/v2/hosts'
43
+ resources :template_combinations, only: %i[index], controller: '/api/v2/template_combinations'
44
+ end
45
+
46
+ resources :puppetclasses, except: %i[new edit] do
47
+ resources :smart_class_parameters, except: %i[new edit create] do
48
+ resources :override_values, except: %i[new edit]
49
+ end
50
+ resources :environments, only: %i[index show] do
51
+ resources :smart_class_parameters, except: %i[new edit create] do
52
+ resources :override_values, except: %i[new edit]
53
+ end
54
+ end
55
+ end
56
+
57
+ resources :smart_class_parameters, except: %i[new edit create destroy] do
58
+ resources :override_values, except: %i[new edit]
59
+ end
60
+
61
+ resources :override_values, only: %i[update destroy]
62
+
63
+ resources :locations, only: [] do
64
+ resources :environments, only: %i[index show]
65
+
66
+ resources :organizations, only: [] do
67
+ resources :environments, only: %i[index show]
68
+ end
69
+ end
70
+
71
+ resources :organizations, only: [] do
72
+ resources :environments, only: %i[index show]
73
+
74
+ resources :locations, only: [] do
75
+ resources :environments, only: %i[index show]
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,89 @@
1
+ ForemanPuppet::Engine.routes.draw do
2
+ # ENC requests goes here
3
+ get 'node/:name' => '/hosts#externalNodes', :constraints => { name: /[^.][\w.-]+/ }
4
+
5
+ resources :config_groups, except: [:show] do
6
+ collection do
7
+ get 'help', action: :welcome
8
+ get 'auto_complete_search'
9
+ end
10
+ end
11
+
12
+ resources :environments, except: [:show] do
13
+ collection do
14
+ get 'help', action: :welcome
15
+ get 'import_environments'
16
+ post 'obsolete_and_new'
17
+ get 'auto_complete_search'
18
+ end
19
+ end
20
+
21
+ constraints(id: %r{[^/]+}) do
22
+ resources :puppetclass_lookup_keys, except: %i[show new create] do
23
+ collection do
24
+ get 'help', action: :welcome
25
+ get 'auto_complete_search'
26
+ end
27
+ end
28
+
29
+ resources :lookup_values, controller: '/lookup_values', except: %i[show new edit]
30
+ end
31
+
32
+ resources :puppetclasses, except: %i[new create show] do
33
+ collection do
34
+ get 'import_environments'
35
+ post 'obsolete_and_new'
36
+ get 'auto_complete_search'
37
+ end
38
+ member do
39
+ post 'parameters'
40
+ post 'override'
41
+ end
42
+ constraints(id: %r{[^/]+}) do
43
+ resources :hosts, controller: '/hosts'
44
+ end
45
+ end
46
+
47
+ resources :puppet_smart_proxies, only: [] do
48
+ member do
49
+ get 'environments'
50
+ get 'dashboard'
51
+ end
52
+ end
53
+
54
+ # TODO: should we patch the core routes?
55
+ constraints(id: %r{[^/]+}) do
56
+ resources :hosts, only: [], controller: '/hosts' do
57
+ collection do
58
+ post 'hostgroup_or_environment_selected'
59
+ post 'puppetclass_parameters'
60
+ match 'select_multiple_environment', via: %i[get post]
61
+ post 'update_multiple_environment'
62
+ post 'select_multiple_puppet_proxy'
63
+ post 'update_multiple_puppet_proxy'
64
+ end
65
+
66
+ member do
67
+ get 'externalNodes'
68
+ end
69
+
70
+ constraints(host_id: %r{[^/]+}) do
71
+ resources :puppetclasses, only: :index
72
+ end
73
+ end
74
+
75
+ resources :hostgroups, only: [], controller: '/hostgroups' do
76
+ collection do
77
+ post 'environment_selected'
78
+ post 'puppetclass_parameters'
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ Foreman::Application.routes.draw do
85
+ mount ForemanPuppet::Engine, at: '/foreman_puppet'
86
+
87
+ # ENC requests goes here - should get depreacated
88
+ get 'node/:name' => 'hosts#externalNodes', :constraints => { name: /[^.][\w.-]+/ }
89
+ end
@@ -0,0 +1,9 @@
1
+ class AddEnvironmentToTemplateCombinations < ActiveRecord::Migration[4.2]
2
+ def up
3
+ add_reference :template_combinations, :environment, foreign_key: true unless column_exists?(:template_combinations, :environment_id)
4
+ end
5
+
6
+ def down
7
+ remove_reference :template_combinations, :environment, foreign_key: true if ForemanPuppet.extracted_from_core?
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ class MigratePuppetCoreTypes < ActiveRecord::Migration[6.0]
2
+ def up
3
+ %w[PuppetclassLookupKey Puppetclass Environment ConfigGroup].each do |type|
4
+ Audit.where(auditable_type: type).update_all(auditable_type: "ForemanPuppet::#{type}")
5
+ Permission.where(resource_type: type).update_all(resource_type: "ForemanPuppet::#{type}")
6
+ end
7
+ LookupKey.where(type: 'PuppetclassLookupKey').update_all(type: 'ForemanPuppet::PuppetclassLookupKey')
8
+ TaxableTaxonomy.where(taxable_type: 'Environment').update_all(taxable_type: 'ForemanPuppet::Environment')
9
+ end
10
+
11
+ def down
12
+ %w[PuppetclassLookupKey Puppetclass Environment ConfigGroup].each do |type|
13
+ Audit.where(auditable_type: "ForemanPuppet::#{type}").update_all(auditable_type: type)
14
+ Permission.where(resource_type: "ForemanPuppet::#{type}").update_all(resource_type: type)
15
+ end
16
+ LookupKey.where(type: 'ForemanPuppet::PuppetclassLookupKey').update_all(type: 'PuppetclassLookupKey')
17
+ TaxableTaxonomy.where(taxable_type: 'ForemanPuppet::Environment').update_all(taxable_type: 'Environment')
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ class CreateHostPuppetFacet < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :host_puppet_facets do |t|
4
+ t.references :host, foreign_key: true
5
+ t.references :environment, foreign_key: true
6
+ t.references :puppet_proxy, foreign_key: { to_table: :smart_proxies }
7
+ t.timestamps null: true
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class CreateHostgroupPuppetFacet < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :hostgroup_puppet_facets do |t|
4
+ t.references :hostgroup, foreign_key: true
5
+ t.references :environment, foreign_key: true
6
+ t.references :puppet_proxy, foreign_key: { to_table: :smart_proxies }
7
+ t.timestamps null: true
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ class MigrateEnvironmentToPuppetFacet < ActiveRecord::Migration[6.0]
2
+ def up
3
+ puppet_hostgroups = ::Hostgroup.unscoped.where.not(environment_id: nil).pluck(:id, :environment_id)
4
+ puppet_hostgroups.map! { |hg_id, env_id| { hostgroup_id: hg_id, environment_id: env_id } }
5
+ ForemanPuppet::HostgroupPuppetFacet.insert_all(puppet_hostgroups) if puppet_hostgroups.any?
6
+
7
+ puppet_hosts = Host::Managed.unscoped.where.not(environment_id: nil).pluck(:id, :environment_id)
8
+ puppet_hosts.map! { |host_id, env_id| { host_id: host_id, environment_id: env_id } }
9
+ ForemanPuppet::HostPuppetFacet.insert_all(puppet_hosts) if puppet_hosts.any?
10
+ end
11
+
12
+ def down
13
+ hostgroup_facet_ids = ForemanPuppet::HostgroupPuppetFacet.all.pluck(:hostgroup_id, :environment_id)
14
+ hostgroup_facet_ids.each do |hostgroup_id, env_id|
15
+ ::Hostgroup.unscoped.where(id: hostgroup_id).update_all(environment_id: env_id)
16
+ end
17
+ host_facet_ids = ForemanPuppet::HostPuppetFacet.all.pluck(:host_id, :environment_id)
18
+ host_facet_ids.each do |host_id, env_id|
19
+ ::Host::Managed.unscoped.where(id: host_id).update_all(environment_id: env_id)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ class MigrateHostTypeInHostConfigGroups < ActiveRecord::Migration[6.0]
2
+ def up
3
+ host_config_group_ids = HostConfigGroup.where(host_type: %w[Host::Base Host::Managed]).pluck(:host_id).uniq
4
+ host_config_group_ids.each do |host_id|
5
+ host_facet_id = ForemanPuppet::HostPuppetFacet.where(host_id: host_id).pick(:id)
6
+ HostConfigGroup.where(host_type: %w[Host::Base Host::Managed], host_id: host_id).update_all(host_type: 'ForemanPuppet::HostPuppetFacet', host_id: host_facet_id)
7
+ end
8
+ hostgroup_config_group_ids = HostConfigGroup.where(host_type: 'Hostgroup').pluck(:host_id).uniq
9
+ hostgroup_config_group_ids.each do |hostgroup_id|
10
+ hostgroup_facet_id = ForemanPuppet::HostgroupPuppetFacet.where(hostgroup_id: hostgroup_id).pick(:id)
11
+ HostConfigGroup.where(host_type: 'Hostgroup', host_id: hostgroup_id).update_all(host_type: 'ForemanPuppet::HostgroupPuppetFacet', host_id: hostgroup_facet_id)
12
+ end
13
+ end
14
+
15
+ def down
16
+ host_config_group_ids = HostConfigGroup.where(host_type: 'ForemanPuppet::HostPuppetFacet').pluck(:host_id).uniq
17
+ host_facet_ids = Hash[ForemanPuppet::HostPuppetFacet.where(id: host_config_group_ids).pluck(:id, :host_id)]
18
+ host_config_group_ids.each do |host_puppet_facet_id|
19
+ HostConfigGroup.where(host_type: 'ForemanPuppet::HostPuppetFacet', host_id: host_puppet_facet_id)
20
+ .update_all(host_type: 'Host::Managed', host_id: host_facet_ids[host_puppet_facet_id])
21
+ end
22
+ hostgroup_config_group_ids = HostConfigGroup.where(host_type: 'ForemanPuppet::HostgroupPuppetFacet').pluck(:host_id).uniq
23
+ hostgroup_facet_ids = Hash[ForemanPuppet::HostgroupPuppetFacet.where(id: hostgroup_config_group_ids).pluck(:id, :hostgroup_id)]
24
+ hostgroup_config_group_ids.each do |hostgroup_facet_id|
25
+ HostConfigGroup.where(host_type: 'ForemanPuppet::HostgroupPuppetFacet', host_id: hostgroup_facet_id)
26
+ .update_all(host_type: 'Hostgroup', host_id: hostgroup_facet_ids[hostgroup_facet_id])
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,47 @@
1
+ class MigratePuppetclassesToFacets < ActiveRecord::Migration[6.0]
2
+ class FakeHostClass < ApplicationRecord
3
+ self.table_name = 'host_classes'
4
+ end
5
+
6
+ class FakeHostgroupClass < ApplicationRecord
7
+ self.table_name = 'hostgroup_classes'
8
+ end
9
+
10
+ def up
11
+ add_reference :host_classes, :host_puppet_facet, foreign_key: true, index: true
12
+ add_reference :hostgroup_classes, :hostgroup_puppet_facet, foreign_key: true, index: true
13
+
14
+ host_ids = FakeHostClass.all.pluck(:host_id).uniq
15
+ host_ids.each do |host_id|
16
+ host_facet = ForemanPuppet::HostPuppetFacet.find_by(host_id: host_id)
17
+ ForemanPuppet::HostClass.where(host_id: host_id).update_all(host_puppet_facet_id: host_facet.id)
18
+ end
19
+ hostgroup_ids = FakeHostgroupClass.all.pluck(:hostgroup_id).uniq
20
+ hostgroup_ids.each do |hostgroup_id|
21
+ hostgroup_facet = ForemanPuppet::HostgroupPuppetFacet.find_by(hostgroup_id: hostgroup_id)
22
+ ForemanPuppet::HostgroupClass.where(hostgroup_id: hostgroup_id).update_all(hostgroup_puppet_facet_id: hostgroup_facet.id)
23
+ end
24
+
25
+ change_column_null(:host_classes, :host_id, true)
26
+ change_column_null(:hostgroup_classes, :hostgroup_id, true)
27
+ # remove_reference(:host_classes, :host, index: true, foreign_key: true)
28
+ # remove_reference(:hostgroup_classes, :hostgroup, index: true, foreign_key: true)
29
+ end
30
+
31
+ def down
32
+ # add_reference :host_classes, :host, foreign_key: true, index: true
33
+ # add_reference :hostgroup_classes, :hostgroup, foreign_key: true, index: true
34
+
35
+ host_facets_ids = ForemanPuppet::HostClass.joins(:host_puppet_facet).pluck(:host_puppet_facet_id, 'host_puppet_facets.host_id')
36
+ host_facets_ids.each do |host_facet_id, host_id|
37
+ ForemanPuppet::HostClass.where(host_puppet_facet_id: host_facet_id).update_all(host_id: host_id)
38
+ end
39
+ hostgroup_ids = ForemanPuppet::HostgroupClass.joins(:hostgroup_puppet_facet).pluck(:hostgroup_puppet_facet_id, 'hostgroup_puppet_facets.hostgroup_id')
40
+ hostgroup_ids.each do |hostgroup_facet_id, hostgroup_id|
41
+ ForemanPuppet::HostgroupClass.where(hostgroup_puppet_facet_id: hostgroup_facet_id).update_all(hostgroup_id: hostgroup_id)
42
+ end
43
+
44
+ remove_reference(:host_classes, :host_puppet_facet, index: true, foreign_key: true)
45
+ remove_reference(:hostgroup_classes, :hostgroup_puppet_facet, index: true, foreign_key: true)
46
+ end
47
+ end