blob: f169b754287f35e704da574af04b27ba2e648e28 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
module CIMI
module Frontend
module Client
def client
RestClient.proxy = ENV['http_proxy']
RestClient::Resource.new(ENV['CIMI_API_URL'])
end
def get_entity(entity_type, id, credentials)
entity_href = get_entity_collection_href(entity_type, credentials)
raise RestClient::ResourceNotFound if not entity_href
RestClient::Resource.new('%s/%s' % [entity_href, id]).get(auth_header(credentials))
end
def get_entity_collection(entity_type, credentials)
return client[entity_type].get(auth_header(credentials)) if entity_type == 'cloudEntryPoint'
entity_href = get_entity_collection_href(entity_type, credentials)
raise RestClient::ResourceNotFound if not entity_href
RestClient::Resource.new(entity_href).get(auth_header(credentials))
end
def get_sub_entity_collection(parent_href, credentials)
RestClient::Resource.new(parent_href).get(auth_header(credentials))
end
# look up entity collection url from cloud entry point
# returns nil if entity not in cloud entry point (i.e. not supported)
def get_entity_collection_href(entity_type, credentials)
entity_type.sub!('configurations', 'configs')
entity_type = entity_type.camelize.uncapitalize
entry_point_xml = client['cloudEntryPoint'].get(auth_header(credentials))
entity_el = XmlSimple.xml_in(entry_point_xml)[entity_type]
entity_href = entity_el ? entity_el[0]['href'] : nil
end
def create_entity(entity_type, body, credentials)
client[entity_type].post(body, auth_header(credentials).merge(:content_type => 'application/xml'))
end
def destroy_entity(entity_type, id, credentials)
client["%s/%s" % [entity_type, id]].delete(auth_header(credentials))
end
def entity_action(entity_type, action, body, credentials, id=nil)
entity_href = get_entity_collection_href(entity_type, credentials)
raise RestClient::ResourceNotFound if not entity_href
url = id ? '%s/%s' % [entity_href, id] : '%s' % [entity_href]
response_xml = RestClient::Resource.new(url).get(auth_header(credentials))
op_url = XmlSimple.xml_in(response_xml)['operation'].find {|o| o['rel'] == "http://schemas.dmtf.org/cimi/1/action/#{action}" }['href']
RestClient::Resource.new(op_url).post(body, auth_header(credentials).merge(:content_type => 'application/xml'))
end
def provider_header(credentials)
return Hash.new unless credentials.driver
{
:'X-Deltacloud-Driver' => credentials.driver,
:'X-Deltacloud-Provider' => credentials.provider
}
end
def auth_header(credentials)
encoded_credentials = ["#{credentials.user}:#{credentials.password}"].pack("m0").gsub(/\n/,'')
{ :authorization => "Basic " + encoded_credentials }.merge(provider_header(credentials))
end
end
end
end