blob: 665fcfdd42f868147838c80ea7c0f994015f9cb7 [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.
class CIMI::Frontend::System < CIMI::Frontend::Entity
get '/cimi/systems' do
system_xml = get_entity_collection('systems', credentials)
@systems = collection_class_for(:system).from_xml(system_xml)
# We need to include this stuff for new System form
begin
system_templates_xml = get_entity_collection('system_templates', credentials)
@system_templates = collection_class_for(:system_template).from_xml(system_templates_xml)
rescue RestClient::ResourceNotFound # In case backend does not support System Template collection
@system_templates = nil
end
haml :'systems/index'
end
get '/cimi/systems/:id' do
system_xml = get_entity('systems', params[:id], credentials)
@system = CIMI::Model::System.from_xml(system_xml)
haml :'systems/show'
end
get '/cimi/systems/:id/systems' do
systems_resources_index('systems')
end
get '/cimi/systems/:id/machines' do
systems_resources_index('machines')
end
get '/cimi/systems/:id/credentials' do
systems_resources_index('credentials')
end
get '/cimi/systems/:id/volumes' do
systems_resources_index('volumes')
end
get '/cimi/systems/:id/networks' do
systems_resources_index('networks')
end
get '/cimi/systems/:id/network_ports' do
systems_resources_index('network_ports')
end
get '/cimi/systems/:id/addresses' do
systems_resources_index('addresses')
end
get '/cimi/systems/:id/forwarding_groups' do
systems_resources_index('forwarding_groups')
end
get '/cimi/systems/:id/systems/:res_id' do
systems_resources_show('systems')
end
get '/cimi/systems/:id/machines/:res_id' do
systems_resources_show('machines')
end
get '/cimi/systems/:id/credentials/:res_id' do
systems_resources_show('credentials')
end
get '/cimi/systems/:id/volumes/:res_id' do
systems_resources_show('volumes')
end
get '/cimi/systems/:id/networks/:res_id' do
systems_resources_show('networks')
end
get '/cimi/systems/:id/network_ports/:res_id' do
systems_resources_show('network_ports')
end
get '/cimi/systems/:id/addresses/:res_id' do
systems_resources_show('addresses')
end
get '/cimi/systems/:id/forwarding_groups/:res_id' do
systems_resources_show('forwarding_groups')
end
def systems_resources_show(res)
system_xml = get_entity('systems', params[:id], credentials)
@system = CIMI::Model::System.from_xml(system_xml)
@resource_collection = @system.send(res)
system_resources_xml = get_sub_entity_collection(@resource_collection.href, credentials)
@resource = XmlSimple.xml_in(system_resources_xml)[collection_name(@resource_collection).sub(/(.+)Collection/,'\1')].find do |r|
href_to_id r['id'][0] == params[:res_id]
end
raise RestClient::ResourceNotFound if not @resource
@resource_type = id_to_href(collection_name(@resource_collection).sub(/System(.+)Collection/,'\1'))[1..-1]
haml :'systems/resources/show'
end
def systems_resources_index(res)
system_xml = get_entity('systems', params[:id], credentials)
@system = CIMI::Model::System.from_xml(system_xml)
@resource_collection = @system.send(res)
system_resources_xml = get_sub_entity_collection(@resource_collection.href, credentials)
@resources = XmlSimple.xml_in(system_resources_xml)
haml :'systems/resources/index'
end
delete '/cimi/systems/:id/delete' do
result = destroy_entity('systems', params[:id], credentials)
if result.code == 200
flash[:success] = "System '#{params[:id]}' was successfully destroyed."
redirect '/cimi/systems'
elsif result.code == 202
flash[:success] = "Deletion of System '#{params[:id]}' was successfully initiated."
redirect '/cimi/systems'
else
flash[:error] = "Unable to destroy system #{params[:id]}"
end
end
post '/cimi/systems/:id/stop' do
action_xml = Nokogiri::XML::Builder.new do |xml|
xml.Action(:xmlns => CIMI::Frontend::CMWG_NAMESPACE) {
xml.action "http://schemas.dmtf.org/cimi/1/action/stop"
}
end.to_xml
entity_action 'systems', 'stop', action_xml, credentials, params[:id]
flash[:success] = "System stop successfully initiated."
redirect '/cimi/systems/%s' % params[:id]
end
post '/cimi/systems/:id/start' do
action_xml = Nokogiri::XML::Builder.new do |xml|
xml.Action(:xmlns => CIMI::Frontend::CMWG_NAMESPACE) {
xml.action "http://schemas.dmtf.org/cimi/1/action/start"
}
end.to_xml
entity_action 'systems', 'start', action_xml, credentials, params[:id]
flash[:success] = "System start successfully initiated."
redirect '/cimi/systems/%s' % params[:id]
end
post '/cimi/systems/:id/restart' do
action_xml = Nokogiri::XML::Builder.new do |xml|
xml.Action(:xmlns => CIMI::Frontend::CMWG_NAMESPACE) {
xml.action "http://schemas.dmtf.org/cimi/1/action/restart"
}
end.to_xml
entity_action 'systems', 'restart', action_xml, credentials, params[:id]
flash[:success] = "System restart successfully initiated."
redirect '/cimi/systems/%s' % params[:id]
end
post '/cimi/systems' do
system_xml = Nokogiri::XML::Builder.new do |xml|
xml.SystemCreate(:xmlns => CIMI::Frontend::CMWG_NAMESPACE) {
xml.name params[:system][:name]
xml.systemTemplate( :href => params[:system][:system_template])
}
end.to_xml
begin
result = create_entity('systems', system_xml, credentials)
system = collection_class_for(:system).from_xml(result)
flash[:success] = "System create was successfully initiated."
redirect "/cimi/systems/#{href_to_id(system.id)}"
rescue => e
flash[:error] = "System cannot be created: #{e.message}"
end
end
post '/cimi/systems/import' do
action_xml = Nokogiri::XML::Builder.new do |xml|
xml.Action(:xmlns => CIMI::Frontend::CMWG_NAMESPACE) {
xml.action "http://schemas.dmtf.org/cimi/1/action/import"
xml.source params[:system][:source]
}
end.to_xml
entity_action 'systems', 'import', action_xml, credentials
flash[:success] = "System import successfully initiated."
redirect '/cimi/systems'
end
post '/cimi/systems/:id/export' do
action_xml = Nokogiri::XML::Builder.new do |xml|
xml.Action(:xmlns => CIMI::Frontend::CMWG_NAMESPACE) {
xml.action "http://schemas.dmtf.org/cimi/1/action/export"
xml.format params[:system][:format]
xml.destination params[:system][:destination]
}
end.to_xml
result = entity_action 'systems', 'export', action_xml, credentials, params[:id]
flash[:success] = "System export successfully initiated."
redirect '/cimi/systems/%s' % params[:id]
end
end