Parent

Files

Class/Module Index [+]

Quicksearch

Chef::Knife::Bootstrap

Public Instance Methods

find_template(template=nil) click to toggle source
# File lib/chef/knife/bootstrap.rb, line 130
def find_template(template=nil)
  # Are we bootstrapping using an already shipped template?
  if config[:template_file]
    bootstrap_files = config[:template_file]
  else
    bootstrap_files = []
    bootstrap_files << File.join(File.dirname(__FILE__), 'bootstrap', "#{config[:distro]}.erb")
    bootstrap_files << File.join(Knife.chef_config_dir, "bootstrap", "#{config[:distro]}.erb") if Knife.chef_config_dir
    bootstrap_files << File.join(ENV['HOME'], '.chef', 'bootstrap', "#{config[:distro]}.erb") if ENV['HOME']
    bootstrap_files << Gem.find_files(File.join("chef","knife","bootstrap","#{config[:distro]}.erb"))
    bootstrap_files.flatten!
  end

  template = Array(bootstrap_files).find do |bootstrap_template|
    Chef::Log.debug("Looking for bootstrap template in #{File.dirname(bootstrap_template)}")
    File.exists?(bootstrap_template)
  end

  unless template
    ui.info("Can not find bootstrap definition for #{config[:distro]}")
    raise Errno::ENOENT
  end

  Chef::Log.debug("Found bootstrap template in #{File.dirname(template)}")

  template
end
knife_ssh() click to toggle source
# File lib/chef/knife/bootstrap.rb, line 199
def knife_ssh
  ssh = Chef::Knife::Ssh.new
  ssh.ui = ui
  ssh.name_args = [ server_name, ssh_command ]
  ssh.config[:ssh_user] = Chef::Config[:knife][:ssh_user] || config[:ssh_user]
  ssh.config[:ssh_password] = config[:ssh_password]
  ssh.config[:ssh_port] = Chef::Config[:knife][:ssh_port] || config[:ssh_port]
  ssh.config[:ssh_gateway] = Chef::Config[:knife][:ssh_gateway] || config[:ssh_gateway]
  ssh.config[:identity_file] = Chef::Config[:knife][:identity_file] || config[:identity_file]
  ssh.config[:manual] = true
  ssh.config[:host_key_verify] = Chef::Config[:knife][:host_key_verify] || config[:host_key_verify]
  ssh.config[:on_error] = :raise
  ssh
end
knife_ssh_with_password_auth() click to toggle source
# File lib/chef/knife/bootstrap.rb, line 214
def knife_ssh_with_password_auth
  ssh = knife_ssh
  ssh.config[:identity_file] = nil
  ssh.config[:ssh_password] = ssh.get_password
  ssh
end
read_template() click to toggle source
# File lib/chef/knife/bootstrap.rb, line 163
def read_template
  IO.read(@template_file).chomp
end
render_template(template=nil) click to toggle source
# File lib/chef/knife/bootstrap.rb, line 158
def render_template(template=nil)
  context = Knife::Core::BootstrapContext.new(config, config[:run_list], Chef::Config)
  Erubis::Eruby.new(template).evaluate(context)
end
run() click to toggle source
# File lib/chef/knife/bootstrap.rb, line 167
def run
  validate_name_args!
  @template_file = find_template(config[:bootstrap_template])
  @node_name = Array(@name_args).first
  # back compat--templates may use this setting:
  config[:server_name] = @node_name
  
  $stdout.sync = true

  ui.info("Bootstrapping Chef on #{ui.color(@node_name, :bold)}")

  begin
    knife_ssh.run
  rescue Net::SSH::AuthenticationFailed
    unless config[:ssh_password]
      ui.info("Failed to authenticate #{config[:ssh_user]} - trying password auth")
      knife_ssh_with_password_auth.run
    end
  end
end
server_name() click to toggle source
# File lib/chef/knife/bootstrap.rb, line 195
def server_name
  Array(@name_args).first
end
ssh_command() click to toggle source
# File lib/chef/knife/bootstrap.rb, line 221
def ssh_command
  command = render_template(read_template)

  if config[:use_sudo]
    command = "sudo #{command}"
  end

  command
end
validate_name_args!() click to toggle source
# File lib/chef/knife/bootstrap.rb, line 188
def validate_name_args!
  if Array(@name_args).first.nil?
    ui.error("Must pass an FQDN or ip to bootstrap")
    exit 1
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.