foreman_puppet 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,48 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module ApiV2HostsController
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ prepend PatchMethods
8
+
9
+ if ForemanPuppet.extracted_from_core?
10
+ method_desc = Apipie.get_method_description(self, :index)
11
+ method_desc.apis << Apipie::MethodDescription::Api.new(:GET, '/environments/:environment_id/hosts', N_('List hosts per environment'), {})
12
+
13
+ apipie_update_methods([:index]) do
14
+ param :environment_id, String, desc: N_('ID of puppet environment')
15
+ end
16
+
17
+ apipie_update_methods(%i[create update]) do
18
+ param :host, Hash do
19
+ param :environment_id, String, desc: N_('Deprecated in favor of host/puppet_attributes/environment_id')
20
+ param :puppetclass_ids, Array, desc: N_('Deprecated in favor of host/puppet_attributes/puppetclass_ids')
21
+ param :config_group_ids, Array, desc: N_('Deprecated in favor of host/puppet_attributes/config_group_ids')
22
+
23
+ param :puppet_attributes, Hash do
24
+ param :environment_id, String, desc: N_('ID of associated puppet Environment')
25
+ param :puppetclass_ids, Array, desc: N_('IDs of associated Puppetclasses')
26
+ param :config_group_ids, Array, desc: N_('IDs of associated ConfigGroups')
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ module PatchMethods
34
+ def resource_name(*attrs)
35
+ return 'foreman_puppet/environment' if attrs.first.is_a?(String) &&
36
+ attrs.first.start_with?('environment')
37
+ super(*attrs)
38
+ end
39
+
40
+ def allowed_nested_id
41
+ ids = super
42
+ ids << 'environment_id' if ForemanPuppet.extracted_from_core?
43
+ ids.uniq
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,58 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module HostgroupsControllerExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ PUPPET_AJAX_REQUESTS = %w[environment_selected puppetclass_parameters].freeze
7
+
8
+ included do
9
+ alias_method :ajax_request_for_puppet_hostgroup_extensions, :ajax_request
10
+ alias_method :taxonomy_scope_for_puppet_hostgroup_extensions, :taxonomy_scope
11
+
12
+ before_action :ajax_request_for_puppet_hostgroup_extensions, only: PUPPET_AJAX_REQUESTS
13
+ before_action :taxonomy_scope_for_puppet_hostgroup_extensions, only: PUPPET_AJAX_REQUESTS
14
+
15
+ helper ForemanPuppet::HostsAndHostgroupsHelper
16
+ helper ForemanPuppet::PuppetclassesHelper
17
+ helper ForemanPuppet::PuppetclassLookupKeysHelper
18
+
19
+ # So we override the core actions, once Puppet is extracted, we can use module methods directly
20
+ prepend Actions
21
+ end
22
+
23
+ module Actions
24
+ def nest
25
+ super
26
+ @hostgroup.puppetclasses = @parent.puppetclasses
27
+ end
28
+
29
+ def environment_selected
30
+ env_id = params[:environment_id] || params[:hostgroup][:environment_id] || params.dig(:hostgroup, :puppet_attributes, :environment_id)
31
+ return not_found if env_id.to_i.positive? && !(@environment = ForemanPuppet::Environment.find(env_id))
32
+
33
+ refresh_hostgroup
34
+ puppet = @hostgroup.puppet || @hostgroup.build_puppet
35
+ puppet.environment = @environment if @environment
36
+
37
+ puppet.puppetclasses = ForemanPuppet::Puppetclass.where(id: params[:hostgroup][:puppetclass_ids])
38
+ puppet.config_groups = ForemanPuppet::ConfigGroup.where(id: params[:hostgroup][:config_group_ids])
39
+ render partial: 'hosts/form_puppet_enc_tab', locals: { host_or_hostgroup: @hostgroup, resource_type: :hostgroup }
40
+ end
41
+
42
+ def puppetclass_parameters
43
+ ::Taxonomy.as_taxonomy @organization, @location do
44
+ render partial: 'foreman_puppet/puppetclasses/classes_parameters',
45
+ locals: { obj: refresh_hostgroup }
46
+ end
47
+ end
48
+
49
+ # params facets fix:
50
+ def hostgroup_params(top_level_hash = controller_name.singularize)
51
+ filter = self.class.hostgroup_params_filter
52
+ filter.permit(puppet_attributes: {})
53
+ filter.filter_params(params, parameter_filter_context, top_level_hash)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,228 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module HostsControllerExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ PUPPETMASTER_ACTIONS = %i[externalNodes lookup].freeze
7
+ PUPPET_AJAX_REQUESTS = %w[hostgroup_or_environment_selected puppetclass_parameters].freeze
8
+
9
+ MULTIPLE_EDIT_ACTIONS = %w[select_multiple_environment update_multiple_environment
10
+ select_multiple_puppet_proxy update_multiple_puppet_proxy
11
+ select_multiple_puppet_ca_proxy update_multiple_puppet_ca_proxy].freeze
12
+
13
+ included do
14
+ add_smart_proxy_filters PUPPETMASTER_ACTIONS, features: ['Puppet']
15
+ alias_method :ajax_request_for_puppet_host_extensions, :ajax_request
16
+
17
+ before_action :ajax_request_for_puppet_host_extensions, only: PUPPET_AJAX_REQUESTS
18
+ before_action :taxonomy_scope_for_puppet_host_extensions, only: PUPPET_AJAX_REQUESTS
19
+ before_action :find_multiple_for_puppet_host_extensions, only: MULTIPLE_EDIT_ACTIONS
20
+ before_action :validate_multiple_puppet_proxy, only: :update_multiple_puppet_proxy
21
+ before_action :validate_multiple_puppet_ca_proxy, only: :update_multiple_puppet_ca_proxy
22
+
23
+ define_action_permission %w[externalNodes], :view
24
+ define_action_permission MULTIPLE_EDIT_ACTIONS, :edit
25
+
26
+ set_callback :set_class_variables, :after, :set_puppet_class_variables
27
+
28
+ helper ForemanPuppet::HostsHelper
29
+ helper ForemanPuppet::HostsAndHostgroupsHelper
30
+ helper ForemanPuppet::PuppetclassesHelper
31
+ helper ForemanPuppet::PuppetclassLookupKeysHelper
32
+ end
33
+
34
+ # TODO: unless ForemanPuppet.extracted_from_core?
35
+ def select_multiple_puppet_proxy_hosts_path(*args)
36
+ foreman_puppet.select_multiple_puppet_proxy_hosts_path(*args)
37
+ end
38
+
39
+ def hostgroup_or_environment_selected
40
+ refresh_host
41
+ set_class_variables(@host)
42
+ ::Taxonomy.as_taxonomy @organization, @location do
43
+ if @environment || @hostgroup
44
+ render partial: 'hosts/form_puppet_enc_tab', locals: { host_or_hostgroup: @host, resource_type: :host }
45
+ else
46
+ logger.info 'environment_id or hostgroup_id is required to render puppetclasses'
47
+ end
48
+ end
49
+ end
50
+
51
+ def puppetclass_parameters
52
+ ::Taxonomy.as_taxonomy @organization, @location do
53
+ render partial: 'foreman_puppet/puppetclasses/classes_parameters', locals: { obj: refresh_host }
54
+ end
55
+ end
56
+
57
+ def select_multiple_environment
58
+ end
59
+
60
+ def update_multiple_environment
61
+ # simple validations
62
+ if params[:environment].nil? || (id = params['environment']['id']).nil?
63
+ error _('No environment selected!')
64
+ redirect_to(foreman_puppet.select_multiple_environment_hosts_path)
65
+ return
66
+ end
67
+
68
+ ev = ForemanPuppet::Environment.find_by(id: id)
69
+
70
+ # update the hosts
71
+ @hosts.each do |host|
72
+ puppet = host.puppet || host.build_puppet
73
+ puppet.environment = id == 'inherit' && host.hostgroup.present? ? host.hostgroup.puppet&.environment : ev
74
+ host.save(validate: false)
75
+ end
76
+
77
+ success _('Updated hosts: changed environment')
78
+ redirect_back_or_to hosts_path
79
+ end
80
+
81
+ # returns a yaml file ready to use for puppet external nodes script
82
+ # expected a fqdn parameter to provide hostname to lookup
83
+ # see example script in extras directory
84
+ # will return HTML error codes upon failure
85
+ # rubocop:disable Naming/MethodName
86
+ def externalNodes
87
+ certname = params[:name].to_s
88
+ @host ||= resource_base.find_by certname: certname
89
+ @host ||= resource_base.friendly.find certname
90
+ unless @host
91
+ not_found
92
+ return
93
+ end
94
+
95
+ begin
96
+ respond_to do |format|
97
+ # don't break lines in yaml to support Ruby < 1.9.3
98
+ # Remove the HashesWithIndifferentAccess using 'deep_stringify_keys',
99
+ # then we turn it into YAML
100
+ host_info_yaml = @host.info.deep_stringify_keys.to_yaml(line_width: -1)
101
+ format.html { render html: ActionController::Base.helpers.tag.pre(ERB::Util.html_escape(host_info_yaml)) }
102
+ format.yml { render plain: host_info_yaml }
103
+ end
104
+ rescue StandardError => e
105
+ Foreman::Logging.exception("Failed to generate external nodes for #{@host}", e)
106
+ render plain: _('Unable to generate output, Check log files'),
107
+ status: :precondition_failed
108
+ end
109
+ end
110
+ # rubocop:enable Naming/MethodName
111
+
112
+ # TODO: seems to be useless
113
+ def environment_from_param
114
+ # simple validations
115
+ if params[:environment].nil? || (id = params['environment']['id']).nil?
116
+ error _('No environment selected!')
117
+ redirect_to(foreman_puppet.select_multiple_environment_hosts_path)
118
+ return
119
+ end
120
+
121
+ id
122
+ end
123
+
124
+ def get_environment_id(env_params)
125
+ env_params['id'] if env_params
126
+ end
127
+
128
+ def get_environment_for(host, id)
129
+ if id == 'inherit' && host.hostgroup.present?
130
+ host.hostgroup.environment
131
+ else
132
+ ForemanPuppet::Environment.find_by(id: id)
133
+ end
134
+ end
135
+
136
+ def validate_multiple_puppet_proxy
137
+ validate_multiple_proxy(foreman_puppet.select_multiple_puppet_proxy_hosts_path)
138
+ end
139
+
140
+ def validate_multiple_puppet_ca_proxy
141
+ validate_multiple_proxy(select_multiple_puppet_ca_proxy_hosts_path)
142
+ end
143
+
144
+ def validate_multiple_proxy(redirect_path)
145
+ if params[:proxy].nil? || (proxy_id = params[:proxy][:proxy_id]).nil?
146
+ error _('No proxy selected!')
147
+ redirect_to(redirect_path)
148
+ return false
149
+ end
150
+
151
+ if proxy_id.present? && !::SmartProxy.find_by(id: proxy_id)
152
+ error _('Invalid proxy selected!')
153
+ redirect_to(redirect_path)
154
+ false
155
+ end
156
+ end
157
+
158
+ def update_multiple_proxy(proxy_type, host_update_method)
159
+ proxy_id = params[:proxy][:proxy_id]
160
+ proxy = (SmartProxy.find_by(id: proxy_id) if proxy_id)
161
+
162
+ failed_hosts = {}
163
+
164
+ @hosts.each do |host|
165
+ host.send(host_update_method, proxy)
166
+ host.save!
167
+ rescue StandardError => e
168
+ failed_hosts[host.name] = e
169
+ message = format(_('Failed to set %{proxy_type} proxy for %{host}.'), host: host, proxy_type: proxy_type)
170
+ Foreman::Logging.exception(message, e)
171
+ end
172
+
173
+ if failed_hosts.empty?
174
+ if proxy
175
+ success format(_('The %{proxy_type} proxy of the selected hosts was set to %{proxy_name}'), proxy_name: proxy.name, proxy_type: proxy_type)
176
+ else
177
+ success format(_('The %{proxy_type} proxy of the selected hosts was cleared.'), proxy_type: proxy_type)
178
+ end
179
+ else
180
+ error format(n_('The %{proxy_type} proxy could not be set for host: %{host_names}.',
181
+ 'The %{proxy_type} puppet ca proxy could not be set for hosts: %{host_names}',
182
+ failed_hosts.count), proxy_type: proxy_type, host_names: failed_hosts.map { |h, err| "#{h} (#{err})" }.to_sentence)
183
+ end
184
+ redirect_back_or_to hosts_path
185
+ end
186
+
187
+ def handle_proxy_messages(errors, proxy, proxy_type)
188
+ if errors.empty?
189
+ if proxy
190
+ success format(_('The %{proxy_type} proxy of the selected hosts was set to %{proxy_name}.'), proxy_name: proxy.name, proxy_type: proxy_type)
191
+ else
192
+ success format(_('The %{proxy_type} proxy of the selected hosts was cleared.'), proxy_type: proxy_type)
193
+ end
194
+ else
195
+ error format(n_('The %{proxy_type} proxy could not be set for host: %{host_names}.',
196
+ 'The %{proxy_type} puppet ca proxy could not be set for hosts: %{host_names}',
197
+ errors.count), proxy_type: proxy_type, host_names: errors.map { |h, err| "#{h} (#{err})" }.to_sentence)
198
+ end
199
+ end
200
+
201
+ def select_multiple_puppet_proxy
202
+ end
203
+
204
+ def update_multiple_puppet_proxy
205
+ update_multiple_proxy(_('Puppet'), :puppet_proxy=)
206
+ end
207
+
208
+ def select_multiple_puppet_ca_proxy
209
+ end
210
+
211
+ def update_multiple_puppet_ca_proxy
212
+ update_multiple_proxy(_('Puppet CA'), :puppet_ca_proxy=)
213
+ end
214
+
215
+ def set_puppet_class_variables
216
+ @environment = @host.puppet&.environment
217
+ end
218
+
219
+ def taxonomy_scope_for_puppet_host_extensions
220
+ taxonomy_scope
221
+ end
222
+
223
+ def find_multiple_for_puppet_host_extensions
224
+ find_multiple
225
+ end
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,11 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module OperatingsystemsController
4
+ extend ActiveSupport::Concern
5
+
6
+ def clone
7
+ @operatingsystem = @operatingsystem.deep_clone include: %i[media ptables architectures puppetclasses os_parameters], except: [:title]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,75 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module ParametersHost
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ class << self
8
+ prepend PatchedClassMethods
9
+ end
10
+
11
+ prepend PatchedMethods
12
+ end
13
+
14
+ module PatchedClassMethods
15
+ def host_params_filter
16
+ super.tap do |filter|
17
+ filter.permit :environment_id, :environment_name, :environment,
18
+ config_groups: [], config_group_ids: [], config_group_names: [],
19
+ puppetclasses: [], puppetclass_ids: [], puppetclass_names: []
20
+
21
+ # TODO: bring to core - this is what facets should do, but does not
22
+ filter.permit(puppet_attributes: {})
23
+ end
24
+ end
25
+ end
26
+
27
+ module PatchedMethods
28
+ def host_params(*attrs)
29
+ params = super(*attrs)
30
+
31
+ process_deprecated_environment_params!(params)
32
+ process_deprecated_attributes!(params)
33
+ params
34
+ end
35
+
36
+ def process_deprecated_environment_params!(params)
37
+ env_id = env_name = env = nil
38
+ if ForemanPuppet.extracted_from_core?
39
+ env_id = params.delete(:environment_id)
40
+ env_name = params.delete(:environment_name)
41
+ env = params.delete(:environment)
42
+ else
43
+ env_id = params[:environment_id]
44
+ env_name = params[:environment_name]
45
+ env = params[:environment]
46
+ end
47
+
48
+ return unless env_id || env_name || env
49
+ ::Foreman::Deprecation.api_deprecation_warning('param host[environment_*] has been deprecated in favor of host[puppet_attributes][environment_*]')
50
+
51
+ params[:puppet_attributes] ||= {}
52
+ params[:puppet_attributes][:environment_id] ||= env_id if env_id
53
+ params[:puppet_attributes][:environment_name] ||= env_name if env_name
54
+ params[:puppet_attributes][:environment] ||= env if env
55
+ end
56
+
57
+ def process_deprecated_attributes!(params)
58
+ %w[puppetclass config_group].each do |relation|
59
+ ids = params.delete("#{relation}_ids".to_sym)
60
+ names = params.delete("#{relation}_names".to_sym)
61
+ plains = params.delete(relation.pluralize.to_sym)
62
+
63
+ next unless ids || names || plains
64
+ ::Foreman::Deprecation.api_deprecation_warning("param host[#{relation}_*] has been deprecated in favor of host[puppet_attributes][#{relation}_*]")
65
+
66
+ params[:puppet_attributes] ||= {}
67
+ params[:puppet_attributes]["#{relation}_ids".to_sym] ||= ids if ids
68
+ params[:puppet_attributes]["#{relation}_names".to_sym] ||= names if names
69
+ params[:puppet_attributes][relation.pluralize.to_sym] ||= plains if plains
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,70 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module ParametersHostgroup
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ class << self
8
+ prepend PatchedClassMethods
9
+ end
10
+
11
+ prepend PatchedMethods
12
+ end
13
+
14
+ module PatchedClassMethods
15
+ def hostgroup_params_filter
16
+ super.tap do |filter|
17
+ filter.permit :environment_id, :environment_name,
18
+ config_group_ids: [], config_group_names: [],
19
+ puppetclass_ids: [], puppetclass_names: []
20
+
21
+ # TODO: bring to core - this is what facets should do, but does not
22
+ filter.permit(puppet_attributes: {})
23
+ end
24
+ end
25
+ end
26
+
27
+ module PatchedMethods
28
+ def hostgroup_params(*attrs)
29
+ params = super(*attrs)
30
+
31
+ process_deprecated_hostgroup_environment_params!(params)
32
+ process_deprecated_hostgroup_attributes!(params)
33
+ params
34
+ end
35
+
36
+ def process_deprecated_hostgroup_environment_params!(params)
37
+ env_id = env_name = nil
38
+ if ForemanPuppet.extracted_from_core?
39
+ env_id = params.delete(:environment_id)
40
+ env_name = params.delete(:environment_name)
41
+ else
42
+ env_id = params[:environment_id]
43
+ env_name = params[:environment_name]
44
+ end
45
+
46
+ return unless env_id || env_name
47
+ ::Foreman::Deprecation.api_deprecation_warning('param hostgroup[environment_*] has been deprecated in favor of hostgroup[puppet_attributes][environment_*]')
48
+
49
+ params[:puppet_attributes] ||= {}
50
+ params[:puppet_attributes][:environment_id] ||= env_id if env_id
51
+ params[:puppet_attributes][:environment_name] ||= env_name if env_name
52
+ end
53
+
54
+ def process_deprecated_hostgroup_attributes!(params)
55
+ %w[puppetclass config_group].each do |relation|
56
+ ids = params.delete("#{relation}_ids")
57
+ names = params.delete("#{relation}_names")
58
+
59
+ next unless ids || names
60
+ ::Foreman::Deprecation.api_deprecation_warning("param hostgroup[#{relation}_*] has been deprecated in favor of hostgroup[puppet_attributes][#{relation}_*]")
61
+
62
+ params[:puppet_attributes] ||= {}
63
+ params[:puppet_attributes]["#{relation}_ids".to_sym] ||= ids if ids
64
+ params[:puppet_attributes]["#{relation}_names".to_sym] ||= names if names
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end