foreman_salt 14.0.0 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/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
|