foreman_salt 13.2.2 → 14.1.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 +2 -2
- data/Rakefile +2 -2
- data/app/controllers/foreman_salt/api/v2/jobs_controller.rb +9 -9
- data/app/controllers/foreman_salt/api/v2/salt_autosign_controller.rb +41 -10
- data/app/controllers/foreman_salt/api/v2/salt_environments_controller.rb +6 -6
- data/app/controllers/foreman_salt/api/v2/salt_hostgroups_controller.rb +42 -0
- data/app/controllers/foreman_salt/api/v2/salt_keys_controller.rb +14 -14
- data/app/controllers/foreman_salt/api/v2/salt_minions_controller.rb +8 -8
- data/app/controllers/foreman_salt/api/v2/salt_states_controller.rb +24 -26
- data/app/controllers/foreman_salt/api/v2/salt_variables_controller.rb +22 -21
- data/app/controllers/foreman_salt/concerns/hostgroups_controller_extensions.rb +3 -3
- data/app/controllers/foreman_salt/concerns/hosts_controller_extensions.rb +4 -4
- data/app/controllers/foreman_salt/concerns/salt_environment_parameters.rb +1 -1
- data/app/controllers/foreman_salt/concerns/salt_hostgroup_parameters.rb +25 -0
- data/app/controllers/foreman_salt/concerns/salt_module_parameters.rb +1 -1
- data/app/controllers/foreman_salt/concerns/salt_override_value.rb +4 -4
- data/app/controllers/foreman_salt/concerns/salt_variable_parameters.rb +5 -5
- data/app/controllers/foreman_salt/minions_controller.rb +9 -9
- data/app/controllers/foreman_salt/salt_autosign_controller.rb +8 -8
- data/app/controllers/foreman_salt/salt_environments_controller.rb +4 -4
- data/app/controllers/foreman_salt/salt_keys_controller.rb +11 -11
- data/app/controllers/foreman_salt/salt_modules_controller.rb +10 -11
- data/app/controllers/foreman_salt/salt_variables_controller.rb +5 -4
- data/app/controllers/foreman_salt/state_importer.rb +12 -13
- data/app/helpers/concerns/foreman_salt/hosts_helper_extensions.rb +16 -10
- data/app/helpers/concerns/foreman_salt/smart_proxies_helper_extensions.rb +2 -2
- data/app/helpers/foreman_salt/salt_keys_helper.rb +2 -1
- data/app/helpers/foreman_salt/salt_modules_helper.rb +11 -11
- data/app/helpers/foreman_salt/salt_reports_helper.rb +0 -1
- data/app/lib/actions/foreman_salt/report_import.rb +2 -2
- data/app/lib/proxy_api/salt.rb +29 -15
- data/app/models/foreman_salt/concerns/host_managed_extensions.rb +83 -33
- data/app/models/foreman_salt/concerns/hostgroup_extensions.rb +14 -11
- data/app/models/foreman_salt/host_salt_module.rb +1 -1
- data/app/models/foreman_salt/salt_environment.rb +8 -8
- data/app/models/foreman_salt/salt_module.rb +15 -13
- data/app/models/foreman_salt/salt_module_environment.rb +1 -1
- data/app/models/foreman_salt/salt_provider.rb +7 -4
- data/app/models/foreman_salt/salt_status.rb +12 -0
- data/app/models/foreman_salt/salt_variable.rb +8 -8
- data/app/models/setting/salt.rb +12 -10
- data/app/overrides/salt_environment_host_selector.rb +4 -4
- data/app/overrides/salt_environment_hostgroup_selector.rb +4 -4
- data/app/overrides/salt_modules_selector.rb +16 -16
- data/app/overrides/salt_proxy_selector.rb +11 -9
- data/app/services/foreman_salt/report_importer.rb +26 -26
- data/app/services/foreman_salt/smart_proxies/salt_keys.rb +47 -45
- data/app/views/foreman_salt/api/v2/salt_autosign/create.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_environments/create.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_environments/show.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_hostgroups/base.json.rabl +7 -0
- data/app/views/foreman_salt/api/v2/salt_hostgroups/show.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_hostgroups/update.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_keys/update.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_minions/show.json.rabl +3 -4
- data/app/views/foreman_salt/api/v2/salt_states/create.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_states/show.json.rabl +0 -1
- data/app/views/foreman_salt/api/v2/salt_variables/create.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_variables/destroy.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_variables/show.json.rabl +8 -8
- data/config/api_routes.rb +31 -0
- data/config/routes.rb +16 -43
- data/db/migrate/20140817210214_create_salt_modules.rb +4 -4
- data/db/migrate/20140829210214_add_salt_modules_to_hostgroups.rb +1 -1
- data/db/migrate/20140920232200_create_salt_environments.rb +3 -3
- data/db/migrate/20150220122707_fix_incorrect_report_metrics.rb +6 -2
- data/db/migrate/20210312150333_add_salt_autosign_to_host.rb +6 -0
- data/db/migrate/20211108211312_add_missing_permissions.rb +9 -0
- data/db/seeds.d/75-salt_seeds.rb +1 -1
- data/db/seeds.d/76-job_templates.rb +3 -3
- data/lib/foreman_salt/engine.rb +24 -18
- data/lib/foreman_salt/extensions.rb +8 -11
- data/lib/foreman_salt/plugin.rb +120 -114
- data/lib/foreman_salt/version.rb +1 -1
- data/lib/foreman_salt.rb +1 -1
- data/lib/tasks/foreman_salt_tasks.rake +3 -5
- data/locale/action_names.rb +4 -4
- data/locale/ca/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/ca/foreman_salt.po +541 -0
- data/locale/cs_CZ/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/cs_CZ/foreman_salt.po +541 -0
- data/locale/de/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/de/foreman_salt.po +0 -18
- data/locale/en/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/en/foreman_salt.po +0 -18
- data/locale/en_GB/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/en_GB/foreman_salt.po +541 -0
- data/locale/es/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/es/foreman_salt.po +541 -0
- data/locale/foreman_salt.pot +22 -46
- data/locale/fr/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/fr/foreman_salt.po +541 -0
- data/locale/gl/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/gl/foreman_salt.po +541 -0
- data/locale/it/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/it/foreman_salt.po +541 -0
- data/locale/ja/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/ja/foreman_salt.po +541 -0
- data/locale/ko/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/ko/foreman_salt.po +541 -0
- data/locale/nl_NL/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/nl_NL/foreman_salt.po +541 -0
- data/locale/pl/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/pl/foreman_salt.po +542 -0
- data/locale/pt_BR/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/pt_BR/foreman_salt.po +541 -0
- data/locale/ru/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/ru/foreman_salt.po +542 -0
- data/locale/sv_SE/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/sv_SE/foreman_salt.po +541 -0
- data/locale/zh_CN/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/zh_CN/foreman_salt.po +541 -0
- data/locale/zh_TW/LC_MESSAGES/foreman_salt.mo +0 -0
- data/locale/zh_TW/foreman_salt.po +541 -0
- data/test/factories/foreman_salt_factories.rb +5 -5
- data/test/functional/api/v2/salt_autosign_controller_test.rb +26 -18
- data/test/functional/api/v2/salt_environments_controller_test.rb +29 -23
- data/test/functional/api/v2/salt_hostgroups_controller_test.rb +76 -0
- data/test/functional/api/v2/salt_keys_controller_test.rb +25 -19
- data/test/functional/api/v2/salt_states_controller_test.rb +72 -66
- data/test/functional/api/v2/salt_variables_controller_test.rb +4 -4
- data/test/functional/hosts_controller_test.rb +26 -26
- data/test/functional/minions_controller_test.rb +22 -22
- data/test/functional/salt_modules_controller_test.rb +3 -3
- data/test/functional/salt_variables_controller_test.rb +5 -5
- data/test/integration/hosts_js_test.rb +11 -11
- data/test/integration/salt_autosign_test.rb +7 -7
- data/test/integration/salt_environment_test.rb +2 -2
- data/test/integration/salt_keys_test.rb +9 -10
- data/test/integration/salt_module_test.rb +9 -9
- data/test/integration/salt_variable_test.rb +2 -2
- data/test/test_plugin_helper.rb +1 -1
- data/test/unit/grains_importer_test.rb +12 -12
- data/test/unit/host_extensions_test.rb +59 -15
- data/test/unit/hostgroup_extensions_test.rb +13 -13
- data/test/unit/report_importer_test.rb +9 -9
- data/test/unit/salt_keys_test.rb +2 -2
- data/test/unit/salt_modules_test.rb +2 -2
- data/test/unit/salt_variables_test.rb +10 -10
- metadata +56 -22
- data/app/models/foreman_salt/fact_name.rb +0 -14
- data/app/services/foreman_salt/fact_importer.rb +0 -15
- data/app/services/foreman_salt/fact_parser.rb +0 -114
- data/test/unit/grains_centos.json +0 -113
- data/test/unit/salt_fact_importer_test.rb +0 -24
- data/test/unit/salt_fact_parser_test.rb +0 -44
@@ -10,7 +10,7 @@ module ForemanSalt
|
|
10
10
|
|
11
11
|
def params
|
12
12
|
params = super
|
13
|
-
params['salt_master'] = salt_master
|
13
|
+
params['salt_master'] = salt_master if salt_master.present?
|
14
14
|
params
|
15
15
|
end
|
16
16
|
|
@@ -23,32 +23,31 @@ module ForemanSalt
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def inherited_attributes
|
26
|
-
super + %w
|
26
|
+
super + %w[salt_proxy_id salt_environment_id]
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
included do
|
31
|
-
has_many :host_salt_modules, :
|
32
|
-
has_many :salt_modules, :
|
31
|
+
has_many :host_salt_modules, foreign_key: :host_id, class_name: '::ForemanSalt::HostSaltModule'
|
32
|
+
has_many :salt_modules, through: :host_salt_modules, class_name: '::ForemanSalt::SaltModule'
|
33
33
|
|
34
|
-
belongs_to :salt_proxy, :
|
35
|
-
belongs_to :salt_environment, :
|
34
|
+
belongs_to :salt_proxy, class_name: 'SmartProxy'
|
35
|
+
belongs_to :salt_environment, class_name: 'ForemanSalt::SaltEnvironment'
|
36
36
|
|
37
37
|
prepend Overrides
|
38
38
|
|
39
|
-
scoped_search :
|
40
|
-
scoped_search :
|
41
|
-
scoped_search :
|
39
|
+
scoped_search relation: :salt_modules, on: :name, complete_value: true, rename: :salt_state
|
40
|
+
scoped_search relation: :salt_environment, on: :name, complete_value: true, rename: :salt_environment
|
41
|
+
scoped_search relation: :salt_proxy, on: :name, complete_value: true, rename: :saltmaster
|
42
42
|
|
43
43
|
validate :salt_modules_in_host_environment
|
44
44
|
|
45
|
-
after_build
|
46
|
-
|
47
|
-
before_destroy :delete_salt_key, :if => ->(host) { host.salt_proxy }
|
45
|
+
after_build :ensure_salt_autosign, if: ->(host) { host.salt_proxy }
|
46
|
+
before_destroy :remove_salt_minion, if: ->(host) { host.salt_proxy }
|
48
47
|
end
|
49
48
|
|
50
49
|
def salt_params
|
51
|
-
variables = ForemanSalt::SaltVariable.where(:
|
50
|
+
variables = ForemanSalt::SaltVariable.where(salt_module_id: all_salt_modules.pluck(:id), override: true)
|
52
51
|
values = variables.values_hash(self)
|
53
52
|
|
54
53
|
variables.each_with_object({}) do |var, memo|
|
@@ -58,6 +57,14 @@ module ForemanSalt
|
|
58
57
|
end
|
59
58
|
end
|
60
59
|
|
60
|
+
def host_params_grains_name
|
61
|
+
'salt_grains'
|
62
|
+
end
|
63
|
+
|
64
|
+
def autosign_grain_name
|
65
|
+
'autosign_key'
|
66
|
+
end
|
67
|
+
|
61
68
|
def salt_modules_for_enc
|
62
69
|
all_salt_modules.collect(&:name).uniq
|
63
70
|
end
|
@@ -66,7 +73,7 @@ module ForemanSalt
|
|
66
73
|
return [] unless salt_environment
|
67
74
|
|
68
75
|
modules = salt_modules + (hostgroup ? hostgroup.all_salt_modules : [])
|
69
|
-
ForemanSalt::SaltModule.in_environment(salt_environment).where(:
|
76
|
+
ForemanSalt::SaltModule.in_environment(salt_environment).where(id: modules)
|
70
77
|
end
|
71
78
|
|
72
79
|
def salt_master
|
@@ -74,51 +81,94 @@ module ForemanSalt
|
|
74
81
|
end
|
75
82
|
|
76
83
|
def saltrun!
|
77
|
-
|
84
|
+
if salt_proxy.blank?
|
78
85
|
errors.add(:base, _("No Salt master defined - can't continue"))
|
79
86
|
logger.warn 'Unable to execute salt run, no salt proxies defined'
|
80
87
|
return false
|
81
88
|
end
|
82
|
-
ProxyAPI::Salt.new(:
|
83
|
-
rescue => e
|
89
|
+
ProxyAPI::Salt.new(url: salt_proxy.url).highstate name
|
90
|
+
rescue StandardError => e
|
84
91
|
errors.add(:base, _('Failed to execute state.highstate: %s') % e)
|
85
92
|
false
|
86
93
|
end
|
87
94
|
|
88
95
|
def salt_modules_in_host_environment
|
89
|
-
return unless
|
96
|
+
return unless salt_modules.any?
|
90
97
|
|
91
|
-
if
|
92
|
-
errors.add(:base, _('Salt states must be in the environment of the host')) unless (
|
98
|
+
if salt_environment
|
99
|
+
errors.add(:base, _('Salt states must be in the environment of the host')) unless (salt_modules - salt_environment.salt_modules).empty?
|
93
100
|
else
|
94
101
|
errors.add(:base, _('Host must have an environment in order to set salt states'))
|
95
102
|
end
|
96
103
|
end
|
97
104
|
|
98
|
-
|
99
|
-
|
100
|
-
def accept_salt_key
|
105
|
+
def derive_salt_grains(use_autosign: False)
|
106
|
+
grains = {}
|
101
107
|
begin
|
102
|
-
Rails.logger.info(
|
103
|
-
|
104
|
-
|
108
|
+
Rails.logger.info('Derive Salt Grains from host_params and autosign_key')
|
109
|
+
grains[autosign_grain_name] = salt_autosign_key if use_autosign && !salt_autosign_key.nil?
|
110
|
+
unless host_params[host_params_grains_name].nil? ||
|
111
|
+
host_params[host_params_grains_name].class != Hash
|
112
|
+
grains.merge!(host_params[host_params_grains_name])
|
113
|
+
end
|
105
114
|
rescue Foreman::Exception => e
|
106
|
-
Rails.logger.warn("Unable to
|
115
|
+
Rails.logger.warn("Unable to derive Salt Grains: #{e}")
|
107
116
|
end
|
117
|
+
grains
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
def ensure_salt_autosign
|
123
|
+
remove_salt_autosign
|
124
|
+
create_salt_autosign
|
125
|
+
end
|
126
|
+
|
127
|
+
def remove_salt_minion
|
128
|
+
remove_salt_autosign
|
129
|
+
remove_salt_key
|
130
|
+
end
|
131
|
+
|
132
|
+
def remove_salt_key
|
133
|
+
Rails.logger.info("Remove salt key for host #{fqdn}")
|
134
|
+
api = ProxyAPI::Salt.new(url: salt_proxy.url)
|
135
|
+
api.key_delete(name)
|
108
136
|
end
|
109
137
|
|
110
|
-
def
|
138
|
+
def remove_salt_autosign
|
139
|
+
key = salt_autosign_key
|
140
|
+
return if key.nil?
|
141
|
+
Rails.logger.info("Remove salt autosign key for host #{fqdn}")
|
111
142
|
begin
|
112
|
-
|
113
|
-
key
|
143
|
+
api = ProxyAPI::Salt.new(url: salt_proxy.url)
|
144
|
+
api.autosign_remove_key(key)
|
114
145
|
rescue Foreman::Exception => e
|
115
|
-
Rails.logger.warn("Unable to
|
146
|
+
Rails.logger.warn("Unable to remove salt autosign for #{fqdn}: #{e}")
|
116
147
|
end
|
117
148
|
end
|
149
|
+
|
150
|
+
def generate_provisioning_key
|
151
|
+
SecureRandom.hex(10)
|
152
|
+
end
|
153
|
+
|
154
|
+
def create_salt_autosign
|
155
|
+
Rails.logger.info("Create salt autosign key for host #{fqdn}")
|
156
|
+
api = ProxyAPI::Salt.new(url: salt_proxy.url)
|
157
|
+
key = generate_provisioning_key
|
158
|
+
api.autosign_create_key(key)
|
159
|
+
update(salt_autosign_key: key)
|
160
|
+
update(salt_status: ForemanSalt::SaltStatus.minion_auth_waiting)
|
161
|
+
rescue Foreman::Exception => e
|
162
|
+
Rails.logger.warn("Unable to create salt autosign for #{fqdn}: #{e}")
|
163
|
+
end
|
118
164
|
end
|
119
165
|
end
|
120
166
|
end
|
121
167
|
|
122
|
-
|
123
|
-
|
168
|
+
# rubocop:disable Style/ClassAndModuleChildren
|
169
|
+
class Host::Managed
|
170
|
+
class Jail < ::Safemode::Jail
|
171
|
+
allow :salt_environment, :salt_master, :derive_salt_grains
|
172
|
+
end
|
124
173
|
end
|
174
|
+
# rubocop:enable Style/ClassAndModuleChildren
|
@@ -4,23 +4,26 @@ module ForemanSalt
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
included do
|
7
|
-
has_many :hostgroup_salt_modules, :
|
8
|
-
has_many :salt_modules, :
|
7
|
+
has_many :hostgroup_salt_modules, class_name: '::ForemanSalt::HostgroupSaltModule'
|
8
|
+
has_many :salt_modules, through: :hostgroup_salt_modules, class_name: '::ForemanSalt::SaltModule'
|
9
9
|
|
10
|
-
belongs_to :salt_proxy, :
|
11
|
-
belongs_to :salt_environment, :
|
10
|
+
belongs_to :salt_proxy, class_name: 'SmartProxy'
|
11
|
+
belongs_to :salt_environment, class_name: 'ForemanSalt::SaltEnvironment'
|
12
12
|
|
13
|
-
scoped_search :
|
14
|
-
scoped_search :
|
15
|
-
scoped_search :
|
13
|
+
scoped_search relation: :salt_modules, on: :name, complete_value: true, rename: :salt_state
|
14
|
+
scoped_search relation: :salt_environment, on: :name, complete_value: true, rename: :salt_environment
|
15
|
+
scoped_search relation: :salt_proxy, on: :name, complete_value: true, rename: :saltmaster
|
16
|
+
|
17
|
+
validates :salt_proxy, presence: true, unless: -> { salt_proxy_id.blank? }
|
18
|
+
validates :salt_environment, presence: true, unless: -> { salt_environment_id.blank? }
|
16
19
|
end
|
17
20
|
|
18
21
|
def all_salt_modules
|
19
|
-
ForemanSalt::SaltModule.in_environment(salt_environment).where(:
|
22
|
+
ForemanSalt::SaltModule.in_environment(salt_environment).where(id: salt_module_ids + inherited_salt_module_ids)
|
20
23
|
end
|
21
24
|
|
22
25
|
def inherited_salt_modules
|
23
|
-
ForemanSalt::SaltModule.where(:
|
26
|
+
ForemanSalt::SaltModule.where(id: inherited_salt_module_ids)
|
24
27
|
end
|
25
28
|
|
26
29
|
def inherited_salt_module_ids
|
@@ -29,7 +32,7 @@ module ForemanSalt
|
|
29
32
|
|
30
33
|
def salt_proxy
|
31
34
|
if ancestry.present?
|
32
|
-
SmartProxy.with_features('Salt').
|
35
|
+
SmartProxy.with_features('Salt').find_by(id: inherited_salt_proxy_id)
|
33
36
|
else
|
34
37
|
super
|
35
38
|
end
|
@@ -41,7 +44,7 @@ module ForemanSalt
|
|
41
44
|
|
42
45
|
def salt_environment
|
43
46
|
if ancestry.present?
|
44
|
-
ForemanSalt::SaltEnvironment.
|
47
|
+
ForemanSalt::SaltEnvironment.find_by(id: inherited_salt_environment_id)
|
45
48
|
else
|
46
49
|
super
|
47
50
|
end
|
@@ -5,17 +5,17 @@ module ForemanSalt
|
|
5
5
|
friendly_id :name
|
6
6
|
include Parameterizable::ByIdName
|
7
7
|
|
8
|
-
has_many :hosts, :
|
9
|
-
has_many :hostgroups, :
|
8
|
+
has_many :hosts, class_name: '::Host::Managed'
|
9
|
+
has_many :hostgroups, class_name: '::Hostgroup'
|
10
10
|
|
11
11
|
has_many :salt_module_environments
|
12
|
-
has_many :salt_modules, :
|
12
|
+
has_many :salt_modules, through: :salt_module_environments, before_remove: :remove_from_hosts
|
13
13
|
|
14
|
-
validates :name, :
|
14
|
+
validates :name, uniqueness: true, presence: true, format: { with: /\A[\w\d.]+\z/, message: N_('is alphanumeric and cannot contain spaces') }
|
15
15
|
|
16
|
-
scoped_search :
|
17
|
-
scoped_search :
|
18
|
-
scoped_search :
|
16
|
+
scoped_search on: :name, complete_value: true
|
17
|
+
scoped_search relation: :hostgroups, on: :name, complete_value: true, rename: :hostgroup
|
18
|
+
scoped_search relation: :hosts, on: :name, complete_value: true, rename: :host
|
19
19
|
|
20
20
|
def self.humanize_class_name(_name = nil)
|
21
21
|
_('Salt environment')
|
@@ -28,7 +28,7 @@ module ForemanSalt
|
|
28
28
|
private
|
29
29
|
|
30
30
|
def remove_from_hosts(state)
|
31
|
-
HostSaltModule.joins(:host).where(:
|
31
|
+
HostSaltModule.joins(:host).where(hosts: { salt_environment_id: id }, salt_module_id: state).destroy
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -7,19 +7,21 @@ module ForemanSalt
|
|
7
7
|
friendly_id :name
|
8
8
|
include Parameterizable::ByIdName
|
9
9
|
|
10
|
-
has_many :host_salt_modules
|
11
|
-
has_many :hosts, :
|
10
|
+
has_many :host_salt_modules
|
11
|
+
has_many :hosts, through: :host_salt_modules, class_name: '::Host::Managed'
|
12
12
|
|
13
|
-
has_many :hostgroup_salt_modules
|
14
|
-
has_many :hostgroups, :
|
13
|
+
has_many :hostgroup_salt_modules
|
14
|
+
has_many :hostgroups, through: :hostgroup_salt_modules
|
15
15
|
|
16
|
-
has_many :salt_variables, :
|
17
|
-
:
|
16
|
+
has_many :salt_variables, inverse_of: :salt_module,
|
17
|
+
dependent: :destroy
|
18
18
|
|
19
19
|
has_many :salt_module_environments
|
20
|
-
has_many :salt_environments, :
|
20
|
+
has_many :salt_environments, through: :salt_module_environments
|
21
21
|
|
22
|
-
validates :name, :
|
22
|
+
validates :name, uniqueness: true, presence: true,
|
23
|
+
format: { with: /\A(?:[\w\d\-]+\.{0,1})+[^.]\z/,
|
24
|
+
message: N_('must be alphanumeric, can contain periods, dashes, underscores and must not contain spaces') }
|
23
25
|
|
24
26
|
default_scope lambda {
|
25
27
|
order('salt_modules.name')
|
@@ -27,15 +29,15 @@ module ForemanSalt
|
|
27
29
|
|
28
30
|
scope :in_environment, ->(environment) { joins(:salt_environments).where('salt_module_environments.salt_environment_id' => environment) }
|
29
31
|
|
30
|
-
scoped_search :
|
31
|
-
scoped_search :
|
32
|
-
scoped_search :
|
33
|
-
scoped_search :
|
32
|
+
scoped_search on: :name, complete_value: true
|
33
|
+
scoped_search relation: :salt_environments, on: :name, complete_value: true, rename: :environment
|
34
|
+
scoped_search relation: :hostgroups, on: :name, complete_value: true, rename: :hostgroup
|
35
|
+
scoped_search relation: :hosts, on: :name, complete_value: true, rename: :host
|
34
36
|
|
35
37
|
def self.to_hash
|
36
38
|
states = {}
|
37
39
|
|
38
|
-
SaltEnvironment.all.
|
40
|
+
SaltEnvironment.all.find_each do |environment|
|
39
41
|
states[environment.name] = environment.salt_modules.map(&:name)
|
40
42
|
end
|
41
43
|
|
@@ -8,7 +8,7 @@ module ForemanSalt
|
|
8
8
|
private
|
9
9
|
|
10
10
|
def remove_from_hosts
|
11
|
-
HostSaltModule.joins(:host).where(:
|
11
|
+
HostSaltModule.joins(:host).where(hosts: { salt_environment_id: salt_environment_id }, salt_module_id: salt_module_id).destroy
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -14,14 +14,17 @@ module ForemanSalt
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def proxy_command_options(template_invocation, host)
|
17
|
-
super(template_invocation, host).merge(:
|
17
|
+
super(template_invocation, host).merge(name: host.name)
|
18
18
|
end
|
19
19
|
|
20
|
-
def ssh_password(_host)
|
20
|
+
def ssh_password(_host)
|
21
|
+
end
|
21
22
|
|
22
|
-
def ssh_key_passphrase(_host)
|
23
|
+
def ssh_key_passphrase(_host)
|
24
|
+
end
|
23
25
|
|
24
|
-
def sudo_password(_host)
|
26
|
+
def sudo_password(_host)
|
27
|
+
end
|
25
28
|
end
|
26
29
|
end
|
27
30
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module ForemanSalt
|
2
|
+
# Define the class that holds different states a Salt host become
|
3
|
+
class SaltStatus
|
4
|
+
def self.minion_auth_waiting
|
5
|
+
'Waiting for Salt Minion to authenticate'
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.minion_auth_success
|
9
|
+
'Salt Minion was authenticated successfully to Salt Master'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -3,12 +3,12 @@
|
|
3
3
|
module ForemanSalt
|
4
4
|
# Represents the variables used in Salt
|
5
5
|
class SaltVariable < LookupKey
|
6
|
-
belongs_to :salt_module, :
|
7
|
-
validates :salt_module_id, :
|
8
|
-
before_validation :cast_default_value, :
|
9
|
-
scoped_search :
|
10
|
-
scoped_search :
|
11
|
-
:
|
6
|
+
belongs_to :salt_module, inverse_of: :salt_variables
|
7
|
+
validates :salt_module_id, presence: true
|
8
|
+
before_validation :cast_default_value, if: :override?
|
9
|
+
scoped_search on: :key, aliases: [:name], complete_value: true
|
10
|
+
scoped_search relation: :salt_module, on: :name,
|
11
|
+
complete_value: true, rename: :salt_module
|
12
12
|
|
13
13
|
def salt?
|
14
14
|
true
|
@@ -18,12 +18,12 @@ module ForemanSalt
|
|
18
18
|
if options.present?
|
19
19
|
super
|
20
20
|
else
|
21
|
-
|
21
|
+
'Salt variable'
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
def editable_by_user?
|
26
|
-
SaltVariable.authorized(:edit_external_parameters).
|
26
|
+
SaltVariable.authorized(:edit_external_parameters).exists?(id: id)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
data/app/models/setting/salt.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
-
class Setting
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
class Setting
|
2
|
+
class Salt < ::Setting
|
3
|
+
def self.default_settings
|
4
|
+
[
|
5
|
+
set('salt_namespace_pillars', N_("Namespace Foreman pillars under 'foreman' key"), false),
|
6
|
+
set('salt_hide_run_salt_button', N_('Hide the Run Salt state.highstate button on the host details page'), false),
|
7
|
+
]
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def self.load_defaults
|
11
|
+
super
|
12
|
+
Setting['salt_hide_run_salt_button'] = true if ForemanSalt.with_remote_execution?
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
@@ -7,8 +7,8 @@ selector_text = "<%= select_f f, :salt_environment_id, ForemanSalt::SaltEnvironm
|
|
7
7
|
:help_inline => :indicator} %>"
|
8
8
|
|
9
9
|
Deface::Override.new(
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
10
|
+
virtual_path: 'hosts/_form',
|
11
|
+
name: 'add_salt_environment_to_host',
|
12
|
+
insert_bottom: 'div#primary',
|
13
|
+
text: selector_text
|
14
14
|
)
|
@@ -5,8 +5,8 @@ selector_text = "<%= select_f f, :salt_environment_id, ForemanSalt::SaltEnvironm
|
|
5
5
|
:'data-host-id' => (@host || @hostgroup).id, :help_inline => :indicator} %>"
|
6
6
|
|
7
7
|
Deface::Override.new(
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
8
|
+
virtual_path: 'hostgroups/_form',
|
9
|
+
name: 'add_salt_environment_to_hostgroup',
|
10
|
+
insert_bottom: 'div#primary',
|
11
|
+
text: selector_text
|
12
12
|
)
|
@@ -1,19 +1,19 @@
|
|
1
|
-
Deface::Override.new(:
|
2
|
-
:
|
3
|
-
:
|
4
|
-
:
|
1
|
+
Deface::Override.new(virtual_path: 'hosts/_form',
|
2
|
+
name: 'add_salt_modules_tab_to_host',
|
3
|
+
insert_after: 'li.active',
|
4
|
+
partial: 'foreman_salt/salt_modules/host_tab')
|
5
5
|
|
6
|
-
Deface::Override.new(:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
6
|
+
Deface::Override.new(virtual_path: 'hosts/_form',
|
7
|
+
name: 'add_salt_modules_tab_pane_to_host',
|
8
|
+
insert_before: 'div#primary',
|
9
|
+
partial: 'foreman_salt/salt_modules/host_tab_pane')
|
10
10
|
|
11
|
-
Deface::Override.new(:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
11
|
+
Deface::Override.new(virtual_path: 'hostgroups/_form',
|
12
|
+
name: 'add_salt_modules_tab_to_hg',
|
13
|
+
insert_after: 'li.active',
|
14
|
+
partial: 'foreman_salt/salt_modules/host_tab')
|
15
15
|
|
16
|
-
Deface::Override.new(:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
16
|
+
Deface::Override.new(virtual_path: 'hostgroups/_form',
|
17
|
+
name: 'add_salt_modules_tab_pane_to_hg',
|
18
|
+
insert_before: 'div#primary',
|
19
|
+
partial: 'foreman_salt/salt_modules/host_tab_pane')
|
@@ -1,17 +1,19 @@
|
|
1
|
-
selector_text = "<%= select_f f, :salt_proxy_id,
|
1
|
+
selector_text = "<%= select_f f, :salt_proxy_id,
|
2
|
+
SmartProxy.unscoped.with_features('Salt').with_taxonomy_scope(@location,@organization, :path_ids),
|
3
|
+
:id, :name,
|
2
4
|
{ :include_blank => blank_or_inherit_f(f, :salt_proxy) },
|
3
5
|
{ :label => _('Salt Master') } %>"
|
4
6
|
|
5
7
|
Deface::Override.new(
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
8
|
+
virtual_path: 'hosts/_form',
|
9
|
+
name: 'add_salt_proxy_to_host',
|
10
|
+
insert_bottom: 'div#primary',
|
11
|
+
text: selector_text
|
10
12
|
)
|
11
13
|
|
12
14
|
Deface::Override.new(
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
15
|
+
virtual_path: 'hostgroups/_form',
|
16
|
+
name: 'add_salt_proxy_to_hostgroup',
|
17
|
+
insert_bottom: 'div#primary',
|
18
|
+
text: selector_text
|
17
19
|
)
|