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,36 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module Queries
4
+ class HostPuppetQueryTest < GraphQLQueryTestCase
5
+ let(:query) do
6
+ <<-GRAPHQL
7
+ query (
8
+ $id: String!
9
+ ) {
10
+ host(id: $id) {
11
+ id
12
+ environment {
13
+ id
14
+ }
15
+ puppetProxy {
16
+ id
17
+ }
18
+ }
19
+ }
20
+ GRAPHQL
21
+ end
22
+
23
+ let(:host) { FactoryBot.create(:host, :with_puppet_enc) }
24
+ let(:global_id) { Foreman::GlobalId.encode('Host', host.id) }
25
+ let(:variables) { { id: global_id } }
26
+
27
+ test 'fetching host attributes' do
28
+ skip 'GraphQL is TODO'
29
+ host_data = result['data']['host']
30
+ assert_empty result['errors']
31
+ assert_equal global_id, host_data['id']
32
+ assert_record host.environment, host_data['environment']
33
+ assert_record host.puppet_proxy, host_data['puppetProxy']
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module Queries
4
+ class HostgroupPuppetQueryTest < GraphQLQueryTestCase
5
+ let(:query) do
6
+ <<-GRAPHQL
7
+ query (
8
+ $id: String!
9
+ ) {
10
+ hostgroup(id: $id) {
11
+ id
12
+ environment {
13
+ id
14
+ }
15
+ puppetProxy {
16
+ id
17
+ }
18
+ }
19
+ }
20
+ GRAPHQL
21
+ end
22
+
23
+ let(:hostgroup) { FactoryBot.create(:hostgroup, :with_puppet_enc) }
24
+ let(:global_id) { Foreman::GlobalId.encode('Hostgroup', hostgroup.id) }
25
+ let(:variables) { { id: global_id } }
26
+
27
+ test 'fetching host attributes' do
28
+ skip 'GraphQL is TODO'
29
+ hostgroup_data = result['data']['hostgroup']
30
+ assert_empty result['errors']
31
+ assert_equal global_id, hostgroup_data['id']
32
+ assert_record hostgroup.puppet.environment, hostgroup_data['environment']
33
+ assert_record hostgroup.puppet_proxy, hostgroup_data['puppetProxy']
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,791 @@
1
+ require 'test_puppet_helper'
2
+
3
+ module ForemanPuppet
4
+ class PuppetInfoTest < ActiveSupport::TestCase
5
+ let(:environment) { FactoryBot.create(:environment) }
6
+ let(:puppetclass) { FactoryBot.create(:puppetclass, environments: [environment]) }
7
+ let(:puppetclass_two) { FactoryBot.create(:puppetclass, environments: [environment]) }
8
+ let(:key_lookup_path) { "fqdn\norganization,location\nhostgroup\nos" }
9
+ let(:puppetclass_lookup_key) do
10
+ FactoryBot.create(
11
+ :puppetclass_lookup_key,
12
+ puppetclass: puppetclass,
13
+ default_value: 'secret',
14
+ path: key_lookup_path
15
+ )
16
+ end
17
+
18
+ def setup
19
+ @host = FactoryBot.build(:host, :with_puppet_enc,
20
+ location: taxonomies(:location1),
21
+ organization: taxonomies(:organization1),
22
+ operatingsystem: operatingsystems(:redhat),
23
+ puppetclasses: [puppetclass],
24
+ environment: environment)
25
+ puppetclass_lookup_key
26
+ end
27
+
28
+ test 'enc_should_return_param_default_value' do
29
+ enc = HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters
30
+ assert_equal 'secret', enc[puppetclass.name][puppetclass_lookup_key.key]
31
+ end
32
+
33
+ test 'enc_should_return_updated_cluster_param' do
34
+ assert_equal "fqdn\norganization,location\nhostgroup\nos", puppetclass_lookup_key.path
35
+ assert_equal taxonomies(:location1), @host.location
36
+ assert_equal taxonomies(:organization1), @host.organization
37
+
38
+ value = as_admin do
39
+ LookupValue.create! lookup_key_id: puppetclass_lookup_key.id,
40
+ match: "organization=#{taxonomies(:organization1)},location=#{taxonomies(:location1)}",
41
+ value: 'test',
42
+ omit: false
43
+ end
44
+ enc = HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters
45
+
46
+ assert_equal value.value, enc[puppetclass.name][puppetclass_lookup_key.key]
47
+ end
48
+
49
+ test '#enc should return hash of class to nil for classes without parameters' do
50
+ env = FactoryBot.build(:environment)
51
+ pc = FactoryBot.build(:puppetclass, environments: [env])
52
+ assert_equal({ pc.name => nil }, get_classparam(env, pc).puppetclass_parameters)
53
+ end
54
+
55
+ test '#enc should not return class parameters where override is false' do
56
+ pc = FactoryBot.create(:puppetclass, :with_parameters, environments: [environment])
57
+ assert_not pc.class_params.first.override
58
+ assert_equal({ pc.name => nil }, get_classparam(environment, pc).puppetclass_parameters)
59
+ end
60
+
61
+ test '#enc should return default value of class parameters without lookup_values' do
62
+ pc = FactoryBot.create(:puppetclass, environments: [environment])
63
+ lkey = FactoryBot.create(:puppetclass_lookup_key, puppetclass: pc, default_value: 'test')
64
+ assert_equal({ pc.name => { lkey.key => lkey.default_value } }, get_classparam(environment, pc).puppetclass_parameters)
65
+ end
66
+
67
+ test '#enc should return override value of class parameters' do
68
+ pc = FactoryBot.create(:puppetclass, :with_parameters, environments: [environment]).reload
69
+ lkey = FactoryBot.create(:puppetclass_lookup_key, puppetclass: pc, path: 'comment', overrides: { 'comment=override' => 'overridden value' })
70
+ classparam = get_classparam(environment, pc)
71
+ host = classparam.send(:host)
72
+ host.expects(:comment).returns('override')
73
+ assert_equal({ pc.name => { lkey.key => 'overridden value' } }, classparam.puppetclass_parameters)
74
+ end
75
+
76
+ test "#values_hash should contain element's name and managed element for puppet key" do
77
+ lkey = FactoryBot.create(:puppetclass_lookup_key, :with_override, puppetclass: puppetclass)
78
+ host = FactoryBot.build_stubbed(:host, :with_puppet_enc, environment: environment, puppetclasses: [puppetclass])
79
+ Classification::MatchesGenerator.any_instance.expects(:attr_to_value).with('comment').returns('override')
80
+
81
+ assert_equal(
82
+ {
83
+ lkey.id => {
84
+ lkey.key => {
85
+ value: 'overridden value',
86
+ element: 'comment',
87
+ element_name: 'override',
88
+ managed: false,
89
+ },
90
+ },
91
+ },
92
+ Classification::ValuesHashQuery.values_hash(host, LookupKey.where(id: [lkey])).raw
93
+ )
94
+
95
+ Classification::MatchesGenerator.any_instance.unstub(:attr_to_value)
96
+ end
97
+
98
+ test '#enc should not return class parameters when default value should use puppet default' do
99
+ lkey = FactoryBot.create(:puppetclass_lookup_key, :with_override, :with_omit,
100
+ puppetclass: puppetclass)
101
+
102
+ enc = HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters
103
+ assert enc[puppetclass.name][lkey.key].nil?
104
+ end
105
+
106
+ test '#enc should not return class parameters when lookup_value should use puppet default' do
107
+ lkey = FactoryBot.create(:puppetclass_lookup_key, :with_override, :with_omit,
108
+ puppetclass: puppetclass, path: "location\ncomment")
109
+ as_admin do
110
+ LookupValue.create! lookup_key_id: lkey.id,
111
+ match: "location=#{taxonomies(:location1)}",
112
+ value: 'test',
113
+ omit: true
114
+ end
115
+
116
+ enc = HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters
117
+
118
+ assert enc[puppetclass.name][lkey.key].nil?
119
+ end
120
+
121
+ test '#enc should return class parameters when default value and lookup_values should not use puppet default' do
122
+ lkey = FactoryBot.create(:puppetclass_lookup_key, :with_override, omit: false,
123
+ puppetclass: puppetclass,
124
+ path: "location\ncomment")
125
+ lvalue = as_admin do
126
+ LookupValue.create! lookup_key_id: lkey.id,
127
+ match: "location=#{taxonomies(:location1)}",
128
+ value: 'test',
129
+ omit: false
130
+ end
131
+
132
+ enc = HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters
133
+
134
+ assert_equal lvalue.value, enc[puppetclass.name][lkey.key]
135
+ end
136
+
137
+ test '#enc should not return class parameters when merged lookup_values and default are all using puppet default' do
138
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
139
+ key_type: 'hash', merge_overrides: true,
140
+ default_value: {}, path: "organization\nos\nlocation",
141
+ puppetclass: puppetclass)
142
+
143
+ as_admin do
144
+ LookupValue.create! lookup_key_id: key.id,
145
+ match: "location=#{taxonomies(:location1)}",
146
+ value: { example: { a: 'test' } },
147
+ omit: true
148
+ end
149
+ as_admin do
150
+ LookupValue.create! lookup_key_id: key.id,
151
+ match: "organization=#{taxonomies(:organization1)}",
152
+ value: { example: { b: 'test2' } },
153
+ omit: true
154
+ end
155
+
156
+ as_admin do
157
+ LookupValue.create! lookup_key_id: key.id,
158
+ match: "os=#{operatingsystems(:redhat)}",
159
+ value: { example: { a: 'test3' } },
160
+ omit: true
161
+ end
162
+
163
+ enc = HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters
164
+
165
+ assert enc[puppetclass.name][key.key].nil?
166
+ end
167
+
168
+ test '#enc should return correct merged override to host when multiple overrides for inherited hostgroups exist' do
169
+ FactoryBot.create(:setting,
170
+ name: 'matchers_inheritance',
171
+ value: true)
172
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
173
+ key_type: 'array', merge_overrides: true,
174
+ path: "organization\nhostgroup\nlocation",
175
+ puppetclass: puppetclass_two)
176
+
177
+ parent_hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc,
178
+ puppetclasses: [puppetclass_two],
179
+ environment: environment)
180
+ child_hostgroup = FactoryBot.build(:hostgroup, :with_puppet_enc, parent: parent_hostgroup)
181
+
182
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment, organization: taxonomies(:organization1),
183
+ puppetclasses: [puppetclass], hostgroup: child_hostgroup)
184
+
185
+ as_admin do
186
+ LookupValue.create! lookup_key_id: key.id,
187
+ match: "hostgroup=#{parent_hostgroup}",
188
+ value: ['parent'],
189
+ omit: false
190
+ LookupValue.create! lookup_key_id: key.id,
191
+ match: "organization=#{taxonomies(:organization1)}",
192
+ value: ['org'],
193
+ omit: false
194
+ end
195
+
196
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
197
+
198
+ assert_equal %w[org parent], enc[puppetclass_two.name][key.key]
199
+ end
200
+
201
+ test '#enc should return correct merged override to host when multiple overrides for inherited organizations exist' do
202
+ FactoryBot.create(:setting,
203
+ name: 'matchers_inheritance',
204
+ value: true)
205
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
206
+ key_type: 'array', merge_overrides: true,
207
+ path: "location\norganization\nhostgroup",
208
+ puppetclass: puppetclass_two)
209
+
210
+ parent_org = taxonomies(:organization1)
211
+ child_org = taxonomies(:organization2)
212
+ child_org.update(parent: parent_org)
213
+
214
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment,
215
+ puppetclasses: [puppetclass_two],
216
+ organization: child_org,
217
+ location: taxonomies(:location1))
218
+
219
+ as_admin do
220
+ LookupValue.create! lookup_key_id: key.id,
221
+ match: "organization=#{parent_org}",
222
+ value: ['parent'],
223
+ omit: false
224
+ LookupValue.create! lookup_key_id: key.id,
225
+ match: "location=#{taxonomies(:location1)}",
226
+ value: ['loc'],
227
+ omit: false
228
+ end
229
+
230
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
231
+
232
+ assert_equal %w[loc parent], enc[puppetclass_two.name][key.key]
233
+ end
234
+
235
+ test '#enc should return correct merged override to host when multiple overrides for inherited locations exist' do
236
+ FactoryBot.create(:setting,
237
+ name: 'matchers_inheritance',
238
+ value: true)
239
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
240
+ key_type: 'array', merge_overrides: true,
241
+ path: "organization\nhostgroup\nlocation",
242
+ puppetclass: puppetclass_two)
243
+
244
+ parent_loc = taxonomies(:location1)
245
+ child_loc = taxonomies(:location2)
246
+ child_loc.update(parent: parent_loc)
247
+
248
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment,
249
+ puppetclasses: [puppetclass_two],
250
+ organization: taxonomies(:organization1),
251
+ location: child_loc)
252
+
253
+ as_admin do
254
+ LookupValue.create! lookup_key_id: key.id,
255
+ match: "location=#{parent_loc}",
256
+ value: ['parent'],
257
+ omit: false
258
+ LookupValue.create! lookup_key_id: key.id,
259
+ match: "organization=#{taxonomies(:organization1)}",
260
+ value: ['org'],
261
+ omit: false
262
+ end
263
+
264
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
265
+
266
+ assert_equal %w[org parent], enc[puppetclass_two.name][key.key]
267
+ end
268
+
269
+ test '#enc should return correct merged override to host when multiple overrides for inherited hostgroups exist' do
270
+ FactoryBot.create(:setting,
271
+ name: 'matchers_inheritance',
272
+ value: true)
273
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
274
+ key_type: 'array', merge_overrides: true,
275
+ path: "organization\nhostgroup\nlocation",
276
+ puppetclass: puppetclass_two)
277
+
278
+ parent_hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc,
279
+ puppetclasses: [puppetclass_two],
280
+ environment: environment)
281
+ child_hostgroup = FactoryBot.build(:hostgroup, :with_puppet_enc, parent: parent_hostgroup)
282
+
283
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment, organization: taxonomies(:organization1),
284
+ puppetclasses: [puppetclass], hostgroup: child_hostgroup)
285
+
286
+ as_admin do
287
+ LookupValue.create! lookup_key_id: key.id,
288
+ match: "hostgroup=#{parent_hostgroup}",
289
+ value: ['parent'],
290
+ omit: false
291
+ LookupValue.create! lookup_key_id: key.id,
292
+ match: "hostgroup=#{child_hostgroup}",
293
+ value: ['child'],
294
+ omit: false
295
+ LookupValue.create! lookup_key_id: key.id,
296
+ match: "organization=#{taxonomies(:organization1)}",
297
+ value: ['org'],
298
+ omit: false
299
+ end
300
+
301
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
302
+
303
+ assert_equal %w[org child parent], enc[puppetclass_two.name][key.key]
304
+ end
305
+
306
+ test '#enc should return correct merged override to host when multiple overrides for inherited organizations exist' do
307
+ FactoryBot.create(:setting,
308
+ name: 'matchers_inheritance',
309
+ value: true)
310
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
311
+ key_type: 'array', merge_overrides: true,
312
+ path: "location\norganization\nhostgroup",
313
+ puppetclass: puppetclass_two)
314
+
315
+ parent_org = taxonomies(:organization1)
316
+ child_org = taxonomies(:organization2)
317
+ child_org.update(parent: parent_org)
318
+
319
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment,
320
+ puppetclasses: [puppetclass_two],
321
+ organization: child_org,
322
+ location: taxonomies(:location1))
323
+
324
+ as_admin do
325
+ LookupValue.create! lookup_key_id: key.id,
326
+ match: "organization=#{parent_org}",
327
+ value: ['parent'],
328
+ omit: false
329
+ LookupValue.create! lookup_key_id: key.id,
330
+ match: "organization=#{child_org}",
331
+ value: ['child'],
332
+ omit: false
333
+ LookupValue.create! lookup_key_id: key.id,
334
+ match: "location=#{taxonomies(:location1)}",
335
+ value: ['loc'],
336
+ omit: false
337
+ end
338
+
339
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
340
+
341
+ assert_equal %w[loc child parent], enc[puppetclass_two.name][key.key]
342
+ end
343
+
344
+ test '#enc should return correct merged override to host when multiple overrides for inherited locations exist' do
345
+ FactoryBot.create(:setting,
346
+ name: 'matchers_inheritance',
347
+ value: true)
348
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
349
+ key_type: 'array', merge_overrides: true,
350
+ path: "organization\nhostgroup\nlocation",
351
+ puppetclass: puppetclass_two)
352
+
353
+ parent_loc = taxonomies(:location1)
354
+ child_loc = taxonomies(:location2)
355
+ child_loc.update(parent: parent_loc)
356
+
357
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment,
358
+ puppetclasses: [puppetclass_two],
359
+ organization: taxonomies(:organization1),
360
+ location: child_loc)
361
+
362
+ as_admin do
363
+ LookupValue.create! lookup_key_id: key.id,
364
+ match: "location=#{parent_loc}",
365
+ value: ['parent'],
366
+ omit: false
367
+ LookupValue.create! lookup_key_id: key.id,
368
+ match: "location=#{child_loc}",
369
+ value: ['child'],
370
+ omit: false
371
+ LookupValue.create! lookup_key_id: key.id,
372
+ match: "organization=#{taxonomies(:organization1)}",
373
+ value: ['org'],
374
+ omit: false
375
+ end
376
+
377
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
378
+
379
+ assert_equal %w[org child parent], enc[puppetclass_two.name][key.key]
380
+ end
381
+
382
+ test '#enc should return correct override to host when multiple overrides for inherited hostgroups exist' do
383
+ FactoryBot.create(:setting,
384
+ name: 'matchers_inheritance',
385
+ value: true)
386
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
387
+ merge_overrides: false,
388
+ path: "organization\nhostgroup\nlocation",
389
+ puppetclass: puppetclass_two)
390
+
391
+ parent_hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc,
392
+ puppetclasses: [puppetclass_two],
393
+ environment: environment)
394
+ child_hostgroup = FactoryBot.build(:hostgroup, :with_puppet_enc, parent: parent_hostgroup)
395
+
396
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment, organization: taxonomies(:organization1),
397
+ puppetclasses: [puppetclass], hostgroup: child_hostgroup)
398
+
399
+ value2 = as_admin do
400
+ LookupValue.create! lookup_key_id: key.id,
401
+ match: "hostgroup=#{parent_hostgroup}",
402
+ value: 'parent',
403
+ omit: false
404
+ LookupValue.create! lookup_key_id: key.id,
405
+ match: "hostgroup=#{child_hostgroup}",
406
+ value: 'child',
407
+ omit: false
408
+ LookupValue.create! lookup_key_id: key.id,
409
+ match: "organization=#{taxonomies(:organization1)}",
410
+ value: 'org',
411
+ omit: false
412
+ end
413
+
414
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
415
+
416
+ assert_equal value2.value, enc[puppetclass_two.name][key.key]
417
+ end
418
+
419
+ test '#enc should return correct override to host when multiple overrides for inherited organizations exist' do
420
+ FactoryBot.create(:setting,
421
+ name: 'matchers_inheritance',
422
+ value: true)
423
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
424
+ merge_overrides: false,
425
+ path: "location\norganization\nhostgroup",
426
+ puppetclass: puppetclass_two)
427
+
428
+ parent_org = taxonomies(:organization1)
429
+ child_org = taxonomies(:organization2)
430
+ child_org.update(parent: parent_org)
431
+
432
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment, organization: child_org,
433
+ puppetclasses: [puppetclass_two], location: taxonomies(:location1))
434
+
435
+ value2 = as_admin do
436
+ LookupValue.create! lookup_key_id: key.id,
437
+ match: "organization=#{parent_org}",
438
+ value: 'parent',
439
+ omit: false
440
+ LookupValue.create! lookup_key_id: key.id,
441
+ match: "organization=#{child_org}",
442
+ value: 'child',
443
+ omit: false
444
+ LookupValue.create! lookup_key_id: key.id,
445
+ match: "location=#{taxonomies(:location1)}",
446
+ value: 'loc',
447
+ omit: false
448
+ end
449
+
450
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
451
+
452
+ assert_equal value2.value, enc[puppetclass_two.name][key.key]
453
+ end
454
+
455
+ test '#enc should return correct override to host when multiple overrides for inherited locations exist' do
456
+ FactoryBot.create(:setting,
457
+ name: 'matchers_inheritance',
458
+ value: true)
459
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
460
+ merge_overrides: false,
461
+ path: "organization\nlocation\nhostgroup",
462
+ puppetclass: puppetclass_two)
463
+
464
+ parent_loc = taxonomies(:location1)
465
+ child_loc = taxonomies(:location2)
466
+ child_loc.update(parent: parent_loc)
467
+
468
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment, organization: taxonomies(:organization1),
469
+ puppetclasses: [puppetclass_two], location: child_loc)
470
+
471
+ value2 = as_admin do
472
+ LookupValue.create! lookup_key_id: key.id,
473
+ match: "location=#{parent_loc}",
474
+ value: 'parent',
475
+ omit: false
476
+ LookupValue.create! lookup_key_id: key.id,
477
+ match: "location=#{child_loc}",
478
+ value: 'child',
479
+ omit: false
480
+ LookupValue.create! lookup_key_id: key.id,
481
+ match: "organization=#{taxonomies(:organization1)}",
482
+ value: 'org',
483
+ omit: false
484
+ end
485
+
486
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
487
+
488
+ assert_equal value2.value, enc[puppetclass_two.name][key.key]
489
+ end
490
+
491
+ test '#enc should return correct override to host when multiple overrides for inherited hostgroups exist' do
492
+ FactoryBot.create(:setting,
493
+ name: 'matchers_inheritance',
494
+ value: true)
495
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
496
+ merge_overrides: false,
497
+ path: "organization\nhostgroup\nlocation",
498
+ puppetclass: puppetclass_two)
499
+
500
+ parent_hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc,
501
+ puppetclasses: [puppetclass_two],
502
+ environment: environment)
503
+ child_hostgroup = FactoryBot.build(:hostgroup, parent: parent_hostgroup)
504
+
505
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment, puppetclasses: [puppetclass], hostgroup: child_hostgroup)
506
+
507
+ value2 = as_admin do
508
+ LookupValue.create! lookup_key_id: key.id,
509
+ match: "hostgroup=#{parent_hostgroup}",
510
+ value: 'parent',
511
+ omit: false
512
+ LookupValue.create! lookup_key_id: key.id,
513
+ match: "location=#{taxonomies(:location1)}",
514
+ value: 'loc',
515
+ omit: true
516
+ LookupValue.create! lookup_key_id: key.id,
517
+ match: "hostgroup=#{child_hostgroup}",
518
+ value: 'child',
519
+ omit: false
520
+ end
521
+
522
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
523
+
524
+ assert_equal value2.value, enc[puppetclass_two.name][key.key]
525
+ end
526
+
527
+ test '#enc should return correct override to host when multiple overrides for inherited organizations exist' do
528
+ FactoryBot.create(:setting,
529
+ name: 'matchers_inheritance',
530
+ value: true)
531
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
532
+ merge_overrides: false,
533
+ path: "organization\nhostgroup\nlocation",
534
+ puppetclass: puppetclass_two)
535
+
536
+ parent_org = taxonomies(:organization1)
537
+ child_org = taxonomies(:organization2)
538
+ child_org.update(parent: parent_org)
539
+
540
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment,
541
+ puppetclasses: [puppetclass_two],
542
+ organization: child_org,
543
+ location: taxonomies(:location1))
544
+
545
+ value2 = as_admin do
546
+ LookupValue.create! lookup_key_id: key.id,
547
+ match: "organization=#{parent_org}",
548
+ value: 'parent',
549
+ omit: false
550
+ LookupValue.create! lookup_key_id: key.id,
551
+ match: "location=#{taxonomies(:location1)}",
552
+ value: 'loc',
553
+ omit: true
554
+ LookupValue.create! lookup_key_id: key.id,
555
+ match: "organization=#{child_org}",
556
+ value: 'child',
557
+ omit: false
558
+ end
559
+
560
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
561
+
562
+ assert_equal value2.value, enc[puppetclass_two.name][key.key]
563
+ end
564
+
565
+ test '#enc should return correct override to host when multiple overrides for inherited locations exist' do
566
+ FactoryBot.create(:setting,
567
+ name: 'matchers_inheritance',
568
+ value: true)
569
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
570
+ merge_overrides: false,
571
+ path: "location\norganization\nhostgroup",
572
+ puppetclass: puppetclass_two)
573
+
574
+ parent_loc = taxonomies(:location1)
575
+ child_loc = taxonomies(:location2)
576
+ child_loc.update(parent: parent_loc)
577
+
578
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment,
579
+ puppetclasses: [puppetclass_two],
580
+ organization: taxonomies(:organization1),
581
+ location: child_loc)
582
+
583
+ value2 = as_admin do
584
+ LookupValue.create! lookup_key_id: key.id,
585
+ match: "location=#{parent_loc}",
586
+ value: 'parent',
587
+ omit: false
588
+ LookupValue.create! lookup_key_id: key.id,
589
+ match: "organization=#{taxonomies(:organization1)}",
590
+ value: 'org',
591
+ omit: true
592
+ LookupValue.create! lookup_key_id: key.id,
593
+ match: "location=#{child_loc}",
594
+ value: 'child',
595
+ omit: false
596
+ end
597
+
598
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
599
+
600
+ assert_equal value2.value, enc[puppetclass_two.name][key.key]
601
+ end
602
+
603
+ test 'enc should return correct values for multi-key matchers' do
604
+ key = FactoryBot.create(:puppetclass_lookup_key,
605
+ default_value: '',
606
+ path: "organization\norganization,location\nlocation",
607
+ puppetclass: puppetclass)
608
+
609
+ value2 = as_admin do
610
+ LookupValue.create! lookup_key_id: key.id,
611
+ match: "location=#{taxonomies(:location1)}",
612
+ value: 'test_incorrect',
613
+ omit: false
614
+ LookupValue.create! lookup_key_id: key.id,
615
+ match: "organization=#{taxonomies(:organization1)},location=#{taxonomies(:location1)}",
616
+ value: 'test_correct',
617
+ omit: false
618
+ end
619
+ enc = HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters
620
+ key.reload
621
+
622
+ assert_equal value2.value, enc[puppetclass.name][key.key]
623
+ end
624
+
625
+ test 'enc should return correct values for multi-key matchers with more specific first' do
626
+ key = FactoryBot.create(:puppetclass_lookup_key,
627
+ default_value: '',
628
+ path: "organization,location\norganization",
629
+ puppetclass: puppetclass)
630
+
631
+ value = as_admin do
632
+ LookupValue.create! lookup_key_id: key.id,
633
+ match: "organization=#{taxonomies(:organization1)},location=#{taxonomies(:location1)}",
634
+ value: 'test_correct',
635
+ omit: false
636
+ end
637
+ as_admin do
638
+ LookupValue.create! lookup_key_id: key.id,
639
+ match: "organization=#{taxonomies(:organization1)}",
640
+ value: 'test_incorrect',
641
+ omit: false
642
+ end
643
+ enc = HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters
644
+
645
+ assert_equal value.value, enc[puppetclass.name][key.key]
646
+ end
647
+
648
+ test 'enc should return correct values for multi-key matchers with hostgroup inheritance' do
649
+ key = FactoryBot.create(:puppetclass_lookup_key, omit: true,
650
+ merge_overrides: false,
651
+ path: "hostgroup,organization\nlocation",
652
+ puppetclass: puppetclass_two)
653
+
654
+ parent_hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc,
655
+ puppetclasses: [puppetclass_two],
656
+ environment: environment)
657
+ child_hostgroup = FactoryBot.build(:hostgroup, :with_puppet_enc, parent: parent_hostgroup)
658
+
659
+ host = FactoryBot.create(:host, :with_puppet_enc, environment: environment,
660
+ location: taxonomies(:location1), organization: taxonomies(:organization1),
661
+ puppetclasses: [puppetclass], hostgroup: child_hostgroup)
662
+
663
+ as_admin do
664
+ LookupValue.create! lookup_key_id: key.id,
665
+ match: "hostgroup=#{parent_hostgroup},organization=#{taxonomies(:organization1)}",
666
+ value: 'parent',
667
+ omit: false
668
+ end
669
+ value2 = as_admin do
670
+ LookupValue.create! lookup_key_id: key.id,
671
+ match: "hostgroup=#{child_hostgroup},organization=#{taxonomies(:organization1)}",
672
+ value: 'child',
673
+ omit: false
674
+ end
675
+
676
+ as_admin do
677
+ LookupValue.create! lookup_key_id: key.id,
678
+ match: "location=#{taxonomies(:location1)}",
679
+ value: 'loc',
680
+ omit: false
681
+ end
682
+
683
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
684
+ key.reload
685
+ assert_equal value2.value, enc[puppetclass_two.name][key.key]
686
+ end
687
+
688
+ test 'smart class parameter should accept string with erb for arrays and evaluate it properly' do
689
+ key = FactoryBot.create(:puppetclass_lookup_key,
690
+ key_type: 'array', merge_overrides: false,
691
+ default_value: '<%= [1,2] %>', path: "organization\nos\nlocation",
692
+ puppetclass: puppetclass)
693
+ assert_equal [1, 2], HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters[puppetclass.name][key.key]
694
+
695
+ as_admin do
696
+ LookupValue.create! lookup_key_id: key.id,
697
+ match: "location=#{taxonomies(:location1)}",
698
+ value: '<%= [2,3] %>',
699
+ omit: false
700
+ end
701
+ as_admin do
702
+ LookupValue.create! lookup_key_id: key.id,
703
+ match: "organization=#{taxonomies(:organization1)}",
704
+ value: '<%= [3,4] %>',
705
+ omit: false
706
+ end
707
+ as_admin do
708
+ LookupValue.create! lookup_key_id: key.id,
709
+ match: "os=#{operatingsystems(:redhat)}",
710
+ value: '<%= [4,5] %>',
711
+ omit: false
712
+ end
713
+
714
+ key.reload
715
+
716
+ assert_equal({ key.id => { key.key => { value: '<%= [3,4] %>',
717
+ element: 'organization',
718
+ element_name: 'Organization 1',
719
+ managed: false } } },
720
+ Classification::ValuesHashQuery.values_hash(@host, LookupKey.where(id: [key])).raw)
721
+ assert_equal [3, 4], HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters[puppetclass.name][key.key]
722
+ end
723
+
724
+ test 'enc should return correct values for multi-key matchers' do
725
+ hostgroup = FactoryBot.build(:hostgroup, :with_puppet_enc)
726
+
727
+ key = FactoryBot.create(:puppetclass_lookup_key, :with_omit,
728
+ merge_overrides: false,
729
+ path: "hostgroup,organization\nlocation",
730
+ puppetclass: puppetclass_two)
731
+
732
+ parent_hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc,
733
+ puppetclasses: [puppetclass_two],
734
+ environment: environment)
735
+ hostgroup.update(parent: parent_hostgroup)
736
+
737
+ FactoryBot.build(:lookup_value, lookup_key_id: key.id, match: "hostgroup=#{parent_hostgroup},organization=#{taxonomies(:organization1)}")
738
+ lv = FactoryBot.create(:lookup_value, lookup_key_id: key.id, match: "hostgroup=#{hostgroup},organization=#{taxonomies(:organization1)}")
739
+ FactoryBot.build(:lookup_value, lookup_key_id: key.id, match: "location=#{taxonomies(:location1)}")
740
+
741
+ host = FactoryBot.build_stubbed(:host, :with_puppet_enc, hostgroup: hostgroup,
742
+ environment: environment,
743
+ location: taxonomies(:location1),
744
+ organization: taxonomies(:organization1))
745
+
746
+ enc = HostInfoProviders::PuppetInfo.new(host).puppetclass_parameters
747
+ key.reload
748
+ assert_equal lv.value, enc[puppetclass_two.name][key.key]
749
+ end
750
+
751
+ test 'smart class parameter with erb values is validated after erb is evaluated' do
752
+ key = FactoryBot.create(:puppetclass_lookup_key,
753
+ merge_overrides: false,
754
+ default_value: '<%= "a" %>', path: "organization\nos\nlocation",
755
+ puppetclass: puppetclass,
756
+ validator_type: 'list', validator_rule: 'b')
757
+
758
+ assert_raise RuntimeError do
759
+ HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters[puppetclass.name][key.key]
760
+ end
761
+
762
+ key.update(default_value: '<%= "b" %>')
763
+ assert_equal 'b', HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters[puppetclass.name][key.key]
764
+
765
+ as_admin do
766
+ LookupValue.create! lookup_key_id: key.id,
767
+ match: "location=#{taxonomies(:location1)}",
768
+ value: '<%= "c" %>',
769
+ omit: false
770
+ end
771
+
772
+ key.reload
773
+
774
+ assert_raise RuntimeError do
775
+ HostInfoProviders::PuppetInfo.new(@host).puppetclass_parameters[puppetclass.name][key.key]
776
+ end
777
+ end
778
+
779
+ private
780
+
781
+ def get_classparam(env, classes)
782
+ host = Host.new
783
+ puppet_mock = mock('HostPuppetFacet')
784
+ puppet_mock.stubs(environment: env, environment_id: env.id)
785
+ host.stubs(:puppet).returns(puppet_mock)
786
+ puppet_mock.expects(:classes).returns(Array.wrap(classes))
787
+ puppet_mock.expects(:puppetclass_ids).returns(Array.wrap(classes).map(&:id))
788
+ HostInfoProviders::PuppetInfo.new(host)
789
+ end
790
+ end
791
+ end