diff options
author | Thom May <thom@chef.io> | 2017-12-14 14:21:57 +0000 |
---|---|---|
committer | Thom May <thom@chef.io> | 2017-12-14 14:21:57 +0000 |
commit | 569841d88cdfa690dfa76af1bbbccff2746fe707 (patch) | |
tree | d0b7cffc5969dba2296d798873e69e7287e6b4f0 | |
parent | 65109e8b87c0493b76d64622b8e57679b7b909d2 (diff) | |
download | chef-569841d88cdfa690dfa76af1bbbccff2746fe707.tar.gz |
Generate a credentials file
Signed-off-by: Thom May <thom@chef.io>
-rw-r--r-- | lib/chef/knife/configure.rb | 48 | ||||
-rw-r--r-- | spec/unit/knife/configure_spec.rb | 70 |
2 files changed, 22 insertions, 96 deletions
diff --git a/lib/chef/knife/configure.rb b/lib/chef/knife/configure.rb index 967a18de87..10ae62b6c9 100644 --- a/lib/chef/knife/configure.rb +++ b/lib/chef/knife/configure.rb @@ -17,6 +17,7 @@ # require "chef/knife" +require "chef/util/path_helper" class Chef class Knife @@ -67,24 +68,22 @@ class Chef end def run - ask_user_for_config_path - FileUtils.mkdir_p(chef_config_path) + config_file = File.join(chef_config_path, "credentials") ask_user_for_config - ::File.open(config[:config_file], "w") do |f| + config_file = File.expand_path(config_file) + if File.exist?(config_file) + confirm("Overwrite #{config_file}?") + end + ::File.open(config_file, "w") do |f| f.puts <<-EOH -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")}' +[default] +client_name = '#{new_client_name}' +client_key = '#{new_client_key}' +chef_server_url = '#{chef_server}' EOH - unless chef_repo.empty? - f.puts "cookbook_path [ '#{chef_repo}/cookbooks' ]" - end end if config[:initial] @@ -109,26 +108,11 @@ EOH 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 - 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 - 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}/organizations/myorg") @@ -140,10 +124,6 @@ EOH 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) @@ -157,12 +137,8 @@ EOH o[:fqdn] || o[:machinename] || o[:hostname] || "localhost" end - def config_file - config[:config_file] - end - def chef_config_path - File.dirname(config_file) + Chef::Util::PathHelper.home(".chef") end end end diff --git a/spec/unit/knife/configure_spec.rb b/spec/unit/knife/configure_spec.rb index b7802d3890..f1d3bd0745 100644 --- a/spec/unit/knife/configure_spec.rb +++ b/spec/unit/knife/configure_spec.rb @@ -124,55 +124,12 @@ describe Chef::Knife::Configure do end end - it "asks the user for the location of a chef repo" do - @knife.ask_user_for_config - expect(@out.string).to match(Regexp.escape("Please enter the path to a chef repository (or leave blank):")) - expect(@knife.chef_repo).to eq("") - end - - it "asks the users for the name of the validation client" do - @knife.ask_user_for_config - expect(@out.string).to match(Regexp.escape("Please enter the validation clientname: [chef-validator]")) - expect(@knife.validation_client_name).to eq("chef-validator") - end - - it "should not ask the users for the name of the validation client if --validation_client_name is specified" do - @knife.config[:validation_client_name] = "my-validator" - @knife.ask_user_for_config - expect(@out.string).not_to match(Regexp.escape("Please enter the validation clientname:")) - expect(@knife.validation_client_name).to eq("my-validator") - end - - it "asks the users for the location of the validation key" do - @knife.ask_user_for_config - expect(@out.string).to match(Regexp.escape("Please enter the location of the validation key: [#{default_validator_key}]")) - if windows? - expect(@knife.validation_key.capitalize).to eq(default_validator_key_win32.capitalize) - else - expect(@knife.validation_key).to eq(default_validator_key) - end - end - - it "should not ask the users for the location of the validation key if --validation_key is specified" do - @knife.config[:validation_key] = "/home/you/.chef/my-validation.pem" - @knife.ask_user_for_config - expect(@out.string).not_to match(Regexp.escape("Please enter the location of the validation key:")) - if windows? - expect(@knife.validation_key).to match %r{^[A-Za-z]:/home/you/\.chef/my-validation\.pem$} - else - expect(@knife.validation_key).to eq("/home/you/.chef/my-validation.pem") - end - end - it "should not ask the user for anything if -i and all other properties are specified" do @knife.config[:initial] = true @knife.config[:chef_server_url] = "http://localhost:5000" @knife.config[:node_name] = "testnode" @knife.config[:admin_client_name] = "my-webui" @knife.config[:admin_client_key] = "/home/you/.chef/my-webui.pem" - @knife.config[:validation_client_name] = "my-validator" - @knife.config[:validation_key] = "/home/you/.chef/my-validation.pem" - @knife.config[:repository] = "" @knife.config[:client_key] = "/home/you/a-new-user.pem" allow(Etc).to receive(:getlogin).and_return("a-new-user") @@ -184,40 +141,33 @@ describe Chef::Knife::Configure do expect(@knife.admin_client_name).to eq("my-webui") if windows? expect(@knife.admin_client_key).to match %r{^[A-Za-z]:/home/you/\.chef/my-webui\.pem$} - expect(@knife.validation_key).to match %r{^[A-Za-z]:/home/you/\.chef/my-validation\.pem$} expect(@knife.new_client_key).to match %r{^[A-Za-z]:/home/you/a-new-user\.pem$} else expect(@knife.admin_client_key).to eq("/home/you/.chef/my-webui.pem") - expect(@knife.validation_key).to eq("/home/you/.chef/my-validation.pem") expect(@knife.new_client_key).to eq("/home/you/a-new-user.pem") end - expect(@knife.validation_client_name).to eq("my-validator") - expect(@knife.chef_repo).to eq("") end it "writes the new data to a config file" do - allow(File).to receive(:expand_path).with("/home/you/.chef/knife.rb").and_return("/home/you/.chef/knife.rb") + allow(Chef::Util::PathHelper).to receive(:home).with(".chef").and_return("/home/you/.chef") + allow(File).to receive(:expand_path).with("/home/you/.chef/credentials").and_return("/home/you/.chef/credentials") allow(File).to receive(:expand_path).with("/home/you/.chef/#{Etc.getlogin}.pem").and_return("/home/you/.chef/#{Etc.getlogin}.pem") - allow(File).to receive(:expand_path).with(default_validator_key).and_return(default_validator_key) allow(File).to receive(:expand_path).with(default_admin_key).and_return(default_admin_key) expect(FileUtils).to receive(:mkdir_p).with("/home/you/.chef") config_file = StringIO.new - expect(::File).to receive(:open).with("/home/you/.chef/knife.rb", "w").and_yield config_file + expect(::File).to receive(:open).with("/home/you/.chef/credentials", "w").and_yield config_file @knife.config[:repository] = "/home/you/chef-repo" @knife.run - expect(config_file.string).to match(/^node_name[\s]+'#{Etc.getlogin}'$/) - expect(config_file.string).to match(%r{^client_key[\s]+'/home/you/.chef/#{Etc.getlogin}.pem'$}) - expect(config_file.string).to match(/^validation_client_name\s+'chef-validator'$/) - expect(config_file.string).to match(%r{^validation_key\s+'#{default_validator_key}'$}) - expect(config_file.string).to match(%r{^chef_server_url\s+'#{default_server_url}'$}) - expect(config_file.string).to match(%r{cookbook_path\s+\[ '/home/you/chef-repo/cookbooks' \]}) + expect(config_file.string).to match(/^client_name[\s]+=[\s]+'#{Etc.getlogin}'$/) + expect(config_file.string).to match(%r{^client_key[\s]+=[\s]+'/home/you/.chef/#{Etc.getlogin}.pem'$}) + expect(config_file.string).to match(%r{^chef_server_url\s+=[\s]+'#{default_server_url}'$}) end it "creates a new client when given the --initial option" do - expect(File).to receive(:expand_path).with("/home/you/.chef/knife.rb").and_return("/home/you/.chef/knife.rb") + allow(Chef::Util::PathHelper).to receive(:home).with(".chef").and_return("/home/you/.chef") + expect(File).to receive(:expand_path).with("/home/you/.chef/credentials").and_return("/home/you/.chef/credentials") expect(File).to receive(:expand_path).with("/home/you/.chef/a-new-user.pem").and_return("/home/you/.chef/a-new-user.pem") - expect(File).to receive(:expand_path).with(default_validator_key).and_return(default_validator_key) - expect(File).to receive(:expand_path).with(default_admin_key).and_return(default_admin_key) + allow(File).to receive(:expand_path).with(default_admin_key).and_return(default_admin_key) Chef::Config[:node_name] = "webmonkey.example.com" user_command = Chef::Knife::UserCreate.new @@ -227,7 +177,7 @@ describe Chef::Knife::Configure do allow(Chef::Knife::UserCreate).to receive(:new).and_return(user_command) expect(FileUtils).to receive(:mkdir_p).with("/home/you/.chef") - expect(::File).to receive(:open).with("/home/you/.chef/knife.rb", "w") + expect(::File).to receive(:open).with("/home/you/.chef/credentials", "w") @knife.config[:initial] = true @knife.config[:user_password] = "blah" @knife.run |