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
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # ForemanPuppet
2
+
3
+ Adds Puppet External node classification funcionality for [Foreman](theforeman.org).
4
+
5
+ ## Installation
6
+
7
+ See [How_to_Install_a_Plugin](http://projects.theforeman.org/projects/foreman/wiki/How_to_Install_a_Plugin)
8
+ for how to install Foreman plugins
9
+
10
+ ## Usage
11
+
12
+ *Usage here*
13
+
14
+ ## TODO
15
+
16
+ *Todo list here*
17
+
18
+ ## Contributing
19
+
20
+ Fork and send a Pull Request. Thanks!
21
+
22
+ ## Copyright
23
+
24
+ Copyright (c) *year* *your name*
25
+
26
+ This program is free software: you can redistribute it and/or modify
27
+ it under the terms of the GNU General Public License as published by
28
+ the Free Software Foundation, either version 3 of the License, or
29
+ (at your option) any later version.
30
+
31
+ This program is distributed in the hope that it will be useful,
32
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
33
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34
+ GNU General Public License for more details.
35
+
36
+ You should have received a copy of the GNU General Public License
37
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
38
+
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env rake
2
+ foreman_path = Dir['./foreman', '../foreman', '../../foreman']
3
+ foreman_path.select! { |path| File.exist?(File.join(path, 'Gemfile')) }
4
+ raise 'Foreman have not been found!' unless foreman_path.any?
5
+ foreman_path = File.expand_path(foreman_path.first, __dir__)
6
+
7
+ # for migrations to work from 'app:db:migrate'
8
+ task 'dynflow:migrate' => 'app:dynflow:migrate'
9
+ task 'parameters:reset_priorities' => 'app:parameters:reset_priorities'
10
+
11
+ APP_RAKEFILE = File.expand_path('Rakefile', foreman_path)
12
+ load 'rails/tasks/engine.rake'
13
+
14
+ Bundler::GemHelper.install_tasks
15
+
16
+ require 'rake/testtask'
17
+ require 'rspec/core'
18
+ require 'rspec/core/rake_task'
19
+
20
+ Rake::TestTask.new(test: 'app:db:test:prepare') do |t|
21
+ t.libs << 'test'
22
+ t.libs << File.join(foreman_path, 'lib')
23
+ t.libs << File.join(foreman_path, 'test')
24
+ t.pattern = 'test/**/*_test.rb'
25
+ t.verbose = false
26
+ end
27
+
28
+ desc 'Run all specs in spec directory (excluding plugin specs)'
29
+ RSpec::Core::RakeTask.new(spec: 'app:db:test:prepare')
30
+
31
+ task default: :test
@@ -0,0 +1,117 @@
1
+ #hostclasses,
2
+ .classes li,
3
+ .classes li a {
4
+ list-style-type: none;
5
+ margin-right: 0.5em;
6
+ text-decoration: none;
7
+ }
8
+
9
+ .classes > ul {
10
+ margin-bottom: 0;
11
+ margin-left: -42px;
12
+ }
13
+
14
+ .puppetclass,
15
+ .puppetclass li,
16
+ .selected_puppetclass,
17
+ .selected_puppetclass li,
18
+ .config_group,
19
+ .config_group li,
20
+ .selected_config_group,
21
+ .selected_config_group li {
22
+ a {
23
+ color: #333;
24
+ }
25
+
26
+ a.glyphicon-minus-sign,
27
+ a.glyphicon-plus-sign {
28
+ float: right;
29
+ margin-right: 10px;
30
+ }
31
+ }
32
+
33
+ a.config_group_name {
34
+ color: #428bca;
35
+ }
36
+
37
+ #params #inherited_puppetclasses_parameters {
38
+ .overridden .param_name {
39
+ font-weight: bold;
40
+ }
41
+
42
+ .btn-override {
43
+ border-top-right-radius: 4px;
44
+ border-bottom-right-radius: 4px;
45
+ }
46
+ }
47
+ }
48
+
49
+ .lookup_values {
50
+ .fields {
51
+ border-top: 1px dotted lightgrey;
52
+ padding-top: 10px;
53
+
54
+ &:nth-child(3) {
55
+ border-top: none;
56
+ }
57
+
58
+ .btn-hide {
59
+ display: none;
60
+ }
61
+ }
62
+ }
63
+
64
+ .lookup-keys-container {
65
+ h6 {
66
+ margin-top: 0;
67
+ }
68
+
69
+ .help-block {
70
+ margin: 0;
71
+ }
72
+
73
+ input[type=checkbox] {
74
+ margin-top: 8px;
75
+ }
76
+
77
+ .nav a.btn-success:focus {
78
+ background-color: #5cb85c;
79
+ border-color: #4cae4c;
80
+ }
81
+
82
+ .matcher .matcher-group {
83
+ display: block;
84
+ }
85
+
86
+ .matcher_value {
87
+ width: 60%;
88
+ }
89
+ }
90
+
91
+ .selected_puppetclass.unavailable a {
92
+ color: $color-pf-black-400;
93
+ }
94
+
95
+ #inherited_ids {
96
+ padding-left: 0;
97
+ }
98
+
99
+ #inherited-classes .panel-title {
100
+ font-size: 1.6rem;
101
+ }
102
+
103
+ #puppet_klasses ul {
104
+ padding-left: 40px;
105
+ padding-right: 20px;
106
+ }
107
+
108
+ .puppetclass_group,
109
+ .config_group_group {
110
+ li {
111
+ a {
112
+ i.glyphicon {
113
+ font-size: 11px;
114
+ }
115
+ }
116
+ }
117
+ }
@@ -0,0 +1,139 @@
1
+ module ForemanPuppet
2
+ module Api
3
+ module ImportPuppetclassesCommonController
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ before_action :find_required_puppet_proxy, only: [:import_puppetclasses]
8
+ before_action :find_environment_id, only: [:import_puppetclasses]
9
+ before_action :find_optional_environment, only: [:import_puppetclasses]
10
+ end
11
+
12
+ extend Apipie::DSL::Concern
13
+
14
+ api :POST, '/smart_proxies/:id/import_puppetclasses', N_('Import puppet classes from puppet proxy')
15
+ api :POST, '/smart_proxies/:smart_proxy_id/environments/:id/import_puppetclasses', N_('Import puppet classes from puppet proxy for an environment')
16
+ api :POST, '/environments/:environment_id/smart_proxies/:id/import_puppetclasses', N_('Import puppet classes from puppet proxy for an environment')
17
+ param :id, :identifier, required: true
18
+ param :smart_proxy_id, String, required: false
19
+ param :environment_id, String, required: false
20
+ param :dryrun, :bool, required: false
21
+ param :except, String, required: false, desc: N_('Optional comma-delimited string'\
22
+ "containing either 'new', 'updated', or 'obsolete'"\
23
+ 'that is used to limit the imported Puppet classes')
24
+
25
+ def import_puppetclasses
26
+ return unless changed_environments
27
+ # @changed is returned from the method above changed_environments
28
+ # Limit actions by setting @changed[kind] to empty hash {} (no action)
29
+ # if :except parameter is passed with comma deliminator import_puppetclasses?except=new,obsolete
30
+ if params[:except].present?
31
+ kinds = params[:except].split(',')
32
+ kinds.each do |kind|
33
+ @changed[kind] = {} if PuppetClassImporter::CHANGE_KINDS.include?(kind)
34
+ end
35
+ end
36
+
37
+ # DRYRUN - /import_puppetclasses?dryrun - do not run PuppetClassImporter
38
+ rabl_template = @environment ? 'show' : 'index'
39
+ if params.key?('dryrun') && ['false', false].exclude?(params['dryrun'])
40
+ render("foreman_puppet/api/v#{api_version}/import_puppetclasses/#{rabl_template}", layout: 'api/layouts/import_puppetclasses_layout')
41
+ return
42
+ end
43
+
44
+ # RUN PuppetClassImporter
45
+ if (errors = PuppetClassImporter.new.obsolete_and_new(@changed)).empty?
46
+ render("foreman_puppet/api/v#{api_version}/import_puppetclasses/#{rabl_template}", layout: 'api/layouts/import_puppetclasses_layout')
47
+ else
48
+ render json: {
49
+ message: _('Failed to update the environments and Puppet classes from the on-disk puppet installation: %s') % errors.join(', '),
50
+ }, status: :internal_server_error
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def changed_environments
57
+ @changed = import_changed_proxy_environments
58
+ return false unless @changed
59
+
60
+ # PuppetClassImporter expects [kind][env] to be in json format
61
+ PuppetClassImporter::CHANGE_KINDS.each do |kind|
62
+ next if (envs = @changed[kind]).empty?
63
+ envs.keys.sort.each do |env|
64
+ @changed[kind][env] = @changed[kind][env].to_json
65
+ end
66
+ end
67
+
68
+ # @environments is used in import_puppletclasses/index.json.rabl
69
+ environment_names = (@changed['new'].keys + @changed['obsolete'].keys +
70
+ @changed['updated'].keys + @changed['ignored'].keys).uniq.sort
71
+
72
+ @environments = environment_names.map do |name|
73
+ OpenStruct.new(name: name)
74
+ end
75
+
76
+ unless @environments.any?
77
+ render_message(_('No changes to your environments detected'))
78
+ return false
79
+ end
80
+
81
+ @environments.any?
82
+ end
83
+
84
+ def import_changed_proxy_environments
85
+ opts = { url: @smart_proxy.url }
86
+ opts[:env] = if @environment.present?
87
+ @environment.name
88
+ else
89
+ @env_id
90
+ end
91
+ @importer = PuppetClassImporter.new(opts)
92
+ changed = @importer.changes
93
+
94
+ # check if environemnt id passed in URL is name of NEW environment in puppetmaster that doesn't exist in db
95
+ if @environment || (changed['new'].key?(@env_id) && (@environment ||= OpenStruct.new(name: @env_id)))
96
+ # only return :keys equal to @environment in @changed hash
97
+ %w[new obsolete updated ignored].each do |kind|
98
+ changed[kind].slice!(@environment.name) unless changed[kind].empty?
99
+ end
100
+ end
101
+ changed
102
+ rescue StandardError => e
103
+ if /puppet feature/i.match?(e.message)
104
+ msg = _('No proxy found to import classes from, ensure that the smart proxy has the Puppet feature enabled.')
105
+ else
106
+ Foreman::Logging.exception('Error while importing Puppet classes', e)
107
+ msg = e.message
108
+ end
109
+ render_message(msg, status: :internal_server_error)
110
+ nil
111
+ end
112
+
113
+ def find_required_puppet_proxy
114
+ id = params.key?('smart_proxy_id') ? params['smart_proxy_id'] : params['id']
115
+ @smart_proxy = SmartProxy.authorized(:view_smart_proxies).find(id)
116
+ unless @smart_proxy && SmartProxy.with_features('Puppet').exists?(id: @smart_proxy.id)
117
+ not_found _('No proxy found to import classes from, ensure that the smart proxy has the Puppet feature enabled.')
118
+ end
119
+ @smart_proxy
120
+ end
121
+
122
+ def find_environment_id
123
+ @env_id = if params.key?('environment_id')
124
+ params['environment_id']
125
+ elsif params.key?('smart_proxy_id') && params['id'].present?
126
+ params['id']
127
+ end
128
+ @env_id
129
+ end
130
+
131
+ def find_optional_environment
132
+ @environment = Environment.authorized(:view_environments).find(@env_id) if @env_id
133
+ rescue ActiveRecord::RecordNotFound => e
134
+ Foreman::Logging.exception('Resource not found', e, level: :debug)
135
+ nil
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,61 @@
1
+ # various methods which gets added to the puppetclasses and environments controllers
2
+
3
+ module ForemanPuppet
4
+ module EnvironmentsImport
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ before_action :importer, only: :import_environments
9
+ end
10
+
11
+ def import_environments
12
+ @changed = importer.changes
13
+
14
+ if @importer.ignored_boolean_environment_names?
15
+ warning(_('Ignored environment names resulting in booleans found. Please quote strings like true/false and yes/no in config/ignored_environments.yml'))
16
+ end
17
+
18
+ if !@changed['new'].empty? || !@changed['obsolete'].empty? || !@changed['updated'].empty?
19
+ render 'common/_puppetclasses_or_envs_changed'
20
+ else
21
+ info_message = _('No changes to your environments detected')
22
+
23
+ list_ignored(info_message, @changed['ignored']) if @changed['ignored'].present?
24
+
25
+ info info_message
26
+ redirect_to controller: controller_path
27
+ end
28
+ end
29
+
30
+ def obsolete_and_new
31
+ if (errors = PuppetClassImporter.new.obsolete_and_new(params[:changed])).empty?
32
+ success _('Successfully updated environments and Puppet classes from the on-disk Puppet installation')
33
+ else
34
+ error _('Failed to update environments and Puppet classes from the on-disk Puppet installation: %s') % errors.to_sentence
35
+ end
36
+ redirect_to controller: controller_path
37
+ end
38
+
39
+ private
40
+
41
+ def importer
42
+ opts = params[:proxy].blank? ? {} : { url: SmartProxy.find(params[:proxy]).try(:url) }
43
+ opts[:env] = params[:env] if params[:env].present?
44
+ @importer = PuppetClassImporter.new(opts)
45
+ rescue ::Foreman::Exception => _e
46
+ error _("No smart proxy was found to import environments from, ensure that at least one smart proxy is registered with the 'puppet' feature")
47
+ redirect_to controller: controller_path
48
+ end
49
+
50
+ def list_ignored(info_message, ignored)
51
+ environments = ignored.select { |_, values| values.first == '_ignored_' }
52
+ ignore_info = if environments.any?
53
+ _('Ignored environments: %s') % environments.keys.to_sentence
54
+ else
55
+ _('Ignored classes in the environments: %s') % ignored.keys.to_sentence
56
+ end
57
+
58
+ info_message << "\n" << ignore_info
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,40 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module ApiHostgroupsController
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, '/puppetclasses/:puppetclass_id/hostgroups', N_('List all host groups for a Puppet class'), {})
12
+
13
+ apipie_update_methods([:index]) do
14
+ param :puppetclass_id, String, desc: N_('ID of Puppetclass')
15
+ end
16
+
17
+ apipie_update_methods(%i[create update]) do
18
+ param :hostgroup, Hash do
19
+ param :environment_id, String, desc: N_('Deprecated in favor of hostgroup/puppet_attributes/environment_id')
20
+ param :puppetclass_ids, Array, desc: N_('Deprecated in favor of hostgroup/puppet_attributes/puppetclass_ids')
21
+ param :config_group_ids, Array, desc: N_('Deprecated in favor of hostgroup/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 allowed_nested_id
35
+ super | ['puppetclass_id']
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,23 @@
1
+ module ForemanPuppet
2
+ module Extensions
3
+ module ApiTemplateCombinationsController
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ if ForemanPuppet.extracted_from_core?
8
+ apipie_update_methods(%i[index create show update]) do
9
+ param :environment_id, String, desc: N_('ID of environment')
10
+ end
11
+ end
12
+
13
+ prepend PrependedMethods
14
+ end
15
+
16
+ module PrependedMethods
17
+ def allowed_nested_id
18
+ super | ['environment_id']
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end