foreman_salt 14.0.0 → 14.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) 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 -9
  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 +16 -10
  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 +47 -46
  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/models/setting/salt.rb +12 -10
  42. data/app/overrides/salt_environment_host_selector.rb +4 -4
  43. data/app/overrides/salt_environment_hostgroup_selector.rb +4 -4
  44. data/app/overrides/salt_modules_selector.rb +16 -16
  45. data/app/overrides/salt_proxy_selector.rb +11 -9
  46. data/app/services/foreman_salt/report_importer.rb +26 -26
  47. data/app/services/foreman_salt/smart_proxies/salt_keys.rb +47 -45
  48. data/app/views/foreman_salt/api/v2/salt_autosign/create.json.rabl +1 -1
  49. data/app/views/foreman_salt/api/v2/salt_environments/create.json.rabl +1 -1
  50. data/app/views/foreman_salt/api/v2/salt_environments/show.json.rabl +1 -1
  51. data/app/views/foreman_salt/api/v2/salt_hostgroups/base.json.rabl +7 -0
  52. data/app/views/foreman_salt/api/v2/salt_hostgroups/show.json.rabl +3 -0
  53. data/app/views/foreman_salt/api/v2/salt_hostgroups/update.json.rabl +3 -0
  54. data/app/views/foreman_salt/api/v2/salt_keys/update.json.rabl +1 -1
  55. data/app/views/foreman_salt/api/v2/salt_minions/show.json.rabl +3 -4
  56. data/app/views/foreman_salt/api/v2/salt_states/create.json.rabl +1 -1
  57. data/app/views/foreman_salt/api/v2/salt_states/show.json.rabl +0 -1
  58. data/app/views/foreman_salt/api/v2/salt_variables/create.json.rabl +1 -1
  59. data/app/views/foreman_salt/api/v2/salt_variables/destroy.json.rabl +1 -1
  60. data/app/views/foreman_salt/api/v2/salt_variables/show.json.rabl +8 -8
  61. data/config/api_routes.rb +31 -0
  62. data/config/routes.rb +16 -44
  63. data/db/migrate/20140817210214_create_salt_modules.rb +4 -4
  64. data/db/migrate/20140829210214_add_salt_modules_to_hostgroups.rb +1 -1
  65. data/db/migrate/20140920232200_create_salt_environments.rb +3 -3
  66. data/db/migrate/20150220122707_fix_incorrect_report_metrics.rb +6 -2
  67. data/db/migrate/20211108211312_add_missing_permissions.rb +9 -0
  68. data/db/seeds.d/75-salt_seeds.rb +1 -1
  69. data/db/seeds.d/76-job_templates.rb +3 -3
  70. data/lib/foreman_salt/engine.rb +24 -16
  71. data/lib/foreman_salt/extensions.rb +8 -8
  72. data/lib/foreman_salt/plugin.rb +120 -114
  73. data/lib/foreman_salt/version.rb +1 -1
  74. data/lib/foreman_salt.rb +1 -1
  75. data/lib/tasks/foreman_salt_tasks.rake +3 -5
  76. data/locale/action_names.rb +4 -4
  77. data/test/factories/foreman_salt_factories.rb +5 -5
  78. data/test/functional/api/v2/salt_autosign_controller_test.rb +26 -20
  79. data/test/functional/api/v2/salt_environments_controller_test.rb +29 -23
  80. data/test/functional/api/v2/salt_hostgroups_controller_test.rb +76 -0
  81. data/test/functional/api/v2/salt_keys_controller_test.rb +25 -19
  82. data/test/functional/api/v2/salt_states_controller_test.rb +72 -66
  83. data/test/functional/api/v2/salt_variables_controller_test.rb +4 -4
  84. data/test/functional/hosts_controller_test.rb +26 -26
  85. data/test/functional/minions_controller_test.rb +22 -22
  86. data/test/functional/salt_modules_controller_test.rb +3 -3
  87. data/test/functional/salt_variables_controller_test.rb +5 -5
  88. data/test/integration/hosts_js_test.rb +11 -11
  89. data/test/integration/salt_autosign_test.rb +5 -5
  90. data/test/integration/salt_environment_test.rb +2 -2
  91. data/test/integration/salt_keys_test.rb +7 -7
  92. data/test/integration/salt_module_test.rb +9 -9
  93. data/test/integration/salt_variable_test.rb +2 -2
  94. data/test/test_plugin_helper.rb +1 -1
  95. data/test/unit/grains_importer_test.rb +12 -12
  96. data/test/unit/host_extensions_test.rb +19 -19
  97. data/test/unit/hostgroup_extensions_test.rb +13 -13
  98. data/test/unit/report_importer_test.rb +9 -9
  99. data/test/unit/salt_keys_test.rb +2 -2
  100. data/test/unit/salt_modules_test.rb +2 -2
  101. data/test/unit/salt_variables_test.rb +10 -10
  102. metadata +22 -13
