foreman_salt 16.0.0 → 16.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +9 -3
- data/app/controllers/foreman_salt/state_importer.rb +2 -2
- data/app/models/foreman_salt/salt_environment.rb +1 -1
- data/db/migrate/20150220122707_fix_incorrect_report_metrics.rb +1 -1
- data/db/migrate/20150411003302_add_environments_to_modules.rb +1 -1
- data/lib/foreman_salt/version.rb +1 -1
- data/test/functional/api/v2/salt_autosign_controller_test.rb +3 -0
- data/test/functional/api/v2/salt_environments_controller_test.rb +3 -0
- data/test/functional/api/v2/salt_keys_controller_test.rb +3 -0
- data/test/functional/api/v2/salt_states_controller_test.rb +8 -0
- data/test/functional/api/v2/salt_variables_controller_test.rb +3 -0
- data/test/functional/hosts_controller_test.rb +2 -0
- data/test/functional/minions_controller_test.rb +14 -0
- data/test/integration/hosts_js_test.rb +12 -6
- data/test/integration/salt_autosign_test.rb +5 -1
- data/test/integration/salt_environment_test.rb +3 -0
- data/test/integration/salt_keys_test.rb +6 -0
- data/test/integration/salt_module_test.rb +4 -0
- data/test/integration/salt_variable_test.rb +3 -0
- data/test/unit/grains_importer_test.rb +2 -0
- data/test/unit/host_extensions_test.rb +16 -1
- data/test/unit/hostgroup_extensions_test.rb +9 -1
- data/test/unit/report_importer_test.rb +10 -2
- data/test/unit/salt_modules_test.rb +2 -0
- data/test/unit/salt_variables_test.rb +6 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e0e128301ee5900c260c90bc80750a764b4069a0b9469c4586acca098841333
|
4
|
+
data.tar.gz: 42a8c75b129c9ee1b4c2e25e46d5ab24cb0535662f97c689c3e2583361a97414
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd9a20bd1372f8a8623fae1b0746238781c646a95b24c2e733e0133092c199c9e2a92b9583fc9a1503a492164ff5e8918b432f8257cc04091f05917c90afec93
|
7
|
+
data.tar.gz: a48416f753cd0141f0afd91eb681fed75cfbd865b530c5bb4c8137d3796c98504563af8dc64fce04df2695636c8a2a7baeaed79d236a4660a060fa9deb4dfa78
|
data/Rakefile
CHANGED
@@ -4,6 +4,7 @@ begin
|
|
4
4
|
rescue LoadError
|
5
5
|
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
6
|
end
|
7
|
+
|
7
8
|
begin
|
8
9
|
require 'rdoc/task'
|
9
10
|
rescue LoadError
|
@@ -20,9 +21,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
20
21
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
22
|
end
|
22
23
|
|
23
|
-
APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
|
24
|
-
load 'rails/tasks/engine.rake'
|
25
|
-
|
26
24
|
Bundler::GemHelper.install_tasks
|
27
25
|
|
28
26
|
require 'rake/testtask'
|
@@ -34,4 +32,12 @@ Rake::TestTask.new(:test) do |t|
|
|
34
32
|
t.verbose = false
|
35
33
|
end
|
36
34
|
|
35
|
+
begin
|
36
|
+
require 'rubocop/rake_task'
|
37
|
+
rescue LoadError
|
38
|
+
# Test group disabled
|
39
|
+
else
|
40
|
+
RuboCop::RakeTask.new
|
41
|
+
end
|
42
|
+
|
37
43
|
task default: :test
|
@@ -63,11 +63,11 @@ module ForemanSalt
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def clean_orphans
|
66
|
-
SaltModule.all.
|
66
|
+
SaltModule.all.find_each do |state|
|
67
67
|
state.destroy if state.salt_environments.empty?
|
68
68
|
end
|
69
69
|
|
70
|
-
SaltEnvironment.all.
|
70
|
+
SaltEnvironment.all.find_each do |environment|
|
71
71
|
environment.destroy if environment.salt_modules.empty?
|
72
72
|
end
|
73
73
|
end
|
@@ -11,7 +11,7 @@ module ForemanSalt
|
|
11
11
|
has_many :salt_module_environments
|
12
12
|
has_many :salt_modules, through: :salt_module_environments, before_remove: :remove_from_hosts
|
13
13
|
|
14
|
-
validates :name, uniqueness: true, presence: true, format: { with: /\A[\w\d
|
14
|
+
validates :name, uniqueness: true, presence: true, format: { with: /\A[\w\d\-.]+\z/, message: N_('is alphanumeric and cannot contain spaces') }
|
15
15
|
|
16
16
|
scoped_search on: :name, complete_value: true
|
17
17
|
scoped_search relation: :hostgroups, on: :name, complete_value: true, rename: :hostgroup
|
@@ -6,7 +6,7 @@ class AddEnvironmentsToModules < ActiveRecord::Migration[4.2]
|
|
6
6
|
end
|
7
7
|
|
8
8
|
environments = ForemanSalt::SaltEnvironment.all
|
9
|
-
ForemanSalt::SaltModule.all.
|
9
|
+
ForemanSalt::SaltModule.all.find_each do |state|
|
10
10
|
state.salt_environments << environments
|
11
11
|
end
|
12
12
|
end
|
data/lib/foreman_salt/version.rb
CHANGED
@@ -13,18 +13,21 @@ module ForemanSalt
|
|
13
13
|
|
14
14
|
test 'should get index' do
|
15
15
|
get :index, params: { smart_proxy_id: @proxy.id }
|
16
|
+
|
16
17
|
assert_response :success
|
17
18
|
end
|
18
19
|
|
19
20
|
test 'should create autosign' do
|
20
21
|
ProxyAPI::Salt.any_instance.expects(:autosign_create).once.returns(true)
|
21
22
|
post :create, params: { smart_proxy_id: @proxy.id, record: 'unicorn.example.com' }
|
23
|
+
|
22
24
|
assert_response :success
|
23
25
|
end
|
24
26
|
|
25
27
|
test 'should delete autosign' do
|
26
28
|
ProxyAPI::Salt.any_instance.expects(:autosign_remove).once.returns(true)
|
27
29
|
delete :destroy, params: { smart_proxy_id: @proxy.id, record: 'unicorn.example.com' }
|
30
|
+
|
28
31
|
assert_response :success
|
29
32
|
end
|
30
33
|
end
|
@@ -6,6 +6,7 @@ module ForemanSalt
|
|
6
6
|
class SaltEnvironmentsControllerTest < ActionController::TestCase
|
7
7
|
test 'should get index' do
|
8
8
|
get :index
|
9
|
+
|
9
10
|
assert_response :success
|
10
11
|
assert_template 'api/v2/salt_environments/index'
|
11
12
|
end
|
@@ -13,12 +14,14 @@ module ForemanSalt
|
|
13
14
|
test 'should show environment' do
|
14
15
|
environment = ForemanSalt::SaltEnvironment.create(name: 'foo')
|
15
16
|
get :show, params: { id: environment.id }
|
17
|
+
|
16
18
|
assert_response :success
|
17
19
|
assert_template 'api/v2/salt_environments/show'
|
18
20
|
end
|
19
21
|
|
20
22
|
test 'should create environment' do
|
21
23
|
post :create, params: { environment: { name: 'unicorn' } }
|
24
|
+
|
22
25
|
assert_response :success
|
23
26
|
assert ForemanSalt::SaltEnvironment.find_by(name: 'unicorn')
|
24
27
|
assert_template 'api/v2/salt_environments/create'
|
@@ -13,18 +13,21 @@ module ForemanSalt
|
|
13
13
|
|
14
14
|
test 'should get index' do
|
15
15
|
get :index, params: { smart_proxy_id: @proxy.id }
|
16
|
+
|
16
17
|
assert_response :success
|
17
18
|
end
|
18
19
|
|
19
20
|
test 'should update keys' do
|
20
21
|
ProxyAPI::Salt.any_instance.expects(:key_accept).once.returns(true)
|
21
22
|
put :update, params: { smart_proxy_id: @proxy.id, name: 'saltstack.example.com', state: 'accepted' }
|
23
|
+
|
22
24
|
assert_response :success
|
23
25
|
end
|
24
26
|
|
25
27
|
test 'should delete keys' do
|
26
28
|
ProxyAPI::Salt.any_instance.expects(:key_delete).once.returns(true)
|
27
29
|
delete :destroy, params: { smart_proxy_id: @proxy.id, name: 'saltstack.example.com' }
|
30
|
+
|
28
31
|
assert_response :success
|
29
32
|
end
|
30
33
|
end
|
@@ -6,6 +6,7 @@ module ForemanSalt
|
|
6
6
|
class SaltStatesControllerTest < ActionController::TestCase
|
7
7
|
test 'should get index' do
|
8
8
|
get :index
|
9
|
+
|
9
10
|
assert_response :success
|
10
11
|
assert_template 'api/v2/salt_states/index'
|
11
12
|
end
|
@@ -13,12 +14,14 @@ module ForemanSalt
|
|
13
14
|
test 'should show state' do
|
14
15
|
state = ForemanSalt::SaltModule.create(name: 'foo.bar.baz')
|
15
16
|
get :show, params: { id: state.id }
|
17
|
+
|
16
18
|
assert_response :success
|
17
19
|
assert_template 'api/v2/salt_states/show'
|
18
20
|
end
|
19
21
|
|
20
22
|
test 'should create state' do
|
21
23
|
post :create, params: { state: { name: 'unicorn' } }
|
24
|
+
|
22
25
|
assert_response :success
|
23
26
|
assert ForemanSalt::SaltModule.find_by(name: 'unicorn')
|
24
27
|
assert_template 'api/v2/salt_states/create'
|
@@ -48,12 +51,14 @@ module ForemanSalt
|
|
48
51
|
|
49
52
|
@states.each do |env, states|
|
50
53
|
environment = ::ForemanSalt::SaltEnvironment.find_by(name: env)
|
54
|
+
|
51
55
|
assert_empty environment.salt_modules.map(&:name) - states
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
55
59
|
test 'should import only from a given environment' do
|
56
60
|
post :import, params: { smart_proxy_id: @proxy.id, salt_environments: ['env2'] }
|
61
|
+
|
57
62
|
assert_response :success
|
58
63
|
assert_not ::ForemanSalt::SaltEnvironment.where(name: 'env1').first
|
59
64
|
assert ::ForemanSalt::SaltEnvironment.where(name: 'env2').first
|
@@ -64,6 +69,7 @@ module ForemanSalt
|
|
64
69
|
state = FactoryBot.create :salt_module, salt_environments: [env]
|
65
70
|
|
66
71
|
post :import, params: { smart_proxy_id: @proxy.id, actions: ['add'] }
|
72
|
+
|
67
73
|
assert_response :success
|
68
74
|
assert ::ForemanSalt::SaltModule.where(id: state).first
|
69
75
|
assert ::ForemanSalt::SaltModule.where(name: 'state1').first
|
@@ -72,6 +78,7 @@ module ForemanSalt
|
|
72
78
|
test 'should limit actions to remove' do
|
73
79
|
state = FactoryBot.create :salt_module
|
74
80
|
post :import, params: { smart_proxy_id: @proxy.id, actions: ['remove'] }
|
81
|
+
|
75
82
|
assert_response :success
|
76
83
|
assert_not ::ForemanSalt::SaltModule.where(id: state).first
|
77
84
|
assert_not ::ForemanSalt::SaltModule.where(name: 'state1').first
|
@@ -79,6 +86,7 @@ module ForemanSalt
|
|
79
86
|
|
80
87
|
test 'dryrun should do nothing' do
|
81
88
|
post :import, params: { smart_proxy_id: @proxy.id, dryrun: true }
|
89
|
+
|
82
90
|
assert_response :success
|
83
91
|
assert_not ::ForemanSalt::SaltModule.all.any?
|
84
92
|
assert_not ::ForemanSalt::SaltEnvironment.all.any?
|
@@ -14,12 +14,14 @@ module ForemanSalt
|
|
14
14
|
test 'should get index' do
|
15
15
|
get :index, session: set_session_user
|
16
16
|
response = JSON.parse(@response.body)
|
17
|
+
|
17
18
|
assert_not_empty response['results']
|
18
19
|
assert_response :success
|
19
20
|
end
|
20
21
|
|
21
22
|
test 'should destroy' do
|
22
23
|
delete :destroy, params: { id: @variable.id }, session: set_session_user
|
24
|
+
|
23
25
|
assert_response :ok
|
24
26
|
assert_not SaltVariable.exists?(@variable.id)
|
25
27
|
end
|
@@ -27,6 +29,7 @@ module ForemanSalt
|
|
27
29
|
test 'should create' do
|
28
30
|
params = { key: 'test name', salt_state_id: FactoryBot.create(:salt_module).id }
|
29
31
|
post :create, params: params, session: set_session_user
|
32
|
+
|
30
33
|
assert_response :success
|
31
34
|
end
|
32
35
|
end
|
@@ -21,6 +21,7 @@ module ForemanSalt
|
|
21
21
|
|
22
22
|
post :update_multiple_salt_master, params: params,
|
23
23
|
session: set_session_user.merge(user: users(:one).id)
|
24
|
+
|
24
25
|
assert_response :forbidden
|
25
26
|
end
|
26
27
|
|
@@ -79,6 +80,7 @@ module ForemanSalt
|
|
79
80
|
|
80
81
|
post :update_multiple_salt_environment, params: params,
|
81
82
|
session: set_session_user.merge(user: users(:one).id)
|
83
|
+
|
82
84
|
assert_response :forbidden
|
83
85
|
end
|
84
86
|
|
@@ -18,9 +18,11 @@ module ForemanSalt
|
|
18
18
|
|
19
19
|
test 'salt smart proxy should get salt external node' do
|
20
20
|
get :node, params: { id: @host, format: 'yml' }
|
21
|
+
|
21
22
|
assert_response :success
|
22
23
|
|
23
24
|
res = YAML.safe_load(@response.body)
|
25
|
+
|
24
26
|
assert_equal('different', res['parameters']['parameter1'])
|
25
27
|
end
|
26
28
|
|
@@ -28,9 +30,11 @@ module ForemanSalt
|
|
28
30
|
Setting['salt_namespace_pillars'] = true
|
29
31
|
|
30
32
|
get :node, params: { id: @host, format: 'yml' }
|
33
|
+
|
31
34
|
assert_response :success
|
32
35
|
|
33
36
|
res = YAML.safe_load(@response.body)
|
37
|
+
|
34
38
|
assert_equal('different', res['parameters']['foreman']['parameter1'])
|
35
39
|
end
|
36
40
|
|
@@ -40,9 +44,11 @@ module ForemanSalt
|
|
40
44
|
@host.salt_modules << var.salt_module
|
41
45
|
|
42
46
|
get :node, params: { id: @host, format: 'yml' }
|
47
|
+
|
43
48
|
assert_response :success
|
44
49
|
|
45
50
|
res = YAML.safe_load(@response.body)
|
51
|
+
|
46
52
|
assert_equal res['parameters'][var.key], var.value
|
47
53
|
end
|
48
54
|
|
@@ -52,9 +58,11 @@ module ForemanSalt
|
|
52
58
|
@host.salt_modules << var.salt_module
|
53
59
|
|
54
60
|
get :node, params: { id: @host, format: 'yml' }
|
61
|
+
|
55
62
|
assert_response :success
|
56
63
|
|
57
64
|
res = YAML.safe_load(@response.body)
|
65
|
+
|
58
66
|
assert_equal res['parameters']['parameter1'], var.value
|
59
67
|
end
|
60
68
|
|
@@ -70,9 +78,11 @@ module ForemanSalt
|
|
70
78
|
@host.salt_modules << var.salt_module
|
71
79
|
|
72
80
|
get :node, params: { id: @host, format: 'yml' }
|
81
|
+
|
73
82
|
assert_response :success
|
74
83
|
|
75
84
|
res = YAML.safe_load(@response.body)
|
85
|
+
|
76
86
|
assert_equal res['parameters']['parameter1'], value2.value
|
77
87
|
end
|
78
88
|
|
@@ -87,9 +97,11 @@ module ForemanSalt
|
|
87
97
|
@host2.salt_modules << var.salt_module
|
88
98
|
|
89
99
|
get :node, params: { id: @host2, format: 'yml' }
|
100
|
+
|
90
101
|
assert_response :success
|
91
102
|
|
92
103
|
res = YAML.safe_load(@response.body)
|
104
|
+
|
93
105
|
assert_equal res['parameters']['parameter1'], value2.value
|
94
106
|
end
|
95
107
|
|
@@ -104,9 +116,11 @@ module ForemanSalt
|
|
104
116
|
var.salt_module.salt_environments << @host2.salt_environment
|
105
117
|
@host2.salt_modules << var.salt_module
|
106
118
|
get :node, params: { id: @host2, format: 'yml' }
|
119
|
+
|
107
120
|
assert_response :success
|
108
121
|
|
109
122
|
res = YAML.safe_load(@response.body)
|
123
|
+
|
110
124
|
assert_equal res['parameters']['parameter1'], var.value
|
111
125
|
end
|
112
126
|
end
|
@@ -29,23 +29,26 @@ module ForemanSalt
|
|
29
29
|
assert page.has_no_selector?('input.host_select_boxes:not(:checked)')
|
30
30
|
|
31
31
|
# Dropdown visible?
|
32
|
-
|
32
|
+
assert_predicate multiple_actions_div.find('.dropdown-toggle'), :visible?
|
33
33
|
multiple_actions_div.find('.dropdown-toggle').click
|
34
|
-
|
34
|
+
|
35
|
+
assert_predicate multiple_actions_div.find('ul'), :visible?
|
35
36
|
|
36
37
|
# Hosts are added to cookie
|
37
38
|
host_ids_on_cookie = JSON.parse(CGI.unescape(get_me_the_cookie('_ForemanSelectedhosts')&.fetch(:value)))
|
39
|
+
|
38
40
|
assert_includes(host_ids_on_cookie, @host.id)
|
39
41
|
|
40
42
|
within('#submit_multiple') do
|
41
43
|
click_on('Change Salt Master')
|
42
44
|
end
|
43
45
|
|
44
|
-
|
46
|
+
assert_predicate index_modal, :visible?, 'Modal window was shown'
|
45
47
|
page.find('#proxy_proxy_id').find("option[value='#{@host.salt_proxy.id}']").select_option
|
46
48
|
|
47
49
|
# remove hosts cookie on submit
|
48
50
|
index_modal.find('.btn-primary').click
|
51
|
+
|
49
52
|
assert_current_path hosts_path
|
50
53
|
assert_empty(get_me_the_cookie('_ForemanSelectedhosts'))
|
51
54
|
end
|
@@ -58,23 +61,26 @@ module ForemanSalt
|
|
58
61
|
assert page.has_no_selector?('input.host_select_boxes:not(:checked)')
|
59
62
|
|
60
63
|
# Dropdown visible?
|
61
|
-
|
64
|
+
assert_predicate multiple_actions_div.find('.dropdown-toggle'), :visible?
|
62
65
|
multiple_actions_div.find('.dropdown-toggle').click
|
63
|
-
|
66
|
+
|
67
|
+
assert_predicate multiple_actions_div.find('ul'), :visible?
|
64
68
|
|
65
69
|
# Hosts are added to cookie
|
66
70
|
host_ids_on_cookie = JSON.parse(CGI.unescape(get_me_the_cookie('_ForemanSelectedhosts')&.fetch(:value)))
|
71
|
+
|
67
72
|
assert_includes(host_ids_on_cookie, @host.id)
|
68
73
|
|
69
74
|
within('#submit_multiple') do
|
70
75
|
click_on('Change Salt Environment')
|
71
76
|
end
|
72
77
|
|
73
|
-
|
78
|
+
assert_predicate index_modal, :visible?, 'Modal window was shown'
|
74
79
|
page.find('#salt_environment_id').find("option[value='#{@host.salt_environment.id}']").select_option
|
75
80
|
|
76
81
|
# remove hosts cookie on submit
|
77
82
|
index_modal.find('.btn-primary').click
|
83
|
+
|
78
84
|
assert_current_path hosts_path
|
79
85
|
assert_empty(get_me_the_cookie('_ForemanSelectedhosts'))
|
80
86
|
end
|
@@ -17,19 +17,23 @@ module ForemanSalt
|
|
17
17
|
|
18
18
|
test 'smart proxy details has autosign link' do
|
19
19
|
visit smart_proxy_path(@proxy)
|
20
|
+
|
20
21
|
assert page.has_link? 'Salt Autosign'
|
21
22
|
click_link 'Salt Autosign'
|
23
|
+
|
22
24
|
assert page.has_title?("Autosign entries for #{@proxy.hostname}"), 'Page title does not appear'
|
23
25
|
end
|
24
26
|
|
25
27
|
test 'index page' do
|
26
28
|
visit smart_proxy_salt_autosign_index_path(smart_proxy_id: @proxy.id)
|
27
|
-
|
29
|
+
|
30
|
+
assert_predicate find_link('Keys'), :visible?, 'Keys is not visible'
|
28
31
|
assert has_title?("Autosign entries for #{@proxy.hostname}"), 'Page title does not appear'
|
29
32
|
end
|
30
33
|
|
31
34
|
test 'has list of autosign' do
|
32
35
|
visit smart_proxy_salt_autosign_index_path(smart_proxy_id: @proxy.id)
|
36
|
+
|
33
37
|
assert has_content?('foo.example.com'), 'Missing autosign entry on index page'
|
34
38
|
end
|
35
39
|
end
|
@@ -5,12 +5,14 @@ module ForemanSalt
|
|
5
5
|
class SaltEnvironmentTest < IntegrationTestWithJavascript
|
6
6
|
test 'index page' do
|
7
7
|
FactoryBot.create_list :salt_environment, 5
|
8
|
+
|
8
9
|
assert_index_page(salt_environments_path, 'Salt Environment', 'New Salt Environment')
|
9
10
|
end
|
10
11
|
|
11
12
|
test 'create new page' do
|
12
13
|
assert_new_button(salt_environments_path, 'New Salt Environment', new_salt_environment_path)
|
13
14
|
fill_in 'foreman_salt_salt_environment_name', with: 'common'
|
15
|
+
|
14
16
|
assert_submit_button(salt_environments_path)
|
15
17
|
assert page.has_link? 'common'
|
16
18
|
end
|
@@ -20,6 +22,7 @@ module ForemanSalt
|
|
20
22
|
visit salt_environments_path
|
21
23
|
click_link salt_environment.name
|
22
24
|
fill_in 'foreman_salt_salt_environment_name', with: 'some_other_name'
|
25
|
+
|
23
26
|
assert_submit_button(salt_environments_path)
|
24
27
|
assert page.has_link? 'some_other_name'
|
25
28
|
end
|
@@ -20,29 +20,35 @@ module ForemanSalt
|
|
20
20
|
|
21
21
|
test 'smart proxy details has keys link' do
|
22
22
|
visit smart_proxy_path(@proxy)
|
23
|
+
|
23
24
|
assert page.has_link? 'Salt Keys'
|
24
25
|
click_link 'Salt Keys'
|
26
|
+
|
25
27
|
assert page.has_title?("Salt Keys on #{@proxy}"), 'Page title does not appear'
|
26
28
|
end
|
27
29
|
|
28
30
|
test 'index page' do
|
29
31
|
visit smart_proxy_salt_keys_path(smart_proxy_id: @proxy.id)
|
32
|
+
|
30
33
|
assert has_title?("Salt Keys on #{@proxy}"), 'Page title does not appear'
|
31
34
|
end
|
32
35
|
|
33
36
|
test 'has list of keys' do
|
34
37
|
visit smart_proxy_salt_keys_path(smart_proxy_id: @proxy.id)
|
38
|
+
|
35
39
|
assert has_content?('saltclient01.example.com'), 'Missing key on index page'
|
36
40
|
assert has_content?('98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c1'), 'Missing fingerprint on index page'
|
37
41
|
end
|
38
42
|
|
39
43
|
test 'has accept link' do
|
40
44
|
ProxyAPI::Salt.any_instance.stubs(:key_accept).returns(true)
|
45
|
+
|
41
46
|
assert_row_button(smart_proxy_salt_keys_path(smart_proxy_id: @proxy.id), 'saltclient01.example.com', 'Accept', dropdown: true)
|
42
47
|
end
|
43
48
|
|
44
49
|
test 'has reject link' do
|
45
50
|
ProxyAPI::Salt.any_instance.stubs(:key_reject).returns(true)
|
51
|
+
|
46
52
|
assert_row_button(smart_proxy_salt_keys_path(smart_proxy_id: @proxy.id), 'saltclient01.example.com', 'Reject', dropdown: true)
|
47
53
|
end
|
48
54
|
end
|
@@ -14,12 +14,14 @@ module ForemanSalt
|
|
14
14
|
|
15
15
|
test 'index page' do
|
16
16
|
FactoryBot.create_list :salt_module, 5
|
17
|
+
|
17
18
|
assert_index_page(salt_modules_path, 'Salt State', 'New Salt State')
|
18
19
|
end
|
19
20
|
|
20
21
|
test 'create new page' do
|
21
22
|
assert_new_button(salt_modules_path, 'New Salt State', new_salt_module_path)
|
22
23
|
fill_in 'foreman_salt_salt_module_name', with: 'common'
|
24
|
+
|
23
25
|
assert_submit_button(salt_modules_path)
|
24
26
|
assert page.has_link? 'common'
|
25
27
|
end
|
@@ -29,6 +31,7 @@ module ForemanSalt
|
|
29
31
|
visit salt_modules_path
|
30
32
|
click_link salt_module.name
|
31
33
|
fill_in :foreman_salt_salt_module_name, with: 'some_other_name'
|
34
|
+
|
32
35
|
assert_submit_button(salt_modules_path)
|
33
36
|
assert page.has_link? 'some_other_name'
|
34
37
|
end
|
@@ -50,6 +53,7 @@ module ForemanSalt
|
|
50
53
|
all('input.state_check').each { |checkbox| check(checkbox[:id]) }
|
51
54
|
|
52
55
|
click_button 'Update'
|
56
|
+
|
53
57
|
assert page.has_link? 'state1'
|
54
58
|
end
|
55
59
|
end
|
@@ -9,14 +9,17 @@ module ForemanSalt
|
|
9
9
|
|
10
10
|
test 'index page' do
|
11
11
|
FactoryBot.create_list :salt_variable, 5
|
12
|
+
|
12
13
|
assert_index_page(salt_variables_path, 'Salt Variable', 'New Salt Variable')
|
13
14
|
end
|
14
15
|
|
15
16
|
test 'create new page' do
|
16
17
|
state = FactoryBot.create :salt_module
|
18
|
+
|
17
19
|
assert_new_button(salt_variables_path, 'New Salt Variable', new_salt_variable_path)
|
18
20
|
fill_in 'foreman_salt_salt_variable_key', with: 'mykey'
|
19
21
|
select2(state.name, from: 'foreman_salt_salt_variable_salt_module_id')
|
22
|
+
|
20
23
|
assert_submit_button(salt_variables_path)
|
21
24
|
assert page.has_link? 'mykey'
|
22
25
|
end
|
@@ -28,6 +28,7 @@ module ForemanSalt
|
|
28
28
|
test 'nested facts have valid parents' do
|
29
29
|
parent = ::FactName.find_by(name: 'cpu_flags')
|
30
30
|
children = @imported_host.fact_values.with_fact_parent_id(parent)
|
31
|
+
|
31
32
|
assert_not_empty children
|
32
33
|
assert_empty children.map(&:fact_name).reject { |fact| fact.name =~ /\Acpu_flags#{FactName::SEPARATOR}[0-9]+/ }
|
33
34
|
end
|
@@ -59,6 +60,7 @@ module ForemanSalt
|
|
59
60
|
|
60
61
|
test 'imported host has additional interface' do
|
61
62
|
nic = @imported_host.interfaces.find_by(identifier: 'eth1')
|
63
|
+
|
62
64
|
assert_equal('de:ad:be:ef:07:13', nic.mac)
|
63
65
|
assert_equal('1.2.3.4', nic.ip)
|
64
66
|
end
|
@@ -10,18 +10,21 @@ module ForemanSalt
|
|
10
10
|
test 'host has a salt smart proxy' do
|
11
11
|
host = FactoryBot.create :host
|
12
12
|
host.salt_proxy = @proxy
|
13
|
+
|
13
14
|
assert host.salt_proxy.has_feature? 'Salt'
|
14
15
|
end
|
15
16
|
|
16
17
|
test 'smart_proxy_ids returns salt smart proxy' do
|
17
18
|
host = FactoryBot.create :host
|
18
19
|
host.salt_proxy = @proxy
|
20
|
+
|
19
21
|
assert_includes host.smart_proxy_ids, host.salt_proxy_id
|
20
22
|
end
|
21
23
|
|
22
24
|
test 'host params includes salt_master' do
|
23
25
|
host = FactoryBot.create :host
|
24
26
|
host.salt_proxy = @proxy
|
27
|
+
|
25
28
|
assert host.params.key? 'salt_master'
|
26
29
|
assert_equal host.params['salt_master'], host.salt_master
|
27
30
|
end
|
@@ -31,6 +34,7 @@ module ForemanSalt
|
|
31
34
|
hostgroup.salt_proxy = @proxy
|
32
35
|
host = FactoryBot.create :host, hostgroup: hostgroup
|
33
36
|
host.set_hostgroup_defaults
|
37
|
+
|
34
38
|
assert_equal host.salt_proxy, hostgroup.salt_proxy
|
35
39
|
end
|
36
40
|
|
@@ -51,9 +55,11 @@ module ForemanSalt
|
|
51
55
|
|
52
56
|
test '#configuration? considers salt' do
|
53
57
|
host = FactoryBot.build(:host)
|
58
|
+
|
54
59
|
assert_not host.configuration?
|
55
60
|
host.salt_proxy = @proxy
|
56
|
-
|
61
|
+
|
62
|
+
assert_predicate host, :configuration?
|
57
63
|
end
|
58
64
|
|
59
65
|
context 'autosign handling' do
|
@@ -70,8 +76,10 @@ module ForemanSalt
|
|
70
76
|
autosign_key = 'asdfasdfasfasdf'
|
71
77
|
@host.expects(:generate_provisioning_key).returns(autosign_key)
|
72
78
|
@host.build = true
|
79
|
+
|
73
80
|
assert @host.save!
|
74
81
|
@host.clear_host_parameters_cache!
|
82
|
+
|
75
83
|
assert_equal autosign_key, @host.salt_autosign_key
|
76
84
|
end
|
77
85
|
end
|
@@ -84,6 +92,7 @@ module ForemanSalt
|
|
84
92
|
|
85
93
|
test 'host returns empty hash when deriving salt grains with default autosign' do
|
86
94
|
expected_hash = {}
|
95
|
+
|
87
96
|
assert_equal expected_hash, @host.instance_eval { derive_salt_grains }
|
88
97
|
end
|
89
98
|
|
@@ -91,28 +100,33 @@ module ForemanSalt
|
|
91
100
|
autosign_key = 'asdfasdfasfasdf'
|
92
101
|
expected_hash = { @host.autosign_grain_name => autosign_key }
|
93
102
|
@host.salt_autosign_key = autosign_key
|
103
|
+
|
94
104
|
assert_equal expected_hash, @host.instance_eval { derive_salt_grains(use_autosign: true) }
|
95
105
|
end
|
96
106
|
|
97
107
|
test 'host returns empty hash when deriving salt grains without any given' do
|
98
108
|
expected_hash = {}
|
109
|
+
|
99
110
|
assert_equal expected_hash, @host.instance_eval { derive_salt_grains(use_autosign: true) }
|
100
111
|
end
|
101
112
|
|
102
113
|
test 'host returns empty hash when deriving salt grains without autosign' do
|
103
114
|
expected_hash = {}
|
115
|
+
|
104
116
|
assert_equal expected_hash, @host.instance_eval { derive_salt_grains(use_autosign: false) }
|
105
117
|
end
|
106
118
|
|
107
119
|
test 'host returns host param grains when deriving salt grains' do
|
108
120
|
expected_hash = { "Some key": 'Some value', "Another key": 'An extraordinary value' }
|
109
121
|
@host.host_params[@host.host_params_grains_name] = expected_hash
|
122
|
+
|
110
123
|
assert_equal expected_hash, @host.instance_eval { derive_salt_grains(use_autosign: false) }
|
111
124
|
end
|
112
125
|
|
113
126
|
test 'host returns only host param grains when deriving salt grains' do
|
114
127
|
expected_hash = { "Some key": 'Some value', "Another key": 'An extraordinary value' }
|
115
128
|
@host.host_params[@host.host_params_grains_name] = expected_hash
|
129
|
+
|
116
130
|
assert_equal expected_hash, @host.instance_eval { derive_salt_grains(use_autosign: true) }
|
117
131
|
end
|
118
132
|
|
@@ -123,6 +137,7 @@ module ForemanSalt
|
|
123
137
|
expected_hash = host_param_grains.merge(@host.autosign_grain_name => autosign_key)
|
124
138
|
@host.salt_autosign_key = autosign_key
|
125
139
|
@host.host_params[@host.host_params_grains_name] = host_param_grains
|
140
|
+
|
126
141
|
assert_equal expected_hash, @host.instance_eval { derive_salt_grains(use_autosign: true) }
|
127
142
|
end
|
128
143
|
end
|
@@ -10,12 +10,14 @@ module ForemanSalt
|
|
10
10
|
test 'host group has a salt smart proxy' do
|
11
11
|
hostgroup = FactoryBot.create :hostgroup
|
12
12
|
hostgroup.salt_proxy = @proxy
|
13
|
+
|
13
14
|
assert_includes hostgroup.salt_proxy.features.map(&:name), 'Salt'
|
14
15
|
end
|
15
16
|
|
16
17
|
test 'nested host group inherits salt modules from parent' do
|
17
18
|
parent = FactoryBot.create :hostgroup, :with_salt_modules
|
18
19
|
child = FactoryBot.create :hostgroup, parent: parent
|
20
|
+
|
19
21
|
assert_equal [], parent.all_salt_modules - child.all_salt_modules
|
20
22
|
end
|
21
23
|
|
@@ -23,6 +25,7 @@ module ForemanSalt
|
|
23
25
|
parent = FactoryBot.create :hostgroup
|
24
26
|
child_one = FactoryBot.create :hostgroup, parent: parent, salt_proxy: @proxy
|
25
27
|
child_two = FactoryBot.create :hostgroup, parent: child_one
|
28
|
+
|
26
29
|
assert_not_nil parent
|
27
30
|
assert_not_nil child_one
|
28
31
|
assert_not_nil child_two
|
@@ -36,6 +39,7 @@ module ForemanSalt
|
|
36
39
|
parent = FactoryBot.create :hostgroup
|
37
40
|
child_one = FactoryBot.create :hostgroup, parent: parent, salt_environment: environment
|
38
41
|
child_two = FactoryBot.create :hostgroup, parent: child_one
|
42
|
+
|
39
43
|
assert_not_nil parent
|
40
44
|
assert_not_nil child_one
|
41
45
|
assert_not_nil child_two
|
@@ -50,12 +54,14 @@ module ForemanSalt
|
|
50
54
|
child = FactoryBot.create :hostgroup, :with_salt_modules, salt_environment: environment, parent: parent
|
51
55
|
|
52
56
|
total = parent.salt_modules.count + child.salt_modules.count
|
57
|
+
|
53
58
|
assert_equal total, child.all_salt_modules.count
|
54
59
|
end
|
55
60
|
|
56
61
|
test 'child doesnt get modules from outside its environment' do
|
57
62
|
parent = FactoryBot.create :hostgroup, :with_salt_modules
|
58
63
|
child = FactoryBot.create :hostgroup, :with_salt_modules, parent: parent
|
64
|
+
|
59
65
|
assert_equal child.salt_modules.count, child.all_salt_modules.count
|
60
66
|
end
|
61
67
|
|
@@ -63,6 +69,7 @@ module ForemanSalt
|
|
63
69
|
parent = FactoryBot.create :hostgroup, :with_salt_modules
|
64
70
|
child_one = FactoryBot.create :hostgroup, parent: parent
|
65
71
|
child_two = FactoryBot.create :hostgroup, parent: child_one
|
72
|
+
|
66
73
|
assert_empty parent.all_salt_modules - child_two.all_salt_modules
|
67
74
|
end
|
68
75
|
|
@@ -70,7 +77,8 @@ module ForemanSalt
|
|
70
77
|
parent = FactoryBot.create :hostgroup
|
71
78
|
child_one = FactoryBot.create :hostgroup, parent: parent
|
72
79
|
child_two = FactoryBot.create :hostgroup, :with_salt_modules, parent: child_one
|
73
|
-
|
80
|
+
|
81
|
+
assert_predicate child_two.all_salt_modules, :any?
|
74
82
|
end
|
75
83
|
end
|
76
84
|
end
|
@@ -16,18 +16,21 @@ module ForemanSalt
|
|
16
16
|
test 'importing report creates a host' do
|
17
17
|
assert_not Host.find_by(name: @host)
|
18
18
|
ForemanSalt::ReportImporter.import(@report)
|
19
|
+
|
19
20
|
assert Host.find_by(name: @host)
|
20
21
|
end
|
21
22
|
|
22
23
|
test 'importing report updates host status' do
|
23
24
|
HostStatus::ConfigurationStatus.any_instance.stubs(:relevant?).returns(true)
|
24
25
|
ForemanSalt::ReportImporter.import(@report)
|
25
|
-
|
26
|
+
|
27
|
+
assert_predicate Host.find_by(name: @host).get_status(HostStatus::ConfigurationStatus), :error?
|
26
28
|
end
|
27
29
|
|
28
30
|
test 'importing report has correct status' do
|
29
31
|
ForemanSalt::ReportImporter.import(@report)
|
30
32
|
status = Host.find_by(name: @host).reports.last.status
|
33
|
+
|
31
34
|
assert_equal(9, status['applied'])
|
32
35
|
assert_equal(3, status['failed'])
|
33
36
|
end
|
@@ -35,6 +38,7 @@ module ForemanSalt
|
|
35
38
|
test 'report has salt origin and expected content' do
|
36
39
|
ForemanSalt::ReportImporter.import(@report)
|
37
40
|
report = Host.find_by(name: @host).reports.last
|
41
|
+
|
38
42
|
assert_equal 'Salt', report.origin
|
39
43
|
assert_equal 'pkg_|-postfix_|-postfix_|-installed', report.logs.first.source.value
|
40
44
|
assert_equal 'Package postfix is already installed.', report.logs.first.message.value
|
@@ -44,6 +48,7 @@ module ForemanSalt
|
|
44
48
|
ForemanSalt::ReportImporter.import(@report_pchanges)
|
45
49
|
report = Host.find_by(name: @host).reports.last
|
46
50
|
status = report.status
|
51
|
+
|
47
52
|
assert_equal 'Salt', report.origin
|
48
53
|
assert_equal 'file_|-/etc/motd_|-/etc/motd_|-managed', report.logs.first.source.value
|
49
54
|
assert_equal(1, status['pending'])
|
@@ -51,8 +56,10 @@ module ForemanSalt
|
|
51
56
|
|
52
57
|
test 'import returns Array of reports including host and its name' do
|
53
58
|
reports = ForemanSalt::ReportImporter.import(@report)
|
59
|
+
|
54
60
|
assert_kind_of Array, reports
|
55
61
|
first = reports.first
|
62
|
+
|
56
63
|
assert_equal 'Salt', first.origin
|
57
64
|
assert_equal @host, first.host.name
|
58
65
|
end
|
@@ -60,7 +67,8 @@ module ForemanSalt
|
|
60
67
|
test 'importing report with unhandled highstate' do
|
61
68
|
HostStatus::ConfigurationStatus.any_instance.stubs(:relevant?).returns(true)
|
62
69
|
ForemanSalt::ReportImporter.import(@report_unhandled)
|
63
|
-
|
70
|
+
|
71
|
+
assert_predicate Host.find_by(name: @host).get_status(HostStatus::ConfigurationStatus), :error?
|
64
72
|
end
|
65
73
|
end
|
66
74
|
end
|
@@ -7,11 +7,13 @@ class SaltModulesTest < ActiveSupport::TestCase
|
|
7
7
|
|
8
8
|
test 'salt module has a valid name' do
|
9
9
|
salt_module = ForemanSalt::SaltModule.new(name: 'foo.bar.baz')
|
10
|
+
|
10
11
|
assert_valid salt_module
|
11
12
|
end
|
12
13
|
|
13
14
|
test 'salt module has invalid name' do
|
14
15
|
salt_module = ForemanSalt::SaltModule.new(name: '&bad$name')
|
16
|
+
|
15
17
|
refute_valid salt_module, :name, /alphanumeric/
|
16
18
|
end
|
17
19
|
end
|
@@ -8,15 +8,18 @@ class SaltVariablesTest < ActiveSupport::TestCase
|
|
8
8
|
|
9
9
|
test 'salt variable has a salt module' do
|
10
10
|
salt_variable = ForemanSalt::SaltVariable.new(key: 'awesome_key', salt_module_id: @state.id)
|
11
|
+
|
11
12
|
assert_valid salt_variable
|
12
|
-
|
13
|
+
assert_predicate salt_variable, :salt?
|
13
14
|
assert_equal @state.id, salt_variable.salt_module.id
|
14
15
|
end
|
15
16
|
|
16
17
|
test 'salt variable is referencing a LookupValue' do
|
17
18
|
salt_variable = ForemanSalt::SaltVariable.new(key: 'awesome_key', salt_module_id: @state.id)
|
18
|
-
|
19
|
+
|
20
|
+
assert_predicate salt_variable.lookup_values.count, :zero?
|
19
21
|
LookupValue.create(value: '[1.2.3.4,2.3.4.5]', match: 'domain = mydomain.net', lookup_key: salt_variable)
|
22
|
+
|
20
23
|
assert_equal(1, salt_variable.lookup_values.count)
|
21
24
|
end
|
22
25
|
|
@@ -27,6 +30,7 @@ class SaltVariablesTest < ActiveSupport::TestCase
|
|
27
30
|
default_value: "{\r\n \"bat\": \"man\"\r\n}\r\n",
|
28
31
|
override: true)
|
29
32
|
salt_variable.save
|
33
|
+
|
30
34
|
assert salt_variable.default_value.is_a?(Hash)
|
31
35
|
end
|
32
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_salt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 16.0.
|
4
|
+
version: 16.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Benjamin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: '9.0'
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: '
|
36
|
+
version: '14'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '9.0'
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '14'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: foreman-tasks
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|