foreman_salt 2.1.0 → 3.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 +5 -13
- data/README.md +1 -1
- data/app/controllers/foreman_salt/api/v2/salt_environments_controller.rb +1 -0
- data/app/controllers/foreman_salt/api/v2/salt_minions_controller.rb +1 -0
- data/app/controllers/foreman_salt/api/v2/salt_states_controller.rb +6 -4
- data/app/controllers/foreman_salt/salt_modules_controller.rb +0 -1
- data/app/controllers/foreman_salt/state_importer.rb +5 -1
- data/app/helpers/concerns/foreman_salt/hosts_helper_extensions.rb +13 -3
- data/app/models/foreman_salt/concerns/host_managed_extensions.rb +1 -0
- data/app/models/foreman_salt/concerns/hostgroup_extensions.rb +1 -0
- data/app/views/foreman_salt/api/v2/salt_environments/show.json.rabl +5 -1
- data/app/views/foreman_salt/api/v2/salt_states/base.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_states/show.json.rabl +10 -1
- data/lib/foreman_salt/engine.rb +2 -2
- data/lib/foreman_salt/version.rb +1 -1
- data/test/functional/api/v2/salt_states_controller_test.rb +53 -0
- data/test/integration/salt_module_test.rb +30 -1
- metadata +25 -25
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZWYxNGRiOWY2MmYxMjExNTJiYWM4N2ZlOTE3ZjBiZGJiNWIzOGExZg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a9a26aba67e387ba355bf4b358969f155e0e7550
|
4
|
+
data.tar.gz: c77ad3cab0e6f604f8e60964894d3345b01384ed
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ZWY4MGNiNjlmNWNlNGMxNWVmYjU0YmQ1YjkyODhjYTY2YzM2ODIxYjNkYjc2
|
11
|
-
MGQwNzI0NTFjNGUzZDQxOWU2YWQzZWQ1ZDgwZjJkNmYxN2MyMWQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NDA2MDM3Y2ZiMzE5NzUwOWMwY2QyYmE4YzFmY2YzNDIyYmE2NzM4YjM0ODc3
|
14
|
-
NGE0MDdjMGJjYzA2MWIzOTg3NzRhNGUyMTdlZWVmN2M1ODAyYTAyZDY5YjM3
|
15
|
-
NGI2NGI2MjZmYzA5NGU2ZTQ4NTA4YzgxYmJlMjI5Y2I2ODBlMTM=
|
6
|
+
metadata.gz: 9db5120fde1dff0fffad5b1cf5dbec81cf780669887447f379ba6109d2fd886f45b120a79d219b7b2f327cdd9d35d424e4cb09e1ba427b4441e8ed5124809e03
|
7
|
+
data.tar.gz: b36d148373832511ea50bbf3379f0f096f9a2fdcad94b62422cf7cb06526ddecafba58aeb83e1faa4c7c9c362b7a089b0514b5ec9454656401d9bc4a399ee41c
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@ This plug-in adds support for Salt to Foreman.
|
|
4
4
|
|
5
5
|
## Documentation
|
6
6
|
|
7
|
-
|
7
|
+
See the [Foreman Salt manuals](http://theforeman.org/plugins/foreman_salt/) on the Foreman web site.
|
8
8
|
|
9
9
|
## Contributing
|
10
10
|
|
@@ -5,6 +5,7 @@ module ForemanSalt
|
|
5
5
|
before_filter :find_resource, :except => [:index, :create]
|
6
6
|
|
7
7
|
api :GET, '/salt_environments', N_('List all Salt environments')
|
8
|
+
param_group :search_and_pagination, ::Api::V2::BaseController
|
8
9
|
def index
|
9
10
|
@salt_environments = resource_scope_for_index
|
10
11
|
end
|
@@ -10,6 +10,7 @@ module ForemanSalt
|
|
10
10
|
|
11
11
|
api :GET, '/salt_states', N_('List all Salt states')
|
12
12
|
param :salt_environment_id, :identifier_dottable, :required => false, :desc => N_('Limit to a specific environment')
|
13
|
+
param_group :search_and_pagination, ::Api::V2::BaseController
|
13
14
|
def index
|
14
15
|
if @salt_environment
|
15
16
|
@salt_states = resource_scope_for_index.joins(:salt_environments).where('salt_module_environments.salt_environment_id' => @salt_environment)
|
@@ -46,18 +47,19 @@ module ForemanSalt
|
|
46
47
|
|
47
48
|
api :POST, '/salt_states/import/:smart_proxy_id', N_('Import states from a salt master')
|
48
49
|
param :smart_proxy_id, :identifier_dottable, :required => true, :desc => N_('Salt Smart Proxy ID')
|
49
|
-
param :
|
50
|
+
param :salt_environments, Array, :required => false, :desc => N_('Limit to a specific environments')
|
50
51
|
param :actions, Array, :required => false, :desc => N_('Limit to specific actions: i.e. add, remove')
|
51
52
|
param :dryrun, :bool, :required => false, :desc => N_('Dryrun only')
|
52
53
|
def import
|
53
|
-
states = fetch_states_from_proxy(@proxy, params[:
|
54
|
+
states = fetch_states_from_proxy(@proxy, params[:salt_environments])
|
55
|
+
|
54
56
|
unless params[:dryrun]
|
55
57
|
states[:changes].each do |environment, state|
|
56
|
-
if state[:add].
|
58
|
+
if state[:add].present? && (params[:actions].blank? || params[:actions].include?('add'))
|
57
59
|
add_to_environment(state[:add], environment)
|
58
60
|
end
|
59
61
|
|
60
|
-
if state[:remove].
|
62
|
+
if state[:remove].present? && (params[:actions].blank? || params[:actions].include?('remove'))
|
61
63
|
remove_from_environment(state[:remove], environment)
|
62
64
|
end
|
63
65
|
end
|
@@ -74,7 +74,6 @@ module ForemanSalt
|
|
74
74
|
else
|
75
75
|
params[:changed].each do |environment, states|
|
76
76
|
next unless states[:add] || states[:remove]
|
77
|
-
environment = SaltEnvironment.find_or_create_by_name(environment)
|
78
77
|
|
79
78
|
add_to_environment(JSON.load(states[:add]), environment) if states[:add]
|
80
79
|
remove_from_environment(JSON.load(states[:remove]), environment) if states[:remove]
|
@@ -46,13 +46,17 @@ module ForemanSalt
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def add_to_environment(states, environment)
|
49
|
+
environment = SaltEnvironment.find_or_create_by_name(environment)
|
50
|
+
|
49
51
|
states.each do |state_name|
|
50
52
|
state = SaltModule.find_or_create_by_name(state_name)
|
51
|
-
state.salt_environments <<
|
53
|
+
state.salt_environments << environment unless state.salt_environments.include? environment
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
57
|
def remove_from_environment(states, environment)
|
58
|
+
return unless (environment = SaltEnvironment.find(environment))
|
59
|
+
|
56
60
|
states.each do |state_name|
|
57
61
|
state = SaltModule.find(state_name)
|
58
62
|
state.salt_environments.delete(environment) if state
|
@@ -3,8 +3,9 @@ module ForemanSalt
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
alias_method_chain :host_title_actions, :
|
6
|
+
alias_method_chain :host_title_actions, :salt
|
7
7
|
alias_method_chain :show_appropriate_host_buttons, :salt
|
8
|
+
alias_method_chain :overview_fields, :salt
|
8
9
|
end
|
9
10
|
|
10
11
|
def show_appropriate_host_buttons_with_salt(host)
|
@@ -13,7 +14,7 @@ module ForemanSalt
|
|
13
14
|
:title => _('Salt external nodes YAML dump'), :class => 'btn btn-default') unless host.salt_master.blank?)]).flatten.compact
|
14
15
|
end
|
15
16
|
|
16
|
-
def
|
17
|
+
def host_title_actions_with_salt(host)
|
17
18
|
title_actions(
|
18
19
|
button_group(
|
19
20
|
if host.try(:salt_proxy)
|
@@ -22,7 +23,16 @@ module ForemanSalt
|
|
22
23
|
end
|
23
24
|
)
|
24
25
|
)
|
25
|
-
|
26
|
+
host_title_actions_without_salt(host)
|
27
|
+
end
|
28
|
+
|
29
|
+
def overview_fields_with_salt(host)
|
30
|
+
fields = overview_fields_without_salt(host)
|
31
|
+
|
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
|
+
|
35
|
+
fields
|
26
36
|
end
|
27
37
|
end
|
28
38
|
end
|
@@ -16,6 +16,7 @@ module ForemanSalt
|
|
16
16
|
|
17
17
|
scoped_search :in => :salt_modules, :on => :name, :complete_value => true, :rename => :salt_state
|
18
18
|
scoped_search :in => :salt_environment, :on => :name, :complete_value => true, :rename => :salt_environment
|
19
|
+
scoped_search :in => :salt_proxy, :on => :name, :complete_value => true, :rename => :saltmaster
|
19
20
|
|
20
21
|
validate :salt_modules_in_host_environment
|
21
22
|
end
|
@@ -12,6 +12,7 @@ module ForemanSalt
|
|
12
12
|
|
13
13
|
scoped_search :in => :salt_modules, :on => :name, :complete_value => true, :rename => :salt_state
|
14
14
|
scoped_search :in => :salt_environment, :on => :name, :complete_value => true, :rename => :salt_environment
|
15
|
+
scoped_search :in => :salt_proxy, :on => :name, :complete_value => true, :rename => :saltmaster
|
15
16
|
end
|
16
17
|
|
17
18
|
def all_salt_modules
|
@@ -1,3 +1,12 @@
|
|
1
1
|
object @salt_state
|
2
2
|
|
3
|
-
extends
|
3
|
+
extends 'foreman_salt/api/v2/salt_states/base'
|
4
|
+
|
5
|
+
child :hostgroups do
|
6
|
+
extends 'api/v2/hostgroups/base'
|
7
|
+
end
|
8
|
+
|
9
|
+
child :salt_environments do
|
10
|
+
extends 'foreman_salt/api/v2/salt_environments/base'
|
11
|
+
end
|
12
|
+
|
data/lib/foreman_salt/engine.rb
CHANGED
@@ -37,7 +37,7 @@ module ForemanSalt
|
|
37
37
|
|
38
38
|
initializer 'foreman_salt.register_plugin', :after => :finisher_hook do |_app|
|
39
39
|
Foreman::Plugin.register :foreman_salt do
|
40
|
-
requires_foreman '>= 1.
|
40
|
+
requires_foreman '>= 1.9'
|
41
41
|
|
42
42
|
apipie_documented_controllers ["#{ForemanSalt::Engine.root}/app/controllers/foreman_salt/api/v2/*.rb"]
|
43
43
|
|
@@ -167,7 +167,7 @@ module ForemanSalt
|
|
167
167
|
config.to_prepare do
|
168
168
|
begin
|
169
169
|
::FactImporter.register_fact_importer(:foreman_salt, ForemanSalt::FactImporter)
|
170
|
-
::FactParser.
|
170
|
+
::FactParser.register_fact_parser(:foreman_salt, ForemanSalt::FactParser)
|
171
171
|
|
172
172
|
# Helper Extensions
|
173
173
|
::HostsHelper.send :include, ForemanSalt::HostsHelperExtensions
|
data/lib/foreman_salt/version.rb
CHANGED
@@ -29,5 +29,58 @@ module ForemanSalt
|
|
29
29
|
end
|
30
30
|
assert_response :success
|
31
31
|
end
|
32
|
+
|
33
|
+
context 'importing' do
|
34
|
+
setup do
|
35
|
+
@proxy = FactoryGirl.create :smart_proxy, :with_salt_feature
|
36
|
+
@states = {'env1' => %w(state1 state2 state3),
|
37
|
+
'env2' => %w(state1 state2)}
|
38
|
+
|
39
|
+
::ProxyAPI::Salt.any_instance.stubs(:states_list).returns(@states)
|
40
|
+
end
|
41
|
+
|
42
|
+
test 'should import' do
|
43
|
+
post :import, :smart_proxy_id => @proxy.id
|
44
|
+
|
45
|
+
assert_response :success
|
46
|
+
|
47
|
+
@states.each do |env, states|
|
48
|
+
environment = ::ForemanSalt::SaltEnvironment.find(env)
|
49
|
+
assert_blank environment.salt_modules.map(&:name) - states
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
test 'should import only from a given environment' do
|
54
|
+
post :import, :smart_proxy_id => @proxy.id, :salt_environments => ['env2']
|
55
|
+
assert_response :success
|
56
|
+
refute ::ForemanSalt::SaltEnvironment.where(:name => 'env1').first
|
57
|
+
assert ::ForemanSalt::SaltEnvironment.where(:name => 'env2').first
|
58
|
+
end
|
59
|
+
|
60
|
+
test 'should limit actions to add' do
|
61
|
+
env = FactoryGirl.create :salt_environment
|
62
|
+
state = FactoryGirl.create :salt_module, :salt_environments => [env]
|
63
|
+
|
64
|
+
post :import, :smart_proxy_id => @proxy.id, :actions => ['add']
|
65
|
+
assert_response :success
|
66
|
+
assert ::ForemanSalt::SaltModule.where(:id => state).first
|
67
|
+
assert ::ForemanSalt::SaltModule.where(:name => 'state1').first
|
68
|
+
end
|
69
|
+
|
70
|
+
test 'should limit actions to remove' do
|
71
|
+
state = FactoryGirl.create :salt_module
|
72
|
+
post :import, :smart_proxy_id => @proxy.id, :actions => ['remove']
|
73
|
+
assert_response :success
|
74
|
+
refute ::ForemanSalt::SaltModule.where(:id => state).first
|
75
|
+
refute ::ForemanSalt::SaltModule.where(:name => 'state1').first
|
76
|
+
end
|
77
|
+
|
78
|
+
test 'dryrun should do nothing' do
|
79
|
+
post :import, :smart_proxy_id => @proxy.id, :dryrun => true
|
80
|
+
assert_response :success
|
81
|
+
refute ::ForemanSalt::SaltModule.all.any?
|
82
|
+
refute ::ForemanSalt::SaltEnvironment.all.any?
|
83
|
+
end
|
84
|
+
end
|
32
85
|
end
|
33
86
|
end
|
@@ -2,8 +2,17 @@ require 'test_plugin_helper'
|
|
2
2
|
|
3
3
|
module ForemanSalt
|
4
4
|
class SaltModuleTest < ActionDispatch::IntegrationTest
|
5
|
+
setup do
|
6
|
+
User.current = User.anonymous_admin
|
7
|
+
|
8
|
+
states = %w(state1 state2 state3 state4)
|
9
|
+
state_list = {'env1' => states, 'env2' => states}
|
10
|
+
|
11
|
+
::ProxyAPI::Salt.any_instance.stubs(:states_list).returns(state_list)
|
12
|
+
end
|
13
|
+
|
5
14
|
test 'index page' do
|
6
|
-
FactoryGirl.create_list :salt_module,
|
15
|
+
FactoryGirl.create_list :salt_module, 5
|
7
16
|
assert_index_page(salt_modules_path, 'Salt State', 'New Salt State')
|
8
17
|
end
|
9
18
|
|
@@ -22,5 +31,25 @@ module ForemanSalt
|
|
22
31
|
assert_submit_button(salt_modules_path)
|
23
32
|
assert page.has_link? 'some_other_name'
|
24
33
|
end
|
34
|
+
|
35
|
+
test 'import states' do
|
36
|
+
proxy = FactoryGirl.create :smart_proxy, :with_salt_feature
|
37
|
+
state = FactoryGirl.create :salt_module, :salt_environments => [FactoryGirl.create(:salt_environment)]
|
38
|
+
|
39
|
+
visit salt_modules_path
|
40
|
+
click_link "Import from #{proxy.name}"
|
41
|
+
|
42
|
+
assert page.has_selector?('td', :text => 'env1'), 'Could not find env1 on importer page'
|
43
|
+
assert page.has_selector?('td', :text => 'Add'), 'Could not find env1 on importer page'
|
44
|
+
assert page.has_selector?('td', :text => 'state1, state2, state3, and state4'), 'Could not find states on importer page'
|
45
|
+
|
46
|
+
assert page.has_selector?('td', :text => 'Remove'), 'Could not find remove on importer page'
|
47
|
+
assert page.has_selector?('td', :text => state.name), 'Could not find state to remove'
|
48
|
+
|
49
|
+
all('input.state_check').each { |checkbox| check(checkbox[:id]) }
|
50
|
+
|
51
|
+
click_button 'Update'
|
52
|
+
assert page.has_link? 'state1'
|
53
|
+
end
|
25
54
|
end
|
26
55
|
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_salt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.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-07-06 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: '1.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: '1.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
|
-
version: 0.
|
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
|
-
version: 0.
|
40
|
+
version: 0.7.1
|
41
41
|
description: Foreman Plug-in for Salt
|
42
42
|
email:
|
43
43
|
- stephen@redhat.com
|
@@ -170,37 +170,37 @@ require_paths:
|
|
170
170
|
- lib
|
171
171
|
required_ruby_version: !ruby/object:Gem::Requirement
|
172
172
|
requirements:
|
173
|
-
- -
|
173
|
+
- - ">="
|
174
174
|
- !ruby/object:Gem::Version
|
175
175
|
version: '0'
|
176
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
requirements: []
|
182
182
|
rubyforge_project:
|
183
|
-
rubygems_version: 2.
|
183
|
+
rubygems_version: 2.4.5
|
184
184
|
signing_key:
|
185
185
|
specification_version: 4
|
186
186
|
summary: Foreman Plug-in for Salt
|
187
187
|
test_files:
|
188
|
+
- test/integration/salt_module_test.rb
|
189
|
+
- test/integration/salt_environment_test.rb
|
190
|
+
- test/integration/salt_autosign_test.rb
|
191
|
+
- test/integration/salt_keys_test.rb
|
192
|
+
- test/test_plugin_helper.rb
|
193
|
+
- test/unit/grains_importer_test.rb
|
194
|
+
- test/unit/grains_centos.json
|
195
|
+
- test/unit/host_extensions_test.rb
|
196
|
+
- test/unit/report_importer_test.rb
|
197
|
+
- test/unit/hostgroup_extensions_test.rb
|
198
|
+
- test/unit/salt_modules_test.rb
|
199
|
+
- test/unit/highstate.json
|
200
|
+
- test/unit/salt_keys_test.rb
|
188
201
|
- test/functional/minions_controller_test.rb
|
189
|
-
- test/functional/api/v2/salt_states_controller_test.rb
|
190
202
|
- test/functional/api/v2/salt_autosign_controller_test.rb
|
203
|
+
- test/functional/api/v2/salt_states_controller_test.rb
|
191
204
|
- test/functional/api/v2/salt_keys_controller_test.rb
|
192
205
|
- test/functional/api/v2/salt_environments_controller_test.rb
|
193
206
|
- test/factories/foreman_salt_factories.rb
|
194
|
-
- test/unit/salt_keys_test.rb
|
195
|
-
- test/unit/host_extensions_test.rb
|
196
|
-
- test/unit/grains_centos.json
|
197
|
-
- test/unit/grains_importer_test.rb
|
198
|
-
- test/unit/hostgroup_extensions_test.rb
|
199
|
-
- test/unit/report_importer_test.rb
|
200
|
-
- test/unit/salt_modules_test.rb
|
201
|
-
- test/unit/highstate.json
|
202
|
-
- test/test_plugin_helper.rb
|
203
|
-
- test/integration/salt_keys_test.rb
|
204
|
-
- test/integration/salt_environment_test.rb
|
205
|
-
- test/integration/salt_autosign_test.rb
|
206
|
-
- test/integration/salt_module_test.rb
|