@@ -1,11 +1,10 @@
1
1
  module ForemanSalt
2
- # rubocop:disable ClassLength
3
2
  class ReportImporter
4
- delegate :logger, :to => :Rails
3
+ delegate :logger, to: :Rails
5
4
  attr_reader :report
6
5
 
7
6
  def self.import(raw, proxy_id = nil)
8
- fail ::Foreman::Exception.new(_('Invalid report')) unless raw.is_a?(Hash)
7
+ raise ::Foreman::Exception, _('Invalid report') unless raw.is_a?(Hash)
9
8
 
10
9
  raw.map do |host, report|
11
10
  importer = ForemanSalt::ReportImporter.new(host, report, proxy_id)
@@ -41,9 +40,9 @@ module ForemanSalt
41
40
  process_normal
42
41
  end
43
42
 
44
- @host.save(:validate => false)
43
+ @host.save(validate: false)
45
44
  @host.reload
46
- @host.refresh_statuses([HostStatus.find_status_by_humanized_name("configuration")])
45
+ @host.refresh_statuses([HostStatus.find_status_by_humanized_name('configuration')])
47
46
 
48
47
  logger.info("Imported report for #{@host} in #{(Time.zone.now - start_time).round(2)} seconds")
49
48
  end
@@ -51,11 +50,11 @@ module ForemanSalt
51
50
  private
52
51
 
53
52
  def find_or_create_host(host)
54
- @host ||= Host::Managed.find_by_name(host)
53
+ @host ||= Host::Managed.find_by(name: host)
55
54
 
56
55
  unless @host
57
- new = Host::Managed.new(:name => host)
58
- new.save(:validate => false)
56
+ new = Host::Managed.new(name: host)
57
+ new.save(validate: false)
59
58
  @host = new
60
59
  end
61
60
 
@@ -77,7 +76,7 @@ module ForemanSalt
77
76
 
78
77
  message = if result['changes']['diff']
79
78
  result['changes']['diff']
80
- elsif !result['pchanges'].blank? && result['pchanges'].include?('diff')
79
+ elsif result['pchanges'].present? && result['pchanges'].include?('diff')
81
80
  result['pchanges']['diff']
82
81
  elsif result['comment'].presence
83
82
  result['comment']
@@ -86,11 +85,10 @@ module ForemanSalt
86
85
  end
87
86
 
88
87
  message = Message.find_or_create(message)
89
- Log.create(:message_id => message.id, :source_id => source.id, :report => @report, :level => level)
88
+ Log.create(message_id: message.id, source_id: source.id, report: @report, level: level)
90
89
  end
91
90
  end
92
91
 
93
- # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize,Metrics/MethodLength
94
92
  def calculate_metrics
95
93
  success = 0
96
94
  failed = 0
@@ -108,13 +106,13 @@ module ForemanSalt
108
106
  success += 1
109
107
  if resource.match(/^service_/) && result['comment'].include?('restarted')
110
108
  restarted += 1
111
- elsif !result['changes'].blank?
109
+ elsif result['changes'].present?
112
110
  changed += 1
