"add": "To be Added",
"remove": "To be Removed"}
+default_tags = "Default tags"
+settable_tags = ['delegations', 'initscript']
+
def itemType(index):
if index.parent().parent().isValid():
return "tag"
node_data = node_index.data().toString()
if itemType(node_index) == "tag":
+ tagname, value = node_index.data().toStringList()
+ if tagname not in settable_tags:
+ # Pop up error msg
+ QMessageBox.warning(self, "Not settable", "Insufficient permission to change '%s' tag" % tagname)
+ return
if status_data == tag_status['in']:
model.setData(status_index, QString(tag_status['remove']))
elif status_data == tag_status['add']:
for c in self.childItems:
all.append(c)
if c.childItems:
- for cc in c.childItems:
- all.append(cc)
+ all.extend(c.allChildItems())
return all
def appendChild(self, child):
filters = networks + [str(filter_string)]
self.filterModel.setFilterRegExp(QRegExp('|'.join(filters)))
+ def levels_down(self, item):
+ if item == self.nodeModel.rootItem:
+ return 0
+ else:
+ return self.levels_down(item.parent()) + 1
+
def submit(self):
if self.checkRunningProcess():
return
no_change = True
all_child = self.nodeModel.rootItem.allChildItems()
for c in all_child:
- testbed, hostname, status = c.itemData
+ testbed, name, status = c.itemData
+
if isinstance(status, QVariant):
status = status.toString()
- if status == node_status['add']:
- rspec.add_sliver(hostname)
- no_change = False
- elif str(status) == node_status['remove']:
- rspec.remove_sliver(hostname)
- no_change = False
+ treelevel = self.levels_down(c)
+
+ if treelevel == 2:
+ testbed = c.parent().itemData[0]
+ if status == node_status['add']:
+ #print "Add hostname: %s" % name
+ rspec.add_sliver(name, testbed)
+ no_change = False
+ elif status == node_status['remove']:
+ #print "Remove hostname: %s" % name
+ rspec.remove_sliver(name, testbed)
+ no_change = False
+ elif treelevel == 3:
+ # A tag entry
+ tag, value = name
+ tag = "%s" % tag # Prevent weird error from lxml
+ node = c.parent().itemData[1]
+ testbed = c.parent().parent().itemData[0]
+ if status == tag_status['add']:
+ #print "Add tag: %s/%s " % (tag, value)
+ if node.startswith(default_tags):
+ rspec.add_default_sliver.attribute(tag, value, testbed)
+ else:
+ rspec.add_sliver_attribute(tag, value, node, testbed)
+ no_change = False
+ elif status == node_status['remove']:
+ #print "Remove tag: %s/%s" % (tag, value)
+ if node.startsWith(default_tags):
+ rspec.remove_default_sliver_attribute(tag, value, testbed)
+ else:
+ rspec.remove_sliver_attribute(node, tag, value, testbed)
+ no_change = False
if no_change:
self.setStatus("<font color=red>No change in slice data. Not submitting!</font>", timeout=3000)
for network in networks:
self.network_names.append(network)
data = [QString(network), QString(""), QString("")]
- #taglist = QStringList()
- #attrs = rspec.get_default_sliver_attributes(network)
- #for (name, value) in attrs:
- # taglist.append(QString("%s/%s" % (name, value)))
- # taglist.append(QString("in"))
- #data.append(taglist)
networkItem = TreeItem(data, self.nodeModel.rootItem)
all_nodes = rspec.get_node_list(network)
sliver_nodes = rspec.get_sliver_list(network)
already_in_nodes += sliver_nodes
+ # Add default slice tags
+ data = [QString(""), QString("%s for %s" % (default_tags, network)),
+ QString("")]
+ nodeItem = TreeItem(data, networkItem)
+ networkItem.appendChild(nodeItem)
+ attrs = rspec.get_default_sliver_attributes(network)
+ for (name, value) in attrs:
+ tagstring = QStringList([name, value])
+ data = [QString(""), tagstring, QString(tag_status['in'])]
+ tagItem = TreeItem(data, nodeItem)
+ nodeItem.appendChild(tagItem)
+
for node in sliver_nodes:
data = [QString(""), QString(node), QString(node_status['in'])]
nodeItem = TreeItem(data, networkItem)
nodeItem.appendChild(tagItem)
for node in available_nodes:
- nodeItem = TreeItem([QString(""), QString(node), QString(node_status['out']), QString("")], networkItem)
+ nodeItem = TreeItem([QString(""), QString(node), QString(node_status['out'])], networkItem)
networkItem.appendChild(nodeItem)
self.nodeModel.rootItem.appendChild(networkItem)