refactor batch_config, allow multiple attaches with the empty string
This commit is contained in:
parent
5072a9563e
commit
dad5dbb764
@ -156,7 +156,8 @@ def port_get(port_id):
|
|||||||
|
|
||||||
def port_set_attachment(port_id, new_interface_id):
|
def port_set_attachment(port_id, new_interface_id):
|
||||||
session = get_session()
|
session = get_session()
|
||||||
ports = None
|
ports = []
|
||||||
|
if new_interface_id != "":
|
||||||
try:
|
try:
|
||||||
ports = session.query(models.Port).\
|
ports = session.query(models.Port).\
|
||||||
filter_by(interface_id=new_interface_id).\
|
filter_by(interface_id=new_interface_id).\
|
||||||
|
@ -222,8 +222,6 @@ class OVSQuantumAgent:
|
|||||||
new_local_bindings[p.vif_id] = all_bindings[p.vif_id]
|
new_local_bindings[p.vif_id] = all_bindings[p.vif_id]
|
||||||
else:
|
else:
|
||||||
# no binding, put him on the 'dead vlan'
|
# no binding, put him on the 'dead vlan'
|
||||||
LOG.info("No binding for %s, setting to dead vlan" \
|
|
||||||
% p.vif_id)
|
|
||||||
self.int_br.set_db_attribute("Port", p.port_name, "tag",
|
self.int_br.set_db_attribute("Port", p.port_name, "tag",
|
||||||
"4095")
|
"4095")
|
||||||
self.int_br.add_flow(priority=2,
|
self.int_br.add_flow(priority=2,
|
||||||
|
@ -30,51 +30,7 @@ from quantum.cli import MiniClient
|
|||||||
FORMAT = "json"
|
FORMAT = "json"
|
||||||
CONTENT_TYPE = "application/" + FORMAT
|
CONTENT_TYPE = "application/" + FORMAT
|
||||||
|
|
||||||
|
def delete_all_nets(client, tenant_id):
|
||||||
if __name__ == "__main__":
|
|
||||||
usagestr = "Usage: %prog [OPTIONS] <tenant-id> <config-string> [args]\n" \
|
|
||||||
"Example config-string: net1=instance-1,instance-2"\
|
|
||||||
":net2=instance-3,instance-4\n" \
|
|
||||||
"This string would create two networks: \n" \
|
|
||||||
"'net1' would have two ports, with iface-ids "\
|
|
||||||
"instance-1 and instance-2 attached\n" \
|
|
||||||
"'net2' would have two ports, with iface-ids"\
|
|
||||||
" instance-3 and instance-4 attached\n"
|
|
||||||
parser = OptionParser(usage=usagestr)
|
|
||||||
parser.add_option("-H", "--host", dest="host",
|
|
||||||
type="string", default="127.0.0.1", help="ip address of api host")
|
|
||||||
parser.add_option("-p", "--port", dest="port",
|
|
||||||
type="int", default=9696, help="api poort")
|
|
||||||
parser.add_option("-s", "--ssl", dest="ssl",
|
|
||||||
action="store_true", default=False, help="use ssl")
|
|
||||||
parser.add_option("-v", "--verbose", dest="verbose",
|
|
||||||
action="store_true", default=False, help="turn on verbose logging")
|
|
||||||
|
|
||||||
options, args = parser.parse_args()
|
|
||||||
|
|
||||||
if options.verbose:
|
|
||||||
LOG.basicConfig(level=LOG.DEBUG)
|
|
||||||
else:
|
|
||||||
LOG.basicConfig(level=LOG.WARN)
|
|
||||||
|
|
||||||
if len(args) < 1:
|
|
||||||
parser.print_help()
|
|
||||||
help()
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
nets = {}
|
|
||||||
tenant_id = args[0]
|
|
||||||
if len(args) > 1:
|
|
||||||
config_str = args[1]
|
|
||||||
for net_str in config_str.split(":"):
|
|
||||||
arr = net_str.split("=")
|
|
||||||
net_name = arr[0]
|
|
||||||
nets[net_name] = arr[1].split(",")
|
|
||||||
|
|
||||||
print "nets: %s" % str(nets)
|
|
||||||
|
|
||||||
client = MiniClient(options.host, options.port, options.ssl)
|
|
||||||
|
|
||||||
res = client.do_request(tenant_id, 'GET', "/networks." + FORMAT)
|
res = client.do_request(tenant_id, 'GET', "/networks." + FORMAT)
|
||||||
resdict = json.loads(res.read())
|
resdict = json.loads(res.read())
|
||||||
LOG.debug(resdict)
|
LOG.debug(resdict)
|
||||||
@ -91,26 +47,39 @@ if __name__ == "__main__":
|
|||||||
LOG.debug(rd)
|
LOG.debug(rd)
|
||||||
for port in rd["ports"]:
|
for port in rd["ports"]:
|
||||||
pid = port["id"]
|
pid = port["id"]
|
||||||
|
|
||||||
|
data = {'port': {'attachment-id': ''}}
|
||||||
|
body = Serializer().serialize(data, CONTENT_TYPE)
|
||||||
|
res = client.do_request(tenant_id, 'DELETE',
|
||||||
|
"/networks/%s/ports/%s/attachment.%s" % (nid, pid, FORMAT), body=body)
|
||||||
|
output = res.read()
|
||||||
|
LOG.debug(output)
|
||||||
|
if res.status != 202:
|
||||||
|
LOG.error("Failed to unplug iface from port \"%s\": %s" % (vid,
|
||||||
|
pid, output))
|
||||||
|
continue
|
||||||
|
LOG.info("Unplugged interface from port:%s on network:%s" % (pid, nid))
|
||||||
|
|
||||||
res = client.do_request(tenant_id, 'DELETE',
|
res = client.do_request(tenant_id, 'DELETE',
|
||||||
"/networks/%s/ports/%s.%s" % (nid, pid, FORMAT))
|
"/networks/%s/ports/%s.%s" % (nid, pid, FORMAT))
|
||||||
output = res.read()
|
output = res.read()
|
||||||
if res.status != 202:
|
if res.status != 202:
|
||||||
LOG.error("Failed to delete port: %s" % output)
|
LOG.error("Failed to delete port: %s" % output)
|
||||||
continue
|
continue
|
||||||
LOG.info("Deleted Virtual Port:%s " \
|
print "Deleted Virtual Port:%s " \
|
||||||
"on Virtual Network:%s" % (pid, nid))
|
"on Virtual Network:%s" % (pid, nid)
|
||||||
|
|
||||||
res = client.do_request(tenant_id, 'DELETE',
|
res = client.do_request(tenant_id, 'DELETE',
|
||||||
"/networks/" + nid + "." + FORMAT)
|
"/networks/" + nid + "." + FORMAT)
|
||||||
status = res.status
|
status = res.status
|
||||||
if status != 202:
|
if status != 202:
|
||||||
print "Failed to delete network: %s" % nid
|
Log.error("Failed to delete network: %s" % nid)
|
||||||
output = res.read()
|
output = res.read()
|
||||||
print output
|
print output
|
||||||
else:
|
else:
|
||||||
print "Deleted Virtual Network with ID:%s" % nid
|
print "Deleted Virtual Network with ID:%s" % nid
|
||||||
|
|
||||||
for net_name, iface_ids in nets.items():
|
def create_net_with_attachments(net_name, iface_ids):
|
||||||
data = {'network': {'network-name': '%s' % net_name}}
|
data = {'network': {'network-name': '%s' % net_name}}
|
||||||
body = Serializer().serialize(data, CONTENT_TYPE)
|
body = Serializer().serialize(data, CONTENT_TYPE)
|
||||||
res = client.do_request(tenant_id, 'POST',
|
res = client.do_request(tenant_id, 'POST',
|
||||||
@ -118,7 +87,7 @@ if __name__ == "__main__":
|
|||||||
rd = json.loads(res.read())
|
rd = json.loads(res.read())
|
||||||
LOG.debug(rd)
|
LOG.debug(rd)
|
||||||
nid = rd["networks"]["network"]["id"]
|
nid = rd["networks"]["network"]["id"]
|
||||||
print "Created a new Virtual Network %s with ID:%s\n" % (net_name, nid)
|
print "Created a new Virtual Network %s with ID:%s" % (net_name, nid)
|
||||||
|
|
||||||
for iface_id in iface_ids:
|
for iface_id in iface_ids:
|
||||||
res = client.do_request(tenant_id, 'POST',
|
res = client.do_request(tenant_id, 'POST',
|
||||||
@ -145,4 +114,56 @@ if __name__ == "__main__":
|
|||||||
print "Plugged interface \"%s\" to port:%s on network:%s" % \
|
print "Plugged interface \"%s\" to port:%s on network:%s" % \
|
||||||
(iface_id, new_port_id, nid)
|
(iface_id, new_port_id, nid)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
usagestr = "Usage: %prog [OPTIONS] <tenant-id> <config-string> [args]\n" \
|
||||||
|
"Example config-string: net1=instance-1,instance-2"\
|
||||||
|
":net2=instance-3,instance-4\n" \
|
||||||
|
"This string would create two networks: \n" \
|
||||||
|
"'net1' would have two ports, with iface-ids "\
|
||||||
|
"instance-1 and instance-2 attached\n" \
|
||||||
|
"'net2' would have two ports, with iface-ids"\
|
||||||
|
" instance-3 and instance-4 attached\n"
|
||||||
|
parser = OptionParser(usage=usagestr)
|
||||||
|
parser.add_option("-H", "--host", dest="host",
|
||||||
|
type="string", default="127.0.0.1", help="ip address of api host")
|
||||||
|
parser.add_option("-p", "--port", dest="port",
|
||||||
|
type="int", default=9696, help="api poort")
|
||||||
|
parser.add_option("-s", "--ssl", dest="ssl",
|
||||||
|
action="store_true", default=False, help="use ssl")
|
||||||
|
parser.add_option("-v", "--verbose", dest="verbose",
|
||||||
|
action="store_true", default=False, help="turn on verbose logging")
|
||||||
|
parser.add_option("-d", "--delete", dest="delete",
|
||||||
|
action="store_true", default=False, help="delete existing tenants networks")
|
||||||
|
|
||||||
|
options, args = parser.parse_args()
|
||||||
|
|
||||||
|
if options.verbose:
|
||||||
|
LOG.basicConfig(level=LOG.DEBUG)
|
||||||
|
else:
|
||||||
|
LOG.basicConfig(level=LOG.WARN)
|
||||||
|
|
||||||
|
if len(args) < 1:
|
||||||
|
parser.print_help()
|
||||||
|
help()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
nets = {}
|
||||||
|
tenant_id = args[0]
|
||||||
|
if len(args) > 1:
|
||||||
|
config_str = args[1]
|
||||||
|
for net_str in config_str.split(":"):
|
||||||
|
arr = net_str.split("=")
|
||||||
|
net_name = arr[0]
|
||||||
|
nets[net_name] = arr[1].split(",")
|
||||||
|
|
||||||
|
print "nets: %s" % str(nets)
|
||||||
|
|
||||||
|
client = MiniClient(options.host, options.port, options.ssl)
|
||||||
|
|
||||||
|
if options.delete:
|
||||||
|
delete_all_nets(client, tenant_id)
|
||||||
|
|
||||||
|
for net_name, iface_ids in nets.items():
|
||||||
|
create_net_with_attachments(net_name, iface_ids)
|
||||||
|
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user