foreman_salt 10.1.0 → 10.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|