113
- elsif !result['pchanges'].blank?
111
+ elsif result['pchanges'].present?
114
112
  pending += 1
115
113
  end
116
114
  elsif result['result'].nil?
117
- pending += 1
115
+ pending += 1
118
116
  elsif !result['result']
119
117
  if resource.match(/^service_/) && result['comment'].include?('restarted')
120
118
  restarted_failed += 1
@@ -124,7 +122,11 @@ module ForemanSalt
124
122
  end
125
123
 
126
124
  duration = if result['duration'].is_a? String
127
- Float(result['duration'].delete(' ms')) rescue nil
125
+ begin
126
+ Float(result['duration'].delete(' ms'))
127
+ rescue StandardError
128
+ nil
129
+ end
128
130
  else
129
131
  result['duration']
130
132
  end
@@ -134,36 +136,35 @@ module ForemanSalt
134
136
  time[resource] = duration || 0
135
137
  end
136
138
 
137
- time[:total] = time.values.compact.inject(&:+) || 0
138
- events = { :total => changed + failed + restarted + restarted_failed, :success => success + restarted, :failure => failed + restarted_failed }
139
+ time[:total] = time.values.compact.sum || 0
140
+ events = { total: changed + failed + restarted + restarted_failed, success: success + restarted, failure: failed + restarted_failed }
139
141
 
140
- changes = { :total => changed + restarted }
142
+ changes = { total: changed + restarted }
141
143
 
142
144
  resources = { 'total' => @raw.size, 'applied' => changed, 'restarted' => restarted, 'failed' => failed,
143
145
  'failed_restarts' => restarted_failed, 'skipped' => 0, 'scheduled' => 0, 'pending' => pending }
144
146
 
145
- { :events => events, :resources => resources, :changes => changes, :time => time }
147
+ { events: events, resources: resources, changes: changes, time: time }
146
148
  end
147
- # rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize,Metrics/MethodLength
148
149
 
149
150
  def process_normal
150
151
  metrics = calculate_metrics
151
- status = ConfigReportStatusCalculator.new(:counters => metrics[:resources].slice(*::ConfigReport::METRIC)).calculate
152
+ status = ConfigReportStatusCalculator.new(counters: metrics[:resources].slice(*::ConfigReport::METRIC)).calculate
152
153
 
153
- @report = ConfigReport.new(:host => @host, :reported_at => start_time, :status => status, :metrics => metrics)
154
+ @report = ConfigReport.new(host: @host, reported_at: start_time, status: status, metrics: metrics)
154
155
  return @report unless @report.save
155
156
 
156
157
  import_log_messages
157
158
  end
158
159
 
159
160
  def process_failures
160
- status = ConfigReportStatusCalculator.new(:counters => { 'failed' => @raw.size }).calculate
161
- @report = ConfigReport.create(:host => @host, :reported_at => Time.zone.now, :status => status, :metrics => {})
161
+ status = ConfigReportStatusCalculator.new(counters: { 'failed' => @raw.size }).calculate
162
+ @report = ConfigReport.create(host: @host, reported_at: Time.zone.now, status: status, metrics: {})
162
163
 
163
164
  source = Source.find_or_create('Salt')
164
165
  @raw.each do |failure|
165
166
  message = Message.find_or_create(failure)
166
- Log.create(:message_id => message.id, :source_id => source.id, :report => @report, :level => :err)
167
+ Log.create(message_id: message.id, source_id: source.id, report: @report, level: :err)
167
168
  end
168
169
  end
169
170
 
@@ -171,5 +172,4 @@ module ForemanSalt
171
172
  @start_time ||= Time.zone.now
172
173
  end
173
174
  end
174
- # rubocop:enable ClassLength
175
175
  end
@@ -1,63 +1,65 @@
1
1
  module ForemanSalt
2
- class SmartProxies::SaltKeys
3
- attr_reader :name, :state, :fingerprint, :smart_proxy_id
2
+ module SmartProxies
3
+ class SaltKeys
4
+ attr_reader :name, :state, :fingerprint, :smart_proxy_id
4
5
 
