From 182d50fd157a24fdb58ba667d36c32492d5e0c54 Mon Sep 17 00:00:00 2001 From: Tino Vazquez Date: Mon, 5 Mar 2012 13:10:16 +0100 Subject: [PATCH] First work extending oZones with clusters & DS --- .../Server/lib/OZones/AggregatedClusters.rb | 30 +++++++++++ .../Server/lib/OZones/AggregatedDatastores.rb | 30 +++++++++++ .../models/OpenNebulaJSON/ClusterJSON.rb | 45 +++++++++++++++++ .../models/OpenNebulaJSON/DatastoreJSON.rb | 50 +++++++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 src/ozones/Server/lib/OZones/AggregatedClusters.rb create mode 100644 src/ozones/Server/lib/OZones/AggregatedDatastores.rb create mode 100644 src/sunstone/models/OpenNebulaJSON/ClusterJSON.rb create mode 100644 src/sunstone/models/OpenNebulaJSON/DatastoreJSON.rb diff --git a/src/ozones/Server/lib/OZones/AggregatedClusters.rb b/src/ozones/Server/lib/OZones/AggregatedClusters.rb new file mode 100644 index 0000000000..608cb739ff --- /dev/null +++ b/src/ozones/Server/lib/OZones/AggregatedClusters.rb @@ -0,0 +1,30 @@ +# -------------------------------------------------------------------------- # +# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) # +# # +# Licensed 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 OZones + + class AggregatedClusters < AggregatedPool + + def initialize + super("ZONE_POOL") + end + + def factory(client) + OpenNebulaJSON::ClusterPoolJSON.new(client) + end + end + +end diff --git a/src/ozones/Server/lib/OZones/AggregatedDatastores.rb b/src/ozones/Server/lib/OZones/AggregatedDatastores.rb new file mode 100644 index 0000000000..8b2200e70a --- /dev/null +++ b/src/ozones/Server/lib/OZones/AggregatedDatastores.rb @@ -0,0 +1,30 @@ +# -------------------------------------------------------------------------- # +# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) # +# # +# Licensed 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 OZones + + class AggregatedDatastores < AggregatedPool + + def initialize + super("ZONE_POOL") + end + + def factory(client) + OpenNebulaJSON::DatastorePoolJSON.new(client) + end + end + +end diff --git a/src/sunstone/models/OpenNebulaJSON/ClusterJSON.rb b/src/sunstone/models/OpenNebulaJSON/ClusterJSON.rb new file mode 100644 index 0000000000..806855c428 --- /dev/null +++ b/src/sunstone/models/OpenNebulaJSON/ClusterJSON.rb @@ -0,0 +1,45 @@ +# -------------------------------------------------------------------------- # +# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) # +# # +# Licensed 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. # +#--------------------------------------------------------------------------- # + +require 'OpenNebulaJSON/JSONUtils' + +module OpenNebulaJSON + class ClusterJSON < OpenNebula::Cluster + include JSONUtils + + def create(template_json) + cluster_hash = parse_json(template_json, 'cluster') + + if OpenNebula.is_error?(cluster_hash) + return cluster_hash + end + + + self.allocate(cluster_hash['name']) + end + + def perform_action(template_json) + action_hash = parse_json(template_json, 'action') + if OpenNebula.is_error?(action_hash) + return action_hash + end + + error_msg = "#{action_hash['perform']} action not " << + " available for this resource" + OpenNebula::Error.new(error_msg) + end + end +end diff --git a/src/sunstone/models/OpenNebulaJSON/DatastoreJSON.rb b/src/sunstone/models/OpenNebulaJSON/DatastoreJSON.rb new file mode 100644 index 0000000000..554f901b38 --- /dev/null +++ b/src/sunstone/models/OpenNebulaJSON/DatastoreJSON.rb @@ -0,0 +1,50 @@ +# -------------------------------------------------------------------------- # +# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) # +# # +# Licensed 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. # +#--------------------------------------------------------------------------- # + +require 'OpenNebulaJSON/JSONUtils' + +module OpenNebulaJSON + class ClusterJSON < OpenNebula::Datastore + include JSONUtils + + def create(template_json, cluster_id=ClusterPool::NONE_CLUSTER_ID) + datastore_hash = parse_json(template_json, 'datastore') + + if OpenNebula.is_error?(datastore_hash) + return datastore_hash + end + + if datastore_hash['datastore_raw'] + template = datastore_hash['image_raw'] + else + template = template_to_str(datastore_hash) + end + + self.allocate(template,cluster_id) + end + + def perform_action(template_json) + action_hash = parse_json(template_json, 'action') + if OpenNebula.is_error?(action_hash) + return action_hash + end + + error_msg = "#{action_hash['perform']} action not " << + " available for this resource" + OpenNebula::Error.new(error_msg) + end + end +end