--- /dev/null
+#! /usr/bin/env python
+
+import sys
+
+from sfa.util.sfalogging import logger
+from sfa.client.sfi_commands import Commands
+from sfa.rspecs.rspec import RSpec
+
+logger.enable_console()
+command = Commands(usage="%prog [options] [node1 node2...]",
+ description="Add sliver attributes to the RSpec. " +
+ "This command reads in an RSpec and outputs a modified " +
+ "RSpec. Use this to add attributes to individual nodes " +
+ "in your slice. If no nodes are specified, the " +
+ "attributes will be added to ALL nodes.",
+ epilog="NOTE: Only admins can actually set these " +
+ "attributes, with the exception of --delegations")
+command.add_nodefile_option()
+command.add_attribute_options()
+command.prep()
+
+if command.opts.infile:
+ attrs = command.get_attribute_dict()
+ rspec = RSpec(command.opts.infile)
+ nodes = []
+ if command.opts.nodefile:
+ f = open(command.opts.nodefile, "r")
+ nodes = f.read().split()
+ f.close()
+
+
+ for name in attrs:
+ print >> sys.stderr, name, attrs[name]
+ for value in attrs[name]:
+ if not nodes:
+ try:
+ rspec.version.add_default_sliver_attribute(name, value)
+ except:
+ logger.log_exc("sfiAddAttribute FAILED on all nodes: %s=%s" % (name, value))
+ else:
+ for node in nodes:
+ try:
+ rspec.version.add_sliver_attribute(node, name, value)
+ except:
+ logger.log_exc ("sfiAddAttribute FAILED on node %s: %s=%s" % (node, name, value))
+
+ print rspec.toxml()