5
- def initialize(opts)
6
- @name, @state, @fingerprint, @smart_proxy_id = opts.flatten
7
- end
6
+ def initialize(opts)
7
+ @name, @state, @fingerprint, @smart_proxy_id = opts.flatten
8
+ end
8
9
 
9
- class << self
10
- def all(proxy)
11
- fail ::Foreman::Exception.new(N_('Must specify a Smart Proxy to use')) if proxy.nil?
10
+ class << self
11
+ def all(proxy)
12
+ raise ::Foreman::Exception, N_('Must specify a Smart Proxy to use') if proxy.nil?
12
13
 
13
- unless (keys = Rails.cache.read("saltkeys_#{proxy.id}"))
14
- api = ProxyAPI::Salt.new(:url => proxy.url)
15
- keys = api.key_list.map do |name, properties|
16
- new([name.strip, properties['state'], properties['fingerprint'], proxy.id])
17
- end.compact
14
+ unless (keys = Rails.cache.read("saltkeys_#{proxy.id}"))
15
+ api = ProxyAPI::Salt.new(url: proxy.url)
16
+ keys = api.key_list.map do |name, properties|
17
+ new([name.strip, properties['state'], properties['fingerprint'], proxy.id])
18
+ end.compact
18
19
 
19
- Rails.cache.write("saltkeys_#{proxy.id}", keys, :expires_in => 1.minute) if Rails.env.production?
20
+ Rails.cache.write("saltkeys_#{proxy.id}", keys, expires_in: 1.minute) if Rails.env.production?
21
+ end
22
+ keys
20
23
  end
21
- keys
22
- end
23
24
 
24
- def find(proxy, name)
25
- all(proxy).find { |c| c.name == name }
26
- end
25
+ def find(proxy, name)
26
+ all(proxy).find { |c| c.name == name }
27
+ end
27
28
 
28
- def find_by_state(proxy, state)
29
- all(proxy).select { |c| c.state == state }
29
+ def find_by_state(proxy, state)
30
+ all(proxy).select { |c| c.state == state }
31
+ end
30
32
  end
31
- end
32
33
 
33
- def accept
34
- proxy = SmartProxy.find(smart_proxy_id)
35
- Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
36
- ProxyAPI::Salt.new(:url => proxy.url).key_accept name
37
- end
34
+ def accept
35
+ proxy = SmartProxy.find(smart_proxy_id)
36
+ Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
37
+ ProxyAPI::Salt.new(url: proxy.url).key_accept name
38
+ end
38
39
 
39
- def reject
40
- proxy = SmartProxy.find(smart_proxy_id)
41
- Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
42
- ProxyAPI::Salt.new(:url => proxy.url).key_reject name
43
- end
40
+ def reject
41
+ proxy = SmartProxy.find(smart_proxy_id)
42
+ Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
43
+ ProxyAPI::Salt.new(url: proxy.url).key_reject name
44
+ end
44
45
 
45
- def delete
46
- proxy = SmartProxy.find(smart_proxy_id)
47
- Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
48
- ProxyAPI::Salt.new(:url => proxy.url).key_delete name
49
- end
46
+ def delete
47
+ proxy = SmartProxy.find(smart_proxy_id)
48
+ Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
49
+ ProxyAPI::Salt.new(url: proxy.url).key_delete name
50
+ end
50
51
 
51
- def to_param
52
- name
53
- end
52
+ def to_param
53
+ name
54
+ end
54
55
 
55
- def to_s
56
- name
57
- end
56
+ def to_s
57
+ name
58
+ end
58
59
 
59
- def <=>(other)
60
- name <=> other.name
60
+ def <=>(other)
61
+ name <=> other.name
62
+ end
61
63
  end
62
64
  end
63
65
  end
@@ -1,3 +1,3 @@
1
1
  object @salt_autosign
2
2
 
3
- extends "foreman_salt/api/v2/salt_autosign/main"
3
+ extends 'foreman_salt/api/v2/salt_autosign/main'
@@ -1,3 +1,3 @@
1
1
  object @salt_environment
