foreman_salt 1.1.1 → 2.0.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/Rakefile +0 -3
- data/app/controllers/foreman_salt/api/v2/base_controller.rb +13 -0
- data/app/controllers/foreman_salt/api/v2/jobs_controller.rb +9 -17
- data/app/controllers/foreman_salt/api/v2/salt_autosign_controller.rb +64 -0
- data/app/controllers/foreman_salt/api/v2/salt_environments_controller.rb +46 -0
- data/app/controllers/foreman_salt/api/v2/salt_keys_controller.rb +79 -0
- data/app/controllers/foreman_salt/api/v2/salt_minions_controller.rb +44 -0
- data/app/controllers/foreman_salt/api/v2/salt_states_controller.rb +46 -0
- data/app/controllers/foreman_salt/application_controller.rb +0 -1
- data/app/controllers/foreman_salt/concerns/hosts_controller_extensions.rb +0 -41
- data/app/controllers/foreman_salt/minions_controller.rb +54 -0
- data/app/controllers/foreman_salt/salt_autosign_controller.rb +8 -9
- data/app/controllers/foreman_salt/salt_environments_controller.rb +1 -1
- data/app/controllers/foreman_salt/salt_keys_controller.rb +10 -11
- data/app/controllers/foreman_salt/salt_modules_controller.rb +1 -1
- data/app/helpers/concerns/foreman_salt/hosts_helper_extensions.rb +10 -10
- data/app/helpers/concerns/foreman_salt/smart_proxies_helper_extensions.rb +2 -2
- data/app/helpers/foreman_salt/salt_keys_helper.rb +2 -3
- data/app/lib/actions/foreman_salt/report_import.rb +1 -2
- data/app/lib/proxy_api/salt.rb +1 -1
- data/app/models/foreman_salt/concerns/host_managed_extensions.rb +4 -4
- data/app/models/foreman_salt/concerns/hostgroup_extensions.rb +2 -2
- data/app/models/foreman_salt/concerns/orchestration/salt.rb +1 -1
- data/app/models/foreman_salt/fact_name.rb +0 -1
- data/app/models/foreman_salt/salt_environment.rb +2 -0
- data/app/models/foreman_salt/salt_module.rb +3 -1
- data/app/models/setting/salt.rb +12 -0
- data/app/overrides/salt_modules_selector.rb +12 -12
- data/app/services/foreman_salt/fact_importer.rb +10 -7
- data/app/services/foreman_salt/fact_parser.rb +100 -0
- data/app/services/foreman_salt/report_importer.rb +17 -14
- data/app/services/foreman_salt/smart_proxies/salt_keys.rb +26 -29
- data/app/views/foreman_salt/api/v2/salt_autosign/base.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_autosign/create.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_autosign/index.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_autosign/main.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_environments/base.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_environments/create.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_environments/index.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_environments/main.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_environments/show.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_keys/base.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_keys/index.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_keys/main.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_keys/update.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_minions/base.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_minions/index.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_minions/main.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_minions/show.json.rabl +8 -0
- data/app/views/foreman_salt/api/v2/salt_states/base.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_states/create.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_states/index.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_states/main.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_states/show.json.rabl +3 -0
- data/config/routes.rb +25 -12
- data/db/migrate/20140813081913_add_salt_proxy_to_host_and_host_group.rb +0 -1
- data/db/migrate/20140817210214_create_salt_modules.rb +1 -1
- data/db/migrate/20150220122707_fix_incorrect_report_metrics.rb +22 -0
- data/lib/foreman_salt/engine.rb +114 -57
- data/lib/foreman_salt/version.rb +1 -1
- data/lib/tasks/foreman_salt_tasks.rake +2 -2
- data/test/functional/api/v2/salt_autosign_controller_test.rb +27 -0
- data/test/functional/api/v2/salt_environments_controller_test.rb +33 -0
- data/test/functional/api/v2/salt_keys_controller_test.rb +29 -0
- data/test/functional/api/v2/salt_states_controller_test.rb +33 -0
- data/test/functional/minions_controller_test.rb +18 -0
- data/test/integration/salt_environment_test.rb +0 -1
- data/test/integration/salt_keys_test.rb +4 -6
- data/test/integration/salt_module_test.rb +0 -1
- data/test/unit/grains_centos.json +4 -1
- data/test/unit/grains_importer_test.rb +39 -13
- data/test/unit/salt_keys_test.rb +4 -6
- metadata +44 -5
- data/app/controllers/foreman_salt/concerns/smart_proxy_auth_extensions.rb +0 -24
- data/test/functional/hosts_controller_test.rb +0 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 65b92f3373cea9c5f4be875edbae423c369ca7bb
|
|
4
|
+
data.tar.gz: 85a03b34a72fa72659b5ab3ebf5f7428a463c7bf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bbbf937cb431c0d96205def06cc7e069953ca15eba4548dd3ae09edb7e4515fe10ddbecdf8ee4edc3a082508dd31005fc153f501901a6885928c5747cfed1319
|
|
7
|
+
data.tar.gz: 40ed6313ddeca1b424eed17583331d32cc2bc858f37e77a046e71be6530eb66dc1bfb9f57c7079ce50f3aba18cf57ad59e3d808865a3ca05e0011fbcf8a31a0a
|
data/Rakefile
CHANGED
|
@@ -23,8 +23,6 @@ end
|
|
|
23
23
|
APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
|
|
24
24
|
load 'rails/tasks/engine.rake'
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
26
|
Bundler::GemHelper.install_tasks
|
|
29
27
|
|
|
30
28
|
require 'rake/testtask'
|
|
@@ -36,5 +34,4 @@ Rake::TestTask.new(:test) do |t|
|
|
|
36
34
|
t.verbose = false
|
|
37
35
|
end
|
|
38
36
|
|
|
39
|
-
|
|
40
37
|
task :default => :test
|
|
@@ -3,16 +3,9 @@ require 'uri'
|
|
|
3
3
|
module ForemanSalt
|
|
4
4
|
module Api
|
|
5
5
|
module V2
|
|
6
|
-
class JobsController < ::Api::V2::BaseController
|
|
7
|
-
include ::Api::Version2
|
|
6
|
+
class JobsController < ::ForemanSalt::Api::V2::BaseController
|
|
8
7
|
include ::Foreman::Controller::SmartProxyAuth
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
add_puppetmaster_filters :upload
|
|
12
|
-
|
|
13
|
-
resource_description do
|
|
14
|
-
api_base_url '/salt/api'
|
|
15
|
-
end
|
|
8
|
+
add_smart_proxy_filters :upload, :features => 'Salt'
|
|
16
9
|
|
|
17
10
|
def_param_group :job do
|
|
18
11
|
param :job, Hash, :required => true, :action_aware => true do
|
|
@@ -22,7 +15,7 @@ module ForemanSalt
|
|
|
22
15
|
end
|
|
23
16
|
end
|
|
24
17
|
|
|
25
|
-
api :POST, '/upload
|
|
18
|
+
api :POST, '/upload', N_('Upload a Job')
|
|
26
19
|
param_group :job, :as => :upload
|
|
27
20
|
|
|
28
21
|
def upload
|
|
@@ -32,16 +25,16 @@ module ForemanSalt
|
|
|
32
25
|
# Dynflowize the action if we can, otherwise we'll do it live
|
|
33
26
|
if defined? ForemanTasks
|
|
34
27
|
task = ForemanTasks.async_task(::Actions::ForemanSalt::ReportImport, params[:job], detected_proxy.try(:id))
|
|
35
|
-
render :json => {:task_id => task.id}
|
|
28
|
+
render :json => { :task_id => task.id }
|
|
36
29
|
else
|
|
37
30
|
reports = ForemanSalt::ReportImporter.import(params[:job][:result], detected_proxy.try(:id))
|
|
38
|
-
render :json => {:message => "Imported #{reports.count} new reports."}
|
|
31
|
+
render :json => { :message => "Imported #{reports.count} new reports." }
|
|
39
32
|
end
|
|
40
33
|
else
|
|
41
|
-
render :json => {:message => 'Unsupported function'}, :status => :unprocessable_entity
|
|
34
|
+
render :json => { :message => 'Unsupported function' }, :status => :unprocessable_entity
|
|
42
35
|
end
|
|
43
36
|
rescue ::Foreman::Exception => e
|
|
44
|
-
render :json => {:message => e.to_s}, :status => :unprocessable_entity
|
|
37
|
+
render :json => { :message => e.to_s }, :status => :unprocessable_entity
|
|
45
38
|
end
|
|
46
39
|
|
|
47
40
|
def resource_class
|
|
@@ -54,12 +47,11 @@ module ForemanSalt
|
|
|
54
47
|
case params[:action]
|
|
55
48
|
when 'upload'
|
|
56
49
|
:create
|
|
57
|
-
|
|
58
|
-
|
|
50
|
+
else
|
|
51
|
+
super
|
|
59
52
|
end
|
|
60
53
|
end
|
|
61
54
|
end
|
|
62
55
|
end
|
|
63
56
|
end
|
|
64
57
|
end
|
|
65
|
-
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'ostruct'
|
|
2
|
+
|
|
3
|
+
module ForemanSalt
|
|
4
|
+
module Api
|
|
5
|
+
module V2
|
|
6
|
+
class SaltAutosignController < ::ForemanSalt::Api::V2::BaseController
|
|
7
|
+
before_filter :find_proxy, :setup_proxy
|
|
8
|
+
|
|
9
|
+
api :GET, '/salt_autosign/:smart_proxy_id', N_('List all autosign records')
|
|
10
|
+
param :smart_proxy_id, :identifier_dottable, :required => true
|
|
11
|
+
def index
|
|
12
|
+
@salt_autosigns = all_autosign
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
api :POST, '/salt_autosign/:smart_proxy_id', N_('Create an autosign record')
|
|
16
|
+
param :smart_proxy_id, :identifier_dottable, :required => true
|
|
17
|
+
param :record, String, :required => true, :desc => N_('Autosign record')
|
|
18
|
+
def create
|
|
19
|
+
@api.autosign_create params[:record]
|
|
20
|
+
@salt_autosign = { :record => params[:record] }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
api :DELETE, '/salt_autosign/:smart_proxy_id/:record', N_('Delete an autosign record')
|
|
24
|
+
param :smart_proxy_id, :identifier_dottable, :required => true
|
|
25
|
+
param :record, String, :required => true, :desc => N_('Autosign record')
|
|
26
|
+
def destroy
|
|
27
|
+
@api.autosign_remove params[:record]
|
|
28
|
+
render :json => { root_node_name => _('Record deleted.') }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def metadata_total
|
|
32
|
+
@total ||= all_autosign.count
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def metadata_subtotal
|
|
36
|
+
metadata_total
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def metadata_page
|
|
40
|
+
1
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def metadata_per_page
|
|
44
|
+
metadata_total
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def all_autosign
|
|
50
|
+
@_autosigns ||= @api.autosign_list.map { |record| OpenStruct.new(:record => record) }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def find_proxy
|
|
54
|
+
@proxy = ::SmartProxy.find(params[:smart_proxy_id])
|
|
55
|
+
not_found unless @proxy
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def setup_proxy
|
|
59
|
+
@api = ProxyAPI::Salt.new(:url => @proxy.url)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module ForemanSalt
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class SaltEnvironmentsController < ::ForemanSalt::Api::V2::BaseController
|
|
5
|
+
before_filter :find_resource, :except => [:index, :create]
|
|
6
|
+
|
|
7
|
+
api :GET, '/salt_environments', N_('List all Salt environments')
|
|
8
|
+
def index
|
|
9
|
+
@salt_environments = resource_scope_for_index
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
api :GET, '/salt_environments/:id/', N_('Show a Salt environment')
|
|
13
|
+
param :id, :identifier_dottable, :required => true
|
|
14
|
+
def show
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def_param_group :environment do
|
|
18
|
+
param :environment, Hash, :required => true, :action_aware => true do
|
|
19
|
+
param :name, String, :required => true
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
api :POST, '/salt_environments', N_('Create a Salt environment')
|
|
24
|
+
param_group :environment, :as => :create
|
|
25
|
+
def create
|
|
26
|
+
@salt_environment = SaltEnvironment.new(params[:environment])
|
|
27
|
+
process_response @salt_environment.save
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
api :DELETE, '/salt_environments/:id/', N_('Destroy a Salt environment')
|
|
31
|
+
param :id, :identifier, :required => true
|
|
32
|
+
def destroy
|
|
33
|
+
process_response @salt_environment.destroy
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def controller_permission
|
|
37
|
+
'salt_environments'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def resource_class
|
|
41
|
+
ForemanSalt::SaltEnvironment
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
module ForemanSalt
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class SaltKeysController < ::ForemanSalt::Api::V2::BaseController
|
|
5
|
+
before_filter :find_proxy
|
|
6
|
+
before_filter :find_key, :only => [:update, :destroy]
|
|
7
|
+
|
|
8
|
+
api :GET, '/salt_keys/:smart_proxy_id', N_('List all Salt keys')
|
|
9
|
+
param :smart_proxy_id, :identifier_dottable, :required => true
|
|
10
|
+
def index
|
|
11
|
+
@salt_keys = all_keys
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def_param_group :key do
|
|
15
|
+
param :smart_proxy_id, :identifier_dottable, :required => true
|
|
16
|
+
param :name, String, :required => true, :desc => N_('FQDN of host that key belongs to')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
api :PUT, '/salt_keys/:smart_proxy_id/:name', N_('Update a Salt Key')
|
|
20
|
+
param :name, :identifier_dottable, :required => true
|
|
21
|
+
param :smart_proxy_id, :identifier_dottable, :required => true
|
|
22
|
+
param :state, String, :required => true, :desc => N_('State can be "accepted" or "rejected"')
|
|
23
|
+
def update
|
|
24
|
+
case params[:key][:state]
|
|
25
|
+
when 'accepted'
|
|
26
|
+
@key.accept
|
|
27
|
+
when 'rejected'
|
|
28
|
+
@key.reject
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
@salt_key = find_key(@key.name)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
api :DELETE, '/salt_keys/:smart_proxy_id/:name', N_('Delete a Salt Key')
|
|
35
|
+
param_group :key, :as => :destroy
|
|
36
|
+
def destroy
|
|
37
|
+
if @key.delete
|
|
38
|
+
message = 'Key successfully deleted.'
|
|
39
|
+
else
|
|
40
|
+
message = 'Unable to delete key.'
|
|
41
|
+
end
|
|
42
|
+
render :json => { root_node_name => message }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def metadata_total
|
|
46
|
+
@total ||= all_keys.count
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def metadata_subtotal
|
|
50
|
+
metadata_total
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def metadata_page
|
|
54
|
+
1
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def metadata_per_page
|
|
58
|
+
metadata_total
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def all_keys
|
|
64
|
+
@_keys ||= SmartProxies::SaltKeys.all(@proxy)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def find_proxy
|
|
68
|
+
@proxy = ::SmartProxy.find(params[:smart_proxy_id])
|
|
69
|
+
not_found unless @proxy
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def find_key(name = params[:name])
|
|
73
|
+
@key = SmartProxies::SaltKeys.find(@proxy, name)
|
|
74
|
+
@key || not_found
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module ForemanSalt
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class SaltMinionsController < ::ForemanSalt::Api::V2::BaseController
|
|
5
|
+
before_filter :find_resource, :except => [:index]
|
|
6
|
+
|
|
7
|
+
api :GET, '/salt_minions', N_('List all Salt Minions')
|
|
8
|
+
def index
|
|
9
|
+
@salt_minions = resource_scope_for_index
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
api :GET, '/salt_minions/:id', N_('Show a minion')
|
|
13
|
+
param :id, :identifier_dottable, :required => true
|
|
14
|
+
def show
|
|
15
|
+
@salt_states = @salt_minion.salt_modules
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def_param_group :minion do
|
|
19
|
+
param :minion, Hash, :required => true, :action_aware => true do
|
|
20
|
+
param :salt_environment_id, :number, :desc => N_('Salt environment ID')
|
|
21
|
+
param :salt_proxy_id, :number, :desc => N_('ID of Salt Proxy')
|
|
22
|
+
param :salt_state_ids, Array, :desc => N_('Array of State ids')
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
api :PUT, '/salt_minions/:id/', N_('Update a minion')
|
|
27
|
+
param :id, :identifier_dottable, :required => true
|
|
28
|
+
param_group :minion
|
|
29
|
+
def update
|
|
30
|
+
params[:minion][:salt_module_ids] = params[:minion].delete(:salt_state_ids)
|
|
31
|
+
process_response @salt_minion.update_attributes(params[:minion])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def controller_permission
|
|
35
|
+
'hosts'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def resource_class
|
|
39
|
+
Host
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module ForemanSalt
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class SaltStatesController < ::ForemanSalt::Api::V2::BaseController
|
|
5
|
+
before_filter :find_resource, :except => [:index, :create]
|
|
6
|
+
|
|
7
|
+
api :GET, '/salt_states', N_('List all Salt states')
|
|
8
|
+
def index
|
|
9
|
+
@salt_states = resource_scope_for_index
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
api :GET, '/salt_states/:id/', N_('Show a state')
|
|
13
|
+
param :id, :identifier_dottable, :required => true
|
|
14
|
+
def show
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def_param_group :state do
|
|
18
|
+
param :state, Hash, :required => true, :action_aware => true do
|
|
19
|
+
param :name, String, :required => true, :desc => N_('Name of the Salt state')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
api :POST, '/salt_states', N_('Create a state')
|
|
24
|
+
param_group :state, :as => :create
|
|
25
|
+
def create
|
|
26
|
+
@salt_state = SaltModule.new(params[:state])
|
|
27
|
+
process_response @salt_state.save
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
api :DELETE, '/salt_states/:id/', N_('Destroy a state')
|
|
31
|
+
param :id, :identifier_dottable, :required => true
|
|
32
|
+
def destroy
|
|
33
|
+
process_response @salt_state.destroy
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def controller_permission
|
|
37
|
+
'salt_modules'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def resource_class
|
|
41
|
+
ForemanSalt::SaltModule
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -4,40 +4,10 @@ module ForemanSalt
|
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
6
|
included do
|
|
7
|
-
alias_method :find_resource_salt, :find_resource
|
|
8
|
-
before_filter :find_resource_salt, :only => [:saltrun]
|
|
9
|
-
alias_method_chain :action_permission, :salt_run
|
|
10
7
|
alias_method_chain :load_vars_for_ajax, :salt_modules
|
|
11
8
|
alias_method_chain :process_hostgroup, :salt_modules
|
|
12
9
|
end
|
|
13
10
|
|
|
14
|
-
def saltrun
|
|
15
|
-
if @host.saltrun!
|
|
16
|
-
notice _('Successfully executed, check log files for more details')
|
|
17
|
-
else
|
|
18
|
-
error @host.errors[:base].to_sentence
|
|
19
|
-
end
|
|
20
|
-
redirect_to host_path(@host)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def salt_external_node
|
|
24
|
-
begin
|
|
25
|
-
@host = resource_base.find(params[:name])
|
|
26
|
-
enc = {}
|
|
27
|
-
env = @host.salt_environment.blank? ? 'base' : @host.salt_environment.name
|
|
28
|
-
enc['classes'] = @host.salt_modules.any? ? @host.salt_modules.map(&:name) : []
|
|
29
|
-
enc['parameters'] = @host.info['parameters']
|
|
30
|
-
enc['environment'] = env
|
|
31
|
-
respond_to do |format|
|
|
32
|
-
format.html { render :text => "<pre>#{ERB::Util.html_escape(enc.to_yaml)}</pre>" }
|
|
33
|
-
format.yml { render :text => enc.to_yaml }
|
|
34
|
-
end
|
|
35
|
-
rescue
|
|
36
|
-
logger.warn "Failed to generate external nodes for #{@host} with #{$!}"
|
|
37
|
-
render :text => _('Unable to generate output, Check log files\n'), :status => 412 and return
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
11
|
def process_hostgroup_with_salt_modules
|
|
42
12
|
@hostgroup = Hostgroup.find(params[:host][:hostgroup_id]) if params[:host][:hostgroup_id].to_i > 0
|
|
43
13
|
return head(:not_found) unless @hostgroup
|
|
@@ -49,17 +19,6 @@ module ForemanSalt
|
|
|
49
19
|
|
|
50
20
|
private
|
|
51
21
|
|
|
52
|
-
def action_permission_with_salt_run
|
|
53
|
-
case params[:action]
|
|
54
|
-
when 'saltrun'
|
|
55
|
-
:saltrun
|
|
56
|
-
when 'salt_external_node'
|
|
57
|
-
:view
|
|
58
|
-
else
|
|
59
|
-
action_permission_without_salt_run
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
22
|
def load_vars_for_ajax_with_salt_modules
|
|
64
23
|
return unless @host
|
|
65
24
|
@salt_modules = @host.salt_modules
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module ForemanSalt
|
|
2
|
+
class MinionsController < ::ForemanSalt::ApplicationController
|
|
3
|
+
include ::Foreman::Controller::SmartProxyAuth
|
|
4
|
+
|
|
5
|
+
before_filter :find_resource, :only => [:node, :run]
|
|
6
|
+
add_smart_proxy_filters :node, :features => 'Salt'
|
|
7
|
+
|
|
8
|
+
def node
|
|
9
|
+
enc = {}
|
|
10
|
+
env = @minion.salt_environment.blank? ? 'base' : @minion.salt_environment.name
|
|
11
|
+
enc['classes'] = @minion.salt_modules.any? ? @minion.salt_modules.map(&:name) : []
|
|
12
|
+
|
|
13
|
+
pillars = @minion.info['parameters']
|
|
14
|
+
enc['parameters'] = Setting[:salt_namespace_pillars] ? { 'foreman' => pillars } : pillars
|
|
15
|
+
|
|
16
|
+
enc['environment'] = env
|
|
17
|
+
respond_to do |format|
|
|
18
|
+
format.html { render :text => "<pre>#{ERB::Util.html_escape(enc.to_yaml)}</pre>" }
|
|
19
|
+
format.yml { render :text => enc.to_yaml }
|
|
20
|
+
end
|
|
21
|
+
rescue
|
|
22
|
+
logger.warn "Failed to generate external nodes for #{@minion} with #{$ERROR_INFO}"
|
|
23
|
+
render :text => _('Unable to generate output, Check log files\n'), :status => 412 and return
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def run
|
|
27
|
+
if @minion.saltrun!
|
|
28
|
+
notice _('Successfully executed, check log files for more details')
|
|
29
|
+
else
|
|
30
|
+
error @minion.errors[:base].to_sentence
|
|
31
|
+
end
|
|
32
|
+
redirect_to host_path(@minion)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def action_permission
|
|
36
|
+
case params[:action]
|
|
37
|
+
when 'run'
|
|
38
|
+
:saltrun
|
|
39
|
+
when 'node'
|
|
40
|
+
:view
|
|
41
|
+
else
|
|
42
|
+
super
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def controller_permission
|
|
47
|
+
'hosts'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def resource_class
|
|
51
|
+
Host
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module ForemanSalt
|
|
2
|
-
class SaltAutosignController < ApplicationController
|
|
3
|
-
|
|
2
|
+
class SaltAutosignController < ::ForemanSalt::ApplicationController
|
|
4
3
|
def index
|
|
5
4
|
setup
|
|
6
5
|
autosign = @api.autosign_list
|
|
@@ -15,10 +14,10 @@ module ForemanSalt
|
|
|
15
14
|
setup
|
|
16
15
|
|
|
17
16
|
if @api.autosign_create(params[:id])
|
|
18
|
-
process_success(
|
|
19
|
-
|
|
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])
|
|
20
19
|
else
|
|
21
|
-
process_error(
|
|
20
|
+
process_error(:redirect => hash_for_smart_proxy_salt_autosign_index_path)
|
|
22
21
|
end
|
|
23
22
|
end
|
|
24
23
|
|
|
@@ -26,10 +25,10 @@ module ForemanSalt
|
|
|
26
25
|
setup
|
|
27
26
|
|
|
28
27
|
if @api.autosign_remove(params[:id])
|
|
29
|
-
process_success(
|
|
30
|
-
|
|
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])
|
|
31
30
|
else
|
|
32
|
-
process_error(
|
|
31
|
+
process_error(:redirect => hash_for_smart_proxy_salt_autosign_index_path)
|
|
33
32
|
end
|
|
34
33
|
end
|
|
35
34
|
|
|
@@ -37,7 +36,7 @@ module ForemanSalt
|
|
|
37
36
|
|
|
38
37
|
def setup
|
|
39
38
|
@proxy = SmartProxy.authorized(:view_smart_proxies_salt_autosign).find(params[:smart_proxy_id])
|
|
40
|
-
@api = ProxyAPI::Salt.new(
|
|
39
|
+
@api = ProxyAPI::Salt.new(:url => @proxy.url)
|
|
41
40
|
end
|
|
42
41
|
end
|
|
43
42
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module ForemanSalt
|
|
2
|
-
class SaltEnvironmentsController < ApplicationController
|
|
2
|
+
class SaltEnvironmentsController < ::ForemanSalt::ApplicationController
|
|
3
3
|
include Foreman::Controller::AutoCompleteSearch
|
|
4
4
|
|
|
5
5
|
before_filter :find_resource, :only => [:edit, :update, :destroy]
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module ForemanSalt
|
|
2
|
-
class SaltKeysController < ApplicationController
|
|
3
|
-
|
|
2
|
+
class SaltKeysController < ::ForemanSalt::ApplicationController
|
|
4
3
|
def index
|
|
5
4
|
@proxy = find_proxy
|
|
6
5
|
|
|
@@ -17,10 +16,10 @@ module ForemanSalt
|
|
|
17
16
|
@proxy = find_proxy(:edit_smart_proxies_salt_keys)
|
|
18
17
|
key = SmartProxies::SaltKeys.find(@proxy, params[:salt_key_id])
|
|
19
18
|
if key.accept
|
|
20
|
-
process_success(
|
|
21
|
-
|
|
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)
|
|
22
21
|
else
|
|
23
|
-
process_error(
|
|
22
|
+
process_error(:redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true))
|
|
24
23
|
end
|
|
25
24
|
end
|
|
26
25
|
|
|
@@ -28,10 +27,10 @@ module ForemanSalt
|
|
|
28
27
|
@proxy = find_proxy(:edit_smart_proxies_salt_keys)
|
|
29
28
|
key = SmartProxies::SaltKeys.find(@proxy, params[:salt_key_id])
|
|
30
29
|
if key.reject
|
|
31
|
-
process_success(
|
|
32
|
-
|
|
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)
|
|
33
32
|
else
|
|
34
|
-
process_error(
|
|
33
|
+
process_error(:redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true))
|
|
35
34
|
end
|
|
36
35
|
end
|
|
37
36
|
|
|
@@ -39,10 +38,10 @@ module ForemanSalt
|
|
|
39
38
|
@proxy = find_proxy(:destroy_smart_proxies_salt_keys)
|
|
40
39
|
key = SmartProxies::SaltKeys.find(@proxy, params[:id])
|
|
41
40
|
if key.delete
|
|
42
|
-
process_success(
|
|
43
|
-
|
|
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)
|
|
44
43
|
else
|
|
45
|
-
process_error(
|
|
44
|
+
process_error(:redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true))
|
|
46
45
|
end
|
|
47
46
|
end
|
|
48
47
|
|
|
@@ -9,20 +9,20 @@ module ForemanSalt
|
|
|
9
9
|
|
|
10
10
|
def show_appropriate_host_buttons_with_salt(host)
|
|
11
11
|
(show_appropriate_host_buttons_without_salt(host) +
|
|
12
|
-
[(link_to_if_authorized(_('Salt ENC'), {:controller => :
|
|
13
|
-
|
|
12
|
+
[(link_to_if_authorized(_('Salt ENC'), { :controller => :'foreman_salt/minions', :action => :node, :id => host },
|
|
13
|
+
:title => _('Salt external nodes YAML dump'), :class => 'btn btn-default') unless host.salt_master.blank?)]).flatten.compact
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def host_title_actions_with_salt_run(host)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
)
|
|
17
|
+
title_actions(
|
|
18
|
+
button_group(
|
|
19
|
+
if host.try(:salt_proxy)
|
|
20
|
+
link_to_if_authorized(_('Run Salt'), { :controller => :'foreman_salt/minions', :action => :run, :id => host },
|
|
21
|
+
:title => _('Trigger a state.highstate run on a node'))
|
|
22
|
+
end
|
|
24
23
|
)
|
|
25
|
-
|
|
24
|
+
)
|
|
25
|
+
host_title_actions_without_salt_run(host)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
@@ -10,11 +10,11 @@ module ForemanSalt
|
|
|
10
10
|
salt = proxy.features.detect { |feature| feature.name == 'Salt' }
|
|
11
11
|
[
|
|
12
12
|
if salt
|
|
13
|
-
display_link_if_authorized(_('Salt Keys'),
|
|
13
|
+
display_link_if_authorized(_('Salt Keys'), :controller => 'foreman_salt/salt_keys', :action => 'index', :smart_proxy_id => proxy)
|
|
14
14
|
end,
|
|
15
15
|
|
|
16
16
|
if salt
|
|
17
|
-
display_link_if_authorized(_('Salt Autosign'),
|
|
17
|
+
display_link_if_authorized(_('Salt Autosign'), :controller => 'foreman_salt/salt_autosign', :action => 'index', :smart_proxy_id => proxy)
|
|
18
18
|
end
|
|
19
19
|
] + proxy_actions_without_salt_proxy(proxy, authorizer)
|
|
20
20
|
end
|