From: Jan Provaznik <[email protected]>
Error responses from server don't have to contain backend node, only a message.
For example 401 error response looks like:
<error status='401' url='/api/instances'>
<message>Authentication required</message>
</error>
This patch makes sure that dc-client doesn't fail if 'backend' node is not
present.
---
client/lib/deltacloud.rb | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/client/lib/deltacloud.rb b/client/lib/deltacloud.rb
index c3efcde..a58c280 100644
--- a/client/lib/deltacloud.rb
+++ b/client/lib/deltacloud.rb
@@ -366,10 +366,12 @@ module DeltaCloud
DeltaCloud::HTTPError.client_error(response.code)
else
opts = {
- :driver => (xml/'backend').first[:driver],
- :provider => (xml/'backend').first[:provider],
:params => (xml/'request/param').inject({}) { |r,p|
r[:"#{p[:name]}"] = p.text; r }
}
+ if backend_node = xml.at_xpath('/error/backend')
+ opts[:driver] = backend_node[:driver]
+ opts[:provider] = backend_node[:provider]
+ end
backtrace = (xml/'backtrace').empty? ? nil :
(xml/'backtrace').first.text.split("\n")[1..10].map { |l| l.strip }
DeltaCloud::HTTPError.server_error(xml.root[:status] || response.code,
(xml/'message').first.text, opts,
backtrace)
--
1.7.11.7