2
2
 
3
- extends "foreman_salt/api/v2/salt_environments/main"
3
+ extends 'foreman_salt/api/v2/salt_environments/main'
@@ -2,6 +2,6 @@ object @salt_environment
2
2
 
3
3
  extends 'foreman_salt/api/v2/salt_environments/base'
4
4
 
5
- child :salt_modules => :salt_states do
5
+ child salt_modules: :salt_states do
6
6
  extends 'foreman_salt/api/v2/salt_states/base'
7
7
  end
@@ -0,0 +1,7 @@
1
+ object @salt_hostgroup
2
+
3
+ attributes :id, :name, :salt_master, :salt_environment
4
+
5
+ child salt_modules: :salt_states do
6
+ extends 'foreman_salt/api/v2/salt_states/base'
7
+ end
@@ -0,0 +1,3 @@
1
+ object @salt_hostgroup
2
+
3
+ extends 'foreman_salt/api/v2/salt_hostgroups/base'
@@ -0,0 +1,3 @@
1
+ object @salt_hostgroup
2
+
3
+ extends 'foreman_salt/api/v2/salt_hostgroups/base'
@@ -1,3 +1,3 @@
1
1
  object @salt_key
2
2
 
3
- extends "foreman_salt/api/v2/salt_keys/main"
3
+ extends 'foreman_salt/api/v2/salt_keys/main'
@@ -1,8 +1,7 @@
1
1
  object @salt_minion
2
2
 
3
- extends "foreman_salt/api/v2/salt_minions/main"
3
+ extends 'foreman_salt/api/v2/salt_minions/main'
4
4
 
5
- child :salt_modules => :salt_states do
6
- extends "foreman_salt/api/v2/salt_states/base"
5
+ child salt_modules: :salt_states do
6
+ extends 'foreman_salt/api/v2/salt_states/base'
7
7
  end
8
-
@@ -1,3 +1,3 @@
1
1
  object @salt_state
2
2
 
3
- extends "foreman_salt/api/v2/salt_states/main"
3
+ extends 'foreman_salt/api/v2/salt_states/main'
@@ -9,4 +9,3 @@ end
9
9
  child :salt_environments do
10
10
  extends 'foreman_salt/api/v2/salt_environments/base'
11
11
  end
12
-
@@ -1,3 +1,3 @@
1
1
  object @salt_variable
2
2
 
3
- extends "foreman_salt/api/v2/salt_variables/show"
3
+ extends 'foreman_salt/api/v2/salt_variables/show'
@@ -1,3 +1,3 @@
1
1
  object @salt_variable
2
2
 
3
- extends "foreman_salt/api/v2/salt_variables/show"
3
+ extends 'foreman_salt/api/v2/salt_variables/show'
@@ -2,17 +2,17 @@ object @salt_variable
2
2
 
3
3
  attribute :parameter
4
4
  attributes :id, :variable, :salt_state, :salt_state_id, :description, :override,
5
- :variable_type, :hidden_value?, :validator_type,
6
- :validator_rule, :merge_overrides, :merge_default,
7
- :avoid_duplicates, :override_value_order, :created_at, :updated_at,
8
- :default_value
5
+ :variable_type, :hidden_value?, :validator_type,
6
+ :validator_rule, :merge_overrides, :merge_default,
7
+ :avoid_duplicates, :override_value_order, :created_at, :updated_at,
8
+ :default_value
9
9
 
10
10
  node do |salt_variable|
11
11
  {
12
- :override_values => partial(
13
- 'api/v2/override_values/index',
14
- :object => salt_variable.lookup_values
15
- )
12
+ override_values: partial(
13
+ 'api/v2/override_values/main',
14
+ object: salt_variable.lookup_values
15
+ ),
16
16
  }
17
17
  end
18
18
 
