1 from sfa.rspecs.rspec import RSpec
2 from sfa.rspecs.elements.hardware_type import HardwareType
3 from sfa.rspecs.elements.node import Node
4 from sfa.rspecs.elements.sliver import Sliver
5 from sfa.rspecs.elements.login import Login
6 from sfa.rspecs.elements.services import Services
7 from sfa.util.xrn import Xrn
8 from sfa.util.osxrn import OSXrn
9 from sfa.rspecs.version_manager import VersionManager
13 def __init__(self, driver):
16 def instance_to_sliver(instance, slice_xrn=None):
19 xrn = OSXrn(slice_xrn, 'slice')
20 sliver_id = xrn.sliver_id(instance.instance_id, "")
23 # * instance.image_ref
24 # * instance.kernel_id
25 # * instance.ramdisk_id
27 if hasattr(instance, 'name'):
29 elif hasattr(instance, 'display_name'):
30 name = instance.display_name
31 sliver = Sliver({'slice_id': sliver_id,
33 'type': 'plos-' + instance.name,
37 def get_rspec(self, slice_xrn=None, vsersion=None, options={}):
38 version_manager = VersionManager()
39 version = version_manager.get_version(version)
41 rspec_version = version_manager._get_version(version.type, version.version, 'ad')
42 nodes = self.get_aggregate_nodes()
44 rspec_version = version_manager._get_version(version.type, version.version, 'manifest')
45 nodes = self.get_slice_nodes(slice_xrn)
47 rspec.version.add_nodes(nodes)
50 def get_slice_nodes(self, slice_xrn):
51 name = OSXrn(xrn = slice_xrn).name
52 instances = self.driver.instance_get_all_by_project(name)
54 for instance in instances:
56 xrn = OSXrn(instance.hostname, 'node')
57 rspec_node['component_id'] = xrn.urn
58 rspec_node['component_name'] = xrn.name
59 rspec_node['component_manager_id'] = Xrn(self.driver.hrn, 'authority+cm').get_urn()
60 sliver = self.instance_to_sliver(instance)
61 rspec_node['slivers'] = [sliver]
62 rspec_nodes.append(rspec_node)
65 def get_aggregate_nodes(self):
67 zones = self.driver.zone_get_all()
71 zones = [zone.name for zone in zones]
76 xrn = OSXrn(zone, 'node')
77 rspec_node['component_id'] = xrn.urn
78 rspec_node['component_name'] = xrn.name
79 rspec_node['component_manager_id'] = Xrn(self.driver.hrn, 'authority+cm').get_urn()
80 rspec_node['exclusive'] = 'false'
81 rspec_node['hardware_types'] = [HardwareType({'name': 'plos-pc'}),
82 HardwareType({'name': 'pc'})]
83 instances = self.driver.instance_type_get_all().values()
84 slivers = [self.instance_to_sliver(inst) for inst in instances]
85 rspec_node['slivers'] = slivers
86 rspec_nodes.append(rspec_node)