class Kitchen::Driver::SSHBase

Public Instance Methods

converge(state) click to toggle source

ChefZeroNodes needs to access to legacy_ssh_base_converge method used by some drivers like kithen-vz. This method add additional command after chef_client run complete.

@param state [Hash] mutable instance state @raise [ActionFailed] if the action could not be completed

# File lib/kitchen/provisioner/chef_zero_nodes.rb, line 41
def converge(state)
  provisioner = instance.provisioner
  provisioner.create_sandbox
  sandbox_dirs = Util.list_directory(provisioner.sandbox_path)
  instance.transport.connection(backcompat_merged_state(state)) do |conn|
    conn.execute(env_cmd(provisioner.install_command))
    conn.execute(env_cmd(provisioner.init_command))
    info("Transferring files to #{instance.to_str}")
    conn.upload(sandbox_dirs, provisioner[:root_path])
    debug('Transfer complete')
    conn.execute(env_cmd(provisioner.prepare_command))
    conn.execute(env_cmd(provisioner.run_command))
    # Change perms for node json object, by default it has 600 perms
    int_node_file = windows_os? ? provisioner.win_int_node_file : provisioner.unix_int_node_file
    info("Change permissions for #{int_node_file}")
    conn.execute(env_cmd("sudo chmod +r #{int_node_file}"))
    # Download node json object generated by chef_client
    info("Transferring #{int_node_file} " \
         "from instance to #{provisioner.ext_node_file}")
    conn.execute(env_cmd(conn.download(int_node_file,
                                       provisioner.ext_node_file)))
    debug('Transfer complete')
  end
rescue Kitchen::Transport::TransportFailed => ex
  raise ActionFailed, ex.message
ensure
  instance.provisioner.cleanup_sandbox
end