Class: Vagrant::Provisioners::ChefServer

Inherits:
Chef
  • Object
show all
Defined in:
lib/vagrant/provisioners/chef_server.rb

Overview

This class implements provisioning via chef-client, allowing provisioning with a chef server.

Instance Attribute Summary

Attributes inherited from Base

#env

Instance Method Summary collapse

Methods inherited from Chef

#chown_provisioning_folder, #setup_json

Methods inherited from Base

#initialize

Methods included from Util

#error_and_exit, included, #logger, #wrap_output

Constructor Details

This class inherits a constructor from Vagrant::Provisioners::Base

Instance Method Details

#create_client_key_folderObject



27
28
29
30
31
32
33
34
# File 'lib/vagrant/provisioners/chef_server.rb', line 27

def create_client_key_folder
  logger.info "Creating folder to hold client key..."
  path = Pathname.new(env.config.chef.client_key_path)

  env.ssh.execute do |ssh|
    ssh.exec!("sudo mkdir -p #{path.dirname}")
  end
end

#guest_validation_key_pathObject



79
80
81
# File 'lib/vagrant/provisioners/chef_server.rb', line 79

def guest_validation_key_path
  File.join(@env.config.chef.provisioning_path, "validation.pem")
end

#prepareObject



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/vagrant/provisioners/chef_server.rb', line 6

def prepare
  if env.config.chef.validation_key_path.nil?
    raise Actions::ActionException.new(:chef_server_validation_key_required)
  elsif !File.file?(validation_key_path)
    raise Actions::ActionException.new(:chef_server_validation_key_doesnt_exist)
  end

  if env.config.chef.chef_server_url.nil?
    raise Actions::ActionException.new(:chef_server_url_required)
  end
end

#provision!Object



18
19
20
21
22
23
24
25
# File 'lib/vagrant/provisioners/chef_server.rb', line 18

def provision!
  chown_provisioning_folder
  create_client_key_folder
  upload_validation_key
  setup_json
  setup_config
  run_chef_client
end

#run_chef_clientObject



64
65
66
67
68
69
70
71
72
73
# File 'lib/vagrant/provisioners/chef_server.rb', line 64

def run_chef_client
  logger.info "Running chef-client..."
  env.ssh.execute do |ssh|
    ssh.exec!("cd #{env.config.chef.provisioning_path} && sudo chef-client -c client.rb -j dna.json") do |channel, data, stream|
      # TODO: Very verbose. It would be easier to save the data and only show it during
      # an error, or when verbosity level is set high
      logger.info("#{stream}: #{data}")
    end
  end
end

#setup_configObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/vagrant/provisioners/chef_server.rb', line 41

def setup_config
  solo_file = <<-solo
log_level          :info
log_location       STDOUT
ssl_verify_mode    :verify_none
chef_server_url    "#{env.config.chef.chef_server_url}"

validation_client_name "#{env.config.chef.validation_client_name}"
validation_key         "#{guest_validation_key_path}"
client_key             "#{env.config.chef.client_key_path}"

file_store_path    "/srv/chef/file_store"
file_cache_path    "/srv/chef/cache"

pid_file           "/var/run/chef/chef-client.pid"

Mixlib::Log::Formatter.show_time = true
solo

  logger.info "Uploading chef-client configuration script..."
  env.ssh.upload!(StringIO.new(solo_file), File.join(env.config.chef.provisioning_path, "client.rb"))
end

#upload_validation_keyObject



36
37
38
39
# File 'lib/vagrant/provisioners/chef_server.rb', line 36

def upload_validation_key
  logger.info "Uploading chef client validation key..."
  env.ssh.upload!(validation_key_path, guest_validation_key_path)
end

#validation_key_pathObject



75
76
77
# File 'lib/vagrant/provisioners/chef_server.rb', line 75

def validation_key_path
  File.expand_path(env.config.chef.validation_key_path, env.root_path)
end