foreman_salt 10.1.0 → 10.2.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 +1 -0
- data/app/controllers/foreman_salt/concerns/hosts_controller_extensions.rb +1 -0
- data/app/controllers/foreman_salt/minions_controller.rb +1 -1
- data/app/controllers/foreman_salt/salt_environments_controller.rb +1 -1
- data/app/controllers/foreman_salt/salt_modules_controller.rb +4 -4
- data/app/helpers/concerns/foreman_salt/smart_proxies_helper_extensions.rb +1 -1
- data/app/models/foreman_salt/concerns/host_managed_extensions.rb +2 -1
- data/app/models/foreman_salt/concerns/hostgroup_extensions.rb +11 -13
- data/app/overrides/salt_environment_host_selector.rb +11 -6
- data/app/overrides/salt_environment_hostgroup_selector.rb +8 -5
- data/app/overrides/salt_proxy_selector.rb +12 -8
- data/app/services/foreman_salt/fact_parser.rb +7 -5
- data/app/services/foreman_salt/report_importer.rb +2 -0
- data/config/routes.rb +5 -7
- data/lib/foreman_salt/version.rb +1 -1
- data/test/factories/foreman_salt_factories.rb +1 -11
- data/test/functional/api/v2/salt_keys_controller_test.rb +1 -1
- data/test/functional/api/v2/salt_states_controller_test.rb +5 -5
- data/test/functional/minions_controller_test.rb +1 -1
- data/test/integration/salt_autosign_test.rb +7 -0
- data/test/integration/salt_environment_test.rb +1 -1
- data/test/integration/salt_keys_test.rb +9 -2
- data/test/integration/salt_module_test.rb +2 -6
- data/test/unit/grains_centos.json +4 -2
- data/test/unit/grains_importer_test.rb +2 -1
- data/test/unit/host_extensions_test.rb +18 -13
- data/test/unit/hostgroup_extensions_test.rb +17 -3
- data/test/unit/report_importer_test.rb +2 -2
- data/test/unit/salt_fact_parser_test.rb +46 -0
- data/test/unit/salt_keys_test.rb +3 -3
- data/test/unit/salt_modules_test.rb +1 -1
- metadata +17 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45be269828ccb4c9b6990f04eb7d4bceb4080448199dd88c6058c2678892fa68
|
4
|
+
data.tar.gz: 6abed1b754f72ad653f460414b4c7dcbb4f4612e325f01709155597d3ea72e92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02e65952f994dd58c780d1221bbaae4e63820ab2d2bdf6c27418cd6447dcc449310de2fd25fd28c831d157a1a22cf5c0c68afe74d2952a69b484870bde86a0d2
|
7
|
+
data.tar.gz: 85bf905813499b17af6ab9af5e398d57e7e1039eede9b374c2e6a9e52a52684258c07c774f117347378ad4293c05180cbb16069f96bb0d33b7a917bcecd5f212
|
data/README.md
CHANGED
@@ -27,7 +27,7 @@ module ForemanSalt
|
|
27
27
|
|
28
28
|
def update
|
29
29
|
if @salt_environment.update_attributes(salt_environment_params)
|
30
|
-
|
30
|
+
success _('Successfully updated %s.' % @salt_environment.to_s)
|
31
31
|
redirect_to salt_environments_path
|
32
32
|
else
|
33
33
|
process_error
|
@@ -31,7 +31,7 @@ module ForemanSalt
|
|
31
31
|
|
32
32
|
def update
|
33
33
|
if @salt_module.update_attributes(salt_module_params)
|
34
|
-
|
34
|
+
success _('Successfully updated %s.' % @salt_module.to_s)
|
35
35
|
redirect_to salt_modules_path
|
36
36
|
else
|
37
37
|
process_error
|
@@ -63,14 +63,14 @@ module ForemanSalt
|
|
63
63
|
@deletes = result[:deletes]
|
64
64
|
|
65
65
|
if @changes.empty?
|
66
|
-
|
66
|
+
info _('No changes found')
|
67
67
|
redirect_to salt_modules_path
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
71
|
def apply_changes
|
72
72
|
if params[:changed].blank?
|
73
|
-
|
73
|
+
info _('No changes found')
|
74
74
|
else
|
75
75
|
params[:changed].each do |environment, states|
|
76
76
|
next unless states[:add] || states[:remove]
|
@@ -80,7 +80,7 @@ module ForemanSalt
|
|
80
80
|
end
|
81
81
|
|
82
82
|
clean_orphans
|
83
|
-
|
83
|
+
success _('Successfully imported')
|
84
84
|
end
|
85
85
|
redirect_to salt_modules_path
|
86
86
|
end
|
@@ -4,7 +4,7 @@ module ForemanSalt
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
module Overrides
|
7
|
-
def configuration
|
7
|
+
def configuration?
|
8
8
|
super || !!salt_proxy
|
9
9
|
end
|
10
10
|
|
@@ -49,6 +49,7 @@ module ForemanSalt
|
|
49
49
|
|
50
50
|
def salt_modules_for_enc
|
51
51
|
return [] unless salt_environment
|
52
|
+
|
52
53
|
modules = salt_modules + (hostgroup ? hostgroup.all_salt_modules : [])
|
53
54
|
ForemanSalt::SaltModule.in_environment(salt_environment).where(:id => modules).pluck("salt_modules.name").uniq
|
54
55
|
end
|
@@ -28,31 +28,29 @@ module ForemanSalt
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def salt_proxy
|
31
|
-
return super unless ancestry.present?
|
32
|
-
SmartProxy.find_by_id(inherited_salt_proxy_id)
|
33
|
-
end
|
34
|
-
|
35
|
-
def inherited_salt_proxy_id
|
36
31
|
if ancestry.present?
|
37
|
-
|
32
|
+
SmartProxy.with_features('Salt').find_by_id(inherited_salt_proxy_id)
|
38
33
|
else
|
39
|
-
|
34
|
+
super
|
40
35
|
end
|
41
36
|
end
|
42
37
|
|
43
|
-
def
|
44
|
-
|
45
|
-
ForemanSalt::SaltEnvironment.find_by_id(inherited_salt_environment_id)
|
38
|
+
def inherited_salt_proxy_id
|
39
|
+
self[:salt_proxy_id] || nested(:salt_proxy_id)
|
46
40
|
end
|
47
41
|
|
48
|
-
def
|
42
|
+
def salt_environment
|
49
43
|
if ancestry.present?
|
50
|
-
|
44
|
+
ForemanSalt::SaltEnvironment.find_by_id(inherited_salt_environment_id)
|
51
45
|
else
|
52
|
-
|
46
|
+
super
|
53
47
|
end
|
54
48
|
end
|
55
49
|
|
50
|
+
def inherited_salt_environment_id
|
51
|
+
self[:salt_environment_id] || nested(:salt_environment_id)
|
52
|
+
end
|
53
|
+
|
56
54
|
def salt_master
|
57
55
|
salt_proxy.to_s
|
58
56
|
end
|
@@ -1,9 +1,14 @@
|
|
1
1
|
selector_text = "<%= select_f f, :salt_environment_id, ForemanSalt::SaltEnvironment.all, :id, :name,
|
2
2
|
{ :include_blank => blank_or_inherit_f(f, :salt_environment) },
|
3
|
-
{ :label => _('Salt Environment'),
|
4
|
-
:
|
3
|
+
{ :label => _('Salt Environment'),
|
4
|
+
:onchange => 'update_salt_states(this)',
|
5
|
+
:'data-url' => salt_environment_selected_minions_path,
|
6
|
+
:'data-host-id' => (@host || @hostgroup).id,
|
7
|
+
:help_inline => :indicator} %>"
|
5
8
|
|
6
|
-
Deface::Override.new(
|
7
|
-
|
8
|
-
|
9
|
-
|
9
|
+
Deface::Override.new(
|
10
|
+
:virtual_path => 'hosts/_form',
|
11
|
+
:name => 'add_salt_environment_to_host',
|
12
|
+
:insert_bottom => 'div#primary',
|
13
|
+
:text => selector_text
|
14
|
+
)
|
@@ -1,9 +1,12 @@
|
|
1
1
|
selector_text = "<%= select_f f, :salt_environment_id, ForemanSalt::SaltEnvironment.all, :id, :name,
|
2
2
|
{ :include_blank => blank_or_inherit_f(f, :salt_environment) },
|
3
|
-
{ :label => _('Salt Environment'), :onchange => 'update_salt_states(this)',
|
3
|
+
{ :label => _('Salt Environment'), :onchange => 'update_salt_states(this)',
|
4
|
+
:'data-url' => salt_environment_selected_hostgroups_path,
|
4
5
|
:'data-host-id' => (@host || @hostgroup).id, :help_inline => :indicator} %>"
|
5
6
|
|
6
|
-
Deface::Override.new(
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
Deface::Override.new(
|
8
|
+
:virtual_path => 'hostgroups/_form',
|
9
|
+
:name => 'add_salt_environment_to_hostgroup',
|
10
|
+
:insert_bottom => 'div#primary',
|
11
|
+
:text => selector_text
|
12
|
+
)
|
@@ -2,12 +2,16 @@ selector_text = "<%= select_f f, :salt_proxy_id, SmartProxy.unscoped.with_featur
|
|
2
2
|
{ :include_blank => blank_or_inherit_f(f, :salt_proxy) },
|
3
3
|
{ :label => _('Salt Master') } %>"
|
4
4
|
|
5
|
-
Deface::Override.new(
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
Deface::Override.new(
|
6
|
+
:virtual_path => 'hosts/_form',
|
7
|
+
:name => 'add_salt_proxy_to_host',
|
8
|
+
:insert_bottom => 'div#primary',
|
9
|
+
:text => selector_text
|
10
|
+
)
|
9
11
|
|
10
|
-
Deface::Override.new(
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
Deface::Override.new(
|
13
|
+
:virtual_path => 'hostgroups/_form',
|
14
|
+
:name => 'add_salt_proxy_to_hostgroup',
|
15
|
+
:insert_bottom => 'div#primary',
|
16
|
+
:text => selector_text
|
17
|
+
)
|
@@ -56,17 +56,18 @@ module ForemanSalt
|
|
56
56
|
|
57
57
|
facts.each do |fact, value|
|
58
58
|
next unless value && fact.to_s =~ /^ip_interfaces/
|
59
|
-
|
59
|
+
|
60
|
+
(_, interface_name) = fact.split(FactName::SEPARATOR)
|
60
61
|
|
61
62
|
next if (IPAddr.new('fe80::/10').include?(value) rescue false)
|
62
|
-
|
63
|
+
|
63
64
|
if !interface_name.blank? && interface_name != 'lo'
|
64
65
|
interface = interfaces.fetch(interface_name, {})
|
65
66
|
interface[:macaddress] = macs[interface_name]
|
66
|
-
if Net::Validations
|
67
|
-
interface[:ipaddress6] = value
|
67
|
+
if Net::Validations.validate_ip6(value)
|
68
|
+
interface[:ipaddress6] = value unless interface.include?(:ipaddress6)
|
68
69
|
else
|
69
|
-
interface[:ipaddress] = value
|
70
|
+
interface[:ipaddress] = value unless interface.include?(:ipaddress)
|
70
71
|
end
|
71
72
|
interfaces[interface_name] = interface
|
72
73
|
end
|
@@ -101,6 +102,7 @@ module ForemanSalt
|
|
101
102
|
@macs = {}
|
102
103
|
facts.each do |fact, value|
|
103
104
|
next unless value && fact.to_s =~ /^hwaddr_interfaces/
|
105
|
+
|
104
106
|
data = fact.split(FactName::SEPARATOR)
|
105
107
|
interface = data[1]
|
106
108
|
macs[interface] = value
|
@@ -5,6 +5,7 @@ module ForemanSalt
|
|
5
5
|
|
6
6
|
def self.import(raw, proxy_id = nil)
|
7
7
|
fail ::Foreman::Exception.new(_('Invalid report')) unless raw.is_a?(Hash)
|
8
|
+
|
8
9
|
raw.map do |host, report|
|
9
10
|
importer = ForemanSalt::ReportImporter.new(host, report, proxy_id)
|
10
11
|
importer.import
|
@@ -141,6 +142,7 @@ module ForemanSalt
|
|
141
142
|
|
142
143
|
@report = ConfigReport.new(:host => @host, :reported_at => start_time, :status => status, :metrics => metrics)
|
143
144
|
return @report unless @report.save
|
145
|
+
|
144
146
|
import_log_messages
|
145
147
|
end
|
146
148
|
|
data/config/routes.rb
CHANGED
@@ -19,13 +19,11 @@ Rails.application.routes.draw do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
post 'apply_changes'
|
28
|
-
end
|
22
|
+
resources :salt_modules, :controller => 'foreman_salt/salt_modules' do
|
23
|
+
collection do
|
24
|
+
get 'import'
|
25
|
+
get 'auto_complete_search'
|
26
|
+
post 'apply_changes'
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
data/lib/foreman_salt/version.rb
CHANGED
@@ -9,17 +9,7 @@ FactoryBot.define do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
FactoryBot.modify do
|
12
|
-
factory :host do
|
13
|
-
trait :with_salt_proxy do
|
14
|
-
salt_proxy { FactoryBot.build :smart_proxy, :with_salt_feature }
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
12
|
factory :hostgroup do
|
19
|
-
trait :with_salt_proxy do
|
20
|
-
salt_proxy { FactoryBot.build :smart_proxy, :with_salt_feature }
|
21
|
-
end
|
22
|
-
|
23
13
|
trait :with_salt_modules do
|
24
14
|
salt_environment { FactoryBot.build :salt_environment }
|
25
15
|
salt_modules { FactoryBot.create_list :salt_module, 10, :salt_environments => [self.salt_environment] }
|
@@ -28,7 +18,7 @@ FactoryBot.modify do
|
|
28
18
|
|
29
19
|
factory :smart_proxy do
|
30
20
|
trait :with_salt_feature do
|
31
|
-
features { [::Feature.
|
21
|
+
features { [::Feature.find_or_create_by(:name => 'Salt')] }
|
32
22
|
end
|
33
23
|
end
|
34
24
|
end
|
@@ -15,7 +15,7 @@ class ::ForemanSalt::Api::V2::SaltKeysControllerTest < ActionController::TestCas
|
|
15
15
|
|
16
16
|
test 'should update keys' do
|
17
17
|
ProxyAPI::Salt.any_instance.expects(:key_accept).once.returns(true)
|
18
|
-
put :update, params: { :smart_proxy_id => @proxy.id, :name => 'saltstack.example.com', :
|
18
|
+
put :update, params: { :smart_proxy_id => @proxy.id, :name => 'saltstack.example.com', :state => 'accepted' }
|
19
19
|
assert_response :success
|
20
20
|
end
|
21
21
|
|
@@ -52,7 +52,7 @@ class ::ForemanSalt::Api::V2::SaltStatesControllerTest < ActionController::TestC
|
|
52
52
|
test 'should import only from a given environment' do
|
53
53
|
post :import, params: { :smart_proxy_id => @proxy.id, :salt_environments => ['env2'] }
|
54
54
|
assert_response :success
|
55
|
-
|
55
|
+
assert_not ::ForemanSalt::SaltEnvironment.where(:name => 'env1').first
|
56
56
|
assert ::ForemanSalt::SaltEnvironment.where(:name => 'env2').first
|
57
57
|
end
|
58
58
|
|
@@ -70,15 +70,15 @@ class ::ForemanSalt::Api::V2::SaltStatesControllerTest < ActionController::TestC
|
|
70
70
|
state = FactoryBot.create :salt_module
|
71
71
|
post :import, params: { :smart_proxy_id => @proxy.id, :actions => ['remove'] }
|
72
72
|
assert_response :success
|
73
|
-
|
74
|
-
|
73
|
+
assert_not ::ForemanSalt::SaltModule.where(:id => state).first
|
74
|
+
assert_not ::ForemanSalt::SaltModule.where(:name => 'state1').first
|
75
75
|
end
|
76
76
|
|
77
77
|
test 'dryrun should do nothing' do
|
78
78
|
post :import, params: { :smart_proxy_id => @proxy.id, :dryrun => true }
|
79
79
|
assert_response :success
|
80
|
-
|
81
|
-
|
80
|
+
assert_not ::ForemanSalt::SaltModule.all.any?
|
81
|
+
assert_not ::ForemanSalt::SaltEnvironment.all.any?
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
@@ -3,7 +3,7 @@ require 'test_plugin_helper'
|
|
3
3
|
module ForemanSalt
|
4
4
|
class MinionsControllerTest < ActionController::TestCase
|
5
5
|
test 'salt smart proxy should get salt external node' do
|
6
|
-
User.current =
|
6
|
+
User.current = User.anonymous_admin
|
7
7
|
Setting[:restrict_registered_smart_proxies] = true
|
8
8
|
Setting[:require_ssl_smart_proxies] = false
|
9
9
|
|
@@ -15,6 +15,13 @@ module ForemanSalt
|
|
15
15
|
assert_row_button(smart_proxies_path, @proxy.name, 'Salt Autosign', true)
|
16
16
|
end
|
17
17
|
|
18
|
+
test 'smart proxy details has autosign link' do
|
19
|
+
visit smart_proxy_path(@proxy)
|
20
|
+
assert page.has_link? "Salt Autosign"
|
21
|
+
click_link "Salt Autosign"
|
22
|
+
assert page.has_content?("Autosign entries for #{@proxy.hostname}"), 'Page title does not appear'
|
23
|
+
end
|
24
|
+
|
18
25
|
test 'index page' do
|
19
26
|
visit smart_proxy_salt_autosign_index_path(:smart_proxy_id => @proxy.id)
|
20
27
|
assert find_link('Keys').visible?, 'Keys is not visible'
|
@@ -2,7 +2,7 @@ require 'test_plugin_helper'
|
|
2
2
|
require 'integration_test_helper'
|
3
3
|
|
4
4
|
module ForemanSalt
|
5
|
-
class SaltEnvironmentTest <
|
5
|
+
class SaltEnvironmentTest < IntegrationTestWithJavascript
|
6
6
|
test 'index page' do
|
7
7
|
FactoryBot.create_list :salt_environment, 5
|
8
8
|
assert_index_page(salt_environments_path, 'Salt Environment', 'New Salt Environment')
|
@@ -7,10 +7,10 @@ module ForemanSalt
|
|
7
7
|
@proxy = FactoryBot.create :smart_proxy, :with_salt_feature
|
8
8
|
|
9
9
|
::ProxyAPI::Salt.any_instance.stubs(:key_list).returns(
|
10
|
-
'saltstack.example.com'
|
10
|
+
'saltstack.example.com' => { 'state' => 'accepted', 'fingerprint' => '98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c0' },
|
11
11
|
'saltclient01.example.com' => { 'state' => 'unaccepted', 'fingerprint' => '98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c1' },
|
12
12
|
'saltclient02.example.com' => { 'state' => 'unaccepted', 'fingerprint' => '98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c2' },
|
13
|
-
'saltclient03.example.com' => { 'state' => 'rejected',
|
13
|
+
'saltclient03.example.com' => { 'state' => 'rejected', 'fingerprint' => '98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c3' }
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
@@ -18,6 +18,13 @@ module ForemanSalt
|
|
18
18
|
assert_row_button(smart_proxies_path, @proxy.name, 'Salt Keys', true)
|
19
19
|
end
|
20
20
|
|
21
|
+
test 'smart proxy details has keys link' do
|
22
|
+
visit smart_proxy_path(@proxy)
|
23
|
+
assert page.has_link? "Salt Keys"
|
24
|
+
click_link "Salt Keys"
|
25
|
+
assert page.has_content?("Salt Keys on #{@proxy.hostname}"), 'Page title does not appear'
|
26
|
+
end
|
27
|
+
|
21
28
|
test 'index page' do
|
22
29
|
visit smart_proxy_salt_keys_path(:smart_proxy_id => @proxy.id)
|
23
30
|
assert find_link('Autosign').visible?, 'Autosign is not visible'
|
@@ -2,18 +2,14 @@ require 'test_plugin_helper'
|
|
2
2
|
require 'integration_test_helper'
|
3
3
|
|
4
4
|
module ForemanSalt
|
5
|
-
class SaltModuleTest <
|
5
|
+
class SaltModuleTest < IntegrationTestWithJavascript
|
6
6
|
setup do
|
7
|
-
User.current =
|
7
|
+
User.current = users :admin
|
8
8
|
|
9
9
|
states = %w(state1 state2 state3 state4)
|
10
10
|
state_list = { 'env1' => states, 'env2' => states }
|
11
11
|
|
12
12
|
::ProxyAPI::Salt.any_instance.stubs(:states_list).returns(state_list)
|
13
|
-
|
14
|
-
# FIXME #12143
|
15
|
-
FactoryBot.create(:permission, :name => 'view_salt_environments',
|
16
|
-
:resource_type => 'ForemanSalt::SaltEnvironment')
|
17
13
|
end
|
18
14
|
|
19
15
|
test 'index page' do
|
@@ -51,6 +51,7 @@
|
|
51
51
|
"defaultencoding": "UTF8",
|
52
52
|
"path": "/sbin:/usr/sbin:/bin:/usr/bin",
|
53
53
|
"ip_interfaces::eth0::0": "10.7.13.141",
|
54
|
+
"ip_interfaces::eth0::1": "10.7.23.141",
|
54
55
|
"manufacturer": "Red Hat",
|
55
56
|
"fqdn": "saltclient01.example.com",
|
56
57
|
"os": "CentOS",
|
@@ -95,8 +96,9 @@
|
|
95
96
|
"osrelease": "6.5",
|
96
97
|
"num_cpus": 1,
|
97
98
|
"virtual": "kvm",
|
98
|
-
"ipv4::0": "10.7.
|
99
|
-
"ipv4::1": "
|
99
|
+
"ipv4::0": "10.7.23.141",
|
100
|
+
"ipv4::1": "10.7.13.141",
|
101
|
+
"ipv4::2": "127.0.0.1",
|
100
102
|
"_type": "foreman_salt",
|
101
103
|
"nodename": "saltclient01.example.com",
|
102
104
|
"os_family": "RedHat",
|
@@ -6,7 +6,8 @@ module ForemanSalt
|
|
6
6
|
allow_transactions_for_any_importer
|
7
7
|
|
8
8
|
setup do
|
9
|
-
|
9
|
+
disable_orchestration
|
10
|
+
User.current = users :admin
|
10
11
|
Setting[:create_new_host_when_facts_are_uploaded] = true
|
11
12
|
|
12
13
|
Operatingsystem.where(:name => 'CentOS', :major => '6', :minor => '5').delete_all
|
@@ -3,27 +3,32 @@ require 'test_plugin_helper'
|
|
3
3
|
module ForemanSalt
|
4
4
|
class HostExtensionsTest < ActiveSupport::TestCase
|
5
5
|
setup do
|
6
|
-
User.current =
|
6
|
+
User.current = users :admin
|
7
|
+
@proxy = FactoryBot.create(:smart_proxy, :with_salt_feature)
|
7
8
|
end
|
8
9
|
|
9
10
|
test 'host has a salt smart proxy' do
|
10
|
-
host = FactoryBot.create :host
|
11
|
+
host = FactoryBot.create :host
|
12
|
+
host.salt_proxy = @proxy
|
11
13
|
assert host.salt_proxy.has_feature? 'Salt'
|
12
14
|
end
|
13
15
|
|
14
16
|
test 'smart_proxy_ids returns salt smart proxy' do
|
15
|
-
host = FactoryBot.create :host
|
17
|
+
host = FactoryBot.create :host
|
18
|
+
host.salt_proxy = @proxy
|
16
19
|
assert host.smart_proxy_ids.include? host.salt_proxy_id
|
17
20
|
end
|
18
21
|
|
19
22
|
test 'host params includes salt_master' do
|
20
|
-
host = FactoryBot.create :host
|
23
|
+
host = FactoryBot.create :host
|
24
|
+
host.salt_proxy = @proxy
|
21
25
|
assert host.params.key? 'salt_master'
|
22
26
|
assert_equal host.params['salt_master'], host.salt_master
|
23
27
|
end
|
24
28
|
|
25
29
|
test 'host inherits salt proxy from host group' do
|
26
|
-
hostgroup = FactoryBot.create :hostgroup
|
30
|
+
hostgroup = FactoryBot.create :hostgroup
|
31
|
+
hostgroup.salt_proxy = @proxy
|
27
32
|
host = FactoryBot.create :host, :hostgroup => hostgroup
|
28
33
|
host.set_hostgroup_defaults
|
29
34
|
assert_equal host.salt_proxy, hostgroup.salt_proxy
|
@@ -36,25 +41,25 @@ module ForemanSalt
|
|
36
41
|
state = FactoryBot.create :salt_module
|
37
42
|
other_environment.salt_modules << state
|
38
43
|
|
39
|
-
host = FactoryBot.create :host, :
|
44
|
+
host = FactoryBot.create :host, :salt_environment => hosts_environment
|
45
|
+
host.salt_proxy = @proxy
|
40
46
|
host.salt_modules = [state]
|
41
47
|
|
42
|
-
|
48
|
+
assert_not host.save
|
43
49
|
assert host.errors.full_messages.include? 'Salt states must be in the environment of the host'
|
44
50
|
end
|
45
51
|
|
46
52
|
test '#configuration? considers salt' do
|
47
53
|
host = FactoryBot.build(:host)
|
48
|
-
|
49
|
-
|
50
|
-
refute host.configuration?
|
51
|
-
host.salt_proxy = proxy
|
54
|
+
assert_not host.configuration?
|
55
|
+
host.salt_proxy = @proxy
|
52
56
|
assert host.configuration?
|
53
57
|
end
|
54
58
|
|
55
59
|
context 'key handling' do
|
56
60
|
before do
|
57
|
-
@host = FactoryBot.create(:host, :
|
61
|
+
@host = FactoryBot.create(:host, :managed, :build => true)
|
62
|
+
@host.salt_proxy = @proxy
|
58
63
|
@key_stub = stub("key")
|
59
64
|
ForemanSalt::SmartProxies::SaltKeys.expects(:find).at_least_once.with(@host.salt_proxy, @host.fqdn).returns(@key_stub)
|
60
65
|
end
|
@@ -66,7 +71,7 @@ module ForemanSalt
|
|
66
71
|
end
|
67
72
|
|
68
73
|
test 'host key is deleted when host is removed' do
|
69
|
-
@key_stub.expects(:delete).returns(true)
|
74
|
+
@key_stub.expects(:delete).at_least_once.returns(true)
|
70
75
|
assert @host.destroy
|
71
76
|
end
|
72
77
|
end
|
@@ -3,11 +3,13 @@ require 'test_plugin_helper'
|
|
3
3
|
module ForemanSalt
|
4
4
|
class HostgroupExtensionsTest < ActiveSupport::TestCase
|
5
5
|
setup do
|
6
|
-
User.current =
|
6
|
+
User.current = users :admin
|
7
|
+
@proxy = FactoryBot.create(:smart_proxy, :with_salt_feature)
|
7
8
|
end
|
8
9
|
|
9
10
|
test 'host group has a salt smart proxy' do
|
10
|
-
hostgroup = FactoryBot.create :hostgroup
|
11
|
+
hostgroup = FactoryBot.create :hostgroup
|
12
|
+
hostgroup.salt_proxy = @proxy
|
11
13
|
assert hostgroup.salt_proxy.features.map(&:name).include? 'Salt'
|
12
14
|
end
|
13
15
|
|
@@ -19,11 +21,23 @@ module ForemanSalt
|
|
19
21
|
|
20
22
|
test 'child host group inherits salt proxy from child parent' do
|
21
23
|
parent = FactoryBot.create :hostgroup
|
22
|
-
child_one = FactoryBot.create :hostgroup, :
|
24
|
+
child_one = FactoryBot.create :hostgroup, :parent => parent
|
25
|
+
child_one.salt_proxy = @proxy
|
26
|
+
child_one.reload
|
23
27
|
child_two = FactoryBot.create :hostgroup, :parent => child_one
|
24
28
|
assert_equal child_two.salt_proxy, child_one.salt_proxy
|
25
29
|
end
|
26
30
|
|
31
|
+
test 'child host group inherits salt environment from child parent' do
|
32
|
+
environment = FactoryBot.create :salt_environment
|
33
|
+
parent = FactoryBot.create :hostgroup
|
34
|
+
child_one = FactoryBot.create :hostgroup, :parent => parent
|
35
|
+
child_one.salt_environment = environment
|
36
|
+
child_one.reload
|
37
|
+
child_two = FactoryBot.create :hostgroup, :parent => child_one
|
38
|
+
assert_equal child_two.salt_environment, child_one.salt_environment
|
39
|
+
end
|
40
|
+
|
27
41
|
test 'child and parent salt modules are combined' do
|
28
42
|
environment = FactoryBot.create :salt_environment
|
29
43
|
parent = FactoryBot.create :hostgroup, :with_salt_modules, :salt_environment => environment
|
@@ -3,7 +3,7 @@ require 'test_plugin_helper'
|
|
3
3
|
module ForemanSalt
|
4
4
|
class ReportImporterTest < ActiveSupport::TestCase
|
5
5
|
setup do
|
6
|
-
User.current =
|
6
|
+
User.current = users :admin
|
7
7
|
Setting[:create_new_host_when_facts_are_uploaded] = true
|
8
8
|
|
9
9
|
@report = JSON.parse(File.read(File.join(Engine.root, 'test', 'unit', 'highstate.json')))
|
@@ -12,7 +12,7 @@ module ForemanSalt
|
|
12
12
|
end
|
13
13
|
|
14
14
|
test 'importing report creates a host' do
|
15
|
-
|
15
|
+
assert_not Host.find_by_name(@host)
|
16
16
|
ForemanSalt::ReportImporter.import(@report)
|
17
17
|
assert Host.find_by_name(@host)
|
18
18
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'test_plugin_helper'
|
2
|
+
|
3
|
+
module ForemanSalt
|
4
|
+
class SaltFactsParserTest < ActiveSupport::TestCase
|
5
|
+
attr_reader :importer
|
6
|
+
|
7
|
+
def setup
|
8
|
+
grains = JSON.parse(File.read(File.join(Engine.root, 'test', 'unit', 'grains_centos.json')))
|
9
|
+
@importer = FactParser.new grains["facts"]
|
10
|
+
User.current = users :admin
|
11
|
+
end
|
12
|
+
|
13
|
+
test "should return list of interfaces" do
|
14
|
+
assert importer.interfaces.present?
|
15
|
+
assert_not_nil importer.suggested_primary_interface(FactoryBot.build(:host))
|
16
|
+
assert importer.interfaces.key?(importer.suggested_primary_interface(FactoryBot.build(:host)).first)
|
17
|
+
end
|
18
|
+
|
19
|
+
test "should set operatingsystem correctly" do
|
20
|
+
os = importer.operatingsystem
|
21
|
+
assert os.present?
|
22
|
+
assert_equal 'CentOS', os.name
|
23
|
+
assert_equal '6', os.major
|
24
|
+
assert_equal '5', os.minor
|
25
|
+
assert_equal 'CentOS 6.5', os.title
|
26
|
+
end
|
27
|
+
|
28
|
+
test "should set domain correctly" do
|
29
|
+
domain = importer.domain
|
30
|
+
assert domain.present?
|
31
|
+
assert_equal 'example.com', domain.name
|
32
|
+
end
|
33
|
+
|
34
|
+
test "should set ip correctly" do
|
35
|
+
assert_equal '10.7.13.141', importer.ip
|
36
|
+
end
|
37
|
+
|
38
|
+
test "should set primary_interface correctly" do
|
39
|
+
assert_equal 'eth0', importer.primary_interface
|
40
|
+
end
|
41
|
+
|
42
|
+
test "should set mac correctly" do
|
43
|
+
assert_equal '52:54:00:35:30:2a', importer.mac
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/test/unit/salt_keys_test.rb
CHANGED
@@ -2,7 +2,7 @@ require 'test_plugin_helper'
|
|
2
2
|
|
3
3
|
class SaltKeysTest < ActiveSupport::TestCase
|
4
4
|
setup do
|
5
|
-
User.current =
|
5
|
+
User.current = users :admin
|
6
6
|
|
7
7
|
# Fix for 1.8.7 OpenStruct http://stackoverflow.com/questions/9079441/populate-select-tag-ruby-rails
|
8
8
|
OpenStruct.__send__(:define_method, :id) { @table[:id] }
|
@@ -10,10 +10,10 @@ class SaltKeysTest < ActiveSupport::TestCase
|
|
10
10
|
@proxy = OpenStruct.new(:id => 1, :url => 'http://dummy.example.com:9090')
|
11
11
|
|
12
12
|
ProxyAPI::Salt.any_instance.stubs(:key_list).returns(
|
13
|
-
'saltstack.example.com'
|
13
|
+
'saltstack.example.com' => { 'state' => 'accepted', 'fingerprint' => '98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c0' },
|
14
14
|
'saltclient01.example.com' => { 'state' => 'unaccepted', 'fingerprint' => '98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c1' },
|
15
15
|
'saltclient02.example.com' => { 'state' => 'unaccepted', 'fingerprint' => '98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c2' },
|
16
|
-
'saltclient03.example.com' => { 'state' => 'rejected',
|
16
|
+
'saltclient03.example.com' => { 'state' => 'rejected', 'fingerprint' => '98:c2:63:c1:57:59:bc:bd:f1:ef:5a:38:b2:e9:71:c3' }
|
17
17
|
)
|
18
18
|
end
|
19
19
|
|
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: 10.
|
4
|
+
version: 10.2.0
|
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: 2019-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|
@@ -161,6 +161,7 @@ files:
|
|
161
161
|
- test/unit/host_extensions_test.rb
|
162
162
|
- test/unit/hostgroup_extensions_test.rb
|
163
163
|
- test/unit/report_importer_test.rb
|
164
|
+
- test/unit/salt_fact_parser_test.rb
|
164
165
|
- test/unit/salt_keys_test.rb
|
165
166
|
- test/unit/salt_modules_test.rb
|
166
167
|
homepage: https://github.com/theforeman/foreman_salt
|
@@ -183,27 +184,28 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
184
|
version: '0'
|
184
185
|
requirements: []
|
185
186
|
rubyforge_project:
|
186
|
-
rubygems_version: 2.7.
|
187
|
+
rubygems_version: 2.7.6
|
187
188
|
signing_key:
|
188
189
|
specification_version: 4
|
189
190
|
summary: Foreman Plug-in for Salt
|
190
191
|
test_files:
|
191
192
|
- test/integration/salt_environment_test.rb
|
193
|
+
- test/integration/salt_module_test.rb
|
192
194
|
- test/integration/salt_autosign_test.rb
|
193
195
|
- test/integration/salt_keys_test.rb
|
194
|
-
- test/integration/salt_module_test.rb
|
195
|
-
- test/functional/minions_controller_test.rb
|
196
|
-
- test/functional/api/v2/salt_autosign_controller_test.rb
|
197
|
-
- test/functional/api/v2/salt_environments_controller_test.rb
|
198
|
-
- test/functional/api/v2/salt_keys_controller_test.rb
|
199
|
-
- test/functional/api/v2/salt_states_controller_test.rb
|
200
|
-
- test/test_plugin_helper.rb
|
201
196
|
- test/factories/foreman_salt_factories.rb
|
202
|
-
- test/unit/
|
203
|
-
- test/unit/
|
204
|
-
- test/unit/grains_centos.json
|
197
|
+
- test/unit/grains_importer_test.rb
|
198
|
+
- test/unit/hostgroup_extensions_test.rb
|
205
199
|
- test/unit/highstate.json
|
200
|
+
- test/unit/salt_fact_parser_test.rb
|
206
201
|
- test/unit/salt_modules_test.rb
|
207
|
-
- test/unit/
|
202
|
+
- test/unit/grains_centos.json
|
203
|
+
- test/unit/report_importer_test.rb
|
208
204
|
- test/unit/salt_keys_test.rb
|
209
|
-
- test/unit/
|
205
|
+
- test/unit/host_extensions_test.rb
|
206
|
+
- test/test_plugin_helper.rb
|
207
|
+
- test/functional/minions_controller_test.rb
|
208
|
+
- test/functional/api/v2/salt_autosign_controller_test.rb
|
209
|
+
- test/functional/api/v2/salt_states_controller_test.rb
|
210
|
+
- test/functional/api/v2/salt_environments_controller_test.rb
|
211
|
+
- test/functional/api/v2/salt_keys_controller_test.rb
|