@@ -0,0 +1,31 @@
1
+ Rails.application.routes.draw do
2
+ scope :salt, path: '/salt' do
3
+ namespace :api, defaults: { format: 'json' } do
4
+ scope '(:apiv)', module: :v2, defaults: { apiv: 'v2' }, apiv: /v1|v2/, constraints: ApiConstraints.new(version: 2, default: true) do
5
+ match '/jobs/upload' => '/foreman_salt/api/v2/jobs#upload', :via => :post
6
+ match '/salt_autosign_auth' => '/foreman_salt/api/v2/salt_autosign#auth', :via => :put
7
+
8
+ constraints(smart_proxy_id: /[\w.-]+/, name: /[\w.-]+/, record: %r{[^/]+}) do
9
+ match '/salt_keys/:smart_proxy_id' => '/foreman_salt/api/v2/salt_keys#index', :via => :get
10
+ match '/salt_keys/:smart_proxy_id/:name' => '/foreman_salt/api/v2/salt_keys#update', :via => :put
11
+ match '/salt_keys/:smart_proxy_id/:name' => '/foreman_salt/api/v2/salt_keys#destroy', :via => :delete
12
+
13
+ match '/salt_autosign/:smart_proxy_id' => '/foreman_salt/api/v2/salt_autosign#index', :via => :get
14
+ match '/salt_autosign/:smart_proxy_id' => '/foreman_salt/api/v2/salt_autosign#create', :via => :post
15
+ match '/salt_autosign/:smart_proxy_id/:record' => '/foreman_salt/api/v2/salt_autosign#destroy', :via => :delete
16
+
17
+ match '/salt_states/import/:smart_proxy_id' => '/foreman_salt/api/v2/salt_states#import', :via => :post
18
+ end
19
+
20
+ constraints(id: /[\w.-]+/) do
21
+ resources :salt_environments, only: %i[show index create destroy], controller: '/foreman_salt/api/v2/salt_environments'
22
+ resources :salt_minions, only: %i[show index update], controller: '/foreman_salt/api/v2/salt_minions'
23
+ resources :salt_states, only: %i[show index create destroy], controller: '/foreman_salt/api/v2/salt_states'
24
+ resources :hostgroups, only: %i[show update], controller: '/foreman_salt/api/v2/salt_hostgroups'
25
+ end
26
+
27
+ resources :salt_variables, only: %i[show index destroy update create], controller: '/foreman_salt/api/v2/salt_variables'
28
+ end
29
+ end
30
+ end
31
+ end
data/config/routes.rb CHANGED
@@ -1,25 +1,25 @@
1
1
  Rails.application.routes.draw do
2
- scope :salt, :path => '/salt' do
3
- constraints(:id => /[\w\.-]+/) do
4
- match '/node/:id' => 'foreman_salt/minions#node', :via => :get
5
- match '/run/:id' => 'foreman_salt/minions#run', :via => :get
2
+ scope :salt, path: '/salt' do
3
+ constraints(id: /[\w.-]+/) do
4
+ get '/node/:id' => 'foreman_salt/minions#node'
5
+ get '/run/:id' => 'foreman_salt/minions#run'
6
6
  end
7
7
 
8
- resources :minions, :controller => 'foreman_salt/minions', :only => [] do
8
+ resources :minions, controller: 'foreman_salt/minions', only: [] do
9
9
  collection do
10
- constraints(:id => /[^\/]+/) do
10
+ constraints(id: %r{[^/]+}) do
11
11
  put 'salt_environment_selected'
12
12
  end
13
13
  end
14
14
  end
15
15
 
16
- resources :salt_environments, :controller => 'foreman_salt/salt_environments' do
16
+ resources :salt_environments, controller: 'foreman_salt/salt_environments' do
17
17
  collection do
18
18
  get 'auto_complete_search'
19
19
  end
20
20
  end
21
21
 
22
- resources :salt_modules, :controller => 'foreman_salt/salt_modules' do
22
+ resources :salt_modules, controller: 'foreman_salt/salt_modules' do
23
23
  collection do
24
24
  get 'import'
25
25
  get 'auto_complete_search'
