From d2618faeaa1fda8ca780741c1ec7ca99513df4e2 Mon Sep 17 00:00:00 2001 From: Dan Wendlandt Date: Tue, 9 Aug 2011 00:19:55 -0700 Subject: [PATCH 1/2] update batch_config.py to use new client lib, hooray for deleting code --- tools/batch_config.py | 107 +++++++++--------------------------------- 1 file changed, 23 insertions(+), 84 deletions(-) diff --git a/tools/batch_config.py b/tools/batch_config.py index 8415513d01..705f46fbc1 100644 --- a/tools/batch_config.py +++ b/tools/batch_config.py @@ -15,106 +15,46 @@ # under the License. # @author: Dan Wendlandt, Nicira Networks, Inc. -import httplib import logging as LOG -import json -import socket -import sys -import urllib - -from quantum.manager import QuantumManager from optparse import OptionParser -from quantum.common.wsgi import Serializer -from quantum.cli import MiniClient +import sys + +from quantum.client import Client +from quantum.manager import QuantumManager FORMAT = "json" CONTENT_TYPE = "application/" + FORMAT -def delete_all_nets(client, tenant_id): - res = client.do_request(tenant_id, 'GET', "/networks." + FORMAT) - resdict = json.loads(res.read()) - LOG.debug(resdict) - for n in resdict["networks"]: +def delete_all_nets(client): + res = client.list_networks() + for n in res["networks"]: nid = n["id"] - res = client.do_request(tenant_id, 'GET', - "/networks/%s/ports.%s" % (nid, FORMAT)) - output = res.read() - if res.status != 200: - LOG.error("Failed to list ports: %s" % output) - continue - rd = json.loads(output) - LOG.debug(rd) - for port in rd["ports"]: - 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', - "/networks/%s/ports/%s.%s" % (nid, pid, FORMAT)) - output = res.read() - if res.status != 202: - LOG.error("Failed to delete port: %s" % output) - continue + pres = client.list_ports(nid) + for port in pres["ports"]: + pid = port['id'] + client.detach_resource(nid, pid) + client.delete_port(nid, pid) print "Deleted Virtual Port:%s " \ "on Virtual Network:%s" % (pid, nid) - - res = client.do_request(tenant_id, 'DELETE', - "/networks/" + nid + "." + FORMAT) - status = res.status - if status != 202: - Log.error("Failed to delete network: %s" % nid) - output = res.read() - print output - else: - print "Deleted Virtual Network with ID:%s" % nid + client.delete_network(nid) + print "Deleted Virtual Network with ID:%s" % nid -def create_net_with_attachments(net_name, iface_ids): +def create_net_with_attachments(client, net_name, iface_ids): data = {'network': {'net-name': '%s' % net_name}} - body = Serializer().serialize(data, CONTENT_TYPE) - res = client.do_request(tenant_id, 'POST', - "/networks." + FORMAT, body=body) - rd = json.loads(res.read()) - LOG.debug(rd) - nid = rd["networks"]["network"]["id"] + res = client.create_network(data) + nid = res["networks"]["network"]["id"] print "Created a new Virtual Network %s with ID:%s" % (net_name, nid) for iface_id in iface_ids: - res = client.do_request(tenant_id, 'POST', - "/networks/%s/ports.%s" % (nid, FORMAT)) - output = res.read() - if res.status != 200: - LOG.error("Failed to create port: %s" % output) - continue - rd = json.loads(output) - new_port_id = rd["ports"]["port"]["id"] + res = client.create_port(nid) + new_port_id = res["ports"]["port"]["id"] print "Created Virtual Port:%s " \ "on Virtual Network:%s" % (new_port_id, nid) data = {'port': {'attachment-id': '%s' % iface_id}} - body = Serializer().serialize(data, CONTENT_TYPE) - res = client.do_request(tenant_id, 'PUT', - "/networks/%s/ports/%s/attachment.%s" %\ - (nid, new_port_id, FORMAT), body=body) - output = res.read() - LOG.debug(output) - if res.status != 202: - LOG.error("Failed to plug iface \"%s\" to port \"%s\": %s" % \ - (iface_id, new_port_id, output)) - continue + client.attach_resource(nid, new_port_id, data) print "Plugged interface \"%s\" to port:%s on network:%s" % \ (iface_id, new_port_id, nid) @@ -149,7 +89,6 @@ if __name__ == "__main__": if len(args) < 1: parser.print_help() - help() sys.exit(1) nets = {} @@ -163,12 +102,12 @@ if __name__ == "__main__": print "nets: %s" % str(nets) - client = MiniClient(options.host, options.port, options.ssl) + client = Client(options.host, options.port, options.ssl, tenant=tenant_id) if options.delete: - delete_all_nets(client, tenant_id) + delete_all_nets(client) for net_name, iface_ids in nets.items(): - create_net_with_attachments(net_name, iface_ids) + create_net_with_attachments(client, net_name, iface_ids) sys.exit(0) From 26b4bf0f4f4840f69d134b695977b114066e87e5 Mon Sep 17 00:00:00 2001 From: Dan Wendlandt Date: Tue, 9 Aug 2011 01:03:32 -0700 Subject: [PATCH 2/2] force batch_config.py to use json, as XML has issues (see bug: 798262) --- tools/batch_config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/batch_config.py b/tools/batch_config.py index 705f46fbc1..f9684c82af 100644 --- a/tools/batch_config.py +++ b/tools/batch_config.py @@ -30,7 +30,6 @@ def delete_all_nets(client): res = client.list_networks() for n in res["networks"]: nid = n["id"] - pres = client.list_ports(nid) for port in pres["ports"]: pid = port['id'] @@ -102,7 +101,8 @@ if __name__ == "__main__": print "nets: %s" % str(nets) - client = Client(options.host, options.port, options.ssl, tenant=tenant_id) + client = Client(options.host, options.port, options.ssl, + format='json', tenant=tenant_id) if options.delete: delete_all_nets(client)