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.
- checksums.yaml +7 -0
- data/LICENSE +619 -0
- data/README.md +38 -0
- data/Rakefile +31 -0
- data/app/assets/stylesheets/foreman_puppet.scss +117 -0
- data/app/controllers/concerns/foreman_puppet/api/import_puppetclasses_common_controller.rb +139 -0
- data/app/controllers/concerns/foreman_puppet/environments_import.rb +61 -0
- data/app/controllers/concerns/foreman_puppet/extensions/api_hostgroups_controller.rb +40 -0
- data/app/controllers/concerns/foreman_puppet/extensions/api_template_combinations_controller.rb +23 -0
- data/app/controllers/concerns/foreman_puppet/extensions/api_v2_hosts_controller.rb +48 -0
- data/app/controllers/concerns/foreman_puppet/extensions/hostgroups_controller_extensions.rb +58 -0
- data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +228 -0
- data/app/controllers/concerns/foreman_puppet/extensions/operatingsystems_controller.rb +11 -0
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +75 -0
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_hostgroup.rb +70 -0
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_template_combination.rb +21 -0
- data/app/controllers/concerns/foreman_puppet/parameters/config_group.rb +17 -0
- data/app/controllers/concerns/foreman_puppet/parameters/environment.rb +21 -0
- data/app/controllers/concerns/foreman_puppet/parameters/puppetclass.rb +24 -0
- data/app/controllers/concerns/foreman_puppet/parameters/puppetclass_lookup_key.rb +24 -0
- data/app/controllers/foreman_puppet/api/v2/base_controller.rb +26 -0
- data/app/controllers/foreman_puppet/api/v2/config_groups_controller.rb +57 -0
- data/app/controllers/foreman_puppet/api/v2/environments_controller.rb +91 -0
- data/app/controllers/foreman_puppet/api/v2/host_classes_controller.rb +59 -0
- data/app/controllers/foreman_puppet/api/v2/hostgroup_classes_controller.rb +46 -0
- data/app/controllers/foreman_puppet/api/v2/lookups_common_controller.rb +114 -0
- data/app/controllers/foreman_puppet/api/v2/override_values_controller.rb +99 -0
- data/app/controllers/foreman_puppet/api/v2/puppetclasses_controller.rb +99 -0
- data/app/controllers/foreman_puppet/api/v2/smart_class_parameters_controller.rb +76 -0
- data/app/controllers/foreman_puppet/config_groups_controller.rb +46 -0
- data/app/controllers/foreman_puppet/environments_controller.rb +51 -0
- data/app/controllers/foreman_puppet/puppet_smart_proxies_controller.rb +39 -0
- data/app/controllers/foreman_puppet/puppetclass_lookup_keys_controller.rb +33 -0
- data/app/controllers/foreman_puppet/puppetclasses_controller.rb +113 -0
- data/app/controllers/foreman_puppet/react_controller.rb +19 -0
- data/app/helpers/concerns/foreman_puppet/template_renderer_scope.rb +14 -0
- data/app/helpers/foreman_puppet/environments_helper.rb +17 -0
- data/app/helpers/foreman_puppet/hosts_and_hostgroups_helper.rb +96 -0
- data/app/helpers/foreman_puppet/hosts_helper.rb +32 -0
- data/app/helpers/foreman_puppet/puppet_smart_proxies_helper.rb +8 -0
- data/app/helpers/foreman_puppet/puppetclass_lookup_keys_helper.rb +135 -0
- data/app/helpers/foreman_puppet/puppetclasses_and_environments_helper.rb +55 -0
- data/app/helpers/foreman_puppet/puppetclasses_helper.rb +59 -0
- data/app/helpers/foreman_puppet/template_combinations_helper.rb +33 -0
- data/app/models/concerns/foreman_puppet/extensions/host.rb +88 -0
- data/app/models/concerns/foreman_puppet/extensions/hostgroup.rb +40 -0
- data/app/models/concerns/foreman_puppet/extensions/nic_managed.rb +11 -0
- data/app/models/concerns/foreman_puppet/extensions/operatingsystem.rb +11 -0
- data/app/models/concerns/foreman_puppet/extensions/provisioning_template.rb +64 -0
- data/app/models/concerns/foreman_puppet/extensions/report.rb +11 -0
- data/app/models/concerns/foreman_puppet/extensions/taxonomy.rb +19 -0
- data/app/models/concerns/foreman_puppet/extensions/template_combination.rb +23 -0
- data/app/models/concerns/foreman_puppet/extensions/user.rb +22 -0
- data/app/models/concerns/foreman_puppet/host_common.rb +90 -0
- data/app/models/concerns/foreman_puppet/puppet_lookup_value_extensions.rb +13 -0
- data/app/models/foreman_puppet/config_group.rb +45 -0
- data/app/models/foreman_puppet/config_group_class.rb +19 -0
- data/app/models/foreman_puppet/environment.rb +63 -0
- data/app/models/foreman_puppet/environment_class.rb +40 -0
- data/app/models/foreman_puppet/host_class.rb +23 -0
- data/app/models/foreman_puppet/host_config_group.rb +15 -0
- data/app/models/foreman_puppet/host_puppet_facet.rb +130 -0
- data/app/models/foreman_puppet/hostgroup_class.rb +23 -0
- data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +98 -0
- data/app/models/foreman_puppet/puppetclass.rb +132 -0
- data/app/models/foreman_puppet/puppetclass_lookup_key.rb +58 -0
- data/app/services/foreman_puppet/host_info_providers/config_groups_info.rb +10 -0
- data/app/services/foreman_puppet/host_info_providers/puppet_info.rb +92 -0
- data/app/services/foreman_puppet/input_type/puppet_parameter_input.rb +35 -0
- data/app/services/foreman_puppet/proxy_status/puppet.rb +17 -0
- data/app/services/foreman_puppet/puppet_class_importer.rb +355 -0
- data/app/views/api/v2/template_combinations/base.json.erb +9 -0
- data/app/views/foreman_puppet/api/v2/config_groups/base.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/config_groups/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/config_groups/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/config_groups/main.json.rabl +8 -0
- data/app/views/foreman_puppet/api/v2/config_groups/show.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/config_groups/update.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/environments/base.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/environments/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/environments/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/environments/main.json.rabl +5 -0
- data/app/views/foreman_puppet/api/v2/environments/show.json.rabl +15 -0
- data/app/views/foreman_puppet/api/v2/environments/update.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/host_puppet_facets/base.json.rabl +1 -0
- data/app/views/foreman_puppet/api/v2/host_puppet_facets/host_single.json.rabl +17 -0
- data/app/views/foreman_puppet/api/v2/host_puppet_facets/show.json.rabl +11 -0
- data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/base.json.rabl +5 -0
- data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/hostgroup_single.json.rabl +16 -0
- data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/show.json.rabl +11 -0
- data/app/views/foreman_puppet/api/v2/import_puppetclasses/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/import_puppetclasses/show.json.rabl +36 -0
- data/app/views/foreman_puppet/api/v2/override_values/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/override_values/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/override_values/show.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/override_values/update.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/base.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/index.json.rabl +4 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/list.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/main.json.rabl +5 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/show.json.rabl +15 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/update.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/base.json.rabl +4 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/destroy.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/main.json.rabl +23 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/show.json.rabl +19 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/update.json.rabl +3 -0
- data/app/views/foreman_puppet/config_groups/_config_group.html.erb +34 -0
- data/app/views/foreman_puppet/config_groups/_config_groups_selection.html.erb +36 -0
- data/app/views/foreman_puppet/config_groups/_form.html.erb +9 -0
- data/app/views/foreman_puppet/config_groups/edit.html.erb +3 -0
- data/app/views/foreman_puppet/config_groups/index.html.erb +31 -0
- data/app/views/foreman_puppet/config_groups/new.html.erb +3 -0
- data/app/views/foreman_puppet/config_groups/welcome.html.erb +12 -0
- data/app/views/foreman_puppet/environments/_form.html.erb +20 -0
- data/app/views/foreman_puppet/environments/edit.html.erb +8 -0
- data/app/views/foreman_puppet/environments/index.html.erb +32 -0
- data/app/views/foreman_puppet/environments/new.html.erb +7 -0
- data/app/views/foreman_puppet/environments/welcome.html.erb +16 -0
- data/app/views/foreman_puppet/layouts/application_react.html.erb +15 -0
- data/app/views/foreman_puppet/puppet_smart_proxies/_dashboard.html.erb +9 -0
- data/app/views/foreman_puppet/puppet_smart_proxies/_environments.html.erb +30 -0
- data/app/views/foreman_puppet/puppetclass_lookup_keys/edit.html.erb +3 -0
- data/app/views/foreman_puppet/puppetclass_lookup_keys/index.html.erb +22 -0
- data/app/views/foreman_puppet/puppetclass_lookup_keys/welcome.html.erb +9 -0
- data/app/views/foreman_puppet/puppetclasses/_class_parameters.html.erb +37 -0
- data/app/views/foreman_puppet/puppetclasses/_class_selection.html.erb +70 -0
- data/app/views/foreman_puppet/puppetclasses/_classes.html.erb +22 -0
- data/app/views/foreman_puppet/puppetclasses/_classes_in_groups.html.erb +5 -0
- data/app/views/foreman_puppet/puppetclasses/_classes_parameters.html.erb +16 -0
- data/app/views/foreman_puppet/puppetclasses/_form.html.erb +62 -0
- data/app/views/foreman_puppet/puppetclasses/_selected_classes.html.erb +4 -0
- data/app/views/foreman_puppet/puppetclasses/edit.html.erb +4 -0
- data/app/views/foreman_puppet/puppetclasses/index.html.erb +47 -0
- data/app/views/hosts/_form_puppet_enc_tab.html.erb +24 -0
- data/app/views/hosts/foreman_puppet/_form_main_tab_fields.html.erb +1 -0
- data/app/views/hosts/select_multiple_environment.html.erb +8 -0
- data/app/views/provisioning_templates/_combination.html.erb +5 -0
- data/app/views/provisioning_templates/_combinations.html.erb +6 -0
- data/app/views/smart_proxies/plugins/_puppet.html.erb +24 -0
- data/config/api_routes.rb +81 -0
- data/config/routes.rb +89 -0
- data/db/migrate/20101121140000_add_environment_to_template_combinations.foreman_puppet.rb +9 -0
- data/db/migrate/20200720123005_migrate_puppet_core_types.foreman_puppet.rb +19 -0
- data/db/migrate/20200722171017_create_host_puppet_facet.foreman_puppet.rb +10 -0
- data/db/migrate/20200803113531_create_hostgroup_puppet_facet.foreman_puppet.rb +10 -0
- data/db/migrate/20200803113803_migrate_environment_to_puppet_facet.foreman_puppet.rb +22 -0
- data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +29 -0
- data/db/migrate/20201125113903_migrate_puppetclasses_to_facets.foreman_puppet.rb +47 -0
- data/db/migrate_foreman/20090722141107_create_environments.rb +17 -0
- data/db/migrate_foreman/20120905095532_create_environment_classes.rb +15 -0
- data/db/migrate_foreman/20140407161817_create_config_groups.rb +9 -0
- data/db/migrate_foreman/20140407162007_create_config_group_classes.rb +10 -0
- data/db/migrate_foreman/20140407162059_create_host_config_groups.rb +11 -0
- data/db/migrate_foreman/20161205142618_delete_orphaned_smart_class_parameters.rb +10 -0
- data/db/migrate_foreman/20170109115157_fix_lookup_key_auditable_type.rb +15 -0
- data/db/migrate_foreman/20180816134832_cast_lookup_key_values.rb +35 -0
- data/db/migrate_foreman/20181023112532_add_environment_puppetclass_id.rb +7 -0
- data/db/migrate_foreman/20181224174419_add_index_to_environment_class_by_lookup_key_and_puppetclass.rb +6 -0
- data/db/seeds.d/111_puppet_proxy_feature.rb +8 -0
- data/lib/foreman_puppet.rb +10 -0
- data/lib/foreman_puppet/engine.rb +82 -0
- data/lib/foreman_puppet/register.rb +218 -0
- data/lib/foreman_puppet/version.rb +3 -0
- data/lib/tasks/foreman_puppet_tasks.rake +31 -0
- data/locale/Makefile +60 -0
- data/locale/action_names.rb +5 -0
- data/locale/en/foreman_puppet.edit.po +911 -0
- data/locale/en/foreman_puppet.po +690 -0
- data/locale/en/foreman_puppet.po.time_stamp +0 -0
- data/locale/foreman_puppet.pot +1076 -0
- data/locale/gemspec.rb +2 -0
- data/test/controllers/foreman_puppet/api/v2/config_groups_controller_test.rb +28 -0
- data/test/controllers/foreman_puppet/api/v2/environments_controller_test.rb +346 -0
- data/test/controllers/foreman_puppet/api/v2/host_classes_controller_test.rb +48 -0
- data/test/controllers/foreman_puppet/api/v2/hostgroup_classes_controller_test.rb +41 -0
- data/test/controllers/foreman_puppet/api/v2/hostgroups_controller_test.rb +79 -0
- data/test/controllers/foreman_puppet/api/v2/hosts_controller_test.rb +101 -0
- data/test/controllers/foreman_puppet/api/v2/lookups_common_controller_test.rb +29 -0
- data/test/controllers/foreman_puppet/api/v2/override_values_controller_test.rb +169 -0
- data/test/controllers/foreman_puppet/api/v2/puppetclasses_controller_test.rb +144 -0
- data/test/controllers/foreman_puppet/api/v2/smart_class_parameters_controller_test.rb +557 -0
- data/test/controllers/foreman_puppet/api/v2/template_combinations_controller_test.rb +81 -0
- data/test/controllers/foreman_puppet/config_groups_controller_test.rb +47 -0
- data/test/controllers/foreman_puppet/environments_controller_test.rb +230 -0
- data/test/controllers/foreman_puppet/hostgroups_controller_test.rb +72 -0
- data/test/controllers/foreman_puppet/hosts_controller_test.rb +346 -0
- data/test/controllers/foreman_puppet/puppet_smart_proxies_controller_test.rb +29 -0
- data/test/controllers/foreman_puppet/puppetclass_lookup_keys_controller_test.rb +59 -0
- data/test/controllers/foreman_puppet/puppetclasses_controller_test.rb +235 -0
- data/test/controllers/provisioning_templates_controller_test.rb +70 -0
- data/test/factories/foreman_puppet_factories.rb +134 -0
- data/test/factories/host_puppet_enhancements.rb +61 -0
- data/test/factories/proxy_puppet_enhancements.rb +33 -0
- data/test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb +65 -0
- data/test/helpers/foreman_puppet/puppetclasses_helper_test.rb +33 -0
- data/test/integration/foreman_puppet/environment_js_test.rb +27 -0
- data/test/integration/foreman_puppet/host_js_test.rb +371 -0
- data/test/integration/foreman_puppet/hostgroup_js_test.rb +100 -0
- data/test/integration/foreman_puppet/puppetclass_js_test.rb +37 -0
- data/test/integration/foreman_puppet/smartclass_parameter_js_test.rb +84 -0
- data/test/models/foreman_puppet/config_group_class_test.rb +9 -0
- data/test/models/foreman_puppet/config_group_test.rb +8 -0
- data/test/models/foreman_puppet/environment_test.rb +92 -0
- data/test/models/foreman_puppet/host_config_group_test.rb +39 -0
- data/test/models/foreman_puppet/host_puppet_facet_test.rb +116 -0
- data/test/models/foreman_puppet/host_test.rb +288 -0
- data/test/models/foreman_puppet/hostgroup_puppet_facet_test.rb +200 -0
- data/test/models/foreman_puppet/hostgroup_test.rb +14 -0
- data/test/models/foreman_puppet/lookup_value_test.rb +69 -0
- data/test/models/foreman_puppet/provisioning_template_test.rb +124 -0
- data/test/models/foreman_puppet/puppetclass_lookup_key_test.rb +81 -0
- data/test/models/foreman_puppet/puppetclass_test.rb +144 -0
- data/test/models/foreman_puppet/smart_proxy_test.rb +28 -0
- data/test/qraphql/queries/host_puppet_query_test.rb +36 -0
- data/test/qraphql/queries/hostgroup_puppet_query_test.rb +36 -0
- data/test/services/foreman_puppet/host_info_providers/puppet_info_test.rb +791 -0
- data/test/services/foreman_puppet/input_type/puppet_parameter_input_test.rb +14 -0
- data/test/test_puppet_helper.rb +30 -0
- data/test/unit/foreman_puppet/access_permissions_test.rb +16 -0
- data/test/unit/foreman_puppet/puppet_class_importer_test.rb +247 -0
- data/test/unit/foreman_puppet/template_rendering_test.rb +20 -0
- data/test/unit/foreman_puppet_test.rb +11 -0
- data/webpack/__mocks__/foremanReact/common/I18n.js +7 -0
- data/webpack/__mocks__/foremanReact/components/Layout/LayoutActions.js +2 -0
- data/webpack/__mocks__/foremanReact/readme.md +11 -0
- data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +10 -0
- data/webpack/__mocks__/foremanReact/redux/API/index.js +10 -0
- data/webpack/__mocks__/foremanReact/redux/actions/toasts.js +8 -0
- data/webpack/__mocks__/foremanReact/redux/index.js +1 -0
- data/webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js +5 -0
- data/webpack/fills_index.js +30 -0
- data/webpack/index.js +18 -0
- data/webpack/src/ForemanPuppet.js +11 -0
- data/webpack/src/Router/__snapshots__/routes.test.js.snap +3 -0
- data/webpack/src/Router/index.js +14 -0
- data/webpack/src/Router/routes.js +3 -0
- data/webpack/src/Router/routes.test.js +16 -0
- data/webpack/src/foreman_class_edit.js +224 -0
- data/webpack/src/foreman_puppet_host_form.js +140 -0
- data/webpack/src/foreman_puppet_host_form.test.js +65 -0
- data/webpack/src/index.js +1 -0
- data/webpack/src/reducers.js +7 -0
- metadata +340 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
require 'test_puppet_helper'
|
|
2
|
+
|
|
3
|
+
module ForemanPuppet
|
|
4
|
+
class HostTest < ActiveSupport::TestCase
|
|
5
|
+
test 'should read the Puppetserver URL from its proxy settings' do
|
|
6
|
+
host = FactoryBot.build_stubbed(:host)
|
|
7
|
+
assert_nil host.puppet_server_uri
|
|
8
|
+
assert_empty host.puppetmaster
|
|
9
|
+
|
|
10
|
+
proxy = FactoryBot.create(:puppet_smart_proxy, url: 'https://smartproxy.example.com:8443')
|
|
11
|
+
host.puppet_proxy = proxy
|
|
12
|
+
assert_equal 'https://smartproxy.example.com:8140', host.puppet_server_uri.to_s
|
|
13
|
+
assert_equal 'smartproxy.example.com', host.puppetmaster
|
|
14
|
+
|
|
15
|
+
features = {
|
|
16
|
+
'puppet' => {
|
|
17
|
+
settings: { puppet_url: 'https://puppet.example.com:8140' },
|
|
18
|
+
},
|
|
19
|
+
}
|
|
20
|
+
SmartProxyFeature.import_features(proxy, features)
|
|
21
|
+
assert_equal 'https://puppet.example.com:8140', host.puppet_server_uri.to_s
|
|
22
|
+
assert_equal 'puppet.example.com', host.puppetmaster
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test 'should find smart proxy ids' do
|
|
26
|
+
host = FactoryBot.create(:host, :with_puppet_enc)
|
|
27
|
+
puppet_id = host.puppet_proxy_id
|
|
28
|
+
|
|
29
|
+
res = Host.smart_proxy_ids(Host.where(id: [host.id]))
|
|
30
|
+
|
|
31
|
+
assert_includes res, puppet_id
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe '#search_for' do
|
|
35
|
+
let(:host) { FactoryBot.create(:host, :with_puppet_enc, :with_puppetclass) }
|
|
36
|
+
|
|
37
|
+
test 'can search hosts by smart proxy' do
|
|
38
|
+
proxy = FactoryBot.create(:puppet_and_ca_smart_proxy)
|
|
39
|
+
results = Host.search_for("smart_proxy = #{proxy.name}")
|
|
40
|
+
assert_equal 0, results.count
|
|
41
|
+
host.update(puppet_proxy_id: proxy.id)
|
|
42
|
+
results = Host.search_for("smart_proxy = #{proxy.name}")
|
|
43
|
+
assert_equal 1, results.count
|
|
44
|
+
assert_includes results, host
|
|
45
|
+
# the results should not change even if the host has multiple connections to same proxy
|
|
46
|
+
host.update(puppet_ca_proxy_id: proxy.id)
|
|
47
|
+
results2 = Host.search_for("smart_proxy = #{proxy.name}")
|
|
48
|
+
assert_equal results, results2
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
test 'can be found by puppetclass' do
|
|
52
|
+
host
|
|
53
|
+
result = Host.search_for("class = #{host.puppet.puppetclass_names.first}")
|
|
54
|
+
assert_includes result, host
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
test 'search by puppetclass returns only host within that puppetclass' do
|
|
58
|
+
host
|
|
59
|
+
puppetclass = FactoryBot.create(:puppetclass)
|
|
60
|
+
result = Host.search_for("class = #{puppetclass.name}")
|
|
61
|
+
assert_not_includes result, host
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test 'search hosts by inherited puppetclass from a hostgroup' do
|
|
65
|
+
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, :with_puppetclass)
|
|
66
|
+
host_with_hg = FactoryBot.create(:host, hostgroup: hostgroup)
|
|
67
|
+
result = Host.search_for("class = #{hostgroup.puppet.puppetclass_names.first}")
|
|
68
|
+
assert_includes result, host_with_hg
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
test 'can search hosts by inherited puppet class from a parent hostgroup' do
|
|
72
|
+
parent_hg = FactoryBot.create(:hostgroup, :with_puppet_enc, :with_puppetclass)
|
|
73
|
+
hg = FactoryBot.create(:hostgroup, parent: parent_hg)
|
|
74
|
+
host = FactoryBot.create(:host, hostgroup: hg)
|
|
75
|
+
result = Host.search_for("class = #{parent_hg.puppet.puppetclass_names.first}")
|
|
76
|
+
assert_equal 1, result.count
|
|
77
|
+
assert_includes result, host
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
test 'can search hosts by puppet class from config group in parent hostgroup' do
|
|
81
|
+
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc)
|
|
82
|
+
host = FactoryBot.create(:host, :with_puppet_enc, hostgroup: hostgroup, environment: hostgroup.environment)
|
|
83
|
+
config_group = FactoryBot.create(:config_group, :with_puppetclass)
|
|
84
|
+
hostgroup.puppet.config_groups << config_group
|
|
85
|
+
result = Host.search_for("class = #{config_group.puppetclass_names.first}")
|
|
86
|
+
assert_equal 1, result.count
|
|
87
|
+
assert_includes result, host
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
test 'can be found by config group' do
|
|
91
|
+
host.puppet.config_groups << FactoryBot.create(:config_group)
|
|
92
|
+
result = Host.search_for("config_group = #{host.puppet.config_group_names.first}")
|
|
93
|
+
assert_includes result, host
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
test 'search by config group returns only host within that config group' do
|
|
97
|
+
host
|
|
98
|
+
config_group = FactoryBot.create(:config_group)
|
|
99
|
+
result = Host.search_for("config_group = #{config_group.name}")
|
|
100
|
+
assert_not_includes result, host
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
test 'search by config_group of hostgroup' do
|
|
104
|
+
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, :with_config_group)
|
|
105
|
+
host_with_hg = FactoryBot.create(:host, hostgroup: hostgroup)
|
|
106
|
+
result = Host.search_for("config_group = #{hostgroup.puppet.config_group_names.first}")
|
|
107
|
+
assert_includes result, host_with_hg
|
|
108
|
+
assert_equal [host_with_hg.name], result.map(&:name)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe '#info puppet bits' do
|
|
113
|
+
test 'ENC YAML uses Classification::ClassParam for parameterized output' do
|
|
114
|
+
skip 'No idea whats wrong here'
|
|
115
|
+
host = FactoryBot.build_stubbed(:host, :with_environment)
|
|
116
|
+
classes = { 'myclass' => { 'myparam' => 'myvalue' } }
|
|
117
|
+
ForemanPuppet::HostInfoProviders::PuppetInfo.any_instance.expects(:puppetclass_parameters).returns(classes)
|
|
118
|
+
enc = host.info
|
|
119
|
+
assert_kind_of Hash, enc
|
|
120
|
+
assert_equal classes, enc['classes']
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
test '#info ENC YAML contains config_groups' do
|
|
124
|
+
host = FactoryBot.create(:host, :with_puppet_enc, :with_config_group)
|
|
125
|
+
enc = host.info
|
|
126
|
+
assert_includes(enc['parameters'].keys, 'foreman_config_groups')
|
|
127
|
+
assert_includes(enc['parameters']['foreman_config_groups'], host.puppet.config_group_names.first)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
test '#info ENC YAML contains parent hostgroup config_groups' do
|
|
131
|
+
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, :with_config_group)
|
|
132
|
+
host = FactoryBot.create(:host, :with_puppet_enc, :with_config_group, hostgroup: hostgroup)
|
|
133
|
+
enc = host.info
|
|
134
|
+
assert_equal(enc['parameters']['foreman_config_groups'], [host.puppet.config_group_names.first, hostgroup.puppet.config_group_names.first])
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
describe '#clone' do
|
|
139
|
+
test '#classes etc. on cloned host return the same' do
|
|
140
|
+
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, :with_config_group, :with_puppetclass)
|
|
141
|
+
host = FactoryBot.create(:host, :with_puppet_enc, :with_config_group, :with_puppetclass, :with_parameter, hostgroup: hostgroup, environment: hostgroup.environment)
|
|
142
|
+
copy = host.clone
|
|
143
|
+
assert_equal host.puppet.individual_puppetclasses.map(&:id), copy.puppet.individual_puppetclasses.map(&:id)
|
|
144
|
+
assert_equal host.puppet.classes_in_groups.map(&:id), copy.puppet.classes_in_groups.map(&:id)
|
|
145
|
+
assert_equal host.puppet.classes.map(&:id), copy.puppet.classes.map(&:id)
|
|
146
|
+
assert_equal host.puppet.available_puppetclasses.map(&:id), copy.puppet.available_puppetclasses.map(&:id)
|
|
147
|
+
assert_equal host.puppet.host_classes.map(&:puppetclass_id), copy.puppet.host_classes.map(&:puppetclass_id)
|
|
148
|
+
assert_equal host.puppet.host_config_groups.map(&:config_group_id), copy.puppet.host_config_groups.map(&:config_group_id)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
test 'should import from external nodes output' do
|
|
153
|
+
# create a dummy node
|
|
154
|
+
Parameter.destroy_all
|
|
155
|
+
env = FactoryBot.create(:environment)
|
|
156
|
+
host = FactoryBot.create(:host, :with_puppet_enc, environment: env, ip: '3.3.4.12')
|
|
157
|
+
pc1 = FactoryBot.create(:puppetclass, environments: [env], parameter_count: 1)
|
|
158
|
+
pc2 = FactoryBot.create(:puppetclass, environments: [env], parameter_count: 1)
|
|
159
|
+
|
|
160
|
+
classes_params = { pc1.name => { pc1.class_params.first.key => 'abcdef' },
|
|
161
|
+
pc2.name => { pc2.class_params.first.key => 'secret' } }
|
|
162
|
+
# dummy external node info
|
|
163
|
+
nodeinfo = { 'environment' => env.name,
|
|
164
|
+
'parameters' => { 'puppetmaster' => 'puppet', 'MYVAR' => 'value', 'port' => '80',
|
|
165
|
+
'ssl_port' => '443', 'foreman_env' => 'production', 'owner_name' => 'Admin User',
|
|
166
|
+
'root_pw' => 'xybxa6JUkz63w', 'owner_email' => 'admin@someware.com',
|
|
167
|
+
'foreman_subnets' =>
|
|
168
|
+
[{ 'network' => '3.3.4.0',
|
|
169
|
+
'name' => 'two',
|
|
170
|
+
'gateway' => nil,
|
|
171
|
+
'mask' => '255.255.255.0',
|
|
172
|
+
'dns_primary' => nil,
|
|
173
|
+
'dns_secondary' => nil,
|
|
174
|
+
'from' => nil,
|
|
175
|
+
'to' => nil,
|
|
176
|
+
'boot_mode' => 'DHCP',
|
|
177
|
+
'vlanid' => '41',
|
|
178
|
+
'ipam' => 'DHCP' }],
|
|
179
|
+
'foreman_interfaces' =>
|
|
180
|
+
[{ 'mac' => 'aa:bb:ac:dd:ee:ff',
|
|
181
|
+
'ip' => '3.3.4.12',
|
|
182
|
+
'type' => 'Interface',
|
|
183
|
+
'name' => 'myfullhost.mydomain.net',
|
|
184
|
+
'attrs' => {},
|
|
185
|
+
'virtual' => false,
|
|
186
|
+
'link' => true,
|
|
187
|
+
'identifier' => nil,
|
|
188
|
+
'managed' => true,
|
|
189
|
+
'primary' => true,
|
|
190
|
+
'provision' => true,
|
|
191
|
+
'subnet' => { 'network' => '3.3.4.0',
|
|
192
|
+
'mask' => '255.255.255.0',
|
|
193
|
+
'name' => 'two',
|
|
194
|
+
'gateway' => nil,
|
|
195
|
+
'dns_primary' => nil,
|
|
196
|
+
'dns_secondary' => nil,
|
|
197
|
+
'from' => nil,
|
|
198
|
+
'to' => nil,
|
|
199
|
+
'boot_mode' => 'DHCP',
|
|
200
|
+
'vlanid' => '41',
|
|
201
|
+
'ipam' => 'DHCP' } }] },
|
|
202
|
+
'classes' => classes_params }
|
|
203
|
+
|
|
204
|
+
host.importNode nodeinfo
|
|
205
|
+
nodeinfo['parameters']['special_info'] = 'secret' # smart variable on apache
|
|
206
|
+
|
|
207
|
+
info = host.info
|
|
208
|
+
assert_includes info.keys, 'environment'
|
|
209
|
+
assert_equal env.name, host.puppet.environment.name
|
|
210
|
+
assert_includes info.keys, 'parameters'
|
|
211
|
+
assert_includes info.keys, 'classes'
|
|
212
|
+
# This worked in core, but it's beyond me how could have :shrug:
|
|
213
|
+
# assert_equal(classes_params, info['classes'])
|
|
214
|
+
# We are only importing classes in the method
|
|
215
|
+
assert_equal(classes_params.keys.sort, info['classes'].keys.sort)
|
|
216
|
+
parameters = info['parameters']
|
|
217
|
+
assert_equal 'puppet', parameters['puppetmaster']
|
|
218
|
+
assert_equal 'xybxa6JUkz63w', parameters['root_pw']
|
|
219
|
+
assert_includes parameters.keys, 'foreman_subnets'
|
|
220
|
+
assert_includes parameters.keys, 'foreman_interfaces'
|
|
221
|
+
assert_equal '3.3.4.12', parameters['foreman_interfaces'].first['ip']
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
test 'should import from non-parameterized external nodes output' do
|
|
225
|
+
host = FactoryBot.create(:host, :with_puppet_enc)
|
|
226
|
+
env = host.puppet.environment
|
|
227
|
+
pc1, pc2 = FactoryBot.create_list(:puppetclass, 2, environments: [env])
|
|
228
|
+
host.importNode('environment' => env.name, 'classes' => [pc1.name, pc2.name], 'parameters' => {})
|
|
229
|
+
|
|
230
|
+
assert_equal [pc1.name, pc2.name].sort, host.info['classes'].keys.sort
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
test 'does not assign a host to environment with incorrect taxonomies' do
|
|
234
|
+
host = FactoryBot.build(:host, managed: false)
|
|
235
|
+
env_with_tax = FactoryBot.create(:environment, organizations: [host.organization], locations: [host.location])
|
|
236
|
+
env_with_other_tax = FactoryBot.create(:environment, organizations: [FactoryBot.create(:organization)],
|
|
237
|
+
locations: [FactoryBot.create(:location)])
|
|
238
|
+
host.build_puppet
|
|
239
|
+
host.puppet.environment = env_with_tax
|
|
240
|
+
assert host.valid?
|
|
241
|
+
|
|
242
|
+
host.puppet.environment = env_with_other_tax
|
|
243
|
+
assert_not host.valid?
|
|
244
|
+
assert_match(/is not assigned/, host.errors[:environment_id].first)
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
test 'when saving a host, require puppet environment if puppet master is set' do
|
|
248
|
+
h = FactoryBot.build_stubbed(:host, :with_puppet_enc)
|
|
249
|
+
h.puppet.environment = nil
|
|
250
|
+
assert_not h.valid?
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
test 'host puppet classes must belong to the host environment' do
|
|
254
|
+
h = FactoryBot.create(:host, :with_puppet_enc)
|
|
255
|
+
pc = FactoryBot.create(:puppetclass)
|
|
256
|
+
h.puppet.puppetclasses << pc
|
|
257
|
+
assert_not h.puppet.environment.puppetclasses.map(&:id).include?(pc.id)
|
|
258
|
+
assert_not h.puppet.valid?
|
|
259
|
+
assert_equal ["#{pc} does not belong to the #{h.puppet.environment} environment"], h.puppet.errors[:puppetclasses]
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
test 'when changing host environment, its puppet classes should be verified' do
|
|
263
|
+
h = FactoryBot.create(:host, :with_puppet_enc)
|
|
264
|
+
pc = FactoryBot.create(:puppetclass, environments: [h.puppet.environment])
|
|
265
|
+
h.puppet.puppetclasses << pc
|
|
266
|
+
h.puppet.environment = FactoryBot.create(:environment)
|
|
267
|
+
assert_not h.puppet.save
|
|
268
|
+
assert_equal ["#{pc} does not belong to the #{h.puppet.environment} environment"], h.puppet.errors[:puppetclasses]
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
test 'when setting host environment to nil, its puppet classes should be removed' do
|
|
272
|
+
h = FactoryBot.create(:host, :with_puppet_enc, :with_puppetclass)
|
|
273
|
+
h.puppet_proxy = nil
|
|
274
|
+
h.puppet.environment = nil
|
|
275
|
+
h.puppet.save!
|
|
276
|
+
assert_empty h.puppet.puppetclasses
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
test 'when setting host environment to nil, its config groups should be removed' do
|
|
280
|
+
h = FactoryBot.create(:host, :with_puppet_enc, :with_config_group)
|
|
281
|
+
assert h.save
|
|
282
|
+
h.puppet_proxy = nil
|
|
283
|
+
h.puppet.environment = nil
|
|
284
|
+
h.save!
|
|
285
|
+
assert_empty h.puppet.config_groups
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
require 'test_puppet_helper'
|
|
2
|
+
|
|
3
|
+
module ForemanPuppet
|
|
4
|
+
class HostgroupPuppetFacetTest < ActiveSupport::TestCase
|
|
5
|
+
let(:environment) { FactoryBot.create(:environment) }
|
|
6
|
+
let(:hostgroup) { FactoryBot.create(:hostgroup, :with_puppet_enc, :with_puppetclass, :with_config_group, environment: environment) }
|
|
7
|
+
let(:child_hostgroup) do
|
|
8
|
+
FactoryBot.create(:hostgroup,
|
|
9
|
+
:with_puppet_enc,
|
|
10
|
+
:with_puppetclass,
|
|
11
|
+
:with_config_group,
|
|
12
|
+
:with_parent,
|
|
13
|
+
parent: hostgroup, environment: environment)
|
|
14
|
+
end
|
|
15
|
+
let(:standalone_puppetclass) { FactoryBot.create(:puppetclass) }
|
|
16
|
+
|
|
17
|
+
test 'should inherit parent classes' do
|
|
18
|
+
child_all_classes = child_hostgroup.puppet.classes
|
|
19
|
+
hostgroup.puppet.classes do |puppet_class|
|
|
20
|
+
assert_include puppet_class, child_all_classes
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test 'changing environment should preserve puppetclasses' do
|
|
25
|
+
skip 'Something fishy on env update, try once extracted' unless ForemanPuppet.extracted_from_core?
|
|
26
|
+
new_environment = FactoryBot.create(:environment)
|
|
27
|
+
old_puppetclass_ids = hostgroup.puppet.puppetclass_ids
|
|
28
|
+
|
|
29
|
+
hostgroup.puppet.update!(environment: new_environment)
|
|
30
|
+
hostgroup.reload
|
|
31
|
+
|
|
32
|
+
assert_equal new_environment, hostgroup.puppet.environment
|
|
33
|
+
assert_equal old_puppetclass_ids.sort, hostgroup.puppet.puppetclass_ids.sort
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
test 'should return all classes for environment only' do
|
|
37
|
+
config_group1 = hostgroup.puppet.config_groups.first
|
|
38
|
+
config_group1.puppetclasses << FactoryBot.create(:puppetclass, environments: [environment]) unless config_group1.puppetclasses.any?
|
|
39
|
+
config_group2 = FactoryBot.create(:config_group, :with_puppetclass, class_environments: [FactoryBot.create(:environment)])
|
|
40
|
+
hostgroup.puppet.config_groups << config_group2
|
|
41
|
+
|
|
42
|
+
all_classes = hostgroup.puppet.classes
|
|
43
|
+
env_puppetclasses = hostgroup.puppet.puppetclasses.to_a + hostgroup.puppet.config_groups.first.puppetclasses.to_a
|
|
44
|
+
assert_equal(2, all_classes.count)
|
|
45
|
+
assert_equal env_puppetclasses.map(&:id).sort, all_classes.map(&:id).sort
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe '#available_puppetclasses' do
|
|
49
|
+
setup do
|
|
50
|
+
standalone_puppetclass
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
test 'should return all if no environment' do
|
|
54
|
+
hostgroup.puppet.update(environment_id: nil)
|
|
55
|
+
assert_equal ForemanPuppet::Puppetclass.all, hostgroup.puppet.available_puppetclasses
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
test 'should return environment-specific classes' do
|
|
59
|
+
FactoryBot.create(:puppetclass, environments: [environment])
|
|
60
|
+
assert_not_include hostgroup.puppet.available_puppetclasses, standalone_puppetclass
|
|
61
|
+
assert_equal environment.puppetclasses.sort, hostgroup.puppet.available_puppetclasses.sort
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test 'should return environment-specific classes (and that are NOT already inherited by parent)' do
|
|
65
|
+
assert_not_include child_hostgroup.puppet.available_puppetclasses, standalone_puppetclass
|
|
66
|
+
assert_not_equal environment.puppetclasses.sort, child_hostgroup.puppet.available_puppetclasses.sort
|
|
67
|
+
assert_equal (environment.puppetclasses - child_hostgroup.puppet.parent_classes).sort, child_hostgroup.puppet.available_puppetclasses.sort
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe '#individual_puppetclasses' do
|
|
72
|
+
context 'updating environment' do
|
|
73
|
+
test 'should return correctly, when updating environment for a new (or cloned) hostgroup' do
|
|
74
|
+
# ?????
|
|
75
|
+
cloned = Hostgroup.new
|
|
76
|
+
cloned.build_puppet.puppetclasses = hostgroup.puppet.puppetclasses
|
|
77
|
+
assert_equal cloned.puppet.individual_puppetclasses, hostgroup.puppet.individual_puppetclasses
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context 'has NOT set an environment' do
|
|
82
|
+
test 'returns all classes' do
|
|
83
|
+
assert_includes hostgroup.puppet.individual_puppetclasses.all, hostgroup.puppet.puppetclasses.first
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
context 'has an environment set' do
|
|
88
|
+
setup do
|
|
89
|
+
hostgroup.puppet.puppetclasses << standalone_puppetclass
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
test 'returns classes regardless of environment by default' do
|
|
93
|
+
assert_includes hostgroup.puppet.individual_puppetclasses, hostgroup.puppet.puppetclasses.first
|
|
94
|
+
assert_includes hostgroup.puppet.individual_puppetclasses, standalone_puppetclass
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
test 'puppetclasses added to hostgroup (that can be removed) does not include classes that are included by config group' do
|
|
99
|
+
config_group = FactoryBot.create(:config_group, :with_puppetclass, class_environments: [environment])
|
|
100
|
+
hostgroup.puppet.config_groups << config_group
|
|
101
|
+
|
|
102
|
+
assert_includes hostgroup.puppet.all_puppetclasses, config_group.puppetclasses.first
|
|
103
|
+
assert_not_includes hostgroup.puppet.individual_puppetclasses, config_group.puppetclasses.first
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
describe '#classes_in_groups' do
|
|
108
|
+
test 'should return the puppetclasses of a config group only if it is in hostgroup environment' do
|
|
109
|
+
config_group1 = hostgroup.puppet.config_groups.first
|
|
110
|
+
config_group1.puppetclasses << FactoryBot.create(:puppetclass, environments: [environment]) unless config_group1.puppetclasses.any?
|
|
111
|
+
config_group2 = FactoryBot.create(:config_group, :with_puppetclass, class_environments: [FactoryBot.create(:environment)])
|
|
112
|
+
hostgroup.puppet.config_groups << config_group2
|
|
113
|
+
|
|
114
|
+
group_classes = hostgroup.puppet.classes_in_groups
|
|
115
|
+
assert_equal 2, (config_group1.puppetclasses + config_group2.puppetclasses).uniq.count
|
|
116
|
+
# but only 1 is in hostgroup environment.
|
|
117
|
+
assert_equal 1, group_classes.count
|
|
118
|
+
assert_equal config_group1.puppetclasses.pluck(:id).sort, group_classes.map(&:id).sort
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe '#parent_classes' do
|
|
123
|
+
test 'should return parent classes if hostgroup has parent and environment are the same' do
|
|
124
|
+
assert_equal child_hostgroup.puppet.parent_classes, hostgroup.puppet.classes
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
test 'should not return parent classes that do not match environment' do
|
|
128
|
+
new_environment = FactoryBot.create(:environment)
|
|
129
|
+
new_pc = FactoryBot.create(:puppetclass, environments: [environment, new_environment])
|
|
130
|
+
hostgroup.puppet.config_groups.first.puppetclasses << new_pc
|
|
131
|
+
hostgroup.reload
|
|
132
|
+
child_hostgroup.puppet.update(environment: new_environment)
|
|
133
|
+
child_hostgroup.reload
|
|
134
|
+
assert_not_empty child_hostgroup.puppet.parent_classes
|
|
135
|
+
assert_not_equal child_hostgroup.puppet.parent_classes, hostgroup.puppet.classes
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
test 'should be empty if hostgroup does not have parent' do
|
|
139
|
+
assert_empty hostgroup.puppet.parent_classes
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe '#parent_config_groups' do
|
|
144
|
+
test 'should return empty array if hostgroup does not has parent' do
|
|
145
|
+
assert_empty hostgroup.puppet.parent_config_groups
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
test 'should return parent config_groups if hostgroup has parent - 2 levels' do
|
|
149
|
+
assert child_hostgroup.parent
|
|
150
|
+
assert_equal child_hostgroup.puppet.parent_config_groups, hostgroup.puppet.config_groups
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
test 'should return parent config_groups if hostgroup has parent - 3 levels' do
|
|
154
|
+
hg = FactoryBot.create(:hostgroup, name: 'third level', parent_id: child_hostgroup.id)
|
|
155
|
+
hg.create_puppet
|
|
156
|
+
groups = (hg.parent.puppet.config_groups + hg.parent.parent.puppet.config_groups).uniq.sort
|
|
157
|
+
assert_equal groups, hg.puppet.parent_config_groups.sort
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
describe 'Hostgroup#clone' do
|
|
162
|
+
test 'should clone puppet classes' do
|
|
163
|
+
cloned = hostgroup.clone('new_name')
|
|
164
|
+
assert_equal hostgroup.puppet.hostgroup_classes.map(&:puppetclass_id), cloned.puppet.hostgroup_classes.map(&:puppetclass_id)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
test '#classes etc. on cloned group return the same' do
|
|
168
|
+
cloned = child_hostgroup.clone('cloned')
|
|
169
|
+
cloned_puppet = cloned.puppet
|
|
170
|
+
group_puppet = child_hostgroup.puppet
|
|
171
|
+
assert_equal group_puppet.individual_puppetclasses.map(&:id), cloned_puppet.individual_puppetclasses.map(&:id)
|
|
172
|
+
assert_equal group_puppet.classes_in_groups.map(&:id), cloned_puppet.classes_in_groups.map(&:id)
|
|
173
|
+
assert_equal group_puppet.classes.map(&:id), cloned_puppet.classes.map(&:id)
|
|
174
|
+
assert_equal group_puppet.available_puppetclasses.map(&:id), cloned_puppet.available_puppetclasses.map(&:id)
|
|
175
|
+
assert_valid cloned
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
test 'without save makes no changes' do
|
|
179
|
+
FactoryBot.create(:puppetclass_lookup_key, :with_override, path: "hostgroup\ncomment",
|
|
180
|
+
puppetclass: hostgroup.puppet.puppetclasses.first,
|
|
181
|
+
overrides: { hostgroup.lookup_value_matcher => 'test' })
|
|
182
|
+
ActiveRecord::Base.any_instance.expects(:destroy).never
|
|
183
|
+
ActiveRecord::Base.any_instance.expects(:save).never
|
|
184
|
+
hostgroup.clone
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
test 'clone with config group should run validations once' do
|
|
188
|
+
cloned = hostgroup.clone
|
|
189
|
+
assert_not cloned.valid?
|
|
190
|
+
assert_equal 1, cloned.errors[:name].size
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
test 'clone should clone config groups as well' do
|
|
194
|
+
cg_ids = hostgroup.puppet.config_groups.pluck(:id)
|
|
195
|
+
cloned = hostgroup.clone('new_name')
|
|
196
|
+
assert_equal cg_ids.sort, cloned.puppet.config_groups.map(&:id).sort
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|