diff options
author | Lamont Granquist <lamont@opscode.com> | 2021-02-22 10:33:38 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-22 10:33:38 -0800 |
commit | 2e7c4c75e8c0a3c6e6bbf5e3f35068b0577f13ab (patch) | |
tree | b6bed8a9931d7de8e568d2e8acef85d6ff80566b /lib/chef/knife/user_edit.rb | |
parent | e909d2fec12085828ac0198cf715399c91ed72e4 (diff) | |
parent | 0570757936debabc9401b22784f6781e3892e21e (diff) | |
download | chef-2e7c4c75e8c0a3c6e6bbf5e3f35068b0577f13ab.tar.gz |
Merge pull request #10187 from chef/snehal/Merge_knife_plugin_into_Chef
Diffstat (limited to 'lib/chef/knife/user_edit.rb')
-rw-r--r-- | lib/chef/knife/user_edit.rb | 62 |
1 files changed, 52 insertions, 10 deletions
diff --git a/lib/chef/knife/user_edit.rb b/lib/chef/knife/user_edit.rb index ad9dfac079..fff8c6b70f 100644 --- a/lib/chef/knife/user_edit.rb +++ b/lib/chef/knife/user_edit.rb @@ -22,12 +22,18 @@ class Chef class Knife class UserEdit < Knife - deps do - require_relative "../user_v1" - end - banner "knife user edit USER (options)" + option :input, + long: "--input FILENAME", + short: "-i FILENAME", + description: "Name of file to use for PUT or POST" + + option :filename, + long: "--filename FILENAME", + short: "-f FILENAME", + description: "Write private key to FILENAME rather than STDOUT" + def run @user_name = @name_args[0] @@ -36,17 +42,53 @@ class Chef ui.fatal("You must specify a user name") exit 1 end - - original_user = Chef::UserV1.load(@user_name).to_hash - edited_user = edit_hash(original_user) + original_user = root_rest.get("users/#{@user_name}") + edited_user = get_updated_user(original_user) if original_user != edited_user - user = Chef::UserV1.from_hash(edited_user) - user.update - ui.msg("Saved #{user}.") + result = root_rest.put("users/#{@user_name}", edited_user) + ui.msg("Saved #{@user_name}.") + unless result["private_key"].nil? + if config[:filename] + File.open(config[:filename], "w") do |f| + f.print(result["private_key"]) + end + else + ui.msg result["private_key"] + end + end else ui.msg("User unchanged, not saving.") end end end + + private + + # Check the options for ex: input or filename + # Read Or Open file to update user information + # return updated user + def get_updated_user(original_user) + if config[:input] + edited_user = JSON.parse(IO.read(config[:input])) + elsif config[:filename] + file = config[:filename] + unless File.exist?(file) ? File.writable?(file) : File.writable?(File.dirname(file)) + ui.fatal "File #{file} is not writable. Check permissions." + exit 1 + else + output = Chef::JSONCompat.to_json_pretty(original_user) + File.open(file, "w") do |f| + f.sync = true + f.puts output + f.close + raise "Please set EDITOR environment variable. See https://docs.chef.io/knife_setup/ for details." unless system("#{config[:editor]} #{f.path}") + + edited_user = JSON.parse(IO.read(f.path)) + end + end + else + edited_user = JSON.parse(edit_data(original_user, false)) + end + end end end |