-#!/usr/bin/python
+#!/usr/bin/env python3
from collections import defaultdict
from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn, get_authority, get_leaf
from sfa.util.sfatime import utcparse, datetime_to_string
pltags_dict = self.get_pltags_by_node_id(slice)
nodes_dict = self.get_slice_nodes(slice, options)
slivers = []
- for node in nodes_dict.values():
+ for node in list(nodes_dict.values()):
node.update(slice)
# slice-global tags
node['slice-tags'] = pltags_dict['slice-global']
# xxx
- # this is where we chould maybe add the nodegroup slice tags,
+ # this is where we should maybe add the nodegroup slice tags,
# but it's tedious...
# xxx
# sliver tags
else:
rspec_node['exclusive'] = 'false'
- rspec_node['hardware_types'] = [HardwareType({'name': 'plab-pc'}),
- HardwareType({'name': 'pc'})]
+ # expose hardware_types from the hardware_type tag if
+ # set on node
+ tags = self.driver.shell.GetNodeTags({
+ 'node_id': node['node_id'],
+ 'tagname': 'hardware_type',
+ })
+ if tags:
+ rspec_node['hardware_types'] = [
+ HardwareType({'name': tags[0]['value']}),
+ ]
+ else:
+ rspec_node['hardware_types'] = [
+ HardwareType({'name': 'plab-pc'}),
+ HardwareType({'name': 'pc'})
+ ]
# only doing this because protogeni rspec needs
# to advertise available initscripts
- rspec_node['pl_initscripts'] = pl_initscripts.values()
+ rspec_node['pl_initscripts'] = list(pl_initscripts.values())
# add site/interface info to nodes.
# assumes that sites, interfaces and tags have already been prepared.
if site['longitude'] and site['latitude']:
}
for extra in ('country', 'city'):
try:
- tts = self.driver.shell.GetSiteTags({
+ tags = self.driver.shell.GetSiteTags({
'site_id' : site['site_id'],
'tagname' : extra,
})
- location_dict[extra] = tts[0]['value']
+ location_dict[extra] = tags[0]['value']
except:
logger.log_exc('extra = {}'.format(extra))
location_dict[extra] = 'unknown'
node_tags = self.get_node_tags({'node_tag_id': tag_ids})
pl_initscripts = self.get_pl_initscripts()
# convert nodes to rspec nodes
+ grain = self.driver.shell.GetLeaseGranularity()
rspec_nodes = []
for node in nodes:
rspec_node = self.node_to_rspec_node(
- node, sites, interfaces, node_tags, pl_initscripts)
+ node, sites, interfaces, node_tags, pl_initscripts, grain)
rspec_nodes.append(rspec_node)
rspec.version.add_nodes(rspec_nodes)