@@ -27,43 +27,15 @@ Rails.application.routes.draw do
27
27
  end
28
28
  end
29
29
 
30
- resources :salt_variables, :controller => 'foreman_salt/salt_variables', :except => [:show] do
31
- resources :lookup_values, :only => [:index, :create, :update, :destroy]
30
+ resources :salt_variables, controller: 'foreman_salt/salt_variables', except: [:show] do
31
+ resources :lookup_values, only: %i[index create update destroy]
32
32
  collection do
33
33
  get 'auto_complete_search'
34
34
  end
35
35
  end
36
-
37
- scope :api, :path => '/api', :defaults => { :format => 'json' } do
38
- scope '(:apiv)', :defaults => { :apiv => 'v2' },
39
- :apiv => /v1|v2/, :constraints => ApiConstraints.new(:version => 2) do
40
- match '/jobs/upload' => 'foreman_salt/api/v2/jobs#upload', :via => :post
41
- match '/salt_autosign_auth' => 'foreman_salt/api/v2/salt_autosign#auth', :via => :put
42
-
43
- constraints(:smart_proxy_id => /[\w\.-]+/, :name => /[\w\.-]+/, :record => /[^\/]+/) do
44
- match '/salt_keys/:smart_proxy_id' => 'foreman_salt/api/v2/salt_keys#index', :via => :get
45
- match '/salt_keys/:smart_proxy_id/:name' => 'foreman_salt/api/v2/salt_keys#update', :via => :put
46
- match '/salt_keys/:smart_proxy_id/:name' => 'foreman_salt/api/v2/salt_keys#destroy', :via => :delete
47
-
48
- match '/salt_autosign/:smart_proxy_id' => 'foreman_salt/api/v2/salt_autosign#index', :via => :get
49
- match '/salt_autosign/:smart_proxy_id' => 'foreman_salt/api/v2/salt_autosign#create', :via => :post
50
- match '/salt_autosign/:smart_proxy_id/:record' => 'foreman_salt/api/v2/salt_autosign#destroy', :via => :delete
51
-
52
- match '/salt_states/import/:smart_proxy_id' => 'foreman_salt/api/v2/salt_states#import', :via => :post
53
- end
54
-
55
- constraints(:id => /[\w\.-]+/) do
56
- resources :salt_environments, :only => [:show, :index, :create, :destroy], :controller => 'foreman_salt/api/v2/salt_environments'
57
- resources :salt_minions, :only => [:show, :index, :update], :controller => 'foreman_salt/api/v2/salt_minions'
58
- resources :salt_states, :only => [:show, :index, :create, :destroy], :controller => 'foreman_salt/api/v2/salt_states'
59
- end
60
-
61
- resources :salt_variables, :only => [:show, :index, :destroy, :update, :create], :controller => 'foreman_salt/api/v2/salt_variables'
62
- end
63
- end
64
36
  end
65
37
 
66
- constraints(:id => /[^\/]+/) do
38
+ constraints(id: %r{[^/]+}) do
67
39
  resources :hosts do
68
40
  collection do
69
41
  post 'select_multiple_salt_master'
@@ -74,11 +46,11 @@ Rails.application.routes.draw do
74
46
  end
75
47
  end
76
48
 
77
- constraints(:smart_proxy_id => /[^\/]+/) do
78
- resources :smart_proxies, :except => [:show] do
79
- constraints(:id => /[^\/]+/) do
80
- resources :salt_autosign, :only => [:index, :destroy, :create, :new], :controller => 'foreman_salt/salt_autosign'
81
- resources :salt_keys, :only => [:index, :destroy], :controller => 'foreman_salt/salt_keys' do
49
+ constraints(smart_proxy_id: %r{[^/]+}) do
50
+ resources :smart_proxies, except: [:show] do
51
+ constraints(id: %r{[^/]+}) do
52
+ resources :salt_autosign, only: %i[index destroy create new], controller: 'foreman_salt/salt_autosign'
53
+ resources :salt_keys, only: %i[index destroy], controller: 'foreman_salt/salt_keys' do
82
54
  get :accept
