class NodeSpec::Provisioning::Ansible
Constants
- AUTO_DISCOVERY_HOST_TEMPLATE
- CUSTOM_CONFIG_FILENAME
- CUSTOM_INVENTORY_FILENAME
Public Class Methods
new(node)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 18 def initialize(node) @node = node @sudo_enabled = true @cmd_prefix_entries = [] @tmp_files = [] end
Public Instance Methods
ansible_config(text)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 29 def ansible_config(text) file = create_temp_file(CUSTOM_CONFIG_FILENAME, text) @cmd_prefix_entries << "ANSIBLE_CONFIG=#{file.path.shellescape}" end
ansible_module(module_name, module_arguments, options = [])
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 59 def ansible_module(module_name, module_arguments, options = []) build_and_run("ansible #{@node.name} -m #{module_name} -a #{module_arguments.shellescape}", options) end
ansible_playbook(playbook_path, options = [])
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 55 def ansible_playbook(playbook_path, options = []) build_and_run("ansible-playbook #{playbook_path.shellescape} -l #{@node.name}", options) end
enable_host_auto_discovery(group = nil)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 34 def enable_host_auto_discovery(group = nil) file = create_temp_file(CUSTOM_INVENTORY_FILENAME, ERB.new(AUTO_DISCOVERY_HOST_TEMPLATE).result(binding)) @hostfile_option = "-i #{file.path.shellescape}" end
run_as_sudo(enabled = true)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 47 def run_as_sudo(enabled = true) @sudo_enabled = enabled end
set_config_path(path)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 25 def set_config_path(path) @cmd_prefix_entries << "ANSIBLE_CONFIG=#{path.shellescape}" end
set_extra_vars(vars = {})
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 51 def set_extra_vars(vars = {}) @extra_vars_option = "-e '#{JSON.generate(vars)}'" end
set_host_key_checking(enabled)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 43 def set_host_key_checking(enabled) @cmd_prefix_entries << "ANSIBLE_HOST_KEY_CHECKING=#{enabled.to_s.capitalize}" end
set_hostfile_path(path)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 39 def set_hostfile_path(path) @hostfile_option = "-i #{path.shellescape}" end
Private Instance Methods
build_and_run(cmd, options = [])
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 65 def build_and_run(cmd, options = []) ssh_session = @node.communicator.session key_option = ssh_session.options[:keys].is_a?(Array) ? ssh_session.options[:keys].join(',') : ssh_session.options[:keys] cmd = [ (@cmd_prefix_entries.join(' ') unless @cmd_prefix_entries.empty?), cmd, @hostfile_option, "-u #{ssh_session.options[:user]}", "--private-key=#{key_option.shellescape}", sudo_option(ssh_session.options[:user]), "#{options.join(' ')}", @extra_vars_option ].compact.join(' ') run_command(cmd) @tmp_files.each(&:close!) end
create_temp_file(filename, content)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 87 def create_temp_file(filename, content) Tempfile.new(filename).tap do |f| f.write(content) f.flush @tmp_files << f end end
sudo_option(user)
click to toggle source
# File lib/nodespec/provisioning/ansible.rb, line 83 def sudo_option(user) '--sudo' if user != 'root' and @sudo_enabled end