Class: Chef::Knife::Bootstrap::ClientBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/chef/knife/bootstrap/client_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(knife_config: {}, chef_config: {}, ui: nil) ⇒ ClientBuilder

Returns a new instance of ClientBuilder

Parameters:

  • knife_config (Hash)

    Hash of knife config settings

  • chef_config (Hash)

    Hash of chef config settings

  • ui (Chef::Knife::UI)

    UI object for output


43
44
45
46
47
# File 'lib/chef/knife/bootstrap/client_builder.rb', line 43

def initialize(knife_config: {}, chef_config: {}, ui: nil)
  @knife_config = knife_config
  @chef_config  = chef_config
  @ui           = ui
end

Instance Attribute Details

#chef_configHash

Returns chef config object

Returns:

  • (Hash)

    chef config object


34
35
36
# File 'lib/chef/knife/bootstrap/client_builder.rb', line 34

def chef_config
  @chef_config
end

#clientChef::ApiClient (readonly)

Returns client saved on run

Returns:


38
39
40
# File 'lib/chef/knife/bootstrap/client_builder.rb', line 38

def client
  @client
end

#knife_configHash

Returns knife merged config, typically @config

Returns:

  • (Hash)

    knife merged config, typically @config


32
33
34
# File 'lib/chef/knife/bootstrap/client_builder.rb', line 32

def knife_config
  @knife_config
end

#uiChef::Knife::UI

Returns ui object for output

Returns:


36
37
38
# File 'lib/chef/knife/bootstrap/client_builder.rb', line 36

def ui
  @ui
end

Instance Method Details

#client_pathString

Tempfile to use to write newly created client credentials to.

This method is public so that the knife bootstrapper can read then and pass the value into the handler for chef vault which needs the client cert we create here.

We hang onto the tmpdir as an ivar as well so that it will not get GC'd and removed

Returns:

  • (String)

    path to the generated client.pem


71
72
73
74
75
76
77
# File 'lib/chef/knife/bootstrap/client_builder.rb', line 71

def client_path
  @client_path ||=
    begin
      @tmpdir = Dir.mktmpdir
      File.join(@tmpdir, "#{node_name}.pem")
    end
end

#runObject

Main entry. Prompt the user to clean up any old client or node objects. Then create the new client, then create the new node.


51
52
53
54
55
56
57
58
59
60
61
# File 'lib/chef/knife/bootstrap/client_builder.rb', line 51

def run
  sanity_check

  ui.info("Creating new client for #{node_name}")

  @client = create_client!

  ui.info("Creating new node for #{node_name}")

  create_node!
end