83
55
  get :reject
84
56
  end
@@ -1,16 +1,16 @@
1
1
  class CreateSaltModules < ActiveRecord::Migration[4.2]
2
2
  def self.up
3
3
  create_table :salt_modules do |t|
4
- t.string :name, :default => '', :null => false
5
- t.timestamps :null => true
4
+ t.string :name, default: '', null: false
5
+ t.timestamps null: true
6
6
  end
7
7
 
8
- create_table 'hosts_salt_modules', :id => false do |t|
8
+ create_table 'hosts_salt_modules', id: false do |t|
9
9
  t.column :host_id, :integer
10
10
  t.column :salt_module_id, :integer
11
11
  end
12
12
 
13
- add_index :salt_modules, :name, :unique => true
13
+ add_index :salt_modules, :name, unique: true
14
14
  end
15
15
 
16
16
  def self.down
@@ -1,6 +1,6 @@
1
1
  class AddSaltModulesToHostgroups < ActiveRecord::Migration[4.2]
2
2
  def self.up
3
- create_table 'hostgroups_salt_modules', :id => false do |t|
3
+ create_table 'hostgroups_salt_modules', id: false do |t|
4
4
  t.column :hostgroup_id, :integer
5
5
  t.column :salt_module_id, :integer
6
6
  end
@@ -1,14 +1,14 @@
1
1
  class CreateSaltEnvironments < ActiveRecord::Migration[4.2]
2
2
  def self.up
3
3
  create_table :salt_environments do |t|
4
- t.string :name, :default => '', :null => false
5
- t.timestamps :null => true
4
+ t.string :name, default: '', null: false
5
+ t.timestamps null: true
6
6
  end
7
7
 
8
8
  add_column :hosts, :salt_environment_id, :integer
9
9
  add_column :hostgroups, :salt_environment_id, :integer
10
10
 
11
- add_index :salt_environments, :name, :unique => true
11
+ add_index :salt_environments, :name, unique: true
12
12
  end
13
13
 
14
14
  def self.down
@@ -7,13 +7,17 @@ class FixIncorrectReportMetrics < ActiveRecord::Migration[4.2]
7
7
 
8
8
  report.metrics['time'].each do |resource, time|
9
9
  metrics['time'][resource] = if time.is_a? String
10
- Float(time.delete(' ms')) rescue nil
10
+ begin
11
+ Float(time.delete(' ms'))
12
+ rescue StandardError
13
+ nil
14
+ end
11
15
  else
12
16
  time
13
17
  end
14
18
  end
15
19
 
16
- report.update_attributes(:metrics => metrics) if metrics != report.metrics
20
+ report.update(metrics: metrics) if metrics != report.metrics
17
21
  end
18
22
  end
19
23
 
@@ -0,0 +1,9 @@
1
+ class AddMissingPermissions < ActiveRecord::Migration[6.0]
2
+ def up
3
+ Permission.create!(name: 'auth_smart_proxies_salt_autosign', resource_type: 'SmartProxy')
4
+ end
5
+
6
+ def down
7
+ Permission.where(name: 'auth_smart_proxies_salt_autosign').destroy_all
8
+ end
9
+ end
@@ -1,2 +1,2 @@
1
1
  # Create feature for Smart Proxy
2
- Feature.where(:name => 'Salt').first_or_create
2
+ Feature.where(name: 'Salt').first_or_create
@@ -19,9 +19,9 @@ if ForemanSalt.with_remote_execution?
19
19
  'job_templates/**/*.erb')].each do |template|
20
20
  sync = !Rails.env.test? && Setting[:remote_execution_sync_templates]
21
21
  template = JobTemplate.import_raw!(File.read(template),
22
- :default => true,
23
- :lock => true,
24
- :update => sync)
22
+ default: true,
23
+ lock: true,
24
+ update: sync)
25
25
  template.organizations = organizations if template.present?
26
26
  template.locations = locations if template.present?
27
27
  end