class ForemanAnsibleCore::PlaybookRunner
Implements ForemanTasksCore::Runner::Base interface for running Ansible playbooks, used by the Foreman Ansible plugin and Ansible proxy
Public Class Methods
new(inventory, playbook, options = {})
click to toggle source
Calls superclass method
# File lib/foreman_ansible_core/playbook_runner.rb, line 8 def initialize(inventory, playbook, options = {}) super @inventory = inventory @playbook = playbook @options = options initialize_dirs end
Public Instance Methods
close()
click to toggle source
Calls superclass method
# File lib/foreman_ansible_core/playbook_runner.rb, line 45 def close super FileUtils.remove_entry(@working_dir) if @tmp_working_dir end
command()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 25 def command command = [{ 'JSON_INVENTORY_FILE' => inventory_file }] command << 'ansible-playbook' command.concat(['-i', json_inventory_script]) if !@options[:verbosity_level].nil? && !@options[:verbosity_level].empty? command.concat([setup_verbosity]) end command.concat(['-T', @options[:timeout]]) unless @options[:timeout].nil? command << playbook_file logger.debug("Running command #{command}") command end
json_inventory_script()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 50 def json_inventory_script File.expand_path('../../bin/json_inventory.sh', File.dirname(__FILE__)) end
kill()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 38 def kill publish_data('== TASK ABORTED BY USER ==', 'stdout') publish_exit_status(1) ::Process.kill('SIGTERM', @command_pid) close end
start()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 16 def start write_inventory write_playbook logger.debug('Initializing Ansible Runner') Dir.chdir(@ansible_dir) do initialize_command(*command) end end
Private Instance Methods
ensure_directory(path)
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 78 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
events_dir()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 74 def events_dir File.join(@working_dir, 'events', id.to_s) end
initialize_ansible_dir(ansible_dir)
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 102 def initialize_ansible_dir(ansible_dir) if !ansible_dir.nil? && File.exist?(ansible_dir) @ansible_dir = ansible_dir else raise "Ansible dir #{ansible_dir} does not exist" end end
initialize_dirs()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 87 def initialize_dirs settings = ForemanAnsibleCore.settings initialize_working_dir(settings[:working_dir]) initialize_ansible_dir(settings[:ansible_dir]) end
initialize_working_dir(working_dir)
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 93 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
inventory_file()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 66 def inventory_file File.join(@working_dir, 'foreman-inventories', id) end
playbook_file()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 70 def playbook_file File.join(@working_dir, "foreman-playbook-#{id}.yml") end
setup_verbosity()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 110 def setup_verbosity verbosity_level = @options[:verbosity_level].to_i logger.debug("Setting Ansible verbosity level to #{verbosity_level}") if verbosity_level > 0 verbosity = '-' verbosity_level.times do verbosity += 'v' end end verbosity end
write_inventory()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 56 def write_inventory ensure_directory(File.dirname(inventory_file)) File.write(inventory_file, @inventory) end
write_playbook()
click to toggle source
# File lib/foreman_ansible_core/playbook_runner.rb, line 61 def write_playbook ensure_directory(File.dirname(playbook_file)) File.write(playbook_file, @playbook) end