foreman_puppet 0.0.2 → 1.0.0
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 +4 -4
- data/README.md +61 -7
- data/app/controllers/concerns/foreman_puppet/environments_import.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/api_base_controller.rb +28 -0
- data/app/controllers/concerns/foreman_puppet/extensions/api_template_combinations_controller.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/hostgroups_controller_extensions.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +3 -10
- data/app/controllers/concerns/foreman_puppet/parameters/puppetclass_lookup_key.rb +2 -2
- data/app/controllers/foreman_puppet/api/v2/config_groups_controller.rb +9 -1
- data/app/controllers/foreman_puppet/api/v2/environments_controller.rb +5 -2
- data/app/controllers/foreman_puppet/api/v2/host_classes_controller.rb +9 -1
- data/app/controllers/foreman_puppet/api/v2/hostgroup_classes_controller.rb +9 -1
- data/app/controllers/foreman_puppet/api/v2/override_values_controller.rb +1 -2
- data/app/controllers/foreman_puppet/api/v2/{base_controller.rb → puppet_base_controller.rb} +3 -4
- data/app/controllers/foreman_puppet/api/v2/{lookups_common_controller.rb → puppet_lookups_common_controller.rb} +6 -2
- data/app/controllers/foreman_puppet/api/v2/puppetclasses_controller.rb +5 -1
- data/app/controllers/foreman_puppet/api/v2/smart_class_parameters_controller.rb +1 -2
- data/app/controllers/foreman_puppet/config_groups_controller.rb +4 -0
- data/app/controllers/foreman_puppet/puppet_smart_proxies_controller.rb +4 -0
- data/app/controllers/foreman_puppet/puppetclass_lookup_keys_controller.rb +2 -2
- data/app/controllers/foreman_puppet/puppetclasses_controller.rb +12 -4
- data/app/graphgl/concerns/foreman_puppet/mutations/hosts/create_extensions.rb +29 -0
- data/app/graphgl/concerns/foreman_puppet/types/host_extensions.rb +13 -0
- data/app/graphgl/concerns/foreman_puppet/types/hostgroup_extensions.rb +13 -0
- data/app/graphgl/concerns/foreman_puppet/types/interface_attributes_input_extensions.rb +9 -0
- data/app/graphgl/concerns/foreman_puppet/types/location_extensions.rb +14 -0
- data/app/graphgl/concerns/foreman_puppet/types/organization_extensions.rb +14 -0
- data/app/graphgl/foreman_puppet/types/environment.rb +20 -0
- data/app/graphgl/foreman_puppet/types/puppetclass.rb +20 -0
- data/app/helpers/foreman_puppet/environments_helper.rb +1 -1
- data/app/helpers/foreman_puppet/hosts_helper.rb +15 -0
- data/app/helpers/foreman_puppet/puppetclass_lookup_keys_helper.rb +2 -2
- data/app/helpers/foreman_puppet/puppetclasses_and_environments_helper.rb +1 -1
- data/app/helpers/foreman_puppet/puppetclasses_helper.rb +2 -2
- data/app/models/concerns/foreman_puppet/extensions/host.rb +24 -9
- data/app/models/concerns/foreman_puppet/extensions/host_common.rb +17 -0
- data/app/models/concerns/foreman_puppet/extensions/hostgroup.rb +13 -7
- data/app/models/concerns/foreman_puppet/extensions/operatingsystem.rb +1 -1
- data/app/models/concerns/foreman_puppet/extensions/provisioning_template.rb +19 -13
- data/app/models/concerns/foreman_puppet/extensions/report.rb +18 -0
- data/app/models/concerns/foreman_puppet/extensions/taxonomy.rb +1 -1
- data/app/models/concerns/foreman_puppet/extensions/template_combination.rb +1 -1
- data/app/models/concerns/foreman_puppet/extensions/user.rb +19 -12
- data/app/models/foreman_puppet/environment.rb +2 -0
- data/app/models/foreman_puppet/environment_class.rb +1 -1
- data/app/models/foreman_puppet/host_class.rb +1 -1
- data/app/models/foreman_puppet/host_puppet_facet.rb +6 -5
- data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +1 -1
- data/app/models/{concerns/foreman_puppet/host_common.rb → foreman_puppet/puppet_facet_common.rb} +1 -1
- data/app/models/foreman_puppet/puppetclass.rb +15 -1
- data/app/{views/api/v2/template_combinations/base.json.erb → prepend_views/api/v2/template_combinations/base.json.rabl} +0 -0
- data/app/services/foreman_puppet/host_info_providers/config_groups_info.rb +2 -0
- data/app/services/foreman_puppet/puppet_class_importer.rb +17 -18
- data/app/views/foreman_puppet/common/_puppetclasses_or_envs_changed.html.erb +62 -0
- data/app/views/foreman_puppet/config_groups/index.html.erb +2 -2
- data/app/views/foreman_puppet/config_groups/welcome.html.erb +12 -11
- data/app/views/foreman_puppet/environments/index.html.erb +1 -1
- data/app/views/foreman_puppet/environments/welcome.html.erb +3 -15
- data/app/views/foreman_puppet/puppetclass_lookup_keys/welcome.html.erb +10 -8
- data/app/views/foreman_puppet/puppetclasses/_classes.html.erb +1 -1
- data/app/views/foreman_puppet/puppetclasses/_selected_classes.html.erb +1 -1
- data/app/views/foreman_puppet/puppetclasses/index.html.erb +1 -1
- data/app/views/hosts/_form_puppet_enc_tab.html.erb +1 -1
- data/app/views/hosts/select_multiple_environment.html.erb +1 -1
- data/app/views/smart_proxies/plugins/_puppet_ca.html.erb +44 -0
- data/config/initializers/api_reroute.rb +13 -0
- data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +37 -12
- data/db/migrate/20201125113903_migrate_puppetclasses_to_facets.foreman_puppet.rb +13 -1
- data/lib/foreman_puppet/engine.rb +68 -20
- data/lib/foreman_puppet/register.rb +7 -2
- data/lib/foreman_puppet/version.rb +1 -1
- data/lib/foreman_puppet.rb +3 -3
- data/locale/Makefile +1 -1
- data/locale/en/LC_MESSAGES/foreman_puppet.mo +0 -0
- data/locale/en/foreman_puppet.edit.po +19 -3
- data/locale/en/foreman_puppet.po +18 -6
- data/locale/en/foreman_puppet.pox +0 -0
- data/locale/foreman_puppet.pot +19 -3
- data/locale/messages.mo +0 -0
- data/test/controllers/foreman_puppet/api/v2/config_groups_controller_test.rb +7 -3
- data/test/controllers/foreman_puppet/api/v2/environments_controller_test.rb +18 -16
- data/test/controllers/foreman_puppet/api/v2/hosts_controller_test.rb +3 -2
- data/test/controllers/foreman_puppet/api/v2/lookups_common_controller_test.rb +1 -1
- data/test/controllers/foreman_puppet/api/v2/provisioning_templates_controller_test.rb +32 -0
- data/test/controllers/foreman_puppet/api/v2/puppetclasses_controller_test.rb +3 -0
- data/test/controllers/foreman_puppet/api/v2/smart_class_parameters_controller_test.rb +7 -1
- data/test/controllers/foreman_puppet/api/v2/template_combinations_controller_test.rb +2 -2
- data/test/controllers/foreman_puppet/config_groups_controller_test.rb +7 -3
- data/test/controllers/foreman_puppet/environments_controller_test.rb +2 -2
- data/test/controllers/foreman_puppet/puppetclass_lookup_keys_controller_test.rb +2 -2
- data/test/controllers/foreman_puppet/puppetclasses_controller_test.rb +5 -6
- data/test/factories/foreman_puppet_factories.rb +3 -0
- data/test/factories/host_puppet_enhancements.rb +6 -6
- data/test/graphql/mutations/hosts/create_mutation_test.rb +87 -0
- data/test/graphql/queries/environment_query_test.rb +54 -0
- data/test/graphql/queries/environments_query_test.rb +43 -0
- data/test/{qraphql → graphql}/queries/host_puppet_query_test.rb +3 -8
- data/test/{qraphql → graphql}/queries/hostgroup_puppet_query_test.rb +1 -6
- data/test/graphql/queries/location_query_test.rb +52 -0
- data/test/graphql/queries/organization_query_test.rb +52 -0
- data/test/graphql/queries/puppetclass_query_test.rb +68 -0
- data/test/graphql/queries/puppetclasses_query_test.rb +43 -0
- data/test/integration/foreman_puppet/environment_js_test.rb +4 -1
- data/test/integration/foreman_puppet/host_js_test.rb +1 -1
- data/test/integration/foreman_puppet/puppetclass_js_test.rb +4 -0
- data/test/models/foreman_puppet/config_group_class_test.rb +3 -1
- data/test/models/foreman_puppet/environment_test.rb +2 -0
- data/test/models/foreman_puppet/host_puppet_facet_test.rb +34 -1
- data/test/models/foreman_puppet/host_test.rb +4 -3
- data/test/models/foreman_puppet/hostgroup_puppet_facet_test.rb +2 -3
- data/test/models/foreman_puppet/provisioning_template_test.rb +14 -7
- data/test/models/foreman_puppet/report_test.rb +21 -0
- data/test/models/foreman_puppet/smart_proxy_test.rb +1 -1
- data/test/models/foreman_puppet/user_test.rb +37 -0
- data/test/services/foreman_puppet/host_info_providers/config_groups_info_test.rb +35 -0
- data/test/services/foreman_puppet/host_info_providers/puppet_info_test.rb +159 -197
- data/test/unit/foreman_puppet/puppet_class_importer_test.rb +16 -2
- data/webpack/index.js +3 -4
- data/webpack/src/Components/Environments/Welcome.js +37 -0
- metadata +51 -12
|
File without changes
|
data/locale/foreman_puppet.pot
CHANGED
|
@@ -8,8 +8,8 @@ msgid ""
|
|
|
8
8
|
msgstr ""
|
|
9
9
|
"Project-Id-Version: foreman_puppet 1.0.0\n"
|
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
|
11
|
-
"POT-Creation-Date: 2021-02-
|
|
12
|
-
"PO-Revision-Date: 2021-02-
|
|
11
|
+
"POT-Creation-Date: 2021-02-03 18:00+0100\n"
|
|
12
|
+
"PO-Revision-Date: 2021-02-03 18:00+0100\n"
|
|
13
13
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
14
14
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
15
15
|
"Language: \n"
|
|
@@ -1071,6 +1071,22 @@ msgstr ""
|
|
|
1071
1071
|
msgid "Loading parameters..."
|
|
1072
1072
|
msgstr ""
|
|
1073
1073
|
|
|
1074
|
+
#: action_names.rb:2
|
|
1075
|
+
msgid "Action with sub plans"
|
|
1076
|
+
msgstr ""
|
|
1077
|
+
|
|
1078
|
+
#: action_names.rb:3
|
|
1079
|
+
msgid "Import facts"
|
|
1080
|
+
msgstr ""
|
|
1081
|
+
|
|
1082
|
+
#: action_names.rb:4
|
|
1083
|
+
msgid "Import Puppet classes"
|
|
1084
|
+
msgstr ""
|
|
1085
|
+
|
|
1086
|
+
#: action_names.rb:5
|
|
1087
|
+
msgid "Remote action:"
|
|
1088
|
+
msgstr ""
|
|
1089
|
+
|
|
1074
1090
|
#: gemspec.rb:2
|
|
1075
|
-
msgid "
|
|
1091
|
+
msgid "Allow assigning Puppet environmets and classes to the Foreman Hosts."
|
|
1076
1092
|
msgstr ""
|
data/locale/messages.mo
ADDED
|
Binary file
|
|
@@ -6,18 +6,22 @@ module ForemanPuppet
|
|
|
6
6
|
setup do
|
|
7
7
|
@routes = ForemanPuppet::Engine.routes
|
|
8
8
|
end
|
|
9
|
+
|
|
10
|
+
let(:puppetclasses) { FactoryBot.create_list(:puppetclass, 2) }
|
|
11
|
+
let(:config_group) { FactoryBot.create(:config_group) }
|
|
12
|
+
|
|
9
13
|
test 'should create config group' do
|
|
10
14
|
assert_difference('ConfigGroup.count') do
|
|
11
|
-
post :create, params: { config_group: { name: 'config-group', puppetclass_ids:
|
|
15
|
+
post :create, params: { config_group: { name: 'config-group', puppetclass_ids: puppetclasses.map(&:id) } }
|
|
12
16
|
end
|
|
13
17
|
assert_response :created
|
|
14
18
|
end
|
|
15
19
|
|
|
16
20
|
test 'should update config group' do
|
|
17
21
|
name = 'new name'
|
|
18
|
-
put :update, params: { id:
|
|
22
|
+
put :update, params: { id: config_group.to_param,
|
|
19
23
|
config_group: { name: name,
|
|
20
|
-
puppetclass_ids:
|
|
24
|
+
puppetclass_ids: puppetclasses.map(&:id) } }
|
|
21
25
|
assert_response :success
|
|
22
26
|
response = JSON.parse(@response.body)
|
|
23
27
|
assert_equal 2, response['puppetclasses'].count
|
|
@@ -106,7 +106,7 @@ module ForemanPuppet
|
|
|
106
106
|
|
|
107
107
|
test 'should destroy environments' do
|
|
108
108
|
environment
|
|
109
|
-
assert_difference(
|
|
109
|
+
assert_difference(-> { ForemanPuppet::Environment.unscoped.count }, -1) do
|
|
110
110
|
delete :destroy, params: { id: environment.to_param }
|
|
111
111
|
end
|
|
112
112
|
assert_response :success
|
|
@@ -171,12 +171,14 @@ module ForemanPuppet
|
|
|
171
171
|
test 'should obsolete environment' do
|
|
172
172
|
setup_import_classes
|
|
173
173
|
as_admin do
|
|
174
|
-
|
|
175
|
-
end
|
|
176
|
-
assert_difference(-> { ForemanPuppet::Environment.unscoped.count }, -1) do
|
|
177
|
-
post :import_puppetclasses, params: { id: proxy.id }, session: set_session_user
|
|
174
|
+
FactoryBot.create(:environment, name: 'xyz')
|
|
178
175
|
end
|
|
176
|
+
|
|
177
|
+
post :import_puppetclasses, params: { id: proxy.id }, session: set_session_user
|
|
179
178
|
assert_response :success
|
|
179
|
+
as_admin do
|
|
180
|
+
assert_nil ForemanPuppet::Environment.find_by(name: 'xyz')
|
|
181
|
+
end
|
|
180
182
|
end
|
|
181
183
|
|
|
182
184
|
test 'should obsolete puppetclasses' do
|
|
@@ -313,30 +315,30 @@ module ForemanPuppet
|
|
|
313
315
|
|
|
314
316
|
def setup_import_classes
|
|
315
317
|
as_admin do
|
|
316
|
-
Host::Managed.update_all(environment_id: nil)
|
|
317
|
-
Hostgroup.update_all(environment_id: nil)
|
|
318
|
-
HostClass.destroy_all
|
|
319
|
-
HostgroupClass.destroy_all
|
|
320
|
-
Puppetclass.destroy_all
|
|
321
|
-
Environment.destroy_all
|
|
318
|
+
::Host::Managed.update_all(environment_id: nil)
|
|
319
|
+
::Hostgroup.update_all(environment_id: nil)
|
|
320
|
+
ForemanPuppet::HostClass.destroy_all
|
|
321
|
+
ForemanPuppet::HostgroupClass.destroy_all
|
|
322
|
+
ForemanPuppet::Puppetclass.destroy_all
|
|
323
|
+
ForemanPuppet::Environment.destroy_all
|
|
322
324
|
end
|
|
323
325
|
orgs = [taxonomies(:organization1)]
|
|
324
326
|
locs = [taxonomies(:location1)]
|
|
325
327
|
# This is the database status
|
|
326
328
|
# and should result in a db_tree of {"env1" => ["a", "b", "c"], "env2" => ["a", "b", "c"]}
|
|
327
329
|
as_admin do
|
|
328
|
-
%w[a b c].each { |name| Puppetclass.create name: name }
|
|
330
|
+
%w[a b c].each { |name| ForemanPuppet::Puppetclass.create name: name }
|
|
329
331
|
%w[env1 env2].each do |name|
|
|
330
|
-
e = Environment.create!(name: name, organizations: orgs, locations: locs)
|
|
331
|
-
e.puppetclasses = Puppetclass.all
|
|
332
|
+
e = ForemanPuppet::Environment.create!(name: name, organizations: orgs, locations: locs)
|
|
333
|
+
e.puppetclasses = ForemanPuppet::Puppetclass.all
|
|
332
334
|
end
|
|
333
335
|
end
|
|
334
336
|
# This is the on-disk status
|
|
335
337
|
# and should result in a disk_tree of {"env1" => ["a", "b", "c"],"env2" => ["a", "b", "c"]}
|
|
336
338
|
envs = HashWithIndifferentAccess.new(env1: %w[a b c], env2: %w[a b c])
|
|
337
339
|
pcs = [HashWithIndifferentAccess.new('a' => { 'name' => 'a', 'module' => nil, 'params' => { 'key' => 'special' } })]
|
|
338
|
-
classes =
|
|
339
|
-
Environment.expects(:puppetEnvs).returns(envs).at_least(0)
|
|
340
|
+
classes = pcs.map { |k| [k.keys.first, Foreman::ImporterPuppetclass.new(k.values.first)] }.to_h
|
|
341
|
+
ForemanPuppet::Environment.expects(:puppetEnvs).returns(envs).at_least(0)
|
|
340
342
|
ProxyAPI::Puppet.any_instance.stubs(:environments).returns(%w[env1 env2])
|
|
341
343
|
ProxyAPI::Puppet.any_instance.stubs(:classes).returns(classes)
|
|
342
344
|
end
|
|
@@ -61,10 +61,11 @@ module ForemanPuppet
|
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
describe '#create' do
|
|
64
|
-
test 'should create with puppet proxy' do
|
|
64
|
+
test 'should create with puppet proxy and environment' do
|
|
65
65
|
host_params = FactoryBot.attributes_for(:host, managed: false).merge(environment_id: environment.id, puppet_proxy_id: puppet_proxy.to_param)
|
|
66
66
|
post :create, params: { host: host_params }
|
|
67
67
|
assert_response :created
|
|
68
|
+
assert_equal environment.name, JSON.parse(@response.body)['environment_name'], "Can't create host environment #{environment}"
|
|
68
69
|
assert_equal puppet_proxy.name, JSON.parse(@response.body)['puppet_proxy']['name'], "Can't create host with puppet proxy #{puppet_proxy}"
|
|
69
70
|
end
|
|
70
71
|
end
|
|
@@ -92,7 +93,7 @@ module ForemanPuppet
|
|
|
92
93
|
assert_response :success
|
|
93
94
|
response = ActiveSupport::JSON.decode(@response.body)
|
|
94
95
|
puppet_class = response['data']['classes'].keys
|
|
95
|
-
assert_equal host.puppetclasses.map(&:name), puppet_class
|
|
96
|
+
assert_equal host.puppet.puppetclasses.map(&:name), puppet_class
|
|
96
97
|
end
|
|
97
98
|
end
|
|
98
99
|
end
|
|
@@ -3,7 +3,7 @@ require 'test_puppet_helper'
|
|
|
3
3
|
module ForemanPuppet
|
|
4
4
|
module Api
|
|
5
5
|
module V2
|
|
6
|
-
class DummyLookupController < ForemanPuppet::Api::V2::
|
|
6
|
+
class DummyLookupController < ForemanPuppet::Api::V2::PuppetLookupsCommonController
|
|
7
7
|
attr_accessor :params
|
|
8
8
|
end
|
|
9
9
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'test_puppet_helper'
|
|
2
|
+
|
|
3
|
+
module ForemanPuppet
|
|
4
|
+
module Api
|
|
5
|
+
module V2
|
|
6
|
+
class ProvisioningTemplatesControllerTest < ActionController::TestCase
|
|
7
|
+
tests ::Api::V2::ProvisioningTemplatesController
|
|
8
|
+
|
|
9
|
+
let(:environment) { FactoryBot.create(:environment) }
|
|
10
|
+
|
|
11
|
+
test 'should create provisioning template with template_combinations' do
|
|
12
|
+
name = RFauxFactory.gen_alpha
|
|
13
|
+
valid_attrs = {
|
|
14
|
+
name: name, template: RFauxFactory.gen_alpha, template_kind_id: template_kinds(:ipxe).id,
|
|
15
|
+
template_combinations_attributes: [
|
|
16
|
+
{ hostgroup_id: hostgroups(:common).id, environment_id: environment.id },
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
post :create, params: { provisioning_template: valid_attrs }
|
|
20
|
+
assert_response :created
|
|
21
|
+
response = ActiveSupport::JSON.decode(@response.body)
|
|
22
|
+
assert response.key?('id')
|
|
23
|
+
assert response.key?('template_combinations')
|
|
24
|
+
template_combinations = response['template_combinations']
|
|
25
|
+
assert_equal 1, template_combinations.length
|
|
26
|
+
template_combination = TemplateCombination.find(template_combinations[0]['id'])
|
|
27
|
+
assert_equal response['id'], template_combination.provisioning_template_id
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -35,18 +35,21 @@ module ForemanPuppet
|
|
|
35
35
|
|
|
36
36
|
context 'with taxonomy given' do
|
|
37
37
|
test 'index should return puppetclasses only in Organization' do
|
|
38
|
+
puppetclass
|
|
38
39
|
get :index, params: { organization_id: default_organization.id }
|
|
39
40
|
assert_include json_response['results'].map { |_, v| v[0]['id'] }, puppetclass.id
|
|
40
41
|
assert_response :success
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
test 'index should return puppetclasses only in Organization' do
|
|
45
|
+
puppetclass
|
|
44
46
|
get :index, params: { location_id: default_location.id }
|
|
45
47
|
assert_include json_response['results'].map { |_, v| v[0]['id'] }, puppetclass.id
|
|
46
48
|
assert_response :success
|
|
47
49
|
end
|
|
48
50
|
|
|
49
51
|
test 'index should return puppetclasses only in Organization' do
|
|
52
|
+
puppetclass
|
|
50
53
|
get :index, params: { location_id: default_location.id, organization_id: default_organization.id }
|
|
51
54
|
assert_include json_response['results'].map { |_, v| v[0]['id'] }, puppetclass.id
|
|
52
55
|
assert_response :success
|
|
@@ -207,11 +207,17 @@ module ForemanPuppet
|
|
|
207
207
|
|
|
208
208
|
test_attributes pid: 'd7b1c336-bd9f-40a3-a573-939f2a021cdc'
|
|
209
209
|
test 'should not set merge overrides for non supported types' do
|
|
210
|
+
expected_error = if Gem::Version.new(SETTINGS[:version].notag) < Gem::Version.new('2.6')
|
|
211
|
+
'Validation failed: Merge overrides can only be set for array or hash'
|
|
212
|
+
else
|
|
213
|
+
'Validation failed: Merge overrides can only be set for array, hash, json or yaml'
|
|
214
|
+
end
|
|
215
|
+
|
|
210
216
|
put :update, params: { id: lookup_key.id, smart_class_parameter: { override: true,
|
|
211
217
|
default_value: RFauxFactory.gen_alpha,
|
|
212
218
|
merge_overrides: true } }
|
|
213
219
|
assert_response :internal_server_error, 'Can set merge overrides for non supported types'
|
|
214
|
-
assert_error_message(
|
|
220
|
+
assert_error_message(expected_error)
|
|
215
221
|
assert_not(lookup_key.reload.merge_overrides)
|
|
216
222
|
end
|
|
217
223
|
|
|
@@ -64,8 +64,8 @@ module ForemanPuppet
|
|
|
64
64
|
environment_id: template_combination.environment.id, id: template_combination.id }
|
|
65
65
|
|
|
66
66
|
json_response = ActiveSupport::JSON.decode(@response.body)
|
|
67
|
-
assert_equal(json_response['environment_id']
|
|
68
|
-
assert_equal(
|
|
67
|
+
assert_equal(environment.id, json_response['environment_id'])
|
|
68
|
+
assert_equal(hostgroups(:common).id, json_response['hostgroup_id'])
|
|
69
69
|
assert_response :success
|
|
70
70
|
end
|
|
71
71
|
|
|
@@ -9,7 +9,10 @@ module ForemanPuppet
|
|
|
9
9
|
basic_pagination_per_page_test
|
|
10
10
|
basic_pagination_rendered_test
|
|
11
11
|
|
|
12
|
+
let(:config_group) { FactoryBot.create(:config_group) }
|
|
13
|
+
|
|
12
14
|
test 'should get index' do
|
|
15
|
+
config_group
|
|
13
16
|
get :index, session: set_session_user
|
|
14
17
|
assert_response :success
|
|
15
18
|
assert_not_empty assigns(:config_groups)
|
|
@@ -28,18 +31,19 @@ module ForemanPuppet
|
|
|
28
31
|
end
|
|
29
32
|
|
|
30
33
|
test 'should get edit' do
|
|
31
|
-
get :edit, params: { id:
|
|
34
|
+
get :edit, params: { id: config_group }, session: set_session_user
|
|
32
35
|
assert_response :success
|
|
33
36
|
end
|
|
34
37
|
|
|
35
38
|
test 'should update config_group' do
|
|
36
|
-
put :update, params: { id:
|
|
39
|
+
put :update, params: { id: config_group, config_group: { name: 'new name' } }, session: set_session_user
|
|
37
40
|
assert_redirected_to config_groups_path
|
|
38
41
|
end
|
|
39
42
|
|
|
40
43
|
test 'should destroy config_group' do
|
|
44
|
+
config_group
|
|
41
45
|
assert_difference('ForemanPuppet::ConfigGroup.count', -1) do
|
|
42
|
-
delete :destroy, params: { id:
|
|
46
|
+
delete :destroy, params: { id: config_group }, session: set_session_user
|
|
43
47
|
end
|
|
44
48
|
assert_redirected_to config_groups_path
|
|
45
49
|
end
|
|
@@ -170,7 +170,7 @@ module ForemanPuppet
|
|
|
170
170
|
|
|
171
171
|
test 'user with viewer rights should fail to edit an environment' do
|
|
172
172
|
setup_user
|
|
173
|
-
get :edit, params: { id:
|
|
173
|
+
get :edit, params: { id: FactoryBot.create(:environment).name }, session: set_session_user.merge(user: users(:one).id)
|
|
174
174
|
assert_equal(403, @response.status)
|
|
175
175
|
end
|
|
176
176
|
|
|
@@ -215,7 +215,7 @@ module ForemanPuppet
|
|
|
215
215
|
# and should result in a disk_tree of {"env1" => ["a", "b", "c"],"env2" => ["a", "b", "c"]}
|
|
216
216
|
envs = HashWithIndifferentAccess.new(env1: %w[a b c], env2: %w[a b c])
|
|
217
217
|
pcs = [HashWithIndifferentAccess.new('a' => { 'name' => 'a', 'module' => '', 'params' => {} })]
|
|
218
|
-
classes =
|
|
218
|
+
classes = pcs.map { |k| [k.keys.first, Foreman::ImporterPuppetclass.new(k.values.first)] }.to_h
|
|
219
219
|
Environment.expects(:puppetEnvs).returns(envs).at_least(0)
|
|
220
220
|
ProxyAPI::Puppet.any_instance.stubs(:environments).returns(%w[env1 env2])
|
|
221
221
|
ProxyAPI::Puppet.any_instance.stubs(:classes).returns(classes)
|
|
@@ -4,10 +4,10 @@ module ForemanPuppet
|
|
|
4
4
|
class PuppetclassLookupKeysControllerTest < ActionController::TestCase
|
|
5
5
|
setup do
|
|
6
6
|
@routes = ForemanPuppet::Engine.routes
|
|
7
|
-
@factory_options = [{ puppetclass:
|
|
7
|
+
@factory_options = [{ puppetclass: FactoryBot.create(:puppetclass), override: true, default_value: 'test' }]
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
let(:lookup_key) { FactoryBot.create(:puppetclass_lookup_key,
|
|
10
|
+
let(:lookup_key) { FactoryBot.create(:puppetclass_lookup_key, override: true) }
|
|
11
11
|
|
|
12
12
|
basic_pagination_rendered_test
|
|
13
13
|
basic_pagination_per_page_test
|
|
@@ -60,23 +60,22 @@ module ForemanPuppet
|
|
|
60
60
|
|
|
61
61
|
test 'new db rows are not added to HostClass when POST to parameters' do
|
|
62
62
|
host = FactoryBot.create(:host, :with_puppet_enc, :with_puppetclass)
|
|
63
|
-
host_puppetclass_ids = host.host_classes.pluck(:puppetclass_id)
|
|
63
|
+
host_puppetclass_ids = host.puppet.host_classes.pluck(:puppetclass_id)
|
|
64
64
|
params = { id: puppetclass.id,
|
|
65
65
|
host_id: host.id,
|
|
66
|
-
host: { puppetclass_ids: (host_puppetclass_ids + [puppetclass.id]) } }
|
|
67
|
-
assert_difference(
|
|
66
|
+
host: { puppet: { puppetclass_ids: (host_puppetclass_ids + [puppetclass.id]) } } }
|
|
67
|
+
assert_difference(-> { ForemanPuppet::HostClass.count }, 0) do
|
|
68
68
|
post :parameters, params: params, session: set_session_user
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
test 'new db rows are not added to HostgroupClass when POST to parameters' do
|
|
73
|
-
skip 'dont know how to achieve for now' unless ForemanPuppet.extracted_from_core?
|
|
74
73
|
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, :with_puppetclass)
|
|
75
74
|
hostgroup_puppetclass_ids = hostgroup.puppet.hostgroup_classes.pluck(:puppetclass_id)
|
|
76
75
|
params = { id: puppetclass.id,
|
|
77
76
|
host_id: hostgroup.id,
|
|
78
|
-
hostgroup: { puppetclass_ids: (hostgroup_puppetclass_ids + [puppetclass.id]) } }
|
|
79
|
-
assert_difference(
|
|
77
|
+
hostgroup: { puppet: { puppetclass_ids: (hostgroup_puppetclass_ids + [puppetclass.id]) } } }
|
|
78
|
+
assert_difference(-> { ForemanPuppet::HostgroupClass.count }, 0) do
|
|
80
79
|
post :parameters, params: params, session: set_session_user
|
|
81
80
|
end
|
|
82
81
|
end
|
|
@@ -105,11 +105,14 @@ FactoryBot.define do
|
|
|
105
105
|
evaluator.parameter_count.times do
|
|
106
106
|
evaluator.environments.each do |env|
|
|
107
107
|
FactoryBot.create :puppetclass_lookup_key, override: false, puppetclass: pc, environment: env
|
|
108
|
+
# for Host#managed validation, once extracted_from_core? we can remove
|
|
109
|
+
env.reload
|
|
108
110
|
end
|
|
109
111
|
end
|
|
110
112
|
else
|
|
111
113
|
evaluator.environments.each do |env|
|
|
112
114
|
FactoryBot.create :environment_class, puppetclass: pc, environment: env unless env.nil?
|
|
115
|
+
env.reload
|
|
113
116
|
end
|
|
114
117
|
end
|
|
115
118
|
end
|
|
@@ -2,21 +2,21 @@ FactoryBot.modify do
|
|
|
2
2
|
factory :host do
|
|
3
3
|
trait :with_puppetclass do
|
|
4
4
|
transient do
|
|
5
|
-
environment
|
|
5
|
+
environment { FactoryBot.create(:environment) }
|
|
6
6
|
puppetclasses { [FactoryBot.create(:puppetclass, environments: [environment])] }
|
|
7
7
|
end
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
trait :with_config_group do
|
|
11
11
|
transient do
|
|
12
|
-
environment
|
|
12
|
+
environment { FactoryBot.create(:environment) }
|
|
13
13
|
config_groups { [FactoryBot.create(:config_group, :with_puppetclass, class_environments: [environment])] }
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
trait :with_puppet_enc do
|
|
18
18
|
transient do
|
|
19
|
-
environment
|
|
19
|
+
environment { FactoryBot.create(:environment) }
|
|
20
20
|
puppetclasses { [] }
|
|
21
21
|
config_groups { [] }
|
|
22
22
|
end
|
|
@@ -30,14 +30,14 @@ FactoryBot.modify do
|
|
|
30
30
|
factory :hostgroup do
|
|
31
31
|
trait :with_puppetclass do
|
|
32
32
|
transient do
|
|
33
|
-
environment
|
|
33
|
+
environment { FactoryBot.create(:environment) }
|
|
34
34
|
puppetclasses { [FactoryBot.create(:puppetclass, environments: [environment])] }
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
trait :with_puppet_enc do
|
|
39
39
|
transient do
|
|
40
|
-
environment
|
|
40
|
+
environment { FactoryBot.create(:environment) }
|
|
41
41
|
puppetclasses { [] }
|
|
42
42
|
config_groups { [] }
|
|
43
43
|
end
|
|
@@ -49,7 +49,7 @@ FactoryBot.modify do
|
|
|
49
49
|
|
|
50
50
|
trait :with_config_group do
|
|
51
51
|
transient do
|
|
52
|
-
environment
|
|
52
|
+
environment { FactoryBot.create(:environment) }
|
|
53
53
|
config_groups { [FactoryBot.create(:config_group, :with_puppetclass, class_environments: [environment])] }
|
|
54
54
|
end
|
|
55
55
|
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'test_puppet_helper'
|
|
2
|
+
|
|
3
|
+
module ForemanPuppet
|
|
4
|
+
module Mutations
|
|
5
|
+
module Hosts
|
|
6
|
+
class CreateMutationTest < GraphQLQueryTestCase
|
|
7
|
+
let(:hostname) { 'my-graphql-host' }
|
|
8
|
+
let(:tax_location) { FactoryBot.create(:location) }
|
|
9
|
+
let(:organization) { FactoryBot.create(:organization) }
|
|
10
|
+
let(:environment) { FactoryBot.create(:environment, locations: [tax_location], organizations: [organization]) }
|
|
11
|
+
let(:environment_id) { Foreman::GlobalId.for(environment) }
|
|
12
|
+
let(:puppetclass) { FactoryBot.create(:puppetclass) }
|
|
13
|
+
let(:puppetclass_id) { Foreman::GlobalId.for(puppetclass) }
|
|
14
|
+
|
|
15
|
+
let(:variables) do
|
|
16
|
+
{
|
|
17
|
+
name: hostname,
|
|
18
|
+
environmentId: environment_id,
|
|
19
|
+
puppetclassIds: [puppetclass_id],
|
|
20
|
+
interfacesAttributes: [
|
|
21
|
+
{
|
|
22
|
+
type: 'bond',
|
|
23
|
+
attachedTo: %w[eth0 eth1],
|
|
24
|
+
identifier: 'bond0',
|
|
25
|
+
primary: true,
|
|
26
|
+
provision: true,
|
|
27
|
+
managed: true,
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
let(:context_user) { FactoryBot.create(:user, :admin, locations: [tax_location], organizations: [organization]) }
|
|
33
|
+
let(:data) { result['data']['createHost']['host'] }
|
|
34
|
+
|
|
35
|
+
let(:query) do
|
|
36
|
+
<<-GRAPHQL
|
|
37
|
+
mutation createHostMutation(
|
|
38
|
+
$name: String!,
|
|
39
|
+
$environmentId: ID,
|
|
40
|
+
$puppetclassIds: [ID!],
|
|
41
|
+
$interfacesAttributes: [InterfaceAttributesInput!]
|
|
42
|
+
) {
|
|
43
|
+
createHost(input: {
|
|
44
|
+
name: $name,
|
|
45
|
+
environmentId: $environmentId,
|
|
46
|
+
puppetclassIds: $puppetclassIds,
|
|
47
|
+
interfacesAttributes: $interfacesAttributes,
|
|
48
|
+
}) {
|
|
49
|
+
host {
|
|
50
|
+
id
|
|
51
|
+
},
|
|
52
|
+
errors {
|
|
53
|
+
path
|
|
54
|
+
message
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
GRAPHQL
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
setup :disable_orchestration
|
|
62
|
+
|
|
63
|
+
it 'creates a host with puppet parameters' do
|
|
64
|
+
assert_difference(-> { Host.count }, +1) do
|
|
65
|
+
assert_empty result['errors']
|
|
66
|
+
assert_empty result['data']['createHost']['errors']
|
|
67
|
+
|
|
68
|
+
host = Host.find(Foreman::GlobalId.decode(data['id'])[2])
|
|
69
|
+
assert_equal environment.id, host.puppet.environment_id
|
|
70
|
+
assert_equal [puppetclass.id], host.puppet.puppetclasses.pluck(:id)
|
|
71
|
+
|
|
72
|
+
assert_equal 1, host.interfaces.count
|
|
73
|
+
interface = host.interfaces.first
|
|
74
|
+
assert_equal 'Nic::Bond', interface.type
|
|
75
|
+
assert_equal 'eth0, eth1', interface.attached_to
|
|
76
|
+
assert_equal 'bond0', interface.identifier
|
|
77
|
+
assert interface.primary
|
|
78
|
+
assert interface.provision
|
|
79
|
+
assert interface.managed
|
|
80
|
+
|
|
81
|
+
assert_not_nil data
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|