From 2d6961efffbf73dbc1df79384ea8da9b423fd28e Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Tue, 31 Jan 2012 21:15:57 -0500 Subject: [PATCH] initial checkin --- sfa/openstack/osaggregate.py | 88 ++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 sfa/openstack/osaggregate.py diff --git a/sfa/openstack/osaggregate.py b/sfa/openstack/osaggregate.py new file mode 100644 index 00000000..521cbb8d --- /dev/null +++ b/sfa/openstack/osaggregate.py @@ -0,0 +1,88 @@ +from sfa.rspecs.rspec import RSpec +from sfa.rspecs.elements.hardware_type import HardwareType +from sfa.rspecs.elements.node import Node +from sfa.rspecs.elements.sliver import Sliver +from sfa.rspecs.elements.login import Login +from sfa.rspecs.elements.services import Services +from sfa.util.xrn import Xrn +from sfa.util.osxrn import OSXrn +from sfa.rspecs.version_manager import VersionManager + +class OSAggregate: + + def __init__(self, driver): + self.driver = driver + + def instance_to_sliver(instance, slice_xrn=None): + sliver_id = None + if slice_xrn: + xrn = OSXrn(slice_xrn, 'slice') + sliver_id = xrn.sliver_id(instance.instance_id, "") + + # should include: + # * instance.image_ref + # * instance.kernel_id + # * instance.ramdisk_id + name=None + if hasattr(instance, 'name'): + name = instance.name + elif hasattr(instance, 'display_name'): + name = instance.display_name + sliver = Sliver({'slice_id': sliver_id, + 'name': xrn.name, + 'type': 'plos-' + instance.name, + 'tags': []}) + return sliver + + def get_rspec(self, slice_xrn=None, vsersion=None, options={}): + version_manager = VersionManager() + version = version_manager.get_version(version) + if not slice_xrn: + rspec_version = version_manager._get_version(version.type, version.version, 'ad') + nodes = self.get_aggregate_nodes() + else: + rspec_version = version_manager._get_version(version.type, version.version, 'manifest') + nodes = self.get_slice_nodes(slice_xrn) + + rspec.version.add_nodes(nodes) + return rspec.toxml() + + def get_slice_nodes(self, slice_xrn): + name = OSXrn(xrn = slice_xrn).name + instances = self.driver.instance_get_all_by_project(name) + rspec_nodes = [] + for instance in instances: + rspec_node = Node() + xrn = OSXrn(instance.hostname, 'node') + rspec_node['component_id'] = xrn.urn + rspec_node['component_name'] = xrn.name + rspec_node['component_manager_id'] = Xrn(self.driver.hrn, 'authority+cm').get_urn() + sliver = self.instance_to_sliver(instance) + rspec_node['slivers'] = [sliver] + rspec_nodes.append(rspec_node) + return slivers + + def get_aggregate_nodes(self): + + zones = self.driver.zone_get_all() + if not zones: + zones = ['cloud'] + else: + zones = [zone.name for zone in zones] + + rspec_nodes = [] + for zone in zones: + rspec_node = Node() + xrn = OSXrn(zone, 'node') + rspec_node['component_id'] = xrn.urn + rspec_node['component_name'] = xrn.name + rspec_node['component_manager_id'] = Xrn(self.driver.hrn, 'authority+cm').get_urn() + rspec_node['exclusive'] = 'false' + rspec_node['hardware_types'] = [HardwareType({'name': 'plos-pc'}), + HardwareType({'name': 'pc'})] + instances = self.driver.instance_type_get_all().values() + slivers = [self.instance_to_sliver(inst) for inst in instances] + rspec_node['slivers'] = slivers + rspec_nodes.append(rspec_node) + + return rspec_node -- 2.43.0