summaryrefslogtreecommitdiff
path: root/lib/chef/knife/user_edit.rb
diff options
context:
space:
mode:
authorLamont Granquist <lamont@opscode.com>2021-02-22 10:33:38 -0800
committerGitHub <noreply@github.com>2021-02-22 10:33:38 -0800
commit2e7c4c75e8c0a3c6e6bbf5e3f35068b0577f13ab (patch)
treeb6bed8a9931d7de8e568d2e8acef85d6ff80566b /lib/chef/knife/user_edit.rb
parente909d2fec12085828ac0198cf715399c91ed72e4 (diff)
parent0570757936debabc9401b22784f6781e3892e21e (diff)
downloadchef-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.rb62
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