# class Chef::Knife::Configure

### Attributes

admin_client_key[R]
admin_client_name[R]
chef_repo[R]
chef_server[R]
new_client_key[R]
new_client_name[R]
validation_client_name[R]
validation_key[R]

### Public Instance Methods

ask_user_for_config() click to toggle source

    # File lib/chef/knife/configure.rb, line 134
    def ask_user_for_config
      server_name = guess_servername
      @chef_server            = config[:chef_server_url] || ask_question("Please enter the chef server URL: ", :default => "https://#{server_name}:443")
      if config[:initial]
        @new_client_name        = config[:node_name] || ask_question("Please enter a name for the new user: ", :default => Etc.getlogin)
        @admin_client_name      = config[:admin_client_name] || ask_question("Please enter the existing admin name: ", :default => 'admin')
        @admin_client_key       = config[:admin_client_key] || ask_question("Please enter the location of the existing admin's private key: ", :default => '/etc/chef-server/admin.pem')
        @admin_client_key       = File.expand_path(@admin_client_key)
      else
        @new_client_name        = config[:node_name] || ask_question("Please enter an existing username or clientname for the API: ", :default => Etc.getlogin)
      end
      @validation_client_name = config[:validation_client_name] || ask_question("Please enter the validation clientname: ", :default => 'chef-validator')
      @validation_key         = config[:validation_key] || ask_question("Please enter the location of the validation key: ", :default => '/etc/chef-server/chef-validator.pem')
      @validation_key         = File.expand_path(@validation_key)
      @chef_repo              = config[:repository] || ask_question("Please enter the path to a chef repository (or leave blank): ")

      @new_client_key = config[:client_key] || File.join(chef_config_path, "#{@new_client_name}.pem")
      @new_client_key = File.expand_path(@new_client_key)
    end

ask_user_for_config_path() click to toggle source

    # File lib/chef/knife/configure.rb, line 125
    def ask_user_for_config_path
      config[:config_file] ||= ask_question("Where should I put the config file? ", :default => "#{Chef::Config[:user_home]}/.chef/knife.rb")
      # have to use expand path to expand the tilde character to the user's home
      config[:config_file] = File.expand_path(config[:config_file])
      if File.exists?(config[:config_file])
        confirm("Overwrite #{config[:config_file]}")
      end
    end

chef_config_path() click to toggle source

    # File lib/chef/knife/configure.rb, line 166
    def chef_config_path
      File.dirname(config_file)
    end

config_file() click to toggle source

    # File lib/chef/knife/configure.rb, line 162
    def config_file
      config[:config_file]
    end

configure_chef() click to toggle source
Calls superclass method

    # File lib/chef/knife/configure.rb, line 62
    def configure_chef
      # We are just faking out the system so that you can do this without a key specified
      Chef::Config[:node_name] = 'woot'
      super
      Chef::Config[:node_name] = nil
    end

guess_servername() click to toggle source

    # File lib/chef/knife/configure.rb, line 154
    def guess_servername
      o = Ohai::System.new
      o.load_plugins
      o.require_plugin 'os'
      o.require_plugin 'hostname'
      o[:fqdn] || o[:machinename] || o[:hostname] || 'localhost'
    end

run() click to toggle source

    # File lib/chef/knife/configure.rb, line 69
          def run
            ask_user_for_config_path

            FileUtils.mkdir_p(chef_config_path)

            ask_user_for_config

            ::File.open(config[:config_file], "w") do |f|
              f.puts <<-EOH
    log_level                :info
    log_location             STDOUT
    node_name                '#{new_client_name}'
    client_key               '#{new_client_key}'
    validation_client_name   '#{validation_client_name}'
    validation_key           '#{validation_key}'
    chef_server_url          '#{chef_server}'
    syntax_check_cache_path  '#{File.join(chef_config_path, "syntax_check_cache")}'
    EOH
              unless chef_repo.empty?
                f.puts "cookbook_path [ '#{chef_repo}/cookbooks' ]"
              end
            end

            if config[:initial]
              ui.msg("Creating initial API user...")
              Chef::Config[:chef_server_url] = chef_server
              Chef::Config[:node_name] = admin_client_name
              Chef::Config[:client_key] = admin_client_key
              user_create = Chef::Knife::UserCreate.new
              user_create.name_args = [ new_client_name ]
              user_create.config[:user_password] = config[:user_password] ||
                ui.ask("Please enter a password for the new user: ") {|q| q.echo = false}
              user_create.config[:admin] = true
              user_create.config[:file] = new_client_key
              user_create.config[:yes] = true
              user_create.config[:disable_editing] = true
              user_create.run
            else
              ui.msg("*****")
              ui.msg("")
              ui.msg("You must place your client key in:")
              ui.msg("  #{new_client_key}")
              ui.msg("Before running commands with Knife!")
              ui.msg("")
              ui.msg("*****")
              ui.msg("")
              ui.msg("You must place your validation key in:")
              ui.msg("  #{validation_key}")
              ui.msg("Before generating instance data with Knife!")
              ui.msg("")
              ui.msg("*****")
            end

            ui.msg("Configuration file written to #{config[:config_file]}")
          end