foreman_salt 3.0.2 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/app/assets/javascripts/foreman_salt/states.js +6 -4
- data/app/controllers/foreman_salt/api/v2/jobs_controller.rb +4 -4
- data/app/controllers/foreman_salt/minions_controller.rb +9 -9
- data/app/controllers/foreman_salt/state_importer.rb +1 -1
- data/app/helpers/concerns/foreman_salt/hosts_helper_extensions.rb +2 -2
- data/app/models/foreman_salt/concerns/host_managed_extensions.rb +5 -0
- 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/host_salt_module.rb +1 -1
- data/app/models/foreman_salt/salt_environment.rb +2 -3
- data/app/models/foreman_salt/salt_module.rb +2 -3
- data/app/overrides/salt_environment_host_selector.rb +1 -1
- data/app/overrides/salt_environment_hostgroup_selector.rb +1 -1
- data/app/overrides/salt_proxy_selector.rb +2 -2
- data/app/services/foreman_salt/fact_importer.rb +1 -1
- data/app/services/foreman_salt/report_importer.rb +7 -9
- data/app/services/foreman_salt/smart_proxies/salt_keys.rb +3 -3
- data/db/seeds.d/{75-salt-seeds.rb → 75-salt_seeds.rb} +0 -0
- data/lib/foreman_salt/engine.rb +13 -152
- data/lib/foreman_salt/extensions.rb +20 -0
- data/lib/foreman_salt/plugin.rb +134 -0
- data/lib/foreman_salt/version.rb +1 -1
- data/test/factories/foreman_salt_factories.rb +1 -1
- data/test/functional/api/v2/salt_states_controller_test.rb +3 -3
- data/test/integration/salt_module_test.rb +5 -1
- data/test/unit/host_extensions_test.rb +9 -0
- data/test/unit/report_importer_test.rb +1 -1
- metadata +12 -11
- data/app/helpers/concerns/foreman_salt/layout_helper_extensions.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6b22fef4003be237f6ba02e594fa8d583bc218f
|
4
|
+
data.tar.gz: e30d40a831982a5c5f07c645ea8936b5be3ab2da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bbb4d5db09be8cc76f57375e61207e0f2a9758bd6ed7f6140234af2a34ec608329180f3001ff5ab7ee712b77b5e43ee1313629c33f0eb74c5fd091782238de1
|
7
|
+
data.tar.gz: 51751be171370526cc4deace259268e790707084eef0f3bc88e17e2d74797b8702e86c808af8355f56a0e043f9f87193b7c39e4896fbd496a962948728e5359a
|
data/README.md
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
[![Build Status](https://img.shields.io/jenkins/s/http/ci.theforeman.org/test_plugin_foreman_salt_master.svg)](http://ci.theforeman.org/job/test_plugin_foreman_salt_master)
|
2
|
+
[![Gem Version](https://img.shields.io/gem/v/foreman_salt.svg)](https://rubygems.org/gems/foreman_salt)
|
2
3
|
[![Code Climate](https://codeclimate.com/github/theforeman/foreman_salt/badges/gpa.svg)](https://codeclimate.com/github/theforeman/foreman_salt)
|
3
4
|
[![GPL License](https://img.shields.io/github/license/theforeman/foreman_salt.svg)](https://github.com/theforeman/foreman_salt/blob/master/LICENSE)
|
4
5
|
|
5
6
|
# Foreman Salt Plug-in
|
6
7
|
|
7
|
-
This plug-in adds support for Salt to Foreman.
|
8
|
+
This plug-in adds support for Salt to Foreman.
|
8
9
|
|
9
10
|
## Documentation
|
10
11
|
|
@@ -3,18 +3,20 @@ $(document).on( "ContentLoad", function() {
|
|
3
3
|
});
|
4
4
|
|
5
5
|
function update_salt_states(element) {
|
6
|
-
var host_id = $("form").data('id')
|
6
|
+
var host_id = $("form").data('id');
|
7
7
|
var env_id = $('select[name*=salt_environment_id]').val();
|
8
8
|
var url = $(element).attr('data-url');
|
9
9
|
var data = $("form").serialize().replace('method=put', 'method=post');
|
10
10
|
|
11
11
|
if (url.match('hostgroups')) {
|
12
|
-
data = data + '&hostgroup_id=' + host_id
|
12
|
+
data = data + '&hostgroup_id=' + host_id;
|
13
13
|
} else {
|
14
|
-
data = data + '&host_id=' + host_id
|
14
|
+
data = data + '&host_id=' + host_id;
|
15
15
|
}
|
16
16
|
|
17
|
-
if (env_id
|
17
|
+
if (!env_id) {
|
18
|
+
return;
|
19
|
+
}
|
18
20
|
|
19
21
|
$(element).indicator_show();
|
20
22
|
$.ajax({
|
@@ -20,7 +20,7 @@ module ForemanSalt
|
|
20
20
|
end
|
21
21
|
rescue
|
22
22
|
logger.warn "Failed to generate external nodes for #{@minion} with #{$ERROR_INFO}"
|
23
|
-
render
|
23
|
+
render(:text => _('Unable to generate output, Check log files\n'), :status => 412) && return
|
24
24
|
end
|
25
25
|
|
26
26
|
def run
|
@@ -44,14 +44,14 @@ module ForemanSalt
|
|
44
44
|
|
45
45
|
def action_permission
|
46
46
|
case params[:action]
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
47
|
+
when 'run'
|
48
|
+
:saltrun
|
49
|
+
when 'node'
|
50
|
+
:view
|
51
|
+
when 'salt_environment_selected'
|
52
|
+
:edit
|
53
|
+
else
|
54
|
+
super
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -29,8 +29,8 @@ module ForemanSalt
|
|
29
29
|
def overview_fields_with_salt(host)
|
30
30
|
fields = overview_fields_without_salt(host)
|
31
31
|
|
32
|
-
fields.insert(5, [_(
|
33
|
-
fields.insert(6, [_(
|
32
|
+
fields.insert(5, [_('Salt Master'), (link_to(host.salt_proxy, hosts_path(:search => "saltmaster = #{host.salt_proxy}")) if host.salt_proxy)])
|
33
|
+
fields.insert(6, [_('Salt Environment'), (link_to(host.salt_environment, hosts_path(:search => "salt_environment = #{host.salt_environment}")) if host.salt_environment)])
|
34
34
|
|
35
35
|
fields
|
36
36
|
end
|
@@ -13,6 +13,7 @@ module ForemanSalt
|
|
13
13
|
alias_method_chain :params, :salt_proxy
|
14
14
|
alias_method_chain :set_hostgroup_defaults, :salt_proxy
|
15
15
|
alias_method_chain :smart_proxy_ids, :salt_proxy
|
16
|
+
alias_method_chain :configuration?, :salt
|
16
17
|
|
17
18
|
scoped_search :in => :salt_modules, :on => :name, :complete_value => true, :rename => :salt_state
|
18
19
|
scoped_search :in => :salt_environment, :on => :name, :complete_value => true, :rename => :salt_environment
|
@@ -21,6 +22,10 @@ module ForemanSalt
|
|
21
22
|
validate :salt_modules_in_host_environment
|
22
23
|
end
|
23
24
|
|
25
|
+
def configuration_with_salt?
|
26
|
+
configuration_without_salt? || !!salt_proxy
|
27
|
+
end
|
28
|
+
|
24
29
|
def handle_salt
|
25
30
|
return true unless salt?
|
26
31
|
set_salt_autosign
|
@@ -34,7 +34,7 @@ module ForemanSalt
|
|
34
34
|
|
35
35
|
def inherited_salt_proxy_id
|
36
36
|
if ancestry.present?
|
37
|
-
|
37
|
+
self[:salt_proxy_id] || self.class.sort_by_ancestry(ancestors.where('salt_proxy_id is not NULL')).last.try(:salt_proxy_id)
|
38
38
|
else
|
39
39
|
salt_proxy_id
|
40
40
|
end
|
@@ -47,7 +47,7 @@ module ForemanSalt
|
|
47
47
|
|
48
48
|
def inherited_salt_environment_id
|
49
49
|
if ancestry.present?
|
50
|
-
|
50
|
+
self[:salt_environment_id] || self.class.sort_by_ancestry(ancestors.where('salt_environment_id is not NULL')).last.try(:salt_environment_id)
|
51
51
|
else
|
52
52
|
salt_environment_id
|
53
53
|
end
|
@@ -29,7 +29,7 @@ module ForemanSalt
|
|
29
29
|
|
30
30
|
def queue_update_salt_autosign
|
31
31
|
# Host has been built --> remove auto sign
|
32
|
-
if old.build?
|
32
|
+
if old.build? && !build?
|
33
33
|
queue.create(:name => _('Remove autosign entry for %s') % self, :priority => 50, :action => [self, :del_salt_autosign])
|
34
34
|
end
|
35
35
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module ForemanSalt
|
2
2
|
class SaltEnvironment < ActiveRecord::Base
|
3
|
-
include Taxonomix
|
4
3
|
include Authorizable
|
5
4
|
extend FriendlyId
|
6
5
|
friendly_id :name
|
@@ -21,8 +20,8 @@ module ForemanSalt
|
|
21
20
|
_('Salt environment')
|
22
21
|
end
|
23
22
|
|
24
|
-
def self.permission_name
|
25
|
-
|
23
|
+
def self.permission_name
|
24
|
+
'salt_environments'
|
26
25
|
end
|
27
26
|
|
28
27
|
private
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module ForemanSalt
|
2
2
|
class SaltModule < ActiveRecord::Base
|
3
|
-
include Taxonomix
|
4
3
|
include Authorizable
|
5
4
|
extend FriendlyId
|
6
5
|
friendly_id :name
|
@@ -43,8 +42,8 @@ module ForemanSalt
|
|
43
42
|
_('Salt state')
|
44
43
|
end
|
45
44
|
|
46
|
-
def self.permission_name
|
47
|
-
|
45
|
+
def self.permission_name
|
46
|
+
'salt_modules'
|
48
47
|
end
|
49
48
|
end
|
50
49
|
end
|
@@ -6,4 +6,4 @@ selector_text = "<%= select_f f, :salt_environment_id, ForemanSalt::SaltEnvironm
|
|
6
6
|
Deface::Override.new(:virtual_path => 'hostgroups/_form',
|
7
7
|
:name => 'add_salt_environment_to_hostgroup',
|
8
8
|
:insert_bottom => 'div#primary',
|
9
|
-
:text =>
|
9
|
+
:text => selector_text)
|
@@ -5,9 +5,9 @@ selector_text = "<%= select_f f, :salt_proxy_id, SmartProxy.unscoped.with_featur
|
|
5
5
|
Deface::Override.new(:virtual_path => 'hosts/_form',
|
6
6
|
:name => 'add_salt_proxy_to_host',
|
7
7
|
:insert_bottom => 'div#primary',
|
8
|
-
:text =>
|
8
|
+
:text => selector_text)
|
9
9
|
|
10
10
|
Deface::Override.new(:virtual_path => 'hostgroups/_form',
|
11
11
|
:name => 'add_salt_proxy_to_hostgroup',
|
12
12
|
:insert_bottom => 'div#primary',
|
13
|
-
:text =>
|
13
|
+
:text => selector_text)
|
@@ -75,7 +75,7 @@ module ForemanSalt
|
|
75
75
|
hash.each do |fact_name, value|
|
76
76
|
name_parts = fact_name.split(FactName::SEPARATOR)
|
77
77
|
|
78
|
-
name_parts.inject([]) do |memo, name|
|
78
|
+
name_parts.inject([]) do |memo, name| # rubocop:disable Style/EachWithObject
|
79
79
|
memo += [name]
|
80
80
|
key = memo.join(FactName::SEPARATOR)
|
81
81
|
new_facts[key] ||= name_parts == memo ? value : nil
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module ForemanSalt
|
2
|
-
class ReportImporter
|
2
|
+
class ReportImporter # rubocop:disable Metrics/ClassLength
|
3
3
|
delegate :logger, :to => :Rails
|
4
4
|
attr_reader :report
|
5
5
|
|
6
6
|
def self.import(raw, proxy_id = nil)
|
7
|
-
|
7
|
+
fail ::Foreman::Exception.new(_('Invalid report')) unless raw.is_a?(Hash)
|
8
8
|
raw.map do |host, report|
|
9
9
|
importer = ForemanSalt::ReportImporter.new(host, report, proxy_id)
|
10
10
|
importer.import
|
@@ -36,8 +36,10 @@ module ForemanSalt
|
|
36
36
|
process_normal
|
37
37
|
end
|
38
38
|
|
39
|
+
@host.refresh_statuses
|
40
|
+
|
39
41
|
@host.save(:validate => false)
|
40
|
-
logger.info("Imported report for #{@host} in #{(Time.now - start_time).round(2)} seconds")
|
42
|
+
logger.info("Imported report for #{@host} in #{(Time.zone.now - start_time).round(2)} seconds")
|
41
43
|
end
|
42
44
|
|
43
45
|
private
|
@@ -130,8 +132,6 @@ module ForemanSalt
|
|
130
132
|
metrics = calculate_metrics
|
131
133
|
status = ReportStatusCalculator.new(:counters => metrics[:resources].slice(*::Report::METRIC)).calculate
|
132
134
|
|
133
|
-
@host.puppet_status = status
|
134
|
-
|
135
135
|
@report = Report.new(:host => @host, :reported_at => start_time, :status => status, :metrics => metrics)
|
136
136
|
return @report unless @report.save
|
137
137
|
import_log_messages
|
@@ -139,9 +139,7 @@ module ForemanSalt
|
|
139
139
|
|
140
140
|
def process_failures
|
141
141
|
status = ReportStatusCalculator.new(:counters => { 'failed' => @raw.size }).calculate
|
142
|
-
@report = Report.create(:host => @host, :reported_at => Time.now, :status => status, :metrics => {})
|
143
|
-
|
144
|
-
@host.puppet_status = status
|
142
|
+
@report = Report.create(:host => @host, :reported_at => Time.zone.now, :status => status, :metrics => {})
|
145
143
|
|
146
144
|
source = Source.find_or_create('Salt')
|
147
145
|
@raw.each do |failure|
|
@@ -151,7 +149,7 @@ module ForemanSalt
|
|
151
149
|
end
|
152
150
|
|
153
151
|
def start_time
|
154
|
-
@start_time ||= Time.now
|
152
|
+
@start_time ||= Time.zone.now
|
155
153
|
end
|
156
154
|
end
|
157
155
|
end
|
@@ -8,7 +8,7 @@ module ForemanSalt
|
|
8
8
|
|
9
9
|
class << self
|
10
10
|
def all(proxy)
|
11
|
-
|
11
|
+
fail ::Foreman::Exception.new(N_('Must specify a Smart Proxy to use')) if proxy.nil?
|
12
12
|
|
13
13
|
unless (keys = Rails.cache.read("saltkeys_#{proxy.id}"))
|
14
14
|
api = ProxyAPI::Salt.new(:url => proxy.url)
|
@@ -31,14 +31,14 @@ module ForemanSalt
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def accept
|
34
|
-
|
34
|
+
fail ::Foreman::Exception.new(N_('unable to re-accept an accepted key')) unless state == 'unaccepted'
|
35
35
|
proxy = SmartProxy.find(smart_proxy_id)
|
36
36
|
Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
|
37
37
|
ProxyAPI::Salt.new(:url => proxy.url).key_accept name
|
38
38
|
end
|
39
39
|
|
40
40
|
def reject
|
41
|
-
|
41
|
+
fail ::Foreman::Exception.new(N_('unable to reject an accepted key')) unless state == 'unaccepted'
|
42
42
|
proxy = SmartProxy.find(smart_proxy_id)
|
43
43
|
Rails.cache.delete("saltkeys_#{proxy.id}") if Rails.env.production?
|
44
44
|
ProxyAPI::Salt.new(:url => proxy.url).key_reject name
|
File without changes
|
data/lib/foreman_salt/engine.rb
CHANGED
@@ -11,181 +11,42 @@ module ForemanSalt
|
|
11
11
|
config.autoload_paths += Dir["#{config.root}/app/services"]
|
12
12
|
config.autoload_paths += Dir["#{config.root}/app/lib"]
|
13
13
|
|
14
|
-
initializer 'foreman_salt.require_dynflow', :before => 'foreman_tasks.initialize_dynflow' do
|
14
|
+
initializer 'foreman_salt.require_dynflow', :before => 'foreman_tasks.initialize_dynflow' do
|
15
15
|
ForemanTasks.dynflow.require!
|
16
16
|
end
|
17
17
|
|
18
18
|
initializer 'foreman_salt.load_default_settings', :before => :load_config_initializers do
|
19
|
-
|
19
|
+
if (Setting.table_exists? rescue(false))
|
20
|
+
require_dependency File.expand_path('../../../app/models/setting/salt.rb', __FILE__)
|
21
|
+
end
|
20
22
|
end
|
21
23
|
|
22
24
|
initializer 'foreman_salt.load_app_instance_data' do |app|
|
23
25
|
app.config.paths['db/migrate'] += ForemanSalt::Engine.paths['db/migrate'].existent
|
24
26
|
end
|
25
27
|
|
26
|
-
initializer
|
28
|
+
initializer 'foreman_salt.assets.precompile' do |app|
|
27
29
|
app.config.assets.precompile += %w(foreman_salt/states.js)
|
28
30
|
end
|
29
31
|
|
30
32
|
initializer 'foreman_salt.configure_assets', :group => :assets do
|
31
|
-
SETTINGS[:foreman_salt] = {
|
33
|
+
SETTINGS[:foreman_salt] = {
|
34
|
+
:assets => {
|
35
|
+
:precompile => ['foreman_salt/states.js']
|
36
|
+
}
|
37
|
+
}
|
32
38
|
end
|
33
39
|
|
34
40
|
initializer 'foreman_salt.apipie' do
|
35
41
|
Apipie.configuration.checksum_path += ['/salt/api/']
|
36
42
|
end
|
37
43
|
|
38
|
-
initializer 'foreman_salt.register_plugin', :after => :finisher_hook do
|
39
|
-
|
40
|
-
requires_foreman '>= 1.9'
|
41
|
-
|
42
|
-
apipie_documented_controllers ["#{ForemanSalt::Engine.root}/app/controllers/foreman_salt/api/v2/*.rb"]
|
43
|
-
|
44
|
-
## Menus
|
45
|
-
menu :top_menu, :salt_environments,
|
46
|
-
:url_hash => { :controller => :'foreman_salt/salt_environments', :action => :index },
|
47
|
-
:caption => 'Environments',
|
48
|
-
:parent => :configure_menu,
|
49
|
-
:after => :common_parameters
|
50
|
-
|
51
|
-
menu :top_menu, :salt_modules,
|
52
|
-
:url_hash => { :controller => :'foreman_salt/salt_modules', :action => :index },
|
53
|
-
:caption => 'States',
|
54
|
-
:parent => :configure_menu,
|
55
|
-
:after => :common_parameters
|
56
|
-
|
57
|
-
divider :top_menu, :parent => :configure_menu,
|
58
|
-
:caption => 'Salt',
|
59
|
-
:after => :common_parameters
|
60
|
-
|
61
|
-
# Permissions
|
62
|
-
security_block :foreman_salt do |_map|
|
63
|
-
permission :destroy_smart_proxies_salt_autosign,
|
64
|
-
{ :'foreman_salt/salt_autosign' => [:destroy],
|
65
|
-
:'foreman_salt/api/v2/salt_autosign' => [:destroy] },
|
66
|
-
:resource_type => 'SmartProxy'
|
67
|
-
|
68
|
-
permission :create_smart_proxies_salt_autosign,
|
69
|
-
{ :'foreman_salt/salt_autosign' => [:new, :create],
|
70
|
-
:'foreman_salt/api/v2/salt_autosign' => [:create] },
|
71
|
-
:resource_type => 'SmartProxy'
|
72
|
-
|
73
|
-
permission :view_smart_proxies_salt_autosign,
|
74
|
-
{ :'foreman_salt/salt_autosign' => [:index],
|
75
|
-
:'foreman_salt/api/v2/salt_autosign' => [:index] },
|
76
|
-
:resource_type => 'SmartProxy'
|
77
|
-
|
78
|
-
permission :create_salt_environments,
|
79
|
-
{ :'foreman_salt/salt_environments' => [:new, :create],
|
80
|
-
:'foreman_salt/api/v2/salt_environments' => [:create] },
|
81
|
-
:resource_type => 'ForemanSalt::SaltEnvironment'
|
82
|
-
|
83
|
-
permission :view_salt_environments,
|
84
|
-
{ :'foreman_salt/salt_environments' => [:index, :show, :auto_complete_search],
|
85
|
-
:'foreman_salt/api/v2/salt_environments' => [:index, :show] },
|
86
|
-
:resource_type => 'ForemanSalt::SaltEnvironment'
|
87
|
-
|
88
|
-
permission :edit_salt_environments,
|
89
|
-
{ :'foreman_salt/salt_environments' => [:update, :edit] },
|
90
|
-
:resource_type => 'ForemanSalt::SaltEnvironment'
|
91
|
-
|
92
|
-
permission :destroy_salt_environments,
|
93
|
-
{ :'foreman_salt/salt_environments' => [:destroy],
|
94
|
-
:'foreman_salt/api/v2/salt_environments' => [:destroy] },
|
95
|
-
:resource_type => 'ForemanSalt::SaltEnvironment'
|
96
|
-
|
97
|
-
permission :create_reports,
|
98
|
-
{ :'foreman_salt/api/v2/jobs' => [:upload] },
|
99
|
-
:resource_type => 'Report'
|
100
|
-
|
101
|
-
permission :saltrun_hosts,
|
102
|
-
{ :'foreman_salt/minions' => [:run] },
|
103
|
-
:resource_type => 'Host'
|
104
|
-
|
105
|
-
permission :edit_hosts,
|
106
|
-
{ :'foreman_salt/api/v2/salt_minions' => [:update],
|
107
|
-
:'foreman_salt/minions' => [:salt_environment_selected] },
|
108
|
-
:resource_type => 'Host'
|
109
|
-
|
110
|
-
permission :view_hosts,
|
111
|
-
{ :'foreman_salt/minions' => [:node],
|
112
|
-
:'foreman_salt/api/v2/salt_minions' => [:index, :show] },
|
113
|
-
:resource_type => 'Host'
|
114
|
-
|
115
|
-
permission :edit_hostgroups,
|
116
|
-
{ :hostgroups => [:salt_environment_selected] },
|
117
|
-
:resource_type => 'Hostgroup'
|
118
|
-
|
119
|
-
permission :view_smart_proxies_salt_keys,
|
120
|
-
{ :'foreman_salt/salt_keys' => [:index],
|
121
|
-
:'foreman_salt/api/v2/salt_keys' => [:index] },
|
122
|
-
:resource_type => 'SmartProxy'
|
123
|
-
|
124
|
-
permission :destroy_smart_proxies_salt_keys,
|
125
|
-
{ :'foreman_salt/salt_keys' => [:destroy],
|
126
|
-
:'foreman_salt/api/v2/salt_keys' => [:destroy] },
|
127
|
-
:resource_type => 'SmartProxy'
|
128
|
-
|
129
|
-
permission :edit_smart_proxies_salt_keys,
|
130
|
-
{ :'foreman_salt/salt_keys' => [:accept, :reject],
|
131
|
-
:'foreman_salt/api/v2/salt_keys' => [:update] },
|
132
|
-
:resource_type => 'SmartProxy'
|
133
|
-
|
134
|
-
permission :create_salt_modules,
|
135
|
-
{ :'foreman_salt/salt_modules' => [:new, :create],
|
136
|
-
:'foreman_salt/api/v2/salt_states' => [:create] },
|
137
|
-
:resource_type => 'ForemanSalt::SaltModule'
|
138
|
-
|
139
|
-
permission :import_salt_modules,
|
140
|
-
{ :'foreman_salt/salt_modules' => [:import, :apply_changes],
|
141
|
-
:'foreman_salt/api/v2/salt_states' => [:import] },
|
142
|
-
:resource_type => 'ForemanSalt::SaltModule'
|
143
|
-
|
144
|
-
permission :view_salt_modules,
|
145
|
-
{ :'foreman_salt/salt_modules' => [:index, :show, :auto_complete_search],
|
146
|
-
:'foreman_salt/api/v2/salt_states' => [:index, :show] },
|
147
|
-
:resource_type => 'ForemanSalt::SaltModule'
|
148
|
-
|
149
|
-
permission :edit_salt_modules,
|
150
|
-
{ :'foreman_salt/salt_modules' => [:update, :edit] },
|
151
|
-
:resource_type => 'ForemanSalt::SaltModule'
|
152
|
-
|
153
|
-
permission :destroy_salt_modules,
|
154
|
-
{ :'foreman_salt/salt_modules' => [:destroy],
|
155
|
-
:'foreman_salt/api/v2/salt_states' => [:destroy] },
|
156
|
-
:resource_type => 'ForemanSalt::SaltModule'
|
157
|
-
end
|
158
|
-
|
159
|
-
## Roles
|
160
|
-
role 'Salt admin', [:saltrun_hosts, :create_salt_modules, :view_salt_modules, :edit_salt_modules, :destroy_salt_modules,
|
161
|
-
:view_smart_proxies_salt_keys, :destroy_smart_proxies_salt_keys, :edit_smart_proxies_salt_keys,
|
162
|
-
:create_smart_proxies_salt_autosign, :view_smart_proxies_salt_autosign, :destroy_smart_proxies_salt_autosign,
|
163
|
-
:create_salt_environments, :view_salt_environments, :edit_salt_environments, :destroy_salt_environments]
|
164
|
-
end
|
44
|
+
initializer 'foreman_salt.register_plugin', :after => :finisher_hook do
|
45
|
+
require 'foreman_salt/plugin'
|
165
46
|
end
|
166
47
|
|
167
48
|
config.to_prepare do
|
168
|
-
|
169
|
-
::FactImporter.register_fact_importer(:foreman_salt, ForemanSalt::FactImporter)
|
170
|
-
::FactParser.register_fact_parser(:foreman_salt, ForemanSalt::FactParser)
|
171
|
-
|
172
|
-
# Helper Extensions
|
173
|
-
::HostsHelper.send :include, ForemanSalt::HostsHelperExtensions
|
174
|
-
::SmartProxiesHelper.send :include, ForemanSalt::SmartProxiesHelperExtensions
|
175
|
-
::LayoutHelper.send :include, ForemanSalt::LayoutHelperExtensions
|
176
|
-
|
177
|
-
# Model Extensions
|
178
|
-
::Host::Managed.send :include, ForemanSalt::Concerns::HostManagedExtensions
|
179
|
-
::Host::Managed.send :include, ForemanSalt::Concerns::Orchestration::Salt
|
180
|
-
::Hostgroup.send :include, ForemanSalt::Concerns::HostgroupExtensions
|
181
|
-
|
182
|
-
# Controller Extensions
|
183
|
-
::UnattendedController.send :include, ForemanSalt::Concerns::UnattendedControllerExtensions
|
184
|
-
::HostsController.send :include, ForemanSalt::Concerns::HostsControllerExtensions
|
185
|
-
::HostgroupsController.send :include, ForemanSalt::Concerns::HostgroupsControllerExtensions
|
186
|
-
rescue => e
|
187
|
-
puts "ForemanSalt: skipping engine hook (#{e})"
|
188
|
-
end
|
49
|
+
require 'foreman_salt/extensions'
|
189
50
|
end
|
190
51
|
end
|
191
52
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
begin
|
2
|
+
::FactImporter.register_fact_importer(:foreman_salt, ForemanSalt::FactImporter)
|
3
|
+
::FactParser.register_fact_parser(:foreman_salt, ForemanSalt::FactParser)
|
4
|
+
|
5
|
+
# Helper Extensions
|
6
|
+
::HostsHelper.send :include, ForemanSalt::HostsHelperExtensions
|
7
|
+
::SmartProxiesHelper.send :include, ForemanSalt::SmartProxiesHelperExtensions
|
8
|
+
|
9
|
+
# Model Extensions
|
10
|
+
::Host::Managed.send :include, ForemanSalt::Concerns::HostManagedExtensions
|
11
|
+
::Host::Managed.send :include, ForemanSalt::Concerns::Orchestration::Salt
|
12
|
+
::Hostgroup.send :include, ForemanSalt::Concerns::HostgroupExtensions
|
13
|
+
|
14
|
+
# Controller Extensions
|
15
|
+
::UnattendedController.send :include, ForemanSalt::Concerns::UnattendedControllerExtensions
|
16
|
+
::HostsController.send :include, ForemanSalt::Concerns::HostsControllerExtensions
|
17
|
+
::HostgroupsController.send :include, ForemanSalt::Concerns::HostgroupsControllerExtensions
|
18
|
+
rescue => e
|
19
|
+
puts "ForemanSalt: skipping engine hook (#{e})"
|
20
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
Foreman::Plugin.register :foreman_salt do
|
2
|
+
requires_foreman '>= 1.10'
|
3
|
+
|
4
|
+
apipie_documented_controllers ["#{ForemanSalt::Engine.root}/app/controllers/foreman_salt/api/v2/*.rb"]
|
5
|
+
|
6
|
+
# Menus
|
7
|
+
menu :top_menu, :salt_environments,
|
8
|
+
:url_hash => { :controller => :'foreman_salt/salt_environments', :action => :index },
|
9
|
+
:caption => 'Environments',
|
10
|
+
:parent => :configure_menu,
|
11
|
+
:after => :common_parameters
|
12
|
+
|
13
|
+
menu :top_menu, :salt_modules,
|
14
|
+
:url_hash => { :controller => :'foreman_salt/salt_modules', :action => :index },
|
15
|
+
:caption => 'States',
|
16
|
+
:parent => :configure_menu,
|
17
|
+
:after => :common_parameters
|
18
|
+
|
19
|
+
divider :top_menu, :parent => :configure_menu,
|
20
|
+
:caption => 'Salt',
|
21
|
+
:after => :common_parameters
|
22
|
+
|
23
|
+
# Permissions
|
24
|
+
security_block :foreman_salt do
|
25
|
+
permission :destroy_smart_proxies_salt_autosign,
|
26
|
+
{ :'foreman_salt/salt_autosign' => [:destroy],
|
27
|
+
:'foreman_salt/api/v2/salt_autosign' => [:destroy] },
|
28
|
+
:resource_type => 'SmartProxy'
|
29
|
+
|
30
|
+
permission :create_smart_proxies_salt_autosign,
|
31
|
+
{ :'foreman_salt/salt_autosign' => [:new, :create],
|
32
|
+
:'foreman_salt/api/v2/salt_autosign' => [:create] },
|
33
|
+
:resource_type => 'SmartProxy'
|
34
|
+
|
35
|
+
permission :view_smart_proxies_salt_autosign,
|
36
|
+
{ :'foreman_salt/salt_autosign' => [:index],
|
37
|
+
:'foreman_salt/api/v2/salt_autosign' => [:index] },
|
38
|
+
:resource_type => 'SmartProxy'
|
39
|
+
|
40
|
+
permission :create_salt_environments,
|
41
|
+
{ :'foreman_salt/salt_environments' => [:new, :create],
|
42
|
+
:'foreman_salt/api/v2/salt_environments' => [:create] },
|
43
|
+
:resource_type => 'ForemanSalt::SaltEnvironment'
|
44
|
+
|
45
|
+
permission :view_salt_environments,
|
46
|
+
{ :'foreman_salt/salt_environments' => [:index, :show, :auto_complete_search],
|
47
|
+
:'foreman_salt/api/v2/salt_environments' => [:index, :show] },
|
48
|
+
:resource_type => 'ForemanSalt::SaltEnvironment'
|
49
|
+
|
50
|
+
permission :edit_salt_environments,
|
51
|
+
{ :'foreman_salt/salt_environments' => [:update, :edit] },
|
52
|
+
:resource_type => 'ForemanSalt::SaltEnvironment'
|
53
|
+
|
54
|
+
permission :destroy_salt_environments,
|
55
|
+
{ :'foreman_salt/salt_environments' => [:destroy],
|
56
|
+
:'foreman_salt/api/v2/salt_environments' => [:destroy] },
|
57
|
+
:resource_type => 'ForemanSalt::SaltEnvironment'
|
58
|
+
|
59
|
+
permission :create_reports,
|
60
|
+
{ :'foreman_salt/api/v2/jobs' => [:upload] },
|
61
|
+
:resource_type => 'Report'
|
62
|
+
|
63
|
+
permission :saltrun_hosts,
|
64
|
+
{ :'foreman_salt/minions' => [:run] },
|
65
|
+
:resource_type => 'Host'
|
66
|
+
|
67
|
+
permission :edit_hosts,
|
68
|
+
{ :'foreman_salt/api/v2/salt_minions' => [:update],
|
69
|
+
:'foreman_salt/minions' => [:salt_environment_selected] },
|
70
|
+
:resource_type => 'Host'
|
71
|
+
|
72
|
+
permission :view_hosts,
|
73
|
+
{ :'foreman_salt/minions' => [:node],
|
74
|
+
:'foreman_salt/api/v2/salt_minions' => [:index, :show] },
|
75
|
+
:resource_type => 'Host'
|
76
|
+
|
77
|
+
permission :edit_hostgroups,
|
78
|
+
{ :hostgroups => [:salt_environment_selected] },
|
79
|
+
:resource_type => 'Hostgroup'
|
80
|
+
|
81
|
+
permission :view_smart_proxies_salt_keys,
|
82
|
+
{ :'foreman_salt/salt_keys' => [:index],
|
83
|
+
:'foreman_salt/api/v2/salt_keys' => [:index] },
|
84
|
+
:resource_type => 'SmartProxy'
|
85
|
+
|
86
|
+
permission :destroy_smart_proxies_salt_keys,
|
87
|
+
{ :'foreman_salt/salt_keys' => [:destroy],
|
88
|
+
:'foreman_salt/api/v2/salt_keys' => [:destroy] },
|
89
|
+
:resource_type => 'SmartProxy'
|
90
|
+
|
91
|
+
permission :edit_smart_proxies_salt_keys,
|
92
|
+
{ :'foreman_salt/salt_keys' => [:accept, :reject],
|
93
|
+
:'foreman_salt/api/v2/salt_keys' => [:update] },
|
94
|
+
:resource_type => 'SmartProxy'
|
95
|
+
|
96
|
+
permission :create_salt_modules,
|
97
|
+
{ :'foreman_salt/salt_modules' => [:new, :create],
|
98
|
+
:'foreman_salt/api/v2/salt_states' => [:create] },
|
99
|
+
:resource_type => 'ForemanSalt::SaltModule'
|
100
|
+
|
101
|
+
permission :import_salt_modules,
|
102
|
+
{ :'foreman_salt/salt_modules' => [:import, :apply_changes],
|
103
|
+
:'foreman_salt/api/v2/salt_states' => [:import] },
|
104
|
+
:resource_type => 'ForemanSalt::SaltModule'
|
105
|
+
|
106
|
+
permission :view_salt_modules,
|
107
|
+
{ :'foreman_salt/salt_modules' => [:index, :show, :auto_complete_search],
|
108
|
+
:'foreman_salt/api/v2/salt_states' => [:index, :show] },
|
109
|
+
:resource_type => 'ForemanSalt::SaltModule'
|
110
|
+
|
111
|
+
permission :edit_salt_modules,
|
112
|
+
{ :'foreman_salt/salt_modules' => [:update, :edit] },
|
113
|
+
:resource_type => 'ForemanSalt::SaltModule'
|
114
|
+
|
115
|
+
permission :destroy_salt_modules,
|
116
|
+
{ :'foreman_salt/salt_modules' => [:destroy],
|
117
|
+
:'foreman_salt/api/v2/salt_states' => [:destroy] },
|
118
|
+
:resource_type => 'ForemanSalt::SaltModule'
|
119
|
+
end
|
120
|
+
|
121
|
+
# Roles
|
122
|
+
role 'Salt admin', [:saltrun_hosts, :create_salt_modules,
|
123
|
+
:view_salt_modules, :edit_salt_modules,
|
124
|
+
:destroy_salt_modules,
|
125
|
+
:view_smart_proxies_salt_keys,
|
126
|
+
:destroy_smart_proxies_salt_keys,
|
127
|
+
:edit_smart_proxies_salt_keys,
|
128
|
+
:create_smart_proxies_salt_autosign,
|
129
|
+
:view_smart_proxies_salt_autosign,
|
130
|
+
:destroy_smart_proxies_salt_autosign,
|
131
|
+
:create_salt_environments, :view_salt_environments,
|
132
|
+
:edit_salt_environments,
|
133
|
+
:destroy_salt_environments]
|
134
|
+
end
|
data/lib/foreman_salt/version.rb
CHANGED
@@ -33,8 +33,8 @@ module ForemanSalt
|
|
33
33
|
context 'importing' do
|
34
34
|
setup do
|
35
35
|
@proxy = FactoryGirl.create :smart_proxy, :with_salt_feature
|
36
|
-
@states = {'env1' => %w(state1 state2 state3),
|
37
|
-
|
36
|
+
@states = { 'env1' => %w(state1 state2 state3),
|
37
|
+
'env2' => %w(state1 state2) }
|
38
38
|
|
39
39
|
::ProxyAPI::Salt.any_instance.stubs(:states_list).returns(@states)
|
40
40
|
end
|
@@ -73,7 +73,7 @@ module ForemanSalt
|
|
73
73
|
assert_response :success
|
74
74
|
refute ::ForemanSalt::SaltModule.where(:id => state).first
|
75
75
|
refute ::ForemanSalt::SaltModule.where(:name => 'state1').first
|
76
|
-
|
76
|
+
end
|
77
77
|
|
78
78
|
test 'dryrun should do nothing' do
|
79
79
|
post :import, :smart_proxy_id => @proxy.id, :dryrun => true
|
@@ -6,9 +6,13 @@ module ForemanSalt
|
|
6
6
|
User.current = User.anonymous_admin
|
7
7
|
|
8
8
|
states = %w(state1 state2 state3 state4)
|
9
|
-
state_list = {'env1' => states, 'env2' => states}
|
9
|
+
state_list = { 'env1' => states, 'env2' => states }
|
10
10
|
|
11
11
|
::ProxyAPI::Salt.any_instance.stubs(:states_list).returns(state_list)
|
12
|
+
|
13
|
+
# FIXME #12143
|
14
|
+
FactoryGirl.create(:permission, :name => 'view_salt_environments',
|
15
|
+
:resource_type => 'ForemanSalt::SaltEnvironment')
|
12
16
|
end
|
13
17
|
|
14
18
|
test 'index page' do
|
@@ -42,5 +42,14 @@ module ForemanSalt
|
|
42
42
|
refute host.save
|
43
43
|
assert host.errors.full_messages.include? 'Salt states must be in the environment of the host'
|
44
44
|
end
|
45
|
+
|
46
|
+
test '#configuration? considers salt' do
|
47
|
+
host = FactoryGirl.build(:host)
|
48
|
+
proxy = FactoryGirl.build(:smart_proxy)
|
49
|
+
|
50
|
+
refute host.configuration?
|
51
|
+
host.salt_proxy = proxy
|
52
|
+
assert host.configuration?
|
53
|
+
end
|
45
54
|
end
|
46
55
|
end
|
@@ -19,7 +19,7 @@ module ForemanSalt
|
|
19
19
|
|
20
20
|
test 'importing report updates host status' do
|
21
21
|
ForemanSalt::ReportImporter.import(@report)
|
22
|
-
|
22
|
+
assert Host.find_by_name(@host).get_status(HostStatus::ConfigurationStatus).error?
|
23
23
|
end
|
24
24
|
|
25
25
|
test 'importing report has correct status' do
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_salt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Benjamin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - <
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - <
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: foreman-tasks
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.7.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.7.1
|
41
41
|
description: Foreman Plug-in for Salt
|
@@ -67,7 +67,6 @@ files:
|
|
67
67
|
- app/controllers/foreman_salt/salt_modules_controller.rb
|
68
68
|
- app/controllers/foreman_salt/state_importer.rb
|
69
69
|
- app/helpers/concerns/foreman_salt/hosts_helper_extensions.rb
|
70
|
-
- app/helpers/concerns/foreman_salt/layout_helper_extensions.rb
|
71
70
|
- app/helpers/concerns/foreman_salt/smart_proxies_helper_extensions.rb
|
72
71
|
- app/helpers/foreman_salt/salt_keys_helper.rb
|
73
72
|
- app/helpers/foreman_salt/salt_modules_helper.rb
|
@@ -137,9 +136,11 @@ files:
|
|
137
136
|
- db/migrate/20150411003302_add_environments_to_modules.rb
|
138
137
|
- db/migrate/20150509094409_rename_join_tables.rb
|
139
138
|
- db/migrate/20150509101505_add_primary_keys.rb
|
140
|
-
- db/seeds.d/75-
|
139
|
+
- db/seeds.d/75-salt_seeds.rb
|
141
140
|
- lib/foreman_salt.rb
|
142
141
|
- lib/foreman_salt/engine.rb
|
142
|
+
- lib/foreman_salt/extensions.rb
|
143
|
+
- lib/foreman_salt/plugin.rb
|
143
144
|
- lib/foreman_salt/version.rb
|
144
145
|
- lib/tasks/foreman_salt_tasks.rake
|
145
146
|
- test/factories/foreman_salt_factories.rb
|
@@ -171,17 +172,17 @@ require_paths:
|
|
171
172
|
- lib
|
172
173
|
required_ruby_version: !ruby/object:Gem::Requirement
|
173
174
|
requirements:
|
174
|
-
- -
|
175
|
+
- - '>='
|
175
176
|
- !ruby/object:Gem::Version
|
176
177
|
version: '0'
|
177
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
179
|
requirements:
|
179
|
-
- -
|
180
|
+
- - '>='
|
180
181
|
- !ruby/object:Gem::Version
|
181
182
|
version: '0'
|
182
183
|
requirements: []
|
183
184
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.4.
|
185
|
+
rubygems_version: 2.4.8
|
185
186
|
signing_key:
|
186
187
|
specification_version: 4
|
187
188
|
summary: Foreman Plug-in for Salt
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module ForemanSalt
|
2
|
-
module LayoutHelperExtensions
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
included do
|
6
|
-
alias_method_chain :authorized_associations_permission_name, :salt
|
7
|
-
end
|
8
|
-
|
9
|
-
# Foreman tries to magically guess permission names, but it doesn't work
|
10
|
-
# with plugins. #11408 ForemanSalt models that require permissions provide
|
11
|
-
# a self.permission_name method
|
12
|
-
def authorized_associations_permission_name_with_salt(klass)
|
13
|
-
if klass.respond_to?(:permission_name)
|
14
|
-
klass.permission_name(:view)
|
15
|
-
else
|
16
|
-
authorized_associations_permission_name_without_salt(klass)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|