foreman_salt 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -8
- data/Rakefile +1 -1
- data/app/controllers/foreman_salt/api/v2/jobs_controller.rb +4 -4
- data/app/controllers/foreman_salt/concerns/hosts_controller_extensions.rb +4 -4
- data/app/controllers/foreman_salt/concerns/smart_proxy_auth_extensions.rb +2 -2
- data/app/controllers/foreman_salt/concerns/unattended_controller_extensions.rb +1 -1
- data/app/controllers/foreman_salt/salt_environments_controller.rb +1 -1
- data/app/controllers/foreman_salt/salt_keys_controller.rb +4 -4
- data/app/controllers/foreman_salt/salt_modules_controller.rb +1 -1
- data/app/helpers/concerns/foreman_salt/hosts_helper_extensions.rb +4 -4
- data/app/helpers/concerns/foreman_salt/smart_proxies_helper_extensions.rb +2 -2
- data/app/helpers/foreman_salt/salt_keys_helper.rb +1 -1
- data/app/lib/proxy_api/salt.rb +21 -21
- data/app/models/foreman_salt/concerns/host_managed_extensions.rb +7 -7
- data/app/models/foreman_salt/concerns/hostgroup_extensions.rb +5 -5
- data/app/models/foreman_salt/concerns/orchestration/salt.rb +12 -12
- data/app/models/foreman_salt/salt_environment.rb +4 -4
- data/app/models/foreman_salt/salt_module.rb +4 -4
- data/app/overrides/foreman/salt_modules/_host_tab_pane.html.erb +2 -2
- data/app/overrides/salt_environment_selector.rb +4 -4
- data/app/overrides/salt_modules_selector.rb +9 -9
- data/app/overrides/salt_proxy_selector.rb +4 -4
- data/app/services/foreman_salt/fact_importer.rb +5 -5
- data/app/services/foreman_salt/report_importer.rb +14 -14
- data/app/services/foreman_salt/smart_proxies/salt_keys.rb +6 -6
- data/app/views/foreman_salt/salt_autosign/_form.html.erb +1 -1
- data/app/views/foreman_salt/salt_autosign/index.html.erb +3 -3
- data/app/views/foreman_salt/salt_autosign/new.html.erb +1 -1
- data/app/views/foreman_salt/salt_environments/edit.html.erb +1 -1
- data/app/views/foreman_salt/salt_environments/index.html.erb +4 -4
- data/app/views/foreman_salt/salt_environments/new.html.erb +1 -1
- data/app/views/foreman_salt/salt_keys/index.erb +9 -9
- data/app/views/foreman_salt/salt_modules/edit.html.erb +1 -1
- data/app/views/foreman_salt/salt_modules/index.html.erb +4 -4
- data/app/views/foreman_salt/salt_modules/new.html.erb +1 -1
- data/config/routes.rb +1 -1
- data/db/migrate/20140817210214_create_salt_modules.rb +1 -1
- data/db/migrate/20140920232200_create_salt_environments.rb +1 -1
- data/db/seeds.d/75-salt-seeds.rb +1 -1
- data/lib/foreman_salt/engine.rb +20 -20
- data/lib/foreman_salt/version.rb +1 -1
- data/lib/foreman_salt.rb +1 -1
- data/lib/tasks/foreman_salt_tasks.rake +16 -9
- data/test/factories/foreman_salt_factories.rb +2 -2
- data/test/functional/hosts_controller_test.rb +1 -1
- data/test/integration/salt_autosign_test.rb +8 -8
- data/test/integration/salt_environment_test.rb +7 -7
- data/test/integration/salt_keys_test.rb +17 -17
- data/test/integration/salt_module_test.rb +8 -8
- data/test/test_plugin_helper.rb +1 -1
- data/test/unit/grains_importer_test.rb +9 -9
- data/test/unit/host_extensions_test.rb +7 -7
- data/test/unit/hostgroup_extensions_test.rb +7 -7
- data/test/unit/report_importer_test.rb +1 -1
- data/test/unit/salt_keys_test.rb +13 -13
- data/test/unit/salt_modules_test.rb +5 -5
- metadata +58 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce1b4cb399d2e977121144ef5e214df9cfb96c14
|
4
|
+
data.tar.gz: 7ae9a7bfe423ed887ae6b6a4b553bebc2a493197
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 642dccb0a0683cee2885bcf2a9446c13687fb8af7685537d1b2db45532c81c59476fb326e91c1e1144ccb0882f236ee18497b3fd64d580aaf68de4891e1070e0
|
7
|
+
data.tar.gz: 3cc3ab238b85f88d1c60f8bf6e8c29985de38a28ebfdadb58e010ddf25c6458c8d69b9f8c354b6aeebe8ba6690f33482f5cf04c02d264f7e913363fd5e9de40f
|
data/README.md
CHANGED
@@ -2,16 +2,9 @@
|
|
2
2
|
|
3
3
|
This plug-in adds support for Salt to Foreman.
|
4
4
|
|
5
|
-
## Compatibility
|
6
|
-
|
7
|
-
| Foreman Version | Plugin Version |
|
8
|
-
| --------------- | --------------:|
|
9
|
-
| >= 1.6 | ~> 0.0 |
|
10
|
-
| >= 1.7 | ~> 1.0 |
|
11
|
-
|
12
5
|
## Documentation
|
13
6
|
|
14
|
-
|
7
|
+
Available in the Wiki https://github.com/theforeman/foreman_salt/wiki
|
15
8
|
|
16
9
|
## Contributing
|
17
10
|
|
data/Rakefile
CHANGED
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
20
20
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
21
|
end
|
22
22
|
|
23
|
-
APP_RAKEFILE = File.expand_path(
|
23
|
+
APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
|
24
24
|
load 'rails/tasks/engine.rake'
|
25
25
|
|
26
26
|
|
@@ -11,14 +11,14 @@ module ForemanSalt
|
|
11
11
|
add_puppetmaster_filters :upload
|
12
12
|
|
13
13
|
resource_description do
|
14
|
-
api_base_url
|
14
|
+
api_base_url '/salt/api'
|
15
15
|
end
|
16
16
|
|
17
17
|
def_param_group :job do
|
18
18
|
param :job, Hash, :required => true, :action_aware => true do
|
19
|
-
param :job_id, Integer, :required => true, :desc => N_(
|
20
|
-
param :function, String, :required => true, :desc => N_(
|
21
|
-
param :result, Hash, :required => true, :desc => N_(
|
19
|
+
param :job_id, Integer, :required => true, :desc => N_('JID')
|
20
|
+
param :function, String, :required => true, :desc => N_('Function')
|
21
|
+
param :result, Hash, :required => true, :desc => N_('Result')
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -13,7 +13,7 @@ module ForemanSalt
|
|
13
13
|
|
14
14
|
def saltrun
|
15
15
|
if @host.saltrun!
|
16
|
-
notice _(
|
16
|
+
notice _('Successfully executed, check log files for more details')
|
17
17
|
else
|
18
18
|
error @host.errors[:base].to_sentence
|
19
19
|
end
|
@@ -25,9 +25,9 @@ module ForemanSalt
|
|
25
25
|
@host = resource_base.find(params[:name])
|
26
26
|
enc = {}
|
27
27
|
env = @host.salt_environment.blank? ? 'base' : @host.salt_environment.name
|
28
|
-
enc[
|
29
|
-
enc[
|
30
|
-
enc[
|
28
|
+
enc['classes'] = @host.salt_modules.any? ? @host.salt_modules.map(&:name) : []
|
29
|
+
enc['parameters'] = @host.info['parameters']
|
30
|
+
enc['environment'] = env
|
31
31
|
respond_to do |format|
|
32
32
|
format.html { render :text => "<pre>#{ERB::Util.html_escape(enc.to_yaml)}</pre>" }
|
33
33
|
format.yml { render :text => enc.to_yaml }
|
@@ -12,9 +12,9 @@ module ForemanSalt
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def require_puppetmaster_or_login_with_salt
|
15
|
-
if auth_smart_proxy(::SmartProxy.with_features(
|
15
|
+
if auth_smart_proxy(::SmartProxy.with_features('Salt'), ::Setting[:require_ssl_puppetmasters])
|
16
16
|
set_admin_user
|
17
|
-
|
17
|
+
true
|
18
18
|
else
|
19
19
|
require_puppetmaster_or_login_without_salt
|
20
20
|
end
|
@@ -11,7 +11,7 @@ module ForemanSalt
|
|
11
11
|
|
12
12
|
def handle_salt
|
13
13
|
return true if @spoof
|
14
|
-
render(:text => _(
|
14
|
+
render(:text => _('Failed to set autosign for host. Terminating the build!'), :status => 500) unless @host.respond_to?(:handle_salt) && @host.handle_salt
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -27,7 +27,7 @@ module ForemanSalt
|
|
27
27
|
|
28
28
|
def update
|
29
29
|
if @salt_environment.update_attributes(params[:foreman_salt_salt_environment])
|
30
|
-
notice _(
|
30
|
+
notice _('Successfully updated %s.' % @salt_environment.to_s)
|
31
31
|
redirect_to salt_environments_path
|
32
32
|
else
|
33
33
|
process_error
|
@@ -4,7 +4,7 @@ module ForemanSalt
|
|
4
4
|
def index
|
5
5
|
@proxy = find_proxy
|
6
6
|
|
7
|
-
Rails.cache.delete("saltkeys_#{@proxy.id}") if params[:expire_cache] ==
|
7
|
+
Rails.cache.delete("saltkeys_#{@proxy.id}") if params[:expire_cache] == 'true'
|
8
8
|
keys = if params[:state].blank?
|
9
9
|
SmartProxies::SaltKeys.all @proxy
|
10
10
|
else
|
@@ -14,7 +14,7 @@ module ForemanSalt
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def accept
|
17
|
-
@proxy = find_proxy(
|
17
|
+
@proxy = find_proxy(:edit_smart_proxies_salt_keys)
|
18
18
|
key = SmartProxies::SaltKeys.find(@proxy, params[:salt_key_id])
|
19
19
|
if key.accept
|
20
20
|
process_success({:success_redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true),
|
@@ -25,7 +25,7 @@ module ForemanSalt
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def reject
|
28
|
-
@proxy = find_proxy(
|
28
|
+
@proxy = find_proxy(:edit_smart_proxies_salt_keys)
|
29
29
|
key = SmartProxies::SaltKeys.find(@proxy, params[:salt_key_id])
|
30
30
|
if key.reject
|
31
31
|
process_success({:success_redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true),
|
@@ -36,7 +36,7 @@ module ForemanSalt
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def destroy
|
39
|
-
@proxy = find_proxy(
|
39
|
+
@proxy = find_proxy(:destroy_smart_proxies_salt_keys)
|
40
40
|
key = SmartProxies::SaltKeys.find(@proxy, params[:id])
|
41
41
|
if key.delete
|
42
42
|
process_success({:success_redirect => hash_for_smart_proxy_salt_keys_path(:state => params[:state], :expire_cache => true),
|
@@ -27,7 +27,7 @@ module ForemanSalt
|
|
27
27
|
|
28
28
|
def update
|
29
29
|
if @salt_module.update_attributes(params[:foreman_salt_salt_module])
|
30
|
-
notice _(
|
30
|
+
notice _('Successfully updated %s.' % @salt_module.to_s)
|
31
31
|
redirect_to salt_modules_path
|
32
32
|
else
|
33
33
|
process_error
|
@@ -9,16 +9,16 @@ 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(_(
|
13
|
-
:title => _(
|
12
|
+
[(link_to_if_authorized(_('Salt ENC'), {:controller => :hosts, :action => :salt_external_node, :name => 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
17
|
title_actions(
|
18
18
|
button_group(
|
19
19
|
if host.try(:salt_proxy)
|
20
|
-
link_to_if_authorized(_(
|
21
|
-
:title => _(
|
20
|
+
link_to_if_authorized(_('Run Salt'), {:controller => :hosts, :action => :saltrun, :id => @host},
|
21
|
+
:title => _('Trigger a state.highstate run on a node'))
|
22
22
|
end
|
23
23
|
)
|
24
24
|
)
|
@@ -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(_(
|
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(_(
|
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
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ForemanSalt
|
2
2
|
module SaltKeysHelper
|
3
3
|
def salt_keys_state_filter
|
4
|
-
select_tag
|
4
|
+
select_tag 'Filter', options_for_select(['', _('Accepted'),_('Rejected'), _('Unaccepted')], params[:state]),
|
5
5
|
:onchange => "window.location.href = location.protocol + '//' + location.host + location.pathname + (this.value == '' ? '' : ('?state=' + this.value))"
|
6
6
|
end
|
7
7
|
end
|
data/app/lib/proxy_api/salt.rb
CHANGED
@@ -1,60 +1,60 @@
|
|
1
1
|
module ::ProxyAPI
|
2
2
|
class Salt < ::ProxyAPI::Resource
|
3
|
-
def initialize
|
4
|
-
@url = args[:url] +
|
3
|
+
def initialize(args)
|
4
|
+
@url = args[:url] + '/salt/'
|
5
5
|
super args
|
6
6
|
end
|
7
7
|
|
8
8
|
def autosign_list
|
9
|
-
parse(get(
|
9
|
+
parse(get('autosign'))
|
10
10
|
rescue => e
|
11
|
-
raise ProxyException.new(url, e, N_(
|
11
|
+
raise ProxyException.new(url, e, N_('Unable to fetch autosign list'))
|
12
12
|
end
|
13
13
|
|
14
|
-
def autosign_create
|
15
|
-
parse(post(
|
14
|
+
def autosign_create(name)
|
15
|
+
parse(post('', "autosign/#{URI.escape(name)}"))
|
16
16
|
rescue => e
|
17
|
-
raise ProxyException.new(url, e, N_(
|
17
|
+
raise ProxyException.new(url, e, N_('Unable to set Salt autosign for %s'), name)
|
18
18
|
end
|
19
19
|
|
20
|
-
def autosign_remove
|
20
|
+
def autosign_remove(name)
|
21
21
|
parse(delete("autosign/#{URI.escape(name)}"))
|
22
22
|
rescue RestClient::ResourceNotFound
|
23
23
|
true # entry doesn't exists anyway
|
24
24
|
rescue => e
|
25
|
-
raise ProxyException.new(url, e, N_(
|
25
|
+
raise ProxyException.new(url, e, N_('Unable to delete Salt autosign for %s'), name)
|
26
26
|
end
|
27
27
|
|
28
28
|
def key_list
|
29
|
-
parse(get(
|
29
|
+
parse(get('key'))
|
30
30
|
rescue => e
|
31
|
-
raise ProxyException.new(url, e, N_(
|
31
|
+
raise ProxyException.new(url, e, N_('Unable to fetch Salt key list'))
|
32
32
|
end
|
33
33
|
|
34
|
-
def key_accept
|
35
|
-
parse(post(
|
34
|
+
def key_accept(name)
|
35
|
+
parse(post('',"key/#{name}"))
|
36
36
|
rescue => e
|
37
|
-
raise ProxyException.new(url, e, N_(
|
37
|
+
raise ProxyException.new(url, e, N_('Unable to accept Salt key for %s'), name)
|
38
38
|
end
|
39
39
|
|
40
|
-
def key_reject
|
40
|
+
def key_reject(name)
|
41
41
|
parse(delete("key/reject/#{name}"))
|
42
42
|
rescue => e
|
43
|
-
raise ProxyException.new(url, e, N_(
|
43
|
+
raise ProxyException.new(url, e, N_('Unable to reject Salt key for %s'), name)
|
44
44
|
end
|
45
45
|
|
46
|
-
def key_delete
|
46
|
+
def key_delete(name)
|
47
47
|
parse(delete("key/#{name}"))
|
48
48
|
rescue RestClient::ResourceNotFound
|
49
49
|
true
|
50
50
|
rescue => e
|
51
|
-
raise ProxyException.new(url, e, N_(
|
51
|
+
raise ProxyException.new(url, e, N_('Unable to delete Salt key for %s'), name)
|
52
52
|
end
|
53
53
|
|
54
|
-
def highstate
|
55
|
-
parse(post(
|
54
|
+
def highstate(name)
|
55
|
+
parse(post('', "highstate/#{name}"))
|
56
56
|
rescue => e
|
57
|
-
raise ProxyException.new(url, e, N_(
|
57
|
+
raise ProxyException.new(url, e, N_('Unable to run Salt state.highstate for %s'), name)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -4,9 +4,9 @@ module ForemanSalt
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
included do
|
7
|
-
has_and_belongs_to_many :salt_modules, :class_name =>
|
8
|
-
belongs_to :salt_proxy, :class_name =>
|
9
|
-
belongs_to :salt_environment, :class_name =>
|
7
|
+
has_and_belongs_to_many :salt_modules, :class_name => 'ForemanSalt::SaltModule', :join_table => 'hosts_salt_modules', :foreign_key => 'host_id'
|
8
|
+
belongs_to :salt_proxy, :class_name => 'SmartProxy'
|
9
|
+
belongs_to :salt_environment, :class_name => 'ForemanSalt::SaltEnvironment'
|
10
10
|
alias_method_chain :params, :salt_proxy
|
11
11
|
alias_method_chain :set_hostgroup_defaults, :salt_proxy
|
12
12
|
alias_method_chain :smart_proxy_ids, :salt_proxy
|
@@ -14,12 +14,12 @@ module ForemanSalt
|
|
14
14
|
|
15
15
|
def handle_salt
|
16
16
|
return true unless salt?
|
17
|
-
|
17
|
+
set_salt_autosign
|
18
18
|
end
|
19
19
|
|
20
20
|
def params_with_salt_proxy
|
21
21
|
params = params_without_salt_proxy
|
22
|
-
params[
|
22
|
+
params['salt_master'] = salt_master unless salt_master.blank?
|
23
23
|
params
|
24
24
|
end
|
25
25
|
|
@@ -40,12 +40,12 @@ module ForemanSalt
|
|
40
40
|
def saltrun!
|
41
41
|
unless salt_proxy.present?
|
42
42
|
errors.add(:base, _("No Salt master defined - can't continue"))
|
43
|
-
logger.warn
|
43
|
+
logger.warn 'Unable to execute salt run, no salt proxies defined'
|
44
44
|
return false
|
45
45
|
end
|
46
46
|
ProxyAPI::Salt.new({:url => salt_proxy.url}).highstate name
|
47
47
|
rescue => e
|
48
|
-
errors.add(:base, _(
|
48
|
+
errors.add(:base, _('Failed to execute state.highstate: %s') % e)
|
49
49
|
false
|
50
50
|
end
|
51
51
|
|
@@ -4,9 +4,9 @@ module ForemanSalt
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
included do
|
7
|
-
has_and_belongs_to_many :salt_modules, :class_name =>
|
8
|
-
belongs_to :salt_proxy, :class_name =>
|
9
|
-
belongs_to :salt_environment, :class_name =>
|
7
|
+
has_and_belongs_to_many :salt_modules, :class_name => 'ForemanSalt::SaltModule'
|
8
|
+
belongs_to :salt_proxy, :class_name => 'SmartProxy'
|
9
|
+
belongs_to :salt_environment, :class_name => 'ForemanSalt::SaltEnvironment'
|
10
10
|
end
|
11
11
|
|
12
12
|
def salt_modules
|
@@ -38,7 +38,7 @@ module ForemanSalt
|
|
38
38
|
|
39
39
|
def inherited_salt_proxy_id
|
40
40
|
if ancestry.present?
|
41
|
-
read_attribute(:salt_proxy_id) || self.class.sort_by_ancestry(ancestors.where(
|
41
|
+
read_attribute(:salt_proxy_id) || self.class.sort_by_ancestry(ancestors.where('salt_proxy_id is not NULL')).last.try(:salt_proxy_id)
|
42
42
|
else
|
43
43
|
self.salt_proxy_id
|
44
44
|
end
|
@@ -51,7 +51,7 @@ module ForemanSalt
|
|
51
51
|
|
52
52
|
def inherited_salt_environment_id
|
53
53
|
if ancestry.present?
|
54
|
-
read_attribute(:salt_environment_id) || self.class.sort_by_ancestry(ancestors.where(
|
54
|
+
read_attribute(:salt_environment_id) || self.class.sort_by_ancestry(ancestors.where('salt_environment_id is not NULL')).last.try(:salt_environment_id)
|
55
55
|
else
|
56
56
|
self.salt_environment_id
|
57
57
|
end
|
@@ -20,41 +20,41 @@ module ForemanSalt
|
|
20
20
|
|
21
21
|
def queue_salt_autosign
|
22
22
|
return unless salt? && errors.empty?
|
23
|
-
new_record? ?
|
23
|
+
new_record? ? queue_set_salt_autosign : queue_update_salt_autosign
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def queue_set_salt_autosign
|
27
27
|
# do nothing - we'll set autosign at the last second: when a host requests a provision URL
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def queue_update_salt_autosign
|
31
31
|
# Host has been built --> remove auto sign
|
32
32
|
if old.build? and !build?
|
33
|
-
queue.create(:name => _(
|
33
|
+
queue.create(:name => _('Remove autosign entry for %s') % self, :priority => 50, :action => [self, :del_salt_autosign])
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
def queue_salt_destroy
|
38
38
|
return unless salt? && errors.empty?
|
39
|
-
queue.create(:name => _(
|
40
|
-
queue.create(:name => _(
|
39
|
+
queue.create(:name => _('Remove autosign entry for %s') % self, :priority => 50, :action => [self, :del_salt_autosign])
|
40
|
+
queue.create(:name => _('Delete existing salt key for %s') % self, :priority => 50, :action => [self, :del_salt_key])
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
43
|
+
def queue_del_salt_autosign
|
44
44
|
return unless salt? && errors.empty?
|
45
|
-
queue.create(:name => _(
|
45
|
+
queue.create(:name => _('Remove autosign entry for %s') % self, :priority => 50, :action => [self, :del_salt_autosign])
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
48
|
+
def set_salt_autosign
|
49
49
|
logger.info "Create autosign entry for #{name}"
|
50
50
|
initialize_salt
|
51
|
-
|
51
|
+
del_salt_key # if there's already an existing key
|
52
52
|
@salt_api.autosign_create name
|
53
53
|
rescue => e
|
54
54
|
failure _("Failed to create %{name}'s Salt autosign entry: %{e}") % { :name => name, :e => e }
|
55
55
|
end
|
56
56
|
|
57
|
-
def
|
57
|
+
def del_salt_autosign
|
58
58
|
logger.info "Remove autosign entry for #{name}"
|
59
59
|
initialize_salt
|
60
60
|
@salt_api.autosign_remove name
|
@@ -62,7 +62,7 @@ module ForemanSalt
|
|
62
62
|
failure _("Failed to remove %{name}'s Salt autosign entry: %{e}") % { :name => name, :e => e }
|
63
63
|
end
|
64
64
|
|
65
|
-
def
|
65
|
+
def del_salt_key
|
66
66
|
logger.info "Delete salt key for #{name}"
|
67
67
|
initialize_salt
|
68
68
|
@salt_api.key_delete name
|
@@ -5,13 +5,13 @@ module ForemanSalt
|
|
5
5
|
|
6
6
|
before_destroy EnsureNotUsedBy.new(:hosts, :hostgroups)
|
7
7
|
|
8
|
-
has_many :hosts, :class_name =>
|
9
|
-
has_many :hostgroups, :class_name =>
|
8
|
+
has_many :hosts, :class_name => '::Host::Managed'
|
9
|
+
has_many :hostgroups, :class_name => '::Hostgroup'
|
10
10
|
|
11
|
-
validates :name, :uniqueness => true, :presence => true, :format => { :with => /\A[\w\d\.]+\z/, :message => N_(
|
11
|
+
validates :name, :uniqueness => true, :presence => true, :format => { :with => /\A[\w\d\.]+\z/, :message => N_('is alphanumeric and cannot contain spaces') }
|
12
12
|
|
13
13
|
default_scope lambda {
|
14
|
-
order(
|
14
|
+
order('salt_environments.name')
|
15
15
|
}
|
16
16
|
|
17
17
|
scoped_search :on => :name, :complete_value => true
|
@@ -4,15 +4,15 @@ module ForemanSalt
|
|
4
4
|
include Authorizable
|
5
5
|
|
6
6
|
before_destroy EnsureNotUsedBy.new(:hosts, :hostgroups)
|
7
|
-
has_and_belongs_to_many :hosts, :class_name =>
|
7
|
+
has_and_belongs_to_many :hosts, :class_name => '::Host::Managed', :join_table => 'hosts_salt_modules',
|
8
8
|
:association_foreign_key => 'host_id'
|
9
9
|
|
10
|
-
has_and_belongs_to_many :hostgroups, :class_name =>
|
10
|
+
has_and_belongs_to_many :hostgroups, :class_name => '::Hostgroup', :join_table => 'hostgroups_salt_modules'
|
11
11
|
|
12
|
-
validates :name, :uniqueness => true, :presence => true, :format => { :with => /\A(?:[\w\d]+\.{0,1})+[^\.]\z/, :message => N_(
|
12
|
+
validates :name, :uniqueness => true, :presence => true, :format => { :with => /\A(?:[\w\d]+\.{0,1})+[^\.]\z/, :message => N_('must be alphanumeric, can contain dots and must not contain spaces') }
|
13
13
|
|
14
14
|
default_scope lambda {
|
15
|
-
order(
|
15
|
+
order('salt_modules.name')
|
16
16
|
}
|
17
17
|
|
18
18
|
scoped_search :on => :name, :complete_value => true
|
@@ -12,9 +12,9 @@
|
|
12
12
|
<div class="col-md-8">
|
13
13
|
<h3>Salt States</h3>
|
14
14
|
<% if @inherited_salt_modules.blank? -%>
|
15
|
-
<%= multiple_selects f, :salt_module, ::ForemanSalt::SaltModule, @salt_modules.try(:map, &:id), :label =>
|
15
|
+
<%= multiple_selects f, :salt_module, ::ForemanSalt::SaltModule, @salt_modules.try(:map, &:id), :label => '' %>
|
16
16
|
<% else -%>
|
17
|
-
<%= multiple_selects f, :salt_module, ::ForemanSalt::SaltModule.where('id NOT IN (?)', @inherited_salt_modules.map(&:id)), @salt_modules.try(:map, &:id), :label =>
|
17
|
+
<%= multiple_selects f, :salt_module, ::ForemanSalt::SaltModule.where('id NOT IN (?)', @inherited_salt_modules.map(&:id)), @salt_modules.try(:map, &:id), :label => '' %>
|
18
18
|
<% end -%>
|
19
19
|
</div>
|
20
20
|
</div>
|
@@ -2,12 +2,12 @@ selector_text = "<%= select_f f, :salt_environment_id, ForemanSalt::SaltEnvironm
|
|
2
2
|
{ :include_blank => blank_or_inherit_f(f, :salt_environment) },
|
3
3
|
{ :label => _('Salt Environment') } %>"
|
4
4
|
|
5
|
-
Deface::Override.new(:virtual_path =>
|
6
|
-
:name =>
|
5
|
+
Deface::Override.new(:virtual_path => 'hosts/_form',
|
6
|
+
:name => 'add_salt_environment_to_host',
|
7
7
|
:insert_bottom => 'div#primary',
|
8
8
|
:text => selector_text)
|
9
9
|
|
10
|
-
Deface::Override.new(:virtual_path =>
|
11
|
-
:name =>
|
10
|
+
Deface::Override.new(:virtual_path => 'hostgroups/_form',
|
11
|
+
:name => 'add_salt_environment_to_hostgroup',
|
12
12
|
:insert_bottom => 'div#primary',
|
13
13
|
:text => selector_text)
|
@@ -1,19 +1,19 @@
|
|
1
|
-
Deface::Override.new(:virtual_path =>
|
2
|
-
:name =>
|
1
|
+
Deface::Override.new(:virtual_path => 'hosts/_form',
|
2
|
+
:name => 'add_salt_modules_tab_to_host',
|
3
3
|
:insert_after => 'li.active',
|
4
4
|
:partial => '../overrides/foreman/salt_modules/host_tab')
|
5
5
|
|
6
|
-
Deface::Override.new(:virtual_path =>
|
7
|
-
:name =>
|
6
|
+
Deface::Override.new(:virtual_path => 'hosts/_form',
|
7
|
+
:name => 'add_salt_modules_tab_pane_to_host',
|
8
8
|
:insert_before => 'div#puppet_klasses',
|
9
9
|
:partial => '../overrides/foreman/salt_modules/host_tab_pane')
|
10
|
-
|
11
|
-
Deface::Override.new(:virtual_path =>
|
12
|
-
:name =>
|
10
|
+
|
11
|
+
Deface::Override.new(:virtual_path => 'hostgroups/_form',
|
12
|
+
:name => 'add_salt_modules_tab_to_hg',
|
13
13
|
:insert_after => 'li.active',
|
14
14
|
:partial => '../overrides/foreman/salt_modules/host_tab')
|
15
15
|
|
16
|
-
Deface::Override.new(:virtual_path =>
|
17
|
-
:name =>
|
16
|
+
Deface::Override.new(:virtual_path => 'hostgroups/_form',
|
17
|
+
:name => 'add_salt_modules_tab_pane_to_hg',
|
18
18
|
:insert_before => 'div#puppet_klasses',
|
19
19
|
:partial => '../overrides/foreman/salt_modules/host_tab_pane')
|
@@ -2,12 +2,12 @@ selector_text = "<%= select_f f, :salt_proxy_id, SmartProxy.unscoped.with_featur
|
|
2
2
|
{ :include_blank => blank_or_inherit_f(f, :salt_proxy) },
|
3
3
|
{ :label => _('Salt Master') } %>"
|
4
4
|
|
5
|
-
Deface::Override.new(:virtual_path =>
|
6
|
-
:name =>
|
5
|
+
Deface::Override.new(:virtual_path => 'hosts/_form',
|
6
|
+
:name => 'add_salt_proxy_to_host',
|
7
7
|
:insert_bottom => 'div#primary',
|
8
8
|
:text => selector_text)
|
9
9
|
|
10
|
-
Deface::Override.new(:virtual_path =>
|
11
|
-
:name =>
|
10
|
+
Deface::Override.new(:virtual_path => 'hostgroups/_form',
|
11
|
+
:name => 'add_salt_proxy_to_hostgroup',
|
12
12
|
:insert_bottom => 'div#primary',
|
13
13
|
:text => selector_text)
|
@@ -72,8 +72,8 @@ module ForemanSalt
|
|
72
72
|
name_parts = fact_name.split(FactName::SEPARATOR)
|
73
73
|
|
74
74
|
name_parts.inject([]) do |memo, name|
|
75
|
-
memo
|
76
|
-
key
|
75
|
+
memo += [name]
|
76
|
+
key = memo.join(FactName::SEPARATOR)
|
77
77
|
new_facts[key] ||= name_parts == memo ? value : nil
|
78
78
|
memo
|
79
79
|
end
|
@@ -85,7 +85,7 @@ module ForemanSalt
|
|
85
85
|
hash.sort_by { |k, v| k.to_s }
|
86
86
|
end
|
87
87
|
|
88
|
-
def sparse(hash, options={})
|
88
|
+
def sparse(hash, options = {})
|
89
89
|
hash.map do |k, v|
|
90
90
|
prefix = (options.fetch(:prefix, [])+[k])
|
91
91
|
next Sparsify::sparse(v, options.merge(:prefix => prefix)) if v.is_a? Hash
|
@@ -93,7 +93,7 @@ module ForemanSalt
|
|
93
93
|
end.reduce(:merge) || Hash.new
|
94
94
|
end
|
95
95
|
|
96
|
-
def unsparse(hash, options={})
|
96
|
+
def unsparse(hash, options = {})
|
97
97
|
ret = Hash.new
|
98
98
|
sparse(hash).each do |k, v|
|
99
99
|
current = ret
|
@@ -101,7 +101,7 @@ module ForemanSalt
|
|
101
101
|
current = (current[key.shift] ||= Hash.new) until (key.size<=1)
|
102
102
|
current[key.first] = v
|
103
103
|
end
|
104
|
-
|
104
|
+
ret
|
105
105
|
end
|
106
106
|
end
|
107
107
|
end
|