+ def get_sitenodes(self, nodes):
+ n = []
+ for i in self.node_ids:
+ n.append(nodes[i])
+ return n
+
+ def add_adjacency(self, site):
+ self.adj_site_ids.add(site.id)
+ for n in site.node_ids:
+ self.adj_node_ids.add(n)
+
+
+class Slice:
+ def __init__(self, slice):
+ self.id = slice['slice_id']
+ self.name = slice['name']
+ self.node_ids = set(slice['node_ids'])
+ self.slice_tag_ids = slice['slice_tag_ids']
+
+ def get_tag(self, tagname, slicetags, node = None):
+ for i in self.slice_tag_ids:
+ tag = slicetags[i]
+ if tag.tagname == tagname:
+ if (not node) or (node.id == tag.node_id):
+ return tag
+ else:
+ return None
+
+ def get_nodes(self, nodes):
+ n = []
+ for id in self.node_ids:
+ n.append(nodes[id])
+ return n
+
+
+ def add_tag(self, tagname, value, slicetags, dryrun, node = None):
+ if node:
+ id = AddSliceTag(self.id, tagname, value, node.id)
+ else:
+ id = AddSliceTag(self.id, tagname, value)
+
+ record = GetSliceTags([id])[0]
+ tag = Slicetag(record)
+ slicetags[id] = tag
+ self.slice_tag_ids.append(id)
+
+ return tag
+
+ def update_tag(self, tagname, value, slicetags, dryrun, node = None):
+ tag = self.get_tag(tagname, slicetags, node)
+
+ if tag and tag.value == value:
+ value = "no change"
+ elif not dryrun:
+ if tag:
+ UpdateSliceTag(tag.id, value)
+ else:
+ tag = self.add_tag(tagname, value, slicetags, dryrun, node)
+
+ if tag:
+ tag.updated = 1
+ id = tag.id
+ else:
+ id = 'new'
+
+ if dryrun:
+ if node:
+ print "[%s] %s: %s (%s)" % (id, tagname, value, node.shortname)
+ else:
+ print "[%s] %s: %s" % (id, tagname, value)