diff options
author | tylercloke <tylercloke@gmail.com> | 2015-05-29 14:57:18 -0700 |
---|---|---|
committer | tylercloke <tylercloke@gmail.com> | 2015-06-05 10:38:48 -0700 |
commit | 030581dbaa97f26b7cb5771661535da7aa8a83c0 (patch) | |
tree | b4f033880e19ff533bc32016c84632b4c30b7c1d | |
parent | 9cc6f7645204f7fe8c2faabfca07264669a667f9 (diff) | |
download | chef-030581dbaa97f26b7cb5771661535da7aa8a83c0.tar.gz |
Made Chef::User.reregister give sane error message if no V0 on server.
-rw-r--r-- | lib/chef/exceptions.rb | 1 | ||||
-rw-r--r-- | lib/chef/user.rb | 37 |
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) |