Implements ForemanTasksCore::Runner::Base interface for running Ansible playbooks, used by the Foreman Ansible plugin and Ansible proxy
# File lib/foreman_ansible_core/playbook_runner.rb, line 11 def initialize(inventory, playbook, options = {}) super @inventory = inventory @playbook = playbook @options = options initialize_dirs end
# File lib/foreman_ansible_core/playbook_runner.rb, line 39 def close super FileUtils.remove_entry(@working_dir) if @tmp_working_dir end
# File lib/foreman_ansible_core/playbook_runner.rb, line 32 def kill publish_data('== TASK ABORTED BY USER ==', 'stdout') publish_exit_status(1) ::Process.kill('SIGTERM', @command_pid) close end
# File lib/foreman_ansible_core/playbook_runner.rb, line 19 def start write_inventory write_playbook command = CommandCreator.new(inventory_file, playbook_file, @options).command logger.debug('[foreman_ansible] - Initializing Ansible Runner') Dir.chdir(@ansible_dir) do initialize_command(*command) logger.debug("[foreman_ansible] - Running command #{command}") end end
# File lib/foreman_ansible_core/playbook_runner.rb, line 68 def ensure_directory(path) if File.exist?(path) raise "#{path} expected to be a directory" unless File.directory?(path) else FileUtils.mkdir_p(path) end path end
# File lib/foreman_ansible_core/playbook_runner.rb, line 64 def events_dir File.join(@working_dir, 'events', id.to_s) end
# File lib/foreman_ansible_core/playbook_runner.rb, line 92 def initialize_ansible_dir(ansible_dir) raise "Ansible dir #{ansible_dir} does not exist" unless !ansible_dir.nil? && File.exist?(ansible_dir) @ansible_dir = ansible_dir end
# File lib/foreman_ansible_core/playbook_runner.rb, line 77 def initialize_dirs settings = ForemanAnsibleCore.settings initialize_working_dir(settings[:working_dir]) initialize_ansible_dir(settings[:ansible_dir]) end
# File lib/foreman_ansible_core/playbook_runner.rb, line 83 def initialize_working_dir(working_dir) if working_dir.nil? @working_dir = Dir.mktmpdir @tmp_working_dir = true else @working_dir = File.expand_path(working_dir) end end
# File lib/foreman_ansible_core/playbook_runner.rb, line 56 def inventory_file File.join(@working_dir, 'foreman-inventories', id) end
# File lib/foreman_ansible_core/playbook_runner.rb, line 60 def playbook_file File.join(@working_dir, "foreman-playbook-#{id}.yml") end
# File lib/foreman_ansible_core/playbook_runner.rb, line 46 def write_inventory ensure_directory(File.dirname(inventory_file)) File.write(inventory_file, @inventory) end
# File lib/foreman_ansible_core/playbook_runner.rb, line 51 def write_playbook ensure_directory(File.dirname(playbook_file)) File.write(playbook_file, @playbook) end