Class: ForemanAcd::AppDefinitionsController

Inherits:
ApplicationController show all
Includes:
Foreman::Controller::AutoCompleteSearch, Concerns::AppDefinitionParameters
Defined in:
app/controllers/foreman_acd/app_definitions_controller.rb

Overview

Application Definition Controller

Instance Method Summary collapse

Methods included from Concerns::AppDefinitionParameters

#app_definition_params

Methods inherited from ApplicationController

#resource_class

Instance Method Details

#action_permissionObject



64
65
66
67
68
69
70
71
72
73
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 64

def action_permission
  case params[:action]
  when 'export'
    :export
  when 'import'
    :import
  else
    super
  end
end

#createObject



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 31

def create
  @app_definition = AppDefinition.new(app_definition_params)
  begin
    if @app_definition.save!
      process_success
    else
      process_error
    end
  rescue StandardError, ValidationError => e
    AnsiblePlaybook.find(params[:foreman_acd_app_definition][:acd_ansible_playbook_id]).delete if params[:foreman_acd_app_definition_import].present? && params[:foreman_acd_app_definition][:acd_ansible_playbook_id].present?
    redirect_to new_app_definition_path, :flash => { :error => _(e.message) }
  end
end

#destroyObject



56
57
58
59
60
61
62
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 56

def destroy
  if @app_definition.destroy
    process_success
  else
    process_error
  end
end

#editObject



45
46
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 45

def edit
end

#exportObject



79
80
81
82
83
84
85
86
87
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 79

def export
  dir_path = "#{Dir.mktmpdir}/#{@app_definition.name}.tar"
  `tar -cvf "#{dir_path}" "#{@app_definition.ansible_playbook.path}" #{export_app_template_data.path}`
  logger.info("Successfully created application template tar file for #{@app_definition.name}")
  send_file dir_path
rescue StandardError => e
  logger.info("Export of #{@app_definition.name} failed with the error: #{e}")
  redirect_to app_definitions_path, :flash => { :error => _(e.message) }
end

#handle_file_uploadObject



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 89

def handle_file_upload
  return unless params[:app_definition_file] && (raw_directory = params[:app_definition_file])
  begin
    dir = Dir.mktmpdir
    untar_import_directory(raw_directory, dir)
    ansible_file = Dir.glob("#{dir}/tmp/*.yaml")
    data = JSON.parse(YAML.load_file(ansible_file[0]).to_json) if ansible_file
    ansible_playbook_import = data.find { |d| d if d['ansible_playbook'] }

    session[:ansible_playbook_params] = { :dir => dir, :ansible_playbook => ansible_playbook_import['ansible_playbook'] }
    render :json => { :ansible_services => create_ansible_services(data, ansible_playbook_import) }, :status => :ok
  rescue StandardError => e
    render :json => { :status => 'error', :message => e }, :status => :internal_server_error
  end
end

#importObject



75
76
77
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 75

def import
  @app_definition = AppDefinition.new
end

#indexObject



14
15
16
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 14

def index
  @app_definitions = resource_base.search_for(params[:search], :order => params[:order]).paginate(:page => params[:page])
end

#newObject



27
28
29
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 27

def new
  @app_definition = AppDefinition.new
end

#read_ansible_playbooksObject



18
19
20
21
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 18

def read_ansible_playbooks
  # Only use ansible playbooks for which the user pressed import group vars once.
  @ansible_playbooks = AnsiblePlaybook.where.not(:vars => nil).map { |elem| { elem.id => elem.name } }.reduce({}) { |h, v| h.merge v }
end

#read_hostgroupsObject



23
24
25
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 23

def read_hostgroups
  @hostgroups = Hostgroup.all.map { |elem| { elem.id => elem.name } }.reduce({}) { |h, v| h.merge v }
end

#updateObject



48
49
50
51
52
53
54
# File 'app/controllers/foreman_acd/app_definitions_controller.rb', line 48

def update
  if @app_definition.update(app_definition_params)
    process_success
  else
    process_error
  end
end