class Kimurai::CLI::AnsibleCommandBuilder
Public Class Methods
new(user_host, options, playbook:, vars: {})
click to toggle source
# File lib/kimurai/cli/ansible_command_builder.rb, line 6 def initialize(user_host, options, playbook:, vars: {}) @user_host = user_host @options = options @playbook = playbook @vars = vars end
Public Instance Methods
get()
click to toggle source
# File lib/kimurai/cli/ansible_command_builder.rb, line 13 def get unless Cliver.detect("ansible-playbook") raise "Can't find `ansible-playbook` executable, to install: " \ "Mac OS X: `$ brew install ansible`, Ubuntu: `$ sudo apt install ansible`" end user = @user_host[/(.*?)\@/, 1] host = @user_host[/\@(.+)/, 1] || @user_host inventory = @options["port"] ? "#{host}:#{@options['port']}," : "#{host}," gem_dir = Gem::Specification.find_by_name("kimurai").gem_dir playbook_path = gem_dir + "/lib/kimurai/automation/" + "#{@playbook}.yml" command = [ "ansible-playbook", playbook_path, "--inventory", inventory, "--ssh-extra-args", "-oForwardAgent=yes", "--connection", @options["local"] ? "local" : "smart", "--extra-vars", "ansible_python_interpreter=/usr/bin/python3" ] if File.exists? "config/automation.yml" require 'yaml' if config = YAML.load_file("config/automation.yml").dig(@playbook) config.each { |key, value| @vars[key] = value unless @vars[key] } end end @vars.each do |key, value| next unless value.present? command.push "--extra-vars", "#{key}=#{value}" end if user command.push "--user", user end if @options["ask-sudo"] command.push "--ask-become-pass" end if @options["ask-auth-pass"] unless Cliver.detect("sshpass") raise "Can't find `sshpass` executable for password authentication, to install: " \ "Mac OS X: `$ brew install http://git.io/sshpass.rb`, Ubuntu: `$ sudo apt install sshpass`" end command.push "--ask-pass" end if ssh_key_path = @options["ssh-key-path"] command.push "--private-key", ssh_key_path end command end