3
from quantumclient.v2_0 import client
10
usage = """Usage: %prog [options] ext_net_name
14
%prog -g 192.168.21.1 -c 192.168.21.0/25 \\
15
-f 192.168.21.100:192.168.21.200 ext_net
18
if __name__ == '__main__':
19
parser = optparse.OptionParser(usage)
20
parser.add_option("-d", "--debug",
21
help="Enable debug logging",
22
dest="debug", action="store_true", default=False)
23
parser.add_option("-g", "--gateway",
24
help="Default gateway to use.",
25
dest="default_gateway", action="store", default=None)
26
parser.add_option("-c", "--cidr",
27
help="CIDR of external network.",
28
dest="cidr", action="store", default=None)
29
parser.add_option("-f", "--floating-range",
30
help="Range of floating IP's to use (separated by :).",
31
dest="floating_range", action="store", default=None)
32
(opts, args) = parser.parse_args()
39
logging.basicConfig(level=logging.DEBUG)
41
logging.basicConfig(level=logging.INFO)
44
subnet_name = '{}_subnet'.format(net_name)
46
if (opts.floating_range):
47
(start_floating_ip, end_floating_ip) = opts.floating_range.split(':')
49
start_floating_ip = None
50
end_floating_ip = None
52
quantum = client.Client(username=os.environ['OS_USERNAME'],
53
password=os.environ['OS_PASSWORD'],
54
tenant_name=os.environ['OS_TENANT_NAME'],
55
auth_url=os.environ['OS_AUTH_URL'])
57
networks = quantum.list_networks(name=net_name)
58
if len(networks['networks']) == 0:
59
logging.info('Configuring external bridge')
62
'router:external': True
64
logging.info('Creating new external network definition: %s',
66
network = quantum.create_network({'network': network_msg})['network']
67
logging.info('New external network created: %s', network['id'])
69
logging.warning('Network %s already exists.', net_name)
70
network = networks['networks'][0]
72
subnets = quantum.list_subnets(name=subnet_name)
73
if len(subnets['subnets']) == 0:
76
'network_id': network['id'],
81
if opts.default_gateway:
82
subnet_msg['gateway_ip'] = opts.default_gateway
84
subnet_msg['cidr'] = opts.cidr
85
if (start_floating_ip and end_floating_ip):
86
subnet_msg['allocation_pools'] = [
88
'start': start_floating_ip,
89
'end': end_floating_ip
93
logging.info('Creating new subnet for %s', net_name)
94
subnet = quantum.create_subnet({'subnet': subnet_msg})['subnet']
95
logging.info('New subnet created: %s', subnet['id'])
97
logging.warning('Subnet %s already exists.', subnet_name)
98
subnet = subnets['subnets'][0]
100
routers = quantum.list_routers(name='provider-router')
101
if len(routers['routers']) == 0:
102
logging.info('Creating provider router for external network access')
103
router = quantum.create_router(
104
{'router': {'name': 'provider-router'}}
106
logging.info('New router created: %s', (router['id']))
108
logging.warning('Router provider-router already exists.')
109
router = routers['routers'][0]
111
ports = quantum.list_ports(device_owner='network:router_gateway',
112
network_id=network['id'])
113
if len(ports['ports']) == 0:
114
logging.info('Plugging router into ext_net')
116
quantum.add_gateway_router(
118
body={'network_id': network['id']}
120
logging.info('Router connected to %s', net_name)
122
logging.warning('Router already connect to %s', net_name)