foreman_puppet 1.0.1 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/concerns/foreman_puppet/extensions/hostgroups_controller_extensions.rb +4 -2
- data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +1 -1
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +41 -32
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_hostgroup.rb +42 -33
- data/app/helpers/foreman_puppet/puppet_smart_proxies_helper.rb +4 -0
- data/app/models/foreman_puppet/host_puppet_facet.rb +1 -1
- data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +2 -0
- data/app/services/concerns/foreman_puppet/extensions/host_counter.rb +17 -0
- data/app/views/hosts/_form_puppet_enc_tab.html.erb +3 -4
- data/db/migrate/20200803113803_migrate_environment_to_puppet_facet.foreman_puppet.rb +2 -2
- data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +36 -20
- data/db/migrate/20211112130803_cleanup_environment_from_core_tables.foreman_puppet.rb +10 -0
- data/lib/foreman_puppet/engine.rb +2 -0
- data/lib/foreman_puppet/version.rb +1 -1
- data/locale/cs_CZ/foreman_puppet.edit.po +1085 -0
- data/locale/cs_CZ/foreman_puppet.po.time_stamp +0 -0
- data/locale/en/foreman_puppet.edit.po +317 -162
- data/test/controllers/foreman_puppet/hostgroups_controller_test.rb +72 -52
- data/test/factories/host_puppet_enhancements.rb +3 -0
- data/test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb +70 -31
- data/test/models/foreman_puppet/host_puppet_facet_test.rb +7 -1
- data/test/services/foreman_puppet/host_counter_test.rb +17 -0
- data/webpack/src/Components/Environments/Welcome.js +2 -2
- metadata +11 -5
@@ -4,68 +4,88 @@ module ForemanPuppet
|
|
4
4
|
class HostgroupsControllerTest < ActionController::TestCase
|
5
5
|
tests ::HostgroupsController
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
context 'with core routes' do
|
8
|
+
describe '#nest' do
|
9
|
+
it 'works without puppetclasses' do
|
10
|
+
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, :with_puppetclass)
|
11
|
+
|
12
|
+
post :nest, params: { id: hostgroup.id }, session: set_session_user
|
13
|
+
assert_template 'new'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'works with puppetclasses' do
|
17
|
+
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, :with_puppetclass)
|
18
|
+
|
19
|
+
post :nest, params: { id: hostgroup.id }, session: set_session_user
|
20
|
+
assert_template 'new'
|
21
|
+
end
|
22
|
+
end
|
9
23
|
end
|
10
24
|
|
11
|
-
|
25
|
+
context 'with plugin routes' do
|
12
26
|
setup do
|
13
|
-
@
|
14
|
-
@puppetclass = FactoryBot.create(:puppetclass)
|
15
|
-
@hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, environment: @environment)
|
16
|
-
@params = {
|
17
|
-
id: @hostgroup.id,
|
18
|
-
hostgroup: {
|
19
|
-
name: @hostgroup.name,
|
20
|
-
environment_id: '',
|
21
|
-
puppetclass_ids: [@puppetclass.id],
|
22
|
-
},
|
23
|
-
}
|
27
|
+
@routes = ForemanPuppet::Engine.routes
|
24
28
|
end
|
25
29
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
describe '#environment_selected' do
|
31
|
+
setup do
|
32
|
+
@environment = FactoryBot.create(:environment)
|
33
|
+
@puppetclass = FactoryBot.create(:puppetclass)
|
34
|
+
@hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, environment: @environment)
|
35
|
+
@params = {
|
36
|
+
id: @hostgroup.id,
|
37
|
+
hostgroup: {
|
38
|
+
name: @hostgroup.name,
|
39
|
+
environment_id: '',
|
40
|
+
puppetclass_ids: [@puppetclass.id],
|
41
|
+
},
|
42
|
+
}
|
43
|
+
end
|
33
44
|
|
34
|
-
|
35
|
-
|
36
|
-
other_environment = FactoryBot.create(:environment)
|
37
|
-
@params[:hostgroup][:environment_id] = other_environment.id
|
45
|
+
test 'should return the selected puppet classes on environment change' do
|
46
|
+
assert_equal 0, @hostgroup.puppet.puppetclasses.length
|
38
47
|
|
39
48
|
post :environment_selected, params: @params, session: set_session_user, xhr: true
|
40
|
-
assert_equal assigns(:
|
49
|
+
assert_equal(1, assigns(:hostgroup).puppet.puppetclasses.length)
|
50
|
+
assert_include assigns(:hostgroup).puppet.puppetclasses, @puppetclass
|
41
51
|
end
|
42
|
-
end
|
43
52
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
53
|
+
context 'environment_id param is set' do
|
54
|
+
test 'it will take the hostgroup params environment_id' do
|
55
|
+
other_environment = FactoryBot.create(:environment)
|
56
|
+
@params[:hostgroup][:environment_id] = other_environment.id
|
57
|
+
|
58
|
+
post :environment_selected, params: @params, session: set_session_user, xhr: true
|
59
|
+
assert_equal assigns(:environment), other_environment
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
test 'should not escape lookup values on environment change' do
|
64
|
+
hostgroup = FactoryBot.create(:hostgroup, :with_puppet_enc, environment: @environment, puppetclasses: [@puppetclass])
|
65
|
+
lookup_key = FactoryBot.create(:puppetclass_lookup_key, :array, default_value: %w[a b],
|
66
|
+
override: true,
|
67
|
+
puppetclass: @puppetclass,
|
68
|
+
overrides: { "hostgroup=#{hostgroup.name}" => %w[c d] })
|
69
|
+
lookup_value = lookup_key.lookup_values.first
|
70
|
+
FactoryBot.create(:environment_class, puppetclass: @puppetclass, environment: @environment, puppetclass_lookup_key: lookup_key)
|
71
|
+
|
72
|
+
# sending exactly what the host form would send which is lookup_value.value_before_type_cast
|
73
|
+
lk = { 'lookup_values_attributes' => { lookup_key.id.to_s => { 'value' => lookup_value.value_before_type_cast,
|
74
|
+
'id' => lookup_value.id,
|
75
|
+
'lookup_key_id' => lookup_key.id,
|
76
|
+
'_destroy' => false } } }
|
77
|
+
|
78
|
+
params = {
|
79
|
+
hostgroup_id: hostgroup.id,
|
80
|
+
hostgroup: hostgroup.attributes.merge(lk),
|
81
|
+
}
|
82
|
+
|
83
|
+
# environment change calls puppetclass_parameters which caused the extra escaping
|
84
|
+
post :puppetclass_parameters, params: params, session: set_session_user, xhr: true
|
85
|
+
|
86
|
+
# if this was escaped during refresh_host the value in response.body after unescapeHTML would include "[\\\"c\\\",\\\"d\\\"]"
|
87
|
+
assert_includes CGI.unescapeHTML(response.body), '["c","d"]'
|
88
|
+
end
|
69
89
|
end
|
70
90
|
end
|
71
91
|
end
|
@@ -45,6 +45,9 @@ FactoryBot.modify do
|
|
45
45
|
puppet_proxy do
|
46
46
|
FactoryBot.create(:smart_proxy, features: [FactoryBot.create(:feature, :puppet)])
|
47
47
|
end
|
48
|
+
puppet_ca_proxy do
|
49
|
+
FactoryBot.create(:smart_proxy, features: [FactoryBot.create(:feature, :puppetca)])
|
50
|
+
end
|
48
51
|
end
|
49
52
|
|
50
53
|
trait :with_config_group do
|
@@ -9,49 +9,88 @@ module ForemanPuppet
|
|
9
9
|
include HostsAndHostgroupsHelper
|
10
10
|
|
11
11
|
describe 'puppet environment field' do
|
12
|
+
let(:fields) { mock('fields_for') }
|
13
|
+
let(:f) { mock('form_for') }
|
14
|
+
let(:object) { mock('object') }
|
15
|
+
let(:puppet_facet) { mock('puppet') }
|
16
|
+
|
12
17
|
setup do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@host.stubs(:puppet).returns(puppet)
|
17
|
-
@host.stubs(:id).returns(999)
|
18
|
-
@f = mock('f')
|
19
|
-
@f.stubs(:object).returns(@host)
|
20
|
-
@fields = mock('fields')
|
21
|
-
@fields.stubs(:object).returns(puppet)
|
22
|
-
@f.stubs(:fields_for).yields(@fields)
|
18
|
+
f.stubs(:object).returns(object)
|
19
|
+
f.stubs(:fields_for).yields(fields)
|
20
|
+
fields.stubs(:object).returns(puppet_facet)
|
23
21
|
end
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
describe '#host_puppet_environment_field' do
|
24
|
+
let(:object) do
|
25
|
+
host = mock('host')
|
26
|
+
host.stubs(:hostgroup)
|
27
|
+
host.stubs(:puppet).returns(puppet_facet)
|
28
|
+
host.stubs(:id).returns(999)
|
29
|
+
host
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
test 'it adds new first level attributes' do
|
33
|
+
fields.expects(:collection_select).with do |*attrs|
|
34
|
+
select_options, html_options = extract_collection_options(attrs)
|
35
|
+
select_options[:test_select_option] == 'test_value1' &&
|
36
|
+
html_options[:test_html_option] == 'test_value2'
|
37
|
+
end
|
34
38
|
|
35
|
-
|
36
|
-
@fields.expects(:collection_select).with do |*attrs|
|
37
|
-
select_options, html_options = extract_collection_options(attrs)
|
38
|
-
select_options[:test_select_option] == 'test_value1' &&
|
39
|
-
html_options[:data][:test] == 'test_value2'
|
39
|
+
host_puppet_environment_field(f, { test_select_option: 'test_value1' }, { test_html_option: 'test_value2' })
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
test 'it adds new data attributes' do
|
43
|
+
fields.expects(:collection_select).with do |*attrs|
|
44
|
+
select_options, html_options = extract_collection_options(attrs)
|
45
|
+
select_options[:test_select_option] == 'test_value1' &&
|
46
|
+
html_options[:data][:test] == 'test_value2'
|
47
|
+
end
|
48
|
+
|
49
|
+
host_puppet_environment_field(f, { test_select_option: 'test_value1' }, { data: { test: 'test_value2' } })
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'it overrides existing attributes' do
|
53
|
+
fields.expects(:collection_select).with do |*attrs|
|
54
|
+
html_options = attrs.pop
|
55
|
+
html_options[:data][:test] == 'some_test_value' &&
|
56
|
+
html_options[:data][:url] == '/test/url'
|
57
|
+
end.returns('')
|
58
|
+
|
59
|
+
html = host_puppet_environment_field(f, { disable_button: false }, { data: { url: '/test/url', test: 'some_test_value' } })
|
60
|
+
|
61
|
+
assert_no_match(/btn/, html)
|
62
|
+
end
|
43
63
|
end
|
44
64
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
65
|
+
describe '#hostgroup_puppet_environment_field' do
|
66
|
+
let(:object) { FactoryBot.build_stubbed(:hostgroup, parent: parent_hg) }
|
67
|
+
let(:puppet_facet) { object.puppet || object.build_puppet }
|
68
|
+
|
69
|
+
context 'parent without puppet' do
|
70
|
+
let(:parent_hg) { FactoryBot.create(:hostgroup) }
|
51
71
|
|
52
|
-
|
72
|
+
it 'shows Inherit option with no value' do
|
73
|
+
fields.expects(:collection_select).with do |*attrs|
|
74
|
+
options = attrs.second
|
75
|
+
options.first.to_label == 'Inherit parent (no value)'
|
76
|
+
end.returns('')
|
77
|
+
|
78
|
+
hostgroup_puppet_environment_field(f)
|
79
|
+
end
|
80
|
+
end
|
53
81
|
|
54
|
-
|
82
|
+
context 'parent with puppet' do
|
83
|
+
let(:parent_hg) { FactoryBot.create(:hostgroup, :with_puppet_enc) }
|
84
|
+
|
85
|
+
it 'shows Inherit option with no value' do
|
86
|
+
fields.expects(:collection_select).with do |*attrs|
|
87
|
+
options = attrs.second
|
88
|
+
options.first.to_label == "Inherit parent (#{parent_hg.puppet.environment.name})"
|
89
|
+
end.returns('')
|
90
|
+
|
91
|
+
hostgroup_puppet_environment_field(f)
|
92
|
+
end
|
93
|
+
end
|
55
94
|
end
|
56
95
|
end
|
57
96
|
|
@@ -107,7 +107,13 @@ module ForemanPuppet
|
|
107
107
|
test 'should return empty array if host has no hostgroup' do
|
108
108
|
host = FactoryBot.create(:host, :with_puppet_enc)
|
109
109
|
assert_not host.hostgroup
|
110
|
-
|
110
|
+
assert_equal [], host.puppet.parent_config_groups
|
111
|
+
end
|
112
|
+
|
113
|
+
test 'should return empty array if hostgroup do not have puppet data' do
|
114
|
+
hostgroup = FactoryBot.create(:hostgroup)
|
115
|
+
host = FactoryBot.create(:host, :with_puppet_enc, hostgroup: hostgroup)
|
116
|
+
assert_equal [], host.puppet.parent_config_groups
|
111
117
|
end
|
112
118
|
end
|
113
119
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'test_puppet_helper'
|
2
|
+
|
3
|
+
module ForemanPuppet
|
4
|
+
class HostCounterTest < ActiveSupport::TestCase
|
5
|
+
def hosts_count(association)
|
6
|
+
::HostCounter.new(association)
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:environment) { FactoryBot.create(:environment) }
|
10
|
+
|
11
|
+
test 'it should get number of hosts associated to environment' do
|
12
|
+
FactoryBot.create(:host, :with_puppet_enc, environment: environment)
|
13
|
+
count = hosts_count(:environment)
|
14
|
+
assert_equal 1, count[environment]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -7,11 +7,11 @@ import { foremanUrl, getManualURL } from 'foremanReact/common/helpers';
|
|
7
7
|
export const WelcomeEnv = ({ canCreate }) => {
|
8
8
|
const action = canCreate && {
|
9
9
|
title: __('Create Puppet Environment'),
|
10
|
-
url: foremanUrl('environments/new'),
|
10
|
+
url: foremanUrl('/foreman_puppet/environments/new'),
|
11
11
|
};
|
12
12
|
|
13
13
|
const content = __(`If you are planning to use Foreman as an external node classifier you should provide information about one or more environments.<br/>
|
14
|
-
This information is commonly imported from a pre-existing Puppet configuration by the use of the <a href=${getManualURL(
|
14
|
+
This information is commonly imported from a pre-existing Puppet configuration by the use of the <a target="_blank" href=${getManualURL(
|
15
15
|
'4.2.2Classes'
|
16
16
|
)}>Puppet classes and environment importer.</a>`);
|
17
17
|
return (
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_puppet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ondřej Ezr
|
8
8
|
- Shira Maximov
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-11-15 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Allow assigning Puppet environmets and classes to the Foreman Hosts.
|
15
15
|
email:
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- app/models/foreman_puppet/puppetclass.rb
|
95
95
|
- app/models/foreman_puppet/puppetclass_lookup_key.rb
|
96
96
|
- app/prepend_views/api/v2/template_combinations/base.json.rabl
|
97
|
+
- app/services/concerns/foreman_puppet/extensions/host_counter.rb
|
97
98
|
- app/services/foreman_puppet/host_info_providers/config_groups_info.rb
|
98
99
|
- app/services/foreman_puppet/host_info_providers/puppet_info.rb
|
99
100
|
- app/services/foreman_puppet/input_type/puppet_parameter_input.rb
|
@@ -182,6 +183,7 @@ files:
|
|
182
183
|
- db/migrate/20200803113803_migrate_environment_to_puppet_facet.foreman_puppet.rb
|
183
184
|
- db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb
|
184
185
|
- db/migrate/20201125113903_migrate_puppetclasses_to_facets.foreman_puppet.rb
|
186
|
+
- db/migrate/20211112130803_cleanup_environment_from_core_tables.foreman_puppet.rb
|
185
187
|
- db/migrate_foreman/20090722141107_create_environments.rb
|
186
188
|
- db/migrate_foreman/20120905095532_create_environment_classes.rb
|
187
189
|
- db/migrate_foreman/20140407161817_create_config_groups.rb
|
@@ -200,6 +202,8 @@ files:
|
|
200
202
|
- lib/tasks/foreman_puppet_tasks.rake
|
201
203
|
- locale/Makefile
|
202
204
|
- locale/action_names.rb
|
205
|
+
- locale/cs_CZ/foreman_puppet.edit.po
|
206
|
+
- locale/cs_CZ/foreman_puppet.po.time_stamp
|
203
207
|
- locale/en/LC_MESSAGES/foreman_puppet.mo
|
204
208
|
- locale/en/foreman_puppet.edit.po
|
205
209
|
- locale/en/foreman_puppet.po
|
@@ -263,6 +267,7 @@ files:
|
|
263
267
|
- test/models/foreman_puppet/report_test.rb
|
264
268
|
- test/models/foreman_puppet/smart_proxy_test.rb
|
265
269
|
- test/models/foreman_puppet/user_test.rb
|
270
|
+
- test/services/foreman_puppet/host_counter_test.rb
|
266
271
|
- test/services/foreman_puppet/host_info_providers/config_groups_info_test.rb
|
267
272
|
- test/services/foreman_puppet/host_info_providers/puppet_info_test.rb
|
268
273
|
- test/services/foreman_puppet/input_type/puppet_parameter_input_test.rb
|
@@ -296,7 +301,7 @@ homepage: https://github.com/theforeman/foreman_puppet
|
|
296
301
|
licenses:
|
297
302
|
- GPL-3.0
|
298
303
|
metadata: {}
|
299
|
-
post_install_message:
|
304
|
+
post_install_message:
|
300
305
|
rdoc_options: []
|
301
306
|
require_paths:
|
302
307
|
- lib
|
@@ -312,13 +317,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
312
317
|
version: '0'
|
313
318
|
requirements: []
|
314
319
|
rubygems_version: 3.1.6
|
315
|
-
signing_key:
|
320
|
+
signing_key:
|
316
321
|
specification_version: 4
|
317
322
|
summary: Adds puppet ENC features
|
318
323
|
test_files:
|
319
324
|
- test/services/foreman_puppet/host_info_providers/config_groups_info_test.rb
|
320
325
|
- test/services/foreman_puppet/host_info_providers/puppet_info_test.rb
|
321
326
|
- test/services/foreman_puppet/input_type/puppet_parameter_input_test.rb
|
327
|
+
- test/services/foreman_puppet/host_counter_test.rb
|
322
328
|
- test/integration/foreman_puppet/smartclass_parameter_js_test.rb
|
323
329
|
- test/integration/foreman_puppet/puppetclass_js_test.rb
|
324
330
|
- test/integration/foreman_puppet/hostgroup_js_test.rb
|