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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/Rakefile +2 -2
  4. data/app/controllers/foreman_salt/api/v2/jobs_controller.rb +9 -9
  5. data/app/controllers/foreman_salt/api/v2/salt_autosign_controller.rb +15 -14
  6. data/app/controllers/foreman_salt/api/v2/salt_environments_controller.rb +6 -6
  7. data/app/controllers/foreman_salt/api/v2/salt_hostgroups_controller.rb +42 -0
  8. data/app/controllers/foreman_salt/api/v2/salt_keys_controller.rb +14 -14
  9. data/app/controllers/foreman_salt/api/v2/salt_minions_controller.rb +8 -8
  10. data/app/controllers/foreman_salt/api/v2/salt_states_controller.rb +24 -26
  11. data/app/controllers/foreman_salt/api/v2/salt_variables_controller.rb +22 -21
  12. data/app/controllers/foreman_salt/concerns/hostgroups_controller_extensions.rb +3 -3
  13. data/app/controllers/foreman_salt/concerns/hosts_controller_extensions.rb +4 -4
  14. data/app/controllers/foreman_salt/concerns/salt_environment_parameters.rb +1 -1
  15. data/app/controllers/foreman_salt/concerns/salt_hostgroup_parameters.rb +25 -0
  16. data/app/controllers/foreman_salt/concerns/salt_module_parameters.rb +1 -1
  17. data/app/controllers/foreman_salt/concerns/salt_override_value.rb +4 -4
  18. data/app/controllers/foreman_salt/concerns/salt_variable_parameters.rb +5 -5
  19. data/app/controllers/foreman_salt/minions_controller.rb +9 -20
  20. data/app/controllers/foreman_salt/salt_autosign_controller.rb +8 -8
  21. data/app/controllers/foreman_salt/salt_environments_controller.rb +4 -4
  22. data/app/controllers/foreman_salt/salt_keys_controller.rb +11 -11
  23. data/app/controllers/foreman_salt/salt_modules_controller.rb +10 -11
  24. data/app/controllers/foreman_salt/salt_variables_controller.rb +5 -4
  25. data/app/controllers/foreman_salt/state_importer.rb +12 -13
  26. data/app/helpers/concerns/foreman_salt/hosts_helper_extensions.rb +13 -21
  27. data/app/helpers/concerns/foreman_salt/smart_proxies_helper_extensions.rb +2 -2
  28. data/app/helpers/foreman_salt/salt_keys_helper.rb +2 -1
  29. data/app/helpers/foreman_salt/salt_modules_helper.rb +11 -11
  30. data/app/helpers/foreman_salt/salt_reports_helper.rb +0 -1
  31. data/app/lib/actions/foreman_salt/report_import.rb +2 -2
  32. data/app/lib/proxy_api/salt.rb +17 -17
  33. data/app/models/foreman_salt/concerns/host_managed_extensions.rb +46 -56
  34. data/app/models/foreman_salt/concerns/hostgroup_extensions.rb +14 -11
  35. data/app/models/foreman_salt/host_salt_module.rb +1 -1
  36. data/app/models/foreman_salt/salt_environment.rb +8 -8
  37. data/app/models/foreman_salt/salt_module.rb +15 -13
  38. data/app/models/foreman_salt/salt_module_environment.rb +1 -1
  39. data/app/models/foreman_salt/salt_provider.rb +7 -4
  40. data/app/models/foreman_salt/salt_variable.rb +8 -8
  41. data/app/overrides/salt_environment_host_selector.rb +4 -4
  42. data/app/overrides/salt_environment_hostgroup_selector.rb +4 -4
  43. data/app/overrides/salt_modules_selector.rb +16 -16
  44. data/app/overrides/salt_proxy_selector.rb +11 -9
  45. data/app/services/foreman_salt/report_importer.rb +30 -30
  46. data/app/services/foreman_salt/smart_proxies/salt_keys.rb +47 -45
  47. data/app/views/foreman_salt/api/v2/salt_autosign/create.json.rabl +1 -1
  48. data/app/views/foreman_salt/api/v2/salt_environments/create.json.rabl +1 -1
  49. data/app/views/foreman_salt/api/v2/salt_environments/show.json.rabl +1 -1
  50. data/app/views/foreman_salt/api/v2/salt_hostgroups/base.json.rabl +7 -0
  51. data/app/views/foreman_salt/api/v2/salt_hostgroups/show.json.rabl +3 -0
  52. data/app/views/foreman_salt/api/v2/salt_hostgroups/update.json.rabl +3 -0
  53. data/app/views/foreman_salt/api/v2/salt_keys/update.json.rabl +1 -1
  54. data/app/views/foreman_salt/api/v2/salt_minions/show.json.rabl +3 -4
  55. data/app/views/foreman_salt/api/v2/salt_states/create.json.rabl +1 -1
  56. data/app/views/foreman_salt/api/v2/salt_states/show.json.rabl +0 -1
  57. data/app/views/foreman_salt/api/v2/salt_variables/create.json.rabl +1 -1
  58. data/app/views/foreman_salt/api/v2/salt_variables/destroy.json.rabl +1 -1
  59. data/app/views/foreman_salt/api/v2/salt_variables/show.json.rabl +8 -8
  60. data/app/views/foreman_salt/salt_autosign/index.html.erb +1 -2
  61. data/app/views/foreman_salt/salt_environments/index.html.erb +1 -3
  62. data/app/views/foreman_salt/salt_keys/index.erb +1 -3
  63. data/app/views/foreman_salt/salt_modules/index.html.erb +1 -2
  64. data/config/api_routes.rb +31 -0
  65. data/config/routes.rb +16 -44
  66. data/db/migrate/20140817210214_create_salt_modules.rb +4 -4
  67. data/db/migrate/20140829210214_add_salt_modules_to_hostgroups.rb +1 -1
  68. data/db/migrate/20140920232200_create_salt_environments.rb +3 -3
  69. data/db/migrate/20150220122707_fix_incorrect_report_metrics.rb +6 -2
  70. data/db/migrate/20211108211312_add_missing_permissions.rb +9 -0
  71. data/db/migrate/20220118160349_drop_salt_hide_run_salt_button_setting.rb +5 -0
  72. data/db/migrate/20220406185204_fix_salt_setting_category_to_dsl.rb +5 -0
  73. data/db/seeds.d/75-salt_seeds.rb +1 -1
  74. data/db/seeds.d/76-job_templates.rb +7 -5
  75. data/lib/foreman_salt/engine.rb +17 -19
  76. data/lib/foreman_salt/extensions.rb +8 -8
  77. data/lib/foreman_salt/plugin.rb +130 -114
  78. data/lib/foreman_salt/version.rb +1 -1
  79. data/lib/foreman_salt.rb +1 -1
  80. data/lib/tasks/foreman_salt_tasks.rake +3 -5
  81. data/locale/action_names.rb +4 -4
  82. data/test/factories/foreman_salt_factories.rb +5 -5
  83. data/test/functional/api/v2/salt_autosign_controller_test.rb +26 -20
  84. data/test/functional/api/v2/salt_environments_controller_test.rb +29 -23
  85. data/test/functional/api/v2/salt_hostgroups_controller_test.rb +76 -0
  86. data/test/functional/api/v2/salt_keys_controller_test.rb +25 -19
  87. data/test/functional/api/v2/salt_states_controller_test.rb +72 -66
  88. data/test/functional/api/v2/salt_variables_controller_test.rb +4 -4
  89. data/test/functional/hosts_controller_test.rb +26 -26
  90. data/test/functional/minions_controller_test.rb +23 -24
  91. data/test/functional/salt_modules_controller_test.rb +3 -3
  92. data/test/functional/salt_variables_controller_test.rb +5 -5
  93. data/test/integration/hosts_js_test.rb +7 -23
  94. data/test/integration/salt_autosign_test.rb +5 -6
  95. data/test/integration/salt_environment_test.rb +2 -2
  96. data/test/integration/salt_keys_test.rb +7 -8
  97. data/test/integration/salt_module_test.rb +9 -9
  98. data/test/integration/salt_variable_test.rb +2 -2
  99. data/test/test_plugin_helper.rb +1 -1
  100. data/test/unit/grains_importer_test.rb +13 -13
  101. data/test/unit/host_extensions_test.rb +21 -19
  102. data/test/unit/hostgroup_extensions_test.rb +13 -13
  103. data/test/unit/report_importer_test.rb +9 -9
  104. data/test/unit/salt_keys_test.rb +2 -2
  105. data/test/unit/salt_modules_test.rb +2 -2
  106. data/test/unit/salt_variables_test.rb +10 -10
  107. metadata +24 -14
  108. 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, :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
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, :only => [:node, :run]
7
- add_smart_proxy_filters :node, :features => 'Salt'
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 :plain => "<pre>#{ERB::Util.html_escape(enc.to_yaml)}</pre>" }
23
- format.yml { render :plain => enc.to_yaml }
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(:plain => _('Unable to generate output, Check log files\n'), :status => 412) && return
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 :partial => 'foreman_salt/salt_modules/host_tab_pane'
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).find_by_id(params[:host_id])
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(:id => @minion.hostgroup ? @minion.hostgroup.all_salt_modules : [])
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 :page => params[:page], :per_page => Setting[:entries_per_page]
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(:success_redirect => hash_for_smart_proxy_salt_autosign_index_path, :success_msg => _("Autosign created for #{params[:id]}"),
18
- :object_name => params[:id])
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(:redirect => hash_for_smart_proxy_salt_autosign_index_path)
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(:success_redirect => hash_for_smart_proxy_salt_autosign_index_path, :success_msg => _("Autosign deleted for #{params[:id]}"),
29
- :object_name => params[:id])
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(:redirect => hash_for_smart_proxy_salt_autosign_index_path)
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(:url => @proxy.url)
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, :only => [:edit, :update, :destroy]
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], :order => params[:order]).paginate(:page => params[:page])
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.update_attributes(salt_environment_params)
30
- success _('Successfully updated %s.' % @salt_environment.to_s)
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 @proxy, params[:state].downcase
10
+ SmartProxies::SaltKeys.find_by_state(@proxy, params[:state].downcase)
11
11
  end
12
- @keys = keys.sort.paginate :page => params[:page], :per_page => Setting[:entries_per_page]
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(: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)
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(:redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true))
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(: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)
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(:redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true))
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(: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)
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(:redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true))
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, :only => [:edit, :update, :destroy]
8
- before_action :find_proxy, :only => :import
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], :order => params[:order]).includes(:salt_environments).paginate(:page => params[:page])
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.update_attributes(salt_module_params)
34
- success _('Successfully updated %s.' % @salt_module.to_s)
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
- if @changes.empty?
66
- info _('No changes found')
67
- redirect_to salt_modules_path
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.load(states[:add]), environment) if states[:add]
79
- remove_from_environment(JSON.load(states[:remove]), environment) if states[:remove]
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, :only => [:edit, :update, :destroy], :if => proc { params[:id] }
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
- :order => params[:order]).paginate(:page => params[:page],
14
- :per_page => params[:per_page])
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; end
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 = { :changes => {},
14
- :deletes => [] }
13
+ result = { changes: {},
14
+ deletes: [] }
15
15
 
16
- new = ProxyAPI::Salt.new(:url => proxy.url).states_list
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
- if added.any? || removed.any?
34
- result[:changes][environment] = {}
33
+ next unless added.any? || removed.any?
34
+ result[:changes][environment] = {}
35
35
 
36
- unless removed.blank?
37
- result[:changes][environment][:remove] = removed
38
- result[:deletes] << environment if removed.count == old[environment].count && added.blank?
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(:name => environment).first_or_create
48
+ environment = SaltEnvironment.where(name: environment).first_or_create
50
49
 
51
50
  states.each do |state_name|
52
- state = SaltModule.where(:name => state_name).first_or_create
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
- [(link_to_if_authorized(_('Salt ENC'), { :controller => :'foreman_salt/minions', :action => :node, :id => host },
9
- :title => _('Salt external nodes YAML dump'), :class => 'btn btn-default') unless host.salt_master.blank?)]).flatten.compact
10
- end
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(:controller => :hosts, :action => :edit)
29
- actions << [_('Change Salt Master'), select_multiple_salt_master_hosts_path] if SmartProxy.unscoped.authorized.with_features("Salt")
30
- actions << [_('Change Salt Environment'), select_multiple_salt_environment_hosts_path] if SmartProxy.unscoped.authorized.with_features("Salt")
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(:search => "saltmaster = #{host.salt_proxy}")) if host.salt_proxy)])
39
- fields.insert(6, [_('Salt Environment'), (link_to(host.salt_environment, hosts_path(:search => "salt_environment = #{host.salt_environment}")) if host.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'), :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)
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
- :onchange => "window.location.href = location.protocol + '//' + location.host + location.pathname + (this.value == '' ? '' : ('?state=' + this.value))"
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(:proxy => proxy), :class => 'btn btn-default')
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 ? {} : { :include_blank => true }
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
- :salt_module_id,
16
- select_items,
17
- :id,
18
- :to_label,
19
- blank_opt,
20
- :label => _('Salt State'),
21
- :disabled => persisted,
22
- :required => true
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(2E9DB9 4D1D59 2C777E 1C4758 591D4B)
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
@@ -5,4 +5,3 @@ module ForemanSalt
5
5
  end
6
6
  end
7
7
  end
8
-
@@ -6,14 +6,14 @@ module Actions
6
6
  end
7
7
 
8
8
  def plan(job, proxy_id)
9
- plan_self(:job_id => job[:job_id], :report => job[:result], :proxy_id => proxy_id)
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] = { :message => "Imported #{reports.count} new reports" }
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
@@ -1,47 +1,47 @@
1
1
  module ::ProxyAPI
2
2
  class Salt < ::ProxyAPI::Resource
3
3
  def initialize(args)
4
- @url = args[:url] + '/salt/'
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/#{URI.escape(name)}"))
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/#{URI.escape(name)}"))
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/#{URI.escape(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/#{URI.escape(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