foreman_salt 14.0.0 → 14.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -2
- data/Rakefile +2 -2
- data/app/controllers/foreman_salt/api/v2/jobs_controller.rb +9 -9
- data/app/controllers/foreman_salt/api/v2/salt_autosign_controller.rb +15 -14
- data/app/controllers/foreman_salt/api/v2/salt_environments_controller.rb +6 -6
- data/app/controllers/foreman_salt/api/v2/salt_hostgroups_controller.rb +42 -0
- data/app/controllers/foreman_salt/api/v2/salt_keys_controller.rb +14 -14
- data/app/controllers/foreman_salt/api/v2/salt_minions_controller.rb +8 -8
- data/app/controllers/foreman_salt/api/v2/salt_states_controller.rb +24 -26
- data/app/controllers/foreman_salt/api/v2/salt_variables_controller.rb +22 -21
- data/app/controllers/foreman_salt/concerns/hostgroups_controller_extensions.rb +3 -3
- data/app/controllers/foreman_salt/concerns/hosts_controller_extensions.rb +4 -4
- data/app/controllers/foreman_salt/concerns/salt_environment_parameters.rb +1 -1
- data/app/controllers/foreman_salt/concerns/salt_hostgroup_parameters.rb +25 -0
- data/app/controllers/foreman_salt/concerns/salt_module_parameters.rb +1 -1
- data/app/controllers/foreman_salt/concerns/salt_override_value.rb +4 -4
- data/app/controllers/foreman_salt/concerns/salt_variable_parameters.rb +5 -5
- data/app/controllers/foreman_salt/minions_controller.rb +9 -9
- data/app/controllers/foreman_salt/salt_autosign_controller.rb +8 -8
- data/app/controllers/foreman_salt/salt_environments_controller.rb +4 -4
- data/app/controllers/foreman_salt/salt_keys_controller.rb +11 -11
- data/app/controllers/foreman_salt/salt_modules_controller.rb +10 -11
- data/app/controllers/foreman_salt/salt_variables_controller.rb +5 -4
- data/app/controllers/foreman_salt/state_importer.rb +12 -13
- data/app/helpers/concerns/foreman_salt/hosts_helper_extensions.rb +16 -10
- data/app/helpers/concerns/foreman_salt/smart_proxies_helper_extensions.rb +2 -2
- data/app/helpers/foreman_salt/salt_keys_helper.rb +2 -1
- data/app/helpers/foreman_salt/salt_modules_helper.rb +11 -11
- data/app/helpers/foreman_salt/salt_reports_helper.rb +0 -1
- data/app/lib/actions/foreman_salt/report_import.rb +2 -2
- data/app/lib/proxy_api/salt.rb +17 -17
- data/app/models/foreman_salt/concerns/host_managed_extensions.rb +47 -46
- data/app/models/foreman_salt/concerns/hostgroup_extensions.rb +14 -11
- data/app/models/foreman_salt/host_salt_module.rb +1 -1
- data/app/models/foreman_salt/salt_environment.rb +8 -8
- data/app/models/foreman_salt/salt_module.rb +15 -13
- data/app/models/foreman_salt/salt_module_environment.rb +1 -1
- data/app/models/foreman_salt/salt_provider.rb +7 -4
- data/app/models/foreman_salt/salt_variable.rb +8 -8
- data/app/models/setting/salt.rb +12 -10
- data/app/overrides/salt_environment_host_selector.rb +4 -4
- data/app/overrides/salt_environment_hostgroup_selector.rb +4 -4
- data/app/overrides/salt_modules_selector.rb +16 -16
- data/app/overrides/salt_proxy_selector.rb +11 -9
- data/app/services/foreman_salt/report_importer.rb +26 -26
- data/app/services/foreman_salt/smart_proxies/salt_keys.rb +47 -45
- data/app/views/foreman_salt/api/v2/salt_autosign/create.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_environments/create.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_environments/show.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_hostgroups/base.json.rabl +7 -0
- data/app/views/foreman_salt/api/v2/salt_hostgroups/show.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_hostgroups/update.json.rabl +3 -0
- data/app/views/foreman_salt/api/v2/salt_keys/update.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_minions/show.json.rabl +3 -4
- data/app/views/foreman_salt/api/v2/salt_states/create.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_states/show.json.rabl +0 -1
- data/app/views/foreman_salt/api/v2/salt_variables/create.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_variables/destroy.json.rabl +1 -1
- data/app/views/foreman_salt/api/v2/salt_variables/show.json.rabl +8 -8
- data/config/api_routes.rb +31 -0
- data/config/routes.rb +16 -44
- data/db/migrate/20140817210214_create_salt_modules.rb +4 -4
- data/db/migrate/20140829210214_add_salt_modules_to_hostgroups.rb +1 -1
- data/db/migrate/20140920232200_create_salt_environments.rb +3 -3
- data/db/migrate/20150220122707_fix_incorrect_report_metrics.rb +6 -2
- data/db/migrate/20211108211312_add_missing_permissions.rb +9 -0
- data/db/seeds.d/75-salt_seeds.rb +1 -1
- data/db/seeds.d/76-job_templates.rb +3 -3
- data/lib/foreman_salt/engine.rb +24 -16
- data/lib/foreman_salt/extensions.rb +8 -8
- data/lib/foreman_salt/plugin.rb +120 -114
- data/lib/foreman_salt/version.rb +1 -1
- data/lib/foreman_salt.rb +1 -1
- data/lib/tasks/foreman_salt_tasks.rake +3 -5
- data/locale/action_names.rb +4 -4
- data/test/factories/foreman_salt_factories.rb +5 -5
- data/test/functional/api/v2/salt_autosign_controller_test.rb +26 -20
- data/test/functional/api/v2/salt_environments_controller_test.rb +29 -23
- data/test/functional/api/v2/salt_hostgroups_controller_test.rb +76 -0
- data/test/functional/api/v2/salt_keys_controller_test.rb +25 -19
- data/test/functional/api/v2/salt_states_controller_test.rb +72 -66
- data/test/functional/api/v2/salt_variables_controller_test.rb +4 -4
- data/test/functional/hosts_controller_test.rb +26 -26
- data/test/functional/minions_controller_test.rb +22 -22
- data/test/functional/salt_modules_controller_test.rb +3 -3
- data/test/functional/salt_variables_controller_test.rb +5 -5
- data/test/integration/hosts_js_test.rb +11 -11
- data/test/integration/salt_autosign_test.rb +5 -5
- data/test/integration/salt_environment_test.rb +2 -2
- data/test/integration/salt_keys_test.rb +7 -7
- data/test/integration/salt_module_test.rb +9 -9
- data/test/integration/salt_variable_test.rb +2 -2
- data/test/test_plugin_helper.rb +1 -1
- data/test/unit/grains_importer_test.rb +12 -12
- data/test/unit/host_extensions_test.rb +19 -19
- data/test/unit/hostgroup_extensions_test.rb +13 -13
- data/test/unit/report_importer_test.rb +9 -9
- data/test/unit/salt_keys_test.rb +2 -2
- data/test/unit/salt_modules_test.rb +2 -2
- data/test/unit/salt_variables_test.rb +10 -10
- metadata +22 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '083d09f673c4a240a307a4392a31ce92f1c17c7a11706f751caa13482059ebcb'
|
4
|
+
data.tar.gz: ffd19624c13fc45f5c68c280e0700c16d8ef0d60a9df88371e5b14f783d63212
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ed29a4e256bc28f857fc6c3597f6b25a1d828b44ee4e50f851dcf3928b21b9d2d6f13c93848e06ca630f55bf3f824ea33a71c2e641591ae28925e1f6b73aa26
|
7
|
+
data.tar.gz: ba3b5cefb64dd18a6c3817fd6abf8016ecbfa86111e52349ebd68676225a003093998265deea497f57c14000971c06c074224f55d646721384cabf2c22173740
|
data/README.md
CHANGED
@@ -21,7 +21,7 @@ This plug-in adds support for Salt to Foreman.
|
|
21
21
|
|
22
22
|
## Documentation
|
23
23
|
|
24
|
-
|
24
|
+
[Using Salt for Configuration Management](https://docs.theforeman.org/nightly/Managing_Hosts/index-foreman-el.html#using-salt-for-configuration-management_managing-hosts)
|
25
25
|
|
26
26
|
## Contributing
|
27
27
|
|
@@ -43,4 +43,3 @@ GNU General Public License for more details.
|
|
43
43
|
|
44
44
|
You should have received a copy of the GNU General Public License
|
45
45
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
46
|
-
|
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', __dir__)
|
24
24
|
load 'rails/tasks/engine.rake'
|
25
25
|
|
26
26
|
Bundler::GemHelper.install_tasks
|
@@ -34,4 +34,4 @@ Rake::TestTask.new(:test) do |t|
|
|
34
34
|
t.verbose = false
|
35
35
|
end
|
36
36
|
|
37
|
-
task :
|
37
|
+
task default: :test
|
@@ -5,21 +5,21 @@ module ForemanSalt
|
|
5
5
|
module V2
|
6
6
|
class JobsController < ::ForemanSalt::Api::V2::BaseController
|
7
7
|
include ::Foreman::Controller::SmartProxyAuth
|
8
|
-
add_smart_proxy_filters :upload, :
|
8
|
+
add_smart_proxy_filters :upload, features: 'Salt'
|
9
9
|
|
10
10
|
include ::Foreman::Controller::FilterParameters
|
11
11
|
filter_parameters :job
|
12
12
|
|
13
13
|
def_param_group :job do
|
14
|
-
param :job, Hash, :
|
15
|
-
param :job_id, Integer, :
|
16
|
-
param :function, String, :
|
17
|
-
param :result, Hash, :
|
14
|
+
param :job, Hash, required: true, action_aware: true do
|
15
|
+
param :job_id, Integer, required: true, desc: N_('JID')
|
16
|
+
param :function, String, required: true, desc: N_('Function')
|
17
|
+
param :result, Hash, required: true, desc: N_('Result')
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
api :POST, '/upload', N_('Upload a Job')
|
22
|
-
param_group :job, :
|
22
|
+
param_group :job, as: :upload
|
23
23
|
|
24
24
|
def upload
|
25
25
|
params[:job].permit!
|
@@ -27,12 +27,12 @@ module ForemanSalt
|
|
27
27
|
case params[:job][:function]
|
28
28
|
when 'state.highstate'
|
29
29
|
task = ForemanTasks.async_task(::Actions::ForemanSalt::ReportImport, params[:job], detected_proxy.try(:id))
|
30
|
-
render :
|
30
|
+
render json: { task_id: task.id }
|
31
31
|
else
|
32
|
-
render :
|
32
|
+
render json: { message: 'Unsupported function' }, status: :unprocessable_entity
|
33
33
|
end
|
34
34
|
rescue ::Foreman::Exception => e
|
35
|
-
render :
|
35
|
+
render json: { message: e.to_s }, status: :unprocessable_entity
|
36
36
|
end
|
37
37
|
|
38
38
|
def resource_class
|
@@ -15,37 +15,38 @@ module ForemanSalt
|
|
15
15
|
before_action :setup_proxy
|
16
16
|
|
17
17
|
api :GET, '/salt_autosign/:smart_proxy_id', N_('List all autosign records')
|
18
|
-
param :smart_proxy_id, :identifier_dottable, :
|
18
|
+
param :smart_proxy_id, :identifier_dottable, required: true
|
19
19
|
def index
|
20
20
|
@salt_autosigns = all_autosign
|
21
21
|
end
|
22
22
|
|
23
23
|
api :POST, '/salt_autosign/:smart_proxy_id', N_('Create an autosign record')
|
24
|
-
param :smart_proxy_id, :identifier_dottable, :
|
25
|
-
param :record, String, :
|
24
|
+
param :smart_proxy_id, :identifier_dottable, required: true
|
25
|
+
param :record, String, required: true, desc: N_('Autosign record')
|
26
26
|
def create
|
27
27
|
@api.autosign_create params[:record]
|
28
|
-
@salt_autosign = { :
|
28
|
+
@salt_autosign = { record: params[:record] }
|
29
29
|
end
|
30
30
|
|
31
31
|
api :DELETE, '/salt_autosign/:smart_proxy_id/:record', N_('Delete an autosign record')
|
32
|
-
param :smart_proxy_id, :identifier_dottable, :
|
33
|
-
param :record, String, :
|
32
|
+
param :smart_proxy_id, :identifier_dottable, required: true
|
33
|
+
param :record, String, required: true, desc: N_('Autosign record')
|
34
34
|
def destroy
|
35
35
|
@api.autosign_remove params[:record]
|
36
|
-
render :
|
36
|
+
render json: { root_node_name => _('Record deleted.') }
|
37
37
|
end
|
38
38
|
|
39
|
-
api :PUT, '/salt_autosign_auth',
|
40
|
-
|
39
|
+
api :PUT, '/salt_autosign_auth',
|
40
|
+
N_("Set the salt_status as \'successful authentication\' and remove the corresponding autosign key from the Smart Proxy")
|
41
|
+
param :name, String, required: true
|
41
42
|
def auth
|
42
43
|
Rails.logger.info("Removing Salt autosign key and update status for host #{@host}")
|
43
44
|
@api.autosign_remove_key(@host.salt_autosign_key) unless @host.salt_autosign_key.nil?
|
44
|
-
@host.update(:
|
45
|
-
render :
|
45
|
+
@host.update(salt_status: ForemanSalt::SaltStatus.minion_auth_success)
|
46
|
+
render json: { message: 'Removed autosign key and updated status succesfully' }, status: :no_content
|
46
47
|
rescue ::Foreman::Exception => e
|
47
48
|
Rails.logger.warn("Cannot delete autosign key of host (id => #{params[:name]}) state: #{e}")
|
48
|
-
render :
|
49
|
+
render json: { message: e.to_s }, status: :unprocessable_entity
|
49
50
|
end
|
50
51
|
|
51
52
|
def metadata_total
|
@@ -67,7 +68,7 @@ module ForemanSalt
|
|
67
68
|
private
|
68
69
|
|
69
70
|
def all_autosign
|
70
|
-
@_autosigns ||= @api.autosign_list.map { |record| OpenStruct.new(:
|
71
|
+
@_autosigns ||= @api.autosign_list.map { |record| OpenStruct.new(record: record) }
|
71
72
|
end
|
72
73
|
|
73
74
|
def find_host
|
@@ -86,7 +87,7 @@ module ForemanSalt
|
|
86
87
|
end
|
87
88
|
|
88
89
|
def setup_proxy
|
89
|
-
@api = ProxyAPI::Salt.new(:
|
90
|
+
@api = ProxyAPI::Salt.new(url: @proxy.url)
|
90
91
|
end
|
91
92
|
end
|
92
93
|
end
|
@@ -4,7 +4,7 @@ module ForemanSalt
|
|
4
4
|
class SaltEnvironmentsController < ::ForemanSalt::Api::V2::BaseController
|
5
5
|
include ::ForemanSalt::Concerns::SaltEnvironmentParameters
|
6
6
|
|
7
|
-
before_action :find_resource, :
|
7
|
+
before_action :find_resource, except: %i[index create]
|
8
8
|
|
9
9
|
api :GET, '/salt_environments', N_('List all Salt environments')
|
10
10
|
param_group :search_and_pagination, ::Api::V2::BaseController
|
@@ -13,25 +13,25 @@ module ForemanSalt
|
|
13
13
|
end
|
14
14
|
|
15
15
|
api :GET, '/salt_environments/:id/', N_('Show a Salt environment')
|
16
|
-
param :id, :identifier_dottable, :
|
16
|
+
param :id, :identifier_dottable, required: true
|
17
17
|
def show
|
18
18
|
end
|
19
19
|
|
20
20
|
def_param_group :environment do
|
21
|
-
param :environment, Hash, :
|
22
|
-
param :name, String, :
|
21
|
+
param :environment, Hash, required: true, action_aware: true do
|
22
|
+
param :name, String, required: true
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
api :POST, '/salt_environments', N_('Create a Salt environment')
|
27
|
-
param_group :environment, :
|
27
|
+
param_group :environment, as: :create
|
28
28
|
def create
|
29
29
|
@salt_environment = SaltEnvironment.new(salt_environment_params)
|
30
30
|
process_response @salt_environment.save
|
31
31
|
end
|
32
32
|
|
33
33
|
api :DELETE, '/salt_environments/:id/', N_('Destroy a Salt environment')
|
34
|
-
param :id, :identifier, :
|
34
|
+
param :id, :identifier, required: true
|
35
35
|
def destroy
|
36
36
|
process_response @salt_environment.destroy
|
37
37
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module ForemanSalt
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
class SaltHostgroupsController < ::ForemanSalt::Api::V2::BaseController
|
5
|
+
include ::ForemanSalt::Concerns::SaltHostgroupParameters
|
6
|
+
|
7
|
+
before_action :find_resource
|
8
|
+
|
9
|
+
api :GET, '/hostgroups/:id', N_('Show the Salt parameters of a host group')
|
10
|
+
param :id, :identifier_dottable, required: true, desc: N_('ID of host group')
|
11
|
+
def show
|
12
|
+
@salt_hostgroup
|
13
|
+
end
|
14
|
+
|
15
|
+
def_param_group :salt_attributes do
|
16
|
+
param :hostgroup, Hash, required: true, action_aware: true do
|
17
|
+
param :salt_environment_id, :number, desc: N_('Salt environment ID')
|
18
|
+
param :salt_proxy_id, :number, desc: N_('Salt master/smart proxy ID')
|
19
|
+
param :salt_state_ids, Array, desc: N_('Array of Salt state IDs')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
api :PUT, '/hostgroups/:id', N_('Update the Salt parameters of a host group')
|
24
|
+
param :id, :identifier_dottable, required: true, desc: N_('ID of host group')
|
25
|
+
param_group :salt_attributes
|
26
|
+
def update
|
27
|
+
params.extract!(:salt_hostgroup) if params[:salt_hostgroup]
|
28
|
+
params[:hostgroup][:salt_module_ids] = params[:hostgroup].delete(:salt_state_ids) if params[:hostgroup][:salt_state_ids]
|
29
|
+
process_response @salt_hostgroup.update(salt_hostgroup_params)
|
30
|
+
end
|
31
|
+
|
32
|
+
def controller_permission
|
33
|
+
'hostgroups'
|
34
|
+
end
|
35
|
+
|
36
|
+
def resource_class
|
37
|
+
Hostgroup
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -3,23 +3,23 @@ module ForemanSalt
|
|
3
3
|
module V2
|
4
4
|
class SaltKeysController < ::ForemanSalt::Api::V2::BaseController
|
5
5
|
before_action :find_proxy
|
6
|
-
before_action :find_key, :
|
6
|
+
before_action :find_key, only: %i[update destroy]
|
7
7
|
|
8
8
|
api :GET, '/salt_keys/:smart_proxy_id', N_('List all Salt keys')
|
9
|
-
param :smart_proxy_id, :identifier_dottable, :
|
9
|
+
param :smart_proxy_id, :identifier_dottable, required: true
|
10
10
|
def index
|
11
11
|
@salt_keys = all_keys
|
12
12
|
end
|
13
13
|
|
14
14
|
def_param_group :key do
|
15
|
-
param :smart_proxy_id, :identifier_dottable, :
|
16
|
-
param :name, String, :
|
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
17
|
end
|
18
18
|
|
19
19
|
api :PUT, '/salt_keys/:smart_proxy_id/:name', N_('Update a Salt Key')
|
20
|
-
param :name, :identifier_dottable, :
|
21
|
-
param :smart_proxy_id, :identifier_dottable, :
|
22
|
-
param :state, String, :
|
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
23
|
def update
|
24
24
|
case params[:salt_key][:state]
|
25
25
|
when 'accepted'
|
@@ -32,14 +32,14 @@ module ForemanSalt
|
|
32
32
|
end
|
33
33
|
|
34
34
|
api :DELETE, '/salt_keys/:smart_proxy_id/:name', N_('Delete a Salt Key')
|
35
|
-
param_group :key, :
|
35
|
+
param_group :key, as: :destroy
|
36
36
|
def destroy
|
37
|
-
if @key.delete
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
render :
|
37
|
+
message = if @key.delete
|
38
|
+
'Key successfully deleted.'
|
39
|
+
else
|
40
|
+
'Unable to delete key.'
|
41
|
+
end
|
42
|
+
render json: { root_node_name => message }
|
43
43
|
end
|
44
44
|
|
45
45
|
def metadata_total
|
@@ -2,7 +2,7 @@ module ForemanSalt
|
|
2
2
|
module Api
|
3
3
|
module V2
|
4
4
|
class SaltMinionsController < ::ForemanSalt::Api::V2::BaseController
|
5
|
-
before_action :find_resource, :
|
5
|
+
before_action :find_resource, except: [:index]
|
6
6
|
|
7
7
|
api :GET, '/salt_minions', N_('List all Salt Minions')
|
8
8
|
param_group :search_and_pagination, ::Api::V2::BaseController
|
@@ -11,25 +11,25 @@ module ForemanSalt
|
|
11
11
|
end
|
12
12
|
|
13
13
|
api :GET, '/salt_minions/:id', N_('Show a minion')
|
14
|
-
param :id, :identifier_dottable, :
|
14
|
+
param :id, :identifier_dottable, required: true
|
15
15
|
def show
|
16
16
|
@salt_states = @salt_minion.salt_modules
|
17
17
|
end
|
18
18
|
|
19
19
|
def_param_group :minion do
|
20
|
-
param :minion, Hash, :
|
21
|
-
param :salt_environment_id, :number, :
|
22
|
-
param :salt_proxy_id, :number, :
|
23
|
-
param :salt_state_ids, Array, :
|
20
|
+
param :minion, Hash, required: true, action_aware: true do
|
21
|
+
param :salt_environment_id, :number, desc: N_('Salt environment ID')
|
22
|
+
param :salt_proxy_id, :number, desc: N_('ID of Salt Proxy')
|
23
|
+
param :salt_state_ids, Array, desc: N_('Array of State ids')
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
api :PUT, '/salt_minions/:id/', N_('Update a minion')
|
28
|
-
param :id, :identifier_dottable, :
|
28
|
+
param :id, :identifier_dottable, required: true
|
29
29
|
param_group :minion
|
30
30
|
def update
|
31
31
|
params[:minion][:salt_module_ids] = params[:minion].delete(:salt_state_ids) if params[:minion]
|
32
|
-
process_response @salt_minion.
|
32
|
+
process_response @salt_minion.update(params.require(:minion).permit(:salt_proxy_id, :salt_environment_id, salt_module_ids: []))
|
33
33
|
end
|
34
34
|
|
35
35
|
def controller_permission
|
@@ -5,60 +5,59 @@ module ForemanSalt
|
|
5
5
|
include ::ForemanSalt::Concerns::SaltModuleParameters
|
6
6
|
include StateImporter
|
7
7
|
|
8
|
-
before_action :find_resource, :
|
9
|
-
before_action :find_proxy, :
|
10
|
-
before_action :find_environment, :
|
8
|
+
before_action :find_resource, except: %i[index create import]
|
9
|
+
before_action :find_proxy, only: :import
|
10
|
+
before_action :find_environment, only: :index
|
11
11
|
|
12
12
|
api :GET, '/salt_states', N_('List all Salt states')
|
13
|
-
param :salt_environment_id, :identifier_dottable, :
|
13
|
+
param :salt_environment_id, :identifier_dottable, required: false, desc: N_('Limit to a specific environment')
|
14
14
|
param_group :search_and_pagination, ::Api::V2::BaseController
|
15
15
|
def index
|
16
|
-
if @salt_environment
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
@salt_states = if @salt_environment
|
17
|
+
resource_scope_for_index.joins(:salt_environments)
|
18
|
+
.where('salt_module_environments.salt_environment_id' => @salt_environment)
|
19
|
+
else
|
20
|
+
resource_scope_for_index
|
21
|
+
end
|
21
22
|
|
22
23
|
@subtotal = @salt_states.count
|
23
24
|
end
|
24
25
|
|
25
26
|
api :GET, '/salt_states/:id/', N_('Show a state')
|
26
|
-
param :id, :identifier_dottable, :
|
27
|
+
param :id, :identifier_dottable, required: true
|
27
28
|
def show
|
28
29
|
end
|
29
30
|
|
30
31
|
def_param_group :state do
|
31
|
-
param :state, Hash, :
|
32
|
-
param :name, String, :
|
32
|
+
param :state, Hash, required: true, action_aware: true do
|
33
|
+
param :name, String, required: true, desc: N_('Name of the Salt state')
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
36
37
|
api :POST, '/salt_states', N_('Create a state')
|
37
|
-
param_group :state, :
|
38
|
+
param_group :state, as: :create
|
38
39
|
def create
|
39
40
|
@salt_state = SaltModule.new(salt_module_params)
|
40
41
|
process_response @salt_state.save
|
41
42
|
end
|
42
43
|
|
43
44
|
api :DELETE, '/salt_states/:id/', N_('Destroy a state')
|
44
|
-
param :id, :identifier_dottable, :
|
45
|
+
param :id, :identifier_dottable, required: true
|
45
46
|
def destroy
|
46
47
|
process_response @salt_state.destroy
|
47
48
|
end
|
48
49
|
|
49
50
|
api :POST, '/salt_states/import/:smart_proxy_id', N_('Import states from a salt master')
|
50
|
-
param :smart_proxy_id, :identifier_dottable, :
|
51
|
-
param :salt_environments, Array, :
|
52
|
-
param :actions, Array, :
|
53
|
-
param :dryrun, :bool, :
|
51
|
+
param :smart_proxy_id, :identifier_dottable, required: true, desc: N_('Salt Smart Proxy ID')
|
52
|
+
param :salt_environments, Array, required: false, desc: N_('Limit to a specific environments')
|
53
|
+
param :actions, Array, required: false, desc: N_('Limit to specific actions: i.e. add, remove')
|
54
|
+
param :dryrun, :bool, required: false, desc: N_('Dryrun only')
|
54
55
|
def import
|
55
56
|
states = fetch_states_from_proxy(@proxy, params[:salt_environments])
|
56
57
|
|
57
58
|
unless params[:dryrun]
|
58
59
|
states[:changes].each do |environment, state|
|
59
|
-
if state[:add].present? && (params[:actions].blank? || params[:actions].include?('add'))
|
60
|
-
add_to_environment(state[:add], environment)
|
61
|
-
end
|
60
|
+
add_to_environment(state[:add], environment) if state[:add].present? && (params[:actions].blank? || params[:actions].include?('add'))
|
62
61
|
|
63
62
|
if state[:remove].present? && (params[:actions].blank? || params[:actions].include?('remove'))
|
64
63
|
remove_from_environment(state[:remove], environment)
|
@@ -66,7 +65,7 @@ module ForemanSalt
|
|
66
65
|
end
|
67
66
|
clean_orphans
|
68
67
|
end
|
69
|
-
render :
|
68
|
+
render plain: states.to_json
|
70
69
|
end
|
71
70
|
|
72
71
|
def controller_permission
|
@@ -89,10 +88,9 @@ module ForemanSalt
|
|
89
88
|
private
|
90
89
|
|
91
90
|
def find_environment
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
end
|
91
|
+
return unless params[:salt_environment_id]
|
92
|
+
@salt_environment = ForemanSalt::SaltEnvironment.friendly.find(params[:salt_environment_id])
|
93
|
+
raise _('Could not find salt environment with id %s') % params[:salt_environment_id] unless @salt_environment
|
96
94
|
end
|
97
95
|
end
|
98
96
|
end
|
@@ -7,12 +7,13 @@ module ForemanSalt
|
|
7
7
|
class SaltVariablesController < ::ForemanSalt::Api::V2::BaseController
|
8
8
|
include ::ForemanSalt::Concerns::SaltVariableParameters
|
9
9
|
|
10
|
-
wrap_parameters :salt_variable, :
|
11
|
-
before_action :find_resource, :
|
10
|
+
wrap_parameters :salt_variable, include: salt_variable_params_filter.accessible_attributes(parameter_filter_context) + ['salt_state_id']
|
11
|
+
before_action :find_resource, only: %i[show destroy update]
|
12
12
|
|
13
13
|
api :GET, '/salt_variables/:id', N_('Show variable')
|
14
|
-
param :id, :identifier, :
|
15
|
-
def show
|
14
|
+
param :id, :identifier, required: true
|
15
|
+
def show
|
16
|
+
end
|
16
17
|
|
17
18
|
api :GET, '/salt_variables', N_('List Salt variables')
|
18
19
|
param_group :search_and_pagination, ::Api::V2::BaseController
|
@@ -21,31 +22,31 @@ module ForemanSalt
|
|
21
22
|
end
|
22
23
|
|
23
24
|
api :DELETE, '/salt_variables/:id', N_('Deletes Salt variable')
|
24
|
-
param :id, :identifier, :
|
25
|
+
param :id, :identifier, required: true
|
25
26
|
def destroy
|
26
27
|
@salt_variable.destroy
|
27
28
|
render 'foreman_salt/api/v2/salt_variables/destroy'
|
28
29
|
end
|
29
30
|
|
30
31
|
def_param_group :salt_variable do
|
31
|
-
param :salt_variable, Hash, :
|
32
|
-
param :variable, String, :
|
33
|
-
param :salt_state_id, :number, :
|
34
|
-
param :default_value, :any_type, :
|
35
|
-
param :hidden_value, :bool, :
|
36
|
-
param :override_value_order, String, :
|
37
|
-
param :description, String, :
|
38
|
-
param :validator_type, LookupKey::VALIDATOR_TYPES, :
|
39
|
-
param :validator_rule, String, :
|
40
|
-
param :variable_type, LookupKey::KEY_TYPES, :
|
41
|
-
param :merge_overrides, :bool, :
|
42
|
-
param :merge_default, :bool, :
|
43
|
-
param :avoid_duplicates, :bool, :
|
32
|
+
param :salt_variable, Hash, required: true, action_aware: true do
|
33
|
+
param :variable, String, required: true, desc: N_('Name of variable')
|
34
|
+
param :salt_state_id, :number, required: true, desc: N_('State ID')
|
35
|
+
param :default_value, :any_type, of: LookupKey::KEY_TYPES, desc: N_('Default value of variable')
|
36
|
+
param :hidden_value, :bool, desc: N_('When enabled the parameter is hidden in the UI')
|
37
|
+
param :override_value_order, String, desc: N_('The order in which values are resolved')
|
38
|
+
param :description, String, desc: N_('Description of variable')
|
39
|
+
param :validator_type, LookupKey::VALIDATOR_TYPES, desc: N_('Types of validation values')
|
40
|
+
param :validator_rule, String, desc: N_('Used to enforce certain values for the parameter values')
|
41
|
+
param :variable_type, LookupKey::KEY_TYPES, desc: N_('Types of variable values')
|
42
|
+
param :merge_overrides, :bool, desc: N_('Merge all matching values (only array/hash type)')
|
43
|
+
param :merge_default, :bool, desc: N_('Include default value when merging all matching values')
|
44
|
+
param :avoid_duplicates, :bool, desc: N_('Remove duplicate values (only array type)')
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
48
|
api :POST, '/salt_variables', N_('Create Salt variable')
|
48
|
-
param_group :salt_variable, :
|
49
|
+
param_group :salt_variable, as: :create
|
49
50
|
def create
|
50
51
|
params[:salt_variable][:salt_module_id] = params[:salt_variable].delete(:salt_state_id) if params[:salt_variable]
|
51
52
|
@salt_variable = SaltVariable.new(salt_variable_params)
|
@@ -53,8 +54,8 @@ module ForemanSalt
|
|
53
54
|
end
|
54
55
|
|
55
56
|
api :PUT, '/salt_variables/:id', N_('Updates Salt variable')
|
56
|
-
param :id, :identifier, :
|
57
|
-
param_group :salt_variable, :
|
57
|
+
param :id, :identifier, required: true
|
58
|
+
param_group :salt_variable, as: :update
|
58
59
|
|
59
60
|
def update
|
60
61
|
@salt_variable.update!(salt_variable_params)
|
@@ -10,7 +10,7 @@ module ForemanSalt
|
|
10
10
|
@salt_environment ||= @hostgroup.salt_environment
|
11
11
|
|
12
12
|
if @salt_environment
|
13
|
-
@inherited_salt_modules = @salt_environment.salt_modules.where(:
|
13
|
+
@inherited_salt_modules = @salt_environment.salt_modules.where(id: @hostgroup.inherited_salt_modules)
|
14
14
|
@salt_modules = @salt_environment.salt_modules - @inherited_salt_modules
|
15
15
|
else
|
16
16
|
@inherited_salt_modules = @salt_modules = []
|
@@ -25,12 +25,12 @@ module ForemanSalt
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def salt_environment_selected
|
28
|
-
@hostgroup = Hostgroup.authorized(:view_hostgroups, Hostgroup).
|
28
|
+
@hostgroup = Hostgroup.authorized(:view_hostgroups, Hostgroup).find_by(id: params[:hostgroup_id]) || Hostgroup.new(params[:hostgroup])
|
29
29
|
|
30
30
|
if params[:hostgroup][:salt_environment_id].present?
|
31
31
|
@salt_environment = ::ForemanSalt::SaltEnvironment.friendly.find(params[:hostgroup][:salt_environment_id])
|
32
32
|
load_vars_for_ajax
|
33
|
-
render :
|
33
|
+
render partial: 'foreman_salt/salt_modules/host_tab_pane'
|
34
34
|
else
|
35
35
|
logger.info 'environment_id is required to render states'
|
36
36
|
end
|
@@ -2,8 +2,8 @@ module ForemanSalt
|
|
2
2
|
module Concerns
|
3
3
|
module HostsControllerExtensions
|
4
4
|
extend ActiveSupport::Concern
|
5
|
-
MULTIPLE_EDIT_ACTIONS = %w
|
6
|
-
select_multiple_salt_master update_multiple_salt_master
|
5
|
+
MULTIPLE_EDIT_ACTIONS = %w[select_multiple_salt_environment update_multiple_salt_environment
|
6
|
+
select_multiple_salt_master update_multiple_salt_master].freeze
|
7
7
|
|
8
8
|
module Overrides
|
9
9
|
def process_hostgroup
|
@@ -57,12 +57,12 @@ module ForemanSalt
|
|
57
57
|
end
|
58
58
|
|
59
59
|
find_multiple
|
60
|
-
ev = ForemanSalt::SaltEnvironment.
|
60
|
+
ev = ForemanSalt::SaltEnvironment.find_by(id: id)
|
61
61
|
|
62
62
|
# update the hosts
|
63
63
|
@hosts.each do |host|
|
64
64
|
host.salt_environment = ev
|
65
|
-
host.save(:
|
65
|
+
host.save(validate: false)
|
66
66
|
end
|
67
67
|
|
68
68
|
success _('Updated hosts: changed salt environment')
|
@@ -6,7 +6,7 @@ module ForemanSalt
|
|
6
6
|
class_methods do
|
7
7
|
def salt_environment_params_filter
|
8
8
|
Foreman::ParameterFilter.new(::ForemanSalt::SaltEnvironment).tap do |filter|
|
9
|
-
filter.permit(:name, :
|
9
|
+
filter.permit(:name, salt_modules: [], salt_module_ids: [])
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ForemanSalt
|
2
|
+
module Concerns
|
3
|
+
module SaltHostgroupParameters
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include Foreman::Controller::Parameters::LookupKey
|
6
|
+
|
7
|
+
class_methods do
|
8
|
+
def salt_hostgroup_params_filter
|
9
|
+
Foreman::ParameterFilter.new(Hostgroup).tap do |filter|
|
10
|
+
filter.permit hostgroup: [:salt_environment_id, :salt_proxy_id, { salt_module_ids: [] }]
|
11
|
+
filter.permit_by_context :required, nested: true
|
12
|
+
filter.permit_by_context :id, ui: false, api: true, nested: true
|
13
|
+
|
14
|
+
add_lookup_key_params_filter(filter)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def salt_hostgroup_params
|
20
|
+
param_name = parameter_filter_context.api? ? 'hostgroup' : 'foreman_salt_salt_hostgroup'
|
21
|
+
self.class.salt_hostgroup_params_filter.filter_params(params, parameter_filter_context, param_name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -6,7 +6,7 @@ module ForemanSalt
|
|
6
6
|
class_methods do
|
7
7
|
def salt_module_params_filter
|
8
8
|
Foreman::ParameterFilter.new(::ForemanSalt::SaltEnvironment).tap do |filter|
|
9
|
-
filter.permit(:name, :
|
9
|
+
filter.permit(:name, salt_environments: [], salt_environment_ids: [])
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -9,13 +9,13 @@ module ForemanSalt
|
|
9
9
|
class_methods do
|
10
10
|
def lookup_value_params_filter
|
11
11
|
Foreman::ParameterFilter.new(::LookupValue).tap do |filter|
|
12
|
-
filter.permit :salt_variable_id, :
|
12
|
+
filter.permit :salt_variable_id, override_value: {}
|
13
13
|
|
14
14
|
filter.permit_by_context :hidden_value, :host_or_hostgroup, :lookup_key, :lookup_key_id,
|
15
|
-
|
15
|
+
:match, :omit, :value, nested: true
|
16
16
|
|
17
|
-
filter.permit_by_context :id, :_destroy, :
|
18
|
-
|
17
|
+
filter.permit_by_context :id, :_destroy, ui: false,
|
18
|
+
api: false, nested: true
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|