moduleForemanSaltmoduleApimoduleV2classSaltStatesController<::ForemanSalt::Api::V2::BaseControllerinclude::ForemanSalt::Concerns::SaltModuleParametersincludeStateImporterbefore_action:find_resource,except: %i[index create import]before_action:find_proxy,only: :importbefore_action:find_environment,only: :indexapi:GET,'/salt_states',N_('List all Salt states')param:salt_environment_id,:identifier_dottable,required: false,desc: N_('Limit to a specific environment')param_group:search_and_pagination,::Api::V2::BaseControllerdefindex@salt_states=if@salt_environmentresource_scope_for_index.joins(:salt_environments).where('salt_module_environments.salt_environment_id'=>@salt_environment)elseresource_scope_for_indexend@subtotal=@salt_states.countendapi:GET,'/salt_states/:id/',N_('Show a state')param:id,:identifier_dottable,required: truedefshowenddef_param_group:statedoparam:state,Hash,required: true,action_aware: truedoparam:name,String,required: true,desc: N_('Name of the Salt state')endendapi:POST,'/salt_states',N_('Create a state')param_group:state,as: :createdefcreate@salt_state=SaltModule.new(salt_module_params)process_response@salt_state.saveendapi:DELETE,'/salt_states/:id/',N_('Destroy a state')param:id,:identifier_dottable,required: truedefdestroyprocess_response@salt_state.destroyendapi:POST,'/salt_states/import/:smart_proxy_id',N_('Import states from a salt master')param:smart_proxy_id,:identifier_dottable,required: true,desc: N_('Salt Smart Proxy ID')param:salt_environments,Array,required: false,desc: N_('Limit to a specific environments')param:actions,Array,required: false,desc: N_('Limit to specific actions: i.e. add, remove')param:dryrun,:bool,required: false,desc: N_('Dryrun only')defimportstates=fetch_states_from_proxy(@proxy,params[:salt_environments])unlessparams[:dryrun]states[:changes].eachdo|environment,state|add_to_environment(state[:add],environment)ifstate[:add].present?&&(params[:actions].blank?||params[:actions].include?('add'))ifstate[:remove].present?&&(params[:actions].blank?||params[:actions].include?('remove'))remove_from_environment(state[:remove],environment)endendclean_orphansendrenderplain: states.to_jsonenddefcontroller_permission'salt_modules'enddefresource_classForemanSalt::SaltModuleenddefaction_permissioncaseparams[:action]when'import':importelsesuperendendprivatedeffind_environmentreturnunlessparams[:salt_environment_id]@salt_environment=ForemanSalt::SaltEnvironment.friendly.find(params[:salt_environment_id])raise_('Could not find salt environment with id %s')%params[:salt_environment_id]unless@salt_environmentendendendendend