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
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