foreman_salt 14.0.0 → 15.1.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 -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 +15 -14
- 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 -20
- 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 +13 -21
- 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 +17 -17
- data/app/models/foreman_salt/concerns/host_managed_extensions.rb +46 -56
- 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_variable.rb +8 -8
- 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 +30 -30
- 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/app/views/foreman_salt/salt_autosign/index.html.erb +1 -2
- data/app/views/foreman_salt/salt_environments/index.html.erb +1 -3
- data/app/views/foreman_salt/salt_keys/index.erb +1 -3
- data/app/views/foreman_salt/salt_modules/index.html.erb +1 -2
- data/config/api_routes.rb +31 -0
- data/config/routes.rb +16 -44
- 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/20211108211312_add_missing_permissions.rb +9 -0
- data/db/migrate/20220118160349_drop_salt_hide_run_salt_button_setting.rb +5 -0
- data/db/migrate/20220406185204_fix_salt_setting_category_to_dsl.rb +5 -0
- data/db/seeds.d/75-salt_seeds.rb +1 -1
- data/db/seeds.d/76-job_templates.rb +7 -5
- data/lib/foreman_salt/engine.rb +17 -19
- data/lib/foreman_salt/extensions.rb +8 -8
- data/lib/foreman_salt/plugin.rb +130 -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/test/factories/foreman_salt_factories.rb +5 -5
- data/test/functional/api/v2/salt_autosign_controller_test.rb +26 -20
- 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 +23 -24
- 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 +7 -23
- data/test/integration/salt_autosign_test.rb +5 -6
- data/test/integration/salt_environment_test.rb +2 -2
- data/test/integration/salt_keys_test.rb +7 -8
- 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 +13 -13
- data/test/unit/host_extensions_test.rb +21 -19
- 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 +24 -14
- data/app/models/setting/salt.rb +0 -13
@@ -10,11 +10,11 @@ module ForemanSalt
|
|
10
10
|
class_methods do
|
11
11
|
def salt_variable_params_filter
|
12
12
|
Foreman::ParameterFilter.new(::ForemanSalt::SaltVariable).tap do |filter|
|
13
|
-
filter.permit :salt_module_id, :
|
14
|
-
|
15
|
-
|
16
|
-
filter.permit_by_context :required, :
|
17
|
-
filter.permit_by_context :id, :
|
13
|
+
filter.permit :salt_module_id, salt_modules: [], salt_module_ids: [],
|
14
|
+
salt_module_names: [], param_classes: [], param_classes_ids: [],
|
15
|
+
param_classes_names: []
|
16
|
+
filter.permit_by_context :required, nested: true
|
17
|
+
filter.permit_by_context :id, ui: false, api: false, nested: true
|
18
18
|
add_lookup_key_params_filter(filter)
|
19
19
|
end
|
20
20
|
end
|
@@ -3,8 +3,8 @@ module ForemanSalt
|
|
3
3
|
include ::Foreman::Controller::SmartProxyAuth
|
4
4
|
include ::Foreman::Controller::Parameters::Host
|
5
5
|
|
6
|
-
before_action :find_resource, :
|
7
|
-
add_smart_proxy_filters :node, :
|
6
|
+
before_action :find_resource, only: %i[node]
|
7
|
+
add_smart_proxy_filters :node, features: 'Salt'
|
8
8
|
|
9
9
|
def node
|
10
10
|
enc = {}
|
@@ -19,28 +19,19 @@ module ForemanSalt
|
|
19
19
|
|
20
20
|
enc['environment'] = env
|
21
21
|
respond_to do |format|
|
22
|
-
format.html { render :
|
23
|
-
format.yml { render :
|
22
|
+
format.html { render plain: "<pre>#{ERB::Util.html_escape(enc.to_yaml)}</pre>" }
|
23
|
+
format.yml { render plain: enc.to_yaml }
|
24
24
|
end
|
25
|
-
rescue
|
25
|
+
rescue StandardError
|
26
26
|
logger.warn "Failed to generate external nodes for #{@minion} with #{$ERROR_INFO}"
|
27
|
-
render(:
|
28
|
-
end
|
29
|
-
|
30
|
-
def run
|
31
|
-
if @minion.saltrun!
|
32
|
-
success _('Successfully executed, check log files for more details')
|
33
|
-
else
|
34
|
-
error @minion.errors[:base].to_sentence
|
35
|
-
end
|
36
|
-
redirect_to host_path(@minion)
|
27
|
+
render(plain: _('Unable to generate output, Check log files\n'), status: :precondition_failed) && return
|
37
28
|
end
|
38
29
|
|
39
30
|
def salt_environment_selected
|
40
31
|
if params[:host][:salt_environment_id].present?
|
41
32
|
@salt_environment = ::ForemanSalt::SaltEnvironment.friendly.find(params[:host][:salt_environment_id])
|
42
33
|
load_ajax_vars
|
43
|
-
render :
|
34
|
+
render partial: 'foreman_salt/salt_modules/host_tab_pane'
|
44
35
|
else
|
45
36
|
logger.info 'environment_id is required to render states'
|
46
37
|
end
|
@@ -48,8 +39,6 @@ module ForemanSalt
|
|
48
39
|
|
49
40
|
def action_permission
|
50
41
|
case params[:action]
|
51
|
-
when 'run'
|
52
|
-
:saltrun
|
53
42
|
when 'node'
|
54
43
|
:view
|
55
44
|
when 'salt_environment_selected'
|
@@ -70,7 +59,7 @@ module ForemanSalt
|
|
70
59
|
private
|
71
60
|
|
72
61
|
def load_ajax_vars
|
73
|
-
@minion = Host::Base.authorized(:view_hosts, Host).
|
62
|
+
@minion = Host::Base.authorized(:view_hosts, Host).find_by(id: params[:host_id])
|
74
63
|
if @minion
|
75
64
|
unless @minion.is_a?(Host::Managed)
|
76
65
|
@minion = @minion.becomes(Host::Managed)
|
@@ -82,7 +71,7 @@ module ForemanSalt
|
|
82
71
|
end
|
83
72
|
|
84
73
|
@obj = @minion
|
85
|
-
@inherited_salt_modules = @salt_environment.salt_modules.where(:
|
74
|
+
@inherited_salt_modules = @salt_environment.salt_modules.where(id: @minion.hostgroup ? @minion.hostgroup.all_salt_modules : [])
|
86
75
|
@salt_modules = @salt_environment.salt_modules - @inherited_salt_modules
|
87
76
|
@selected = @minion.salt_modules || []
|
88
77
|
end
|
@@ -3,7 +3,7 @@ module ForemanSalt
|
|
3
3
|
def index
|
4
4
|
setup
|
5
5
|
autosign = @api.autosign_list
|
6
|
-
@autosign = autosign.paginate :
|
6
|
+
@autosign = autosign.paginate page: params[:page], per_page: Setting[:entries_per_page]
|
7
7
|
end
|
8
8
|
|
9
9
|
def new
|
@@ -14,10 +14,10 @@ module ForemanSalt
|
|
14
14
|
setup
|
15
15
|
|
16
16
|
if @api.autosign_create(params[:id])
|
17
|
-
process_success(:
|
18
|
-
:
|
17
|
+
process_success(success_redirect: hash_for_smart_proxy_salt_autosign_index_path, success_msg: _("Autosign created for #{params[:id]}"),
|
18
|
+
object_name: params[:id])
|
19
19
|
else
|
20
|
-
process_error(:
|
20
|
+
process_error(redirect: hash_for_smart_proxy_salt_autosign_index_path)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -25,10 +25,10 @@ module ForemanSalt
|
|
25
25
|
setup
|
26
26
|
|
27
27
|
if @api.autosign_remove(params[:id])
|
28
|
-
process_success(:
|
29
|
-
:
|
28
|
+
process_success(success_redirect: hash_for_smart_proxy_salt_autosign_index_path, success_msg: _("Autosign deleted for #{params[:id]}"),
|
29
|
+
object_name: params[:id])
|
30
30
|
else
|
31
|
-
process_error(:
|
31
|
+
process_error(redirect: hash_for_smart_proxy_salt_autosign_index_path)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -36,7 +36,7 @@ module ForemanSalt
|
|
36
36
|
|
37
37
|
def setup
|
38
38
|
@proxy = SmartProxy.authorized(:view_smart_proxies_salt_autosign).find(params[:smart_proxy_id])
|
39
|
-
@api = ProxyAPI::Salt.new(:
|
39
|
+
@api = ProxyAPI::Salt.new(url: @proxy.url)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -3,10 +3,10 @@ module ForemanSalt
|
|
3
3
|
include Foreman::Controller::AutoCompleteSearch
|
4
4
|
include ::ForemanSalt::Concerns::SaltEnvironmentParameters
|
5
5
|
|
6
|
-
before_action :find_resource, :
|
6
|
+
before_action :find_resource, only: %i[edit update destroy]
|
7
7
|
|
8
8
|
def index
|
9
|
-
@salt_environments = resource_base.search_for(params[:search], :
|
9
|
+
@salt_environments = resource_base.search_for(params[:search], order: params[:order]).paginate(page: params[:page])
|
10
10
|
end
|
11
11
|
|
12
12
|
def new
|
@@ -26,8 +26,8 @@ module ForemanSalt
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def update
|
29
|
-
if @salt_environment.
|
30
|
-
success _(
|
29
|
+
if @salt_environment.update(salt_environment_params)
|
30
|
+
success _("Successfully updated #{@salt_environment}")
|
31
31
|
redirect_to salt_environments_path
|
32
32
|
else
|
33
33
|
process_error
|
@@ -7,19 +7,19 @@ module ForemanSalt
|
|
7
7
|
keys = if params[:state].blank?
|
8
8
|
SmartProxies::SaltKeys.all @proxy
|
9
9
|
else
|
10
|
-
SmartProxies::SaltKeys.find_by_state
|
10
|
+
SmartProxies::SaltKeys.find_by_state(@proxy, params[:state].downcase)
|
11
11
|
end
|
12
|
-
@keys = keys.sort.paginate :
|
12
|
+
@keys = keys.sort.paginate page: params[:page], per_page: Setting[:entries_per_page]
|
13
13
|
end
|
14
14
|
|
15
15
|
def accept
|
16
16
|
@proxy = find_proxy(:edit_smart_proxies_salt_keys)
|
17
17
|
key = SmartProxies::SaltKeys.find(@proxy, params[:salt_key_id])
|
18
18
|
if key.accept
|
19
|
-
process_success(:
|
20
|
-
:
|
19
|
+
process_success(success_redirect: hash_for_smart_proxy_salt_keys_path(state: params[:state], expire_cache: true),
|
20
|
+
success_msg: _("Key accepted for #{key}"), object_name: key.to_s)
|
21
21
|
else
|
22
|
-
process_error(:
|
22
|
+
process_error(redirect: hash_for_smart_proxy_salt_keys_path(state: params[:state], expire_cache: true))
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -27,10 +27,10 @@ module ForemanSalt
|
|
27
27
|
@proxy = find_proxy(:edit_smart_proxies_salt_keys)
|
28
28
|
key = SmartProxies::SaltKeys.find(@proxy, params[:salt_key_id])
|
29
29
|
if key.reject
|
30
|
-
process_success(:
|
31
|
-
:
|
30
|
+
process_success(success_redirect: hash_for_smart_proxy_salt_keys_path(state: params[:state], expire_cache: true),
|
31
|
+
success_msg: _("Key rejected for #{key}"), object_name: key.to_s)
|
32
32
|
else
|
33
|
-
process_error(:
|
33
|
+
process_error(redirect: hash_for_smart_proxy_salt_keys_path(state: params[:state], expire_cache: true))
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -38,10 +38,10 @@ module ForemanSalt
|
|
38
38
|
@proxy = find_proxy(:destroy_smart_proxies_salt_keys)
|
39
39
|
key = SmartProxies::SaltKeys.find(@proxy, params[:id])
|
40
40
|
if key.delete
|
41
|
-
process_success(:
|
42
|
-
:
|
41
|
+
process_success(success_redirect: hash_for_smart_proxy_salt_keys_path(state: params[:state], expire_cache: true),
|
42
|
+
success_msg: _("Key deleted for #{key}"), object_name: key.to_s)
|
43
43
|
else
|
44
|
-
process_error(:
|
44
|
+
process_error(redirect: hash_for_smart_proxy_salt_keys_path(state: params[:state], expire_cache: true))
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -4,11 +4,11 @@ module ForemanSalt
|
|
4
4
|
include ::ForemanSalt::Concerns::SaltModuleParameters
|
5
5
|
include StateImporter
|
6
6
|
|
7
|
-
before_action :find_resource, :
|
8
|
-
before_action :find_proxy, :
|
7
|
+
before_action :find_resource, only: %i[edit update destroy]
|
8
|
+
before_action :find_proxy, only: :import
|
9
9
|
|
10
10
|
def index
|
11
|
-
@salt_modules = resource_base.search_for(params[:search], :
|
11
|
+
@salt_modules = resource_base.search_for(params[:search], order: params[:order]).includes(:salt_environments).paginate(page: params[:page])
|
12
12
|
end
|
13
13
|
|
14
14
|
def new
|
@@ -30,8 +30,8 @@ module ForemanSalt
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def update
|
33
|
-
if @salt_module.
|
34
|
-
success _(
|
33
|
+
if @salt_module.update(salt_module_params)
|
34
|
+
success _("Successfully updated #{@salt_module}.")
|
35
35
|
redirect_to salt_modules_path
|
36
36
|
else
|
37
37
|
process_error
|
@@ -62,10 +62,9 @@ module ForemanSalt
|
|
62
62
|
@changes = result[:changes]
|
63
63
|
@deletes = result[:deletes]
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
end
|
65
|
+
return unless @changes.empty?
|
66
|
+
info _('No changes found')
|
67
|
+
redirect_to salt_modules_path
|
69
68
|
end
|
70
69
|
|
71
70
|
def apply_changes
|
@@ -75,8 +74,8 @@ module ForemanSalt
|
|
75
74
|
params[:changed].each do |environment, states|
|
76
75
|
next unless states[:add] || states[:remove]
|
77
76
|
|
78
|
-
add_to_environment(JSON.
|
79
|
-
remove_from_environment(JSON.
|
77
|
+
add_to_environment(JSON.parse(states[:add]), environment) if states[:add]
|
78
|
+
remove_from_environment(JSON.parse(states[:remove]), environment) if states[:remove]
|
80
79
|
end
|
81
80
|
|
82
81
|
clean_orphans
|
@@ -6,12 +6,12 @@ module ForemanSalt
|
|
6
6
|
include Foreman::Controller::AutoCompleteSearch
|
7
7
|
include ::ForemanSalt::Concerns::SaltVariableParameters
|
8
8
|
|
9
|
-
before_action :find_resource, :
|
9
|
+
before_action :find_resource, only: %i[edit update destroy], if: proc { params[:id] }
|
10
10
|
|
11
11
|
def index
|
12
12
|
@salt_variables = resource_base.search_for(params[:search],
|
13
|
-
|
14
|
-
|
13
|
+
order: params[:order]).paginate(page: params[:page],
|
14
|
+
per_page: params[:per_page])
|
15
15
|
end
|
16
16
|
|
17
17
|
def new
|
@@ -33,7 +33,8 @@ module ForemanSalt
|
|
33
33
|
|
34
34
|
private
|
35
35
|
|
36
|
-
def default_order
|
36
|
+
def default_order
|
37
|
+
end
|
37
38
|
|
38
39
|
def resource
|
39
40
|
@salt_variable
|
@@ -10,10 +10,10 @@ module ForemanSalt
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def fetch_states_from_proxy(proxy, environments = nil)
|
13
|
-
result = { :
|
14
|
-
:
|
13
|
+
result = { changes: {},
|
14
|
+
deletes: [] }
|
15
15
|
|
16
|
-
new = ProxyAPI::Salt.new(:
|
16
|
+
new = ProxyAPI::Salt.new(url: proxy.url).states_list
|
17
17
|
old = SaltModule.to_hash
|
18
18
|
|
19
19
|
environments ||= new.keys + old.keys
|
@@ -30,26 +30,25 @@ module ForemanSalt
|
|
30
30
|
removed = []
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
next unless added.any? || removed.any?
|
34
|
+
result[:changes][environment] = {}
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
result[:changes][environment][:add] = added unless added.blank?
|
36
|
+
if removed.present?
|
37
|
+
result[:changes][environment][:remove] = removed
|
38
|
+
result[:deletes] << environment if removed.count == old[environment].count && added.blank?
|
42
39
|
end
|
40
|
+
|
41
|
+
result[:changes][environment][:add] = added if added.present?
|
43
42
|
end
|
44
43
|
|
45
44
|
result
|
46
45
|
end
|
47
46
|
|
48
47
|
def add_to_environment(states, environment)
|
49
|
-
environment = SaltEnvironment.where(:
|
48
|
+
environment = SaltEnvironment.where(name: environment).first_or_create
|
50
49
|
|
51
50
|
states.each do |state_name|
|
52
|
-
state = SaltModule.where(:
|
51
|
+
state = SaltModule.where(name: state_name).first_or_create
|
53
52
|
state.salt_environments << environment unless state.salt_environments.include? environment
|
54
53
|
end
|
55
54
|
end
|
@@ -5,29 +5,19 @@ module ForemanSalt
|
|
5
5
|
module Overrides
|
6
6
|
def show_appropriate_host_buttons(host)
|
7
7
|
(super(host) +
|
8
|
-
[(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
def host_title_actions(host)
|
13
|
-
unless Setting[:salt_hide_run_salt_button]
|
14
|
-
title_actions(
|
15
|
-
button_group(
|
16
|
-
if host.try(:salt_proxy)
|
17
|
-
link_to_if_authorized(_('Run Salt'), { :controller => :'foreman_salt/minions', :action => :run, :id => host },
|
18
|
-
:title => _('Trigger a state.highstate run on a node'), :class => 'btn btn-primary')
|
19
|
-
end
|
20
|
-
)
|
21
|
-
)
|
22
|
-
end
|
23
|
-
super(host)
|
8
|
+
[(if host.salt_master.present?
|
9
|
+
link_to_if_authorized(_('Salt ENC'), { controller: :'foreman_salt/minions', action: :node, id: host },
|
10
|
+
title: _('Salt external nodes YAML dump'), class: 'btn btn-default')
|
11
|
+
end)]).flatten.compact
|
24
12
|
end
|
25
13
|
|
26
14
|
def multiple_actions
|
27
15
|
actions = super
|
28
|
-
if authorized_for(:
|
29
|
-
actions << [_('Change Salt Master'), select_multiple_salt_master_hosts_path] if SmartProxy.unscoped.authorized.with_features(
|
30
|
-
|
16
|
+
if authorized_for(controller: :hosts, action: :edit)
|
17
|
+
actions << [_('Change Salt Master'), select_multiple_salt_master_hosts_path] if SmartProxy.unscoped.authorized.with_features('Salt')
|
18
|
+
if SmartProxy.unscoped.authorized.with_features('Salt')
|
19
|
+
actions << [_('Change Salt Environment'), select_multiple_salt_environment_hosts_path]
|
20
|
+
end
|
31
21
|
end
|
32
22
|
actions
|
33
23
|
end
|
@@ -35,8 +25,10 @@ module ForemanSalt
|
|
35
25
|
def overview_fields(host)
|
36
26
|
fields = super(host)
|
37
27
|
|
38
|
-
fields.insert(5, [_('Salt Master'), (link_to(host.salt_proxy, hosts_path(:
|
39
|
-
fields.insert(6, [_('Salt Environment'), (
|
28
|
+
fields.insert(5, [_('Salt Master'), (link_to(host.salt_proxy, hosts_path(search: "saltmaster = #{host.salt_proxy}")) if host.salt_proxy)])
|
29
|
+
fields.insert(6, [_('Salt Environment'), (if host.salt_environment
|
30
|
+
link_to(host.salt_environment, hosts_path(search: "salt_environment = #{host.salt_environment}"))
|
31
|
+
end)])
|
40
32
|
|
41
33
|
fields
|
42
34
|
end
|
@@ -7,8 +7,8 @@ module ForemanSalt
|
|
7
7
|
actions = super
|
8
8
|
|
9
9
|
if proxy.has_feature?('Salt')
|
10
|
-
actions << display_link_if_authorized(_('Salt Keys'), :
|
11
|
-
actions << display_link_if_authorized(_('Salt Autosign'), :
|
10
|
+
actions << display_link_if_authorized(_('Salt Keys'), controller: 'foreman_salt/salt_keys', action: 'index', smart_proxy_id: proxy)
|
11
|
+
actions << display_link_if_authorized(_('Salt Autosign'), controller: 'foreman_salt/salt_autosign', action: 'index', smart_proxy_id: proxy)
|
12
12
|
end
|
13
13
|
|
14
14
|
actions
|
@@ -2,7 +2,8 @@ module ForemanSalt
|
|
2
2
|
module SaltKeysHelper
|
3
3
|
def salt_keys_state_filter
|
4
4
|
select_tag 'Filter', options_for_select(['', _('Accepted'), _('Rejected'), _('Unaccepted')], params[:state]),
|
5
|
-
|
5
|
+
onchange: "window.location.href = location.protocol + '//' + " \
|
6
|
+
"location.host + location.pathname + (this.value == '' ? '' : ('?state=' + this.value))"
|
6
7
|
end
|
7
8
|
end
|
8
9
|
end
|
@@ -2,29 +2,29 @@ module ForemanSalt
|
|
2
2
|
module SaltModulesHelper
|
3
3
|
def import_from_proxies
|
4
4
|
links = SmartProxy.with_features('Salt').map do |proxy|
|
5
|
-
display_link_if_authorized(_('Import from %s') % proxy.name, hash_for_import_salt_modules_path.merge(:
|
5
|
+
display_link_if_authorized(_('Import from %s') % proxy.name, hash_for_import_salt_modules_path.merge(proxy: proxy), class: 'btn btn-default')
|
6
6
|
end.flatten
|
7
7
|
|
8
8
|
select_action_button(_('Import'), {}, links)
|
9
9
|
end
|
10
10
|
|
11
11
|
def salt_module_select(form, persisted)
|
12
|
-
blank_opt = persisted ? {} : { :
|
12
|
+
blank_opt = persisted ? {} : { include_blank: true }
|
13
13
|
select_items = persisted ? [form.object.salt_module] : SaltModule.order(:name)
|
14
14
|
select_f form,
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
:salt_module_id,
|
16
|
+
select_items,
|
17
|
+
:id,
|
18
|
+
:to_label,
|
19
|
+
blank_opt,
|
20
|
+
label: _('Salt State'),
|
21
|
+
disabled: persisted,
|
22
|
+
required: true
|
23
23
|
end
|
24
24
|
|
25
25
|
def colorize(state)
|
26
26
|
# Make the state easier to read
|
27
|
-
combo = %w
|
27
|
+
combo = %w[2E9DB9 4D1D59 2C777E 1C4758 591D4B]
|
28
28
|
state.split('.').each_with_index.map do |section, index|
|
29
29
|
"<span style='color: ##{combo[index % 5]}; font-weight: bold;'>#{section}</span>"
|
30
30
|
end.join('.').html_safe
|
@@ -6,14 +6,14 @@ module Actions
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def plan(job, proxy_id)
|
9
|
-
plan_self(:
|
9
|
+
plan_self(job_id: job[:job_id], report: job[:result], proxy_id: proxy_id)
|
10
10
|
end
|
11
11
|
|
12
12
|
def run
|
13
13
|
::User.as_anonymous_admin do
|
14
14
|
reports = ::ForemanSalt::ReportImporter.import(input[:report], input[:proxy_id])
|
15
15
|
|
16
|
-
output[:state] = { :
|
16
|
+
output[:state] = { message: "Imported #{reports.count} new reports" }
|
17
17
|
output[:hosts] = reports.map { |report| report.host.name }
|
18
18
|
end
|
19
19
|
end
|
data/app/lib/proxy_api/salt.rb
CHANGED
@@ -1,47 +1,47 @@
|
|
1
1
|
module ::ProxyAPI
|
2
2
|
class Salt < ::ProxyAPI::Resource
|
3
3
|
def initialize(args)
|
4
|
-
@url
|
4
|
+
@url = "#{args[:url]}/salt/"
|
5
5
|
super args
|
6
6
|
end
|
7
7
|
|
8
8
|
def autosign_list
|
9
9
|
parse(get('autosign'))
|
10
|
-
rescue => e
|
10
|
+
rescue StandardError => e
|
11
11
|
raise ProxyException.new(url, e, N_('Unable to fetch autosign list'))
|
12
12
|
end
|
13
13
|
|
14
14
|
def autosign_create(name)
|
15
|
-
parse(post('', "autosign/#{
|
16
|
-
rescue => e
|
15
|
+
parse(post('', "autosign/#{CGI.escape(name)}"))
|
16
|
+
rescue StandardError => e
|
17
17
|
raise ProxyException.new(url, e, N_('Unable to set Salt autosign hostname for %s'), name)
|
18
18
|
end
|
19
19
|
|
20
20
|
def autosign_remove(name)
|
21
|
-
parse(delete("autosign/#{
|
21
|
+
parse(delete("autosign/#{CGI.escape(name)}"))
|
22
22
|
rescue RestClient::ResourceNotFound
|
23
23
|
true # entry doesn't exists anyway
|
24
|
-
rescue => e
|
24
|
+
rescue StandardError => e
|
25
25
|
raise ProxyException.new(url, e, N_('Unable to delete Salt autosign hostname for %s'), name)
|
26
26
|
end
|
27
27
|
|
28
28
|
def autosign_create_key(key)
|
29
|
-
parse(post('', "autosign_key/#{
|
30
|
-
rescue => e
|
29
|
+
parse(post('', "autosign_key/#{CGI.escape(key)}"))
|
30
|
+
rescue StandardError => e
|
31
31
|
raise ProxyException.new(url, e, N_('Unable to create Salt autosign key %s'), key)
|
32
32
|
end
|
33
33
|
|
34
34
|
def autosign_remove_key(key)
|
35
|
-
parse(delete("autosign_key/#{
|
35
|
+
parse(delete("autosign_key/#{CGI.escape(key)}"))
|
36
36
|
rescue RestClient::ResourceNotFound
|
37
37
|
true # entry doesn't exists anyway
|
38
|
-
rescue => e
|
38
|
+
rescue StandardError => e
|
39
39
|
raise ProxyException.new(url, e, N_('Unable to delete Salt autosign key %s'), key)
|
40
40
|
end
|
41
41
|
|
42
42
|
def environments_list
|
43
43
|
parse(get('environments'))
|
44
|
-
rescue => e
|
44
|
+
rescue StandardError => e
|
45
45
|
raise ProxyException.new(url, e, N_('Unable to fetch Salt environments list'))
|
46
46
|
end
|
47
47
|
|
@@ -53,25 +53,25 @@ module ::ProxyAPI
|
|
53
53
|
end
|
54
54
|
|
55
55
|
states
|
56
|
-
rescue => e
|
56
|
+
rescue StandardError => e
|
57
57
|
raise ProxyException.new(url, e, N_('Unable to fetch Salt states list'))
|
58
58
|
end
|
59
59
|
|
60
60
|
def key_list
|
61
61
|
parse(get('key'))
|
62
|
-
rescue => e
|
62
|
+
rescue StandardError => e
|
63
63
|
raise ProxyException.new(url, e, N_('Unable to fetch Salt key list'))
|
64
64
|
end
|
65
65
|
|
66
66
|
def key_accept(name)
|
67
67
|
parse(post('', "key/#{name}"))
|
68
|
-
rescue => e
|
68
|
+
rescue StandardError => e
|
69
69
|
raise ProxyException.new(url, e, N_('Unable to accept Salt key for %s'), name)
|
70
70
|
end
|
71
71
|
|
72
72
|
def key_reject(name)
|
73
73
|
parse(delete("key/reject/#{name}"))
|
74
|
-
rescue => e
|
74
|
+
rescue StandardError => e
|
75
75
|
raise ProxyException.new(url, e, N_('Unable to reject Salt key for %s'), name)
|
76
76
|
end
|
77
77
|
|
@@ -79,13 +79,13 @@ module ::ProxyAPI
|
|
79
79
|
parse(delete("key/#{name}"))
|
80
80
|
rescue RestClient::ResourceNotFound
|
81
81
|
true
|
82
|
-
rescue => e
|
82
|
+
rescue StandardError => e
|
83
83
|
raise ProxyException.new(url, e, N_('Unable to delete Salt key for %s'), name)
|
84
84
|
end
|
85
85
|
|
86
86
|
def highstate(name)
|
87
87
|
parse(post('', "highstate/#{name}"))
|
88
|
-
rescue => e
|
88
|
+
rescue StandardError => e
|
89
89
|
raise ProxyException.new(url, e, N_('Unable to run Salt state.highstate for %s'), name)
|
90
90
|
end
|
91
91
|
end
|