summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortylercloke <tylercloke@gmail.com>2015-05-29 14:57:18 -0700
committertylercloke <tylercloke@gmail.com>2015-06-05 10:38:48 -0700
commit030581dbaa97f26b7cb5771661535da7aa8a83c0 (patch)
treeb4f033880e19ff533bc32016c84632b4c30b7c1d
parent9cc6f7645204f7fe8c2faabfca07264669a667f9 (diff)
downloadchef-030581dbaa97f26b7cb5771661535da7aa8a83c0.tar.gz
Made Chef::User.reregister give sane error message if no V0 on server.
-rw-r--r--lib/chef/exceptions.rb1
-rw-r--r--lib/chef/user.rb37
2 files changed, 28 insertions, 10 deletions
diff --git a/lib/chef/exceptions.rb b/lib/chef/exceptions.rb
index 197d720776..ef5314423a 100644
--- a/lib/chef/exceptions.rb
+++ b/lib/chef/exceptions.rb
@@ -78,6 +78,7 @@ class Chef
class AmbiguousRunlistSpecification < ArgumentError; end
class CookbookFrozen < ArgumentError; end
class CookbookNotFound < RuntimeError; end
+ class OnlyApiVersion0SupportedForAction < RuntimeError; end
# Cookbook loader used to raise an argument error when cookbook not found.
# for back compat, need to raise an error that inherits from ArgumentError
class CookbookNotFoundInRepo < ArgumentError; end
diff --git a/lib/chef/user.rb b/lib/chef/user.rb
index 651e3684c9..b4f233f3f6 100644
--- a/lib/chef/user.rb
+++ b/lib/chef/user.rb
@@ -233,10 +233,34 @@ class Chef
end
end
+ def reregister_only_v0_supported_error_msg(max_version, min_version)
+<<-EOH
+The reregister command only supports server API version 0.
+The server that received the request supports a min version of #{min_version} and a max version of #{max_version}.
+User keys are now managed via the key rotation commmands.
+Please refer to the documentation on how to manage your keys via the key rotation commands.
+EOH
+ end
+
def reregister
- r = Chef::REST.new(Chef::Config[:chef_server_url])
- reregistered_self = r.put("users/#{username}", { :username => username, :private_key => true })
- private_key(reregistered_self["private_key"])
+ begin
+ payload = self.to_hash.merge({:private_key => true})
+ reregistered_self = chef_root_rest_v0.put("users/#{username}", payload)
+ private_key(reregistered_self["private_key"])
+ # only V0 supported for reregister
+ rescue Net::HTTPServerException => e
+ # if there was a 406 related to versioning, give error explaining that
+ # only API version 0 is supported for reregister command
+ if e.response.code == "406" && e.response["x-ops-server-api-version"]
+ version_header = Chef::JSONCompat.from_json(e.response["x-ops-server-api-version"])
+ min_version = version_header["min_version"]
+ max_version = version_header["max_version"]
+ error_msg = reregister_only_v0_supported_error_msg(max_version, min_version)
+ raise Chef::Exceptions::OnlyApiVersion0SupportedForAction.new(error_msg)
+ else
+ raise e
+ end
+ end
self
end
@@ -244,13 +268,6 @@ class Chef
"user[#{@username}]"
end
- def inspect
- inspect_str = "Chef::User username:'#{username}'"
- inspect_str = "#{inspect_str} public_key:#{public_key}" if public_key
- inspect_str = "#{inspect_str} private_key:#{private_key}" if private_key
- inspect_str
- end
-
# Class Methods
def self.from_hash(user_hash)