3
from quantumclient.v2_0 import client
4
from keystoneclient.v2_0 import client as ks_client
10
usage = """Usage: %prog [options] name cidr
14
%prog -t admin -r provider-router admin_net 10.5.5.0/24
16
will create a new network for the admin tenant called 'admin_net' with a
17
default gateway of 10.5.5.1 and a dhcp allocation range of
21
if __name__ == '__main__':
22
parser = optparse.OptionParser(usage)
23
parser.add_option('-t', '--tenant',
24
help='Tenant name to create network for',
25
dest='tenant', action='store',
27
parser.add_option('-s', '--shared',
28
help='Create a shared rather than private network',
29
dest='shared', action='store_true', default=False)
30
parser.add_option('-r', '--router',
31
help='Router to plug new network into',
32
dest='router', action='store', default=None)
33
parser.add_option("-d", "--debug",
34
help="Enable debug logging",
35
dest="debug", action="store_true", default=False)
36
parser.add_option("-D", "--disable-dhcp",
37
help="Disable dhcp on network",
38
dest="dhcp", action="store_false", default=True)
39
parser.add_option("-N", "--dns-nameservers",
40
help="Comma separated list of dns servers to use.",
41
dest="dns_servers", action="store", default=None)
42
(opts, args) = parser.parse_args()
49
logging.basicConfig(level=logging.DEBUG)
51
logging.basicConfig(level=logging.INFO)
54
subnet_name = "{}_subnet".format(net_name)
57
keystone = ks_client.Client(username=os.environ['OS_USERNAME'],
58
password=os.environ['OS_PASSWORD'],
59
tenant_name=os.environ['OS_TENANT_NAME'],
60
auth_url=os.environ['OS_AUTH_URL'])
61
quantum = client.Client(username=os.environ['OS_USERNAME'],
62
password=os.environ['OS_PASSWORD'],
63
tenant_name=os.environ['OS_TENANT_NAME'],
64
auth_url=os.environ['OS_AUTH_URL'])
68
for tenant in [t._info for t in keystone.tenants.list()]:
70
(opts.tenant or os.environ['OS_TENANT_NAME'])):
71
tenant_id = tenant['id']
72
break # Tenant ID found - stop looking
74
logging.error("Unable to locate tenant id for %s.", opts.tenant)
78
networks = quantum.list_networks(name=net_name)
79
if len(networks['networks']) == 0:
80
logging.info('Creating network: %s',
85
'shared': opts.shared,
86
'tenant_id': tenant_id
89
network = quantum.create_network(network_msg)['network']
91
logging.warning('Network %s already exists.', net_name)
92
network = networks['networks'][0]
95
subnets = quantum.list_subnets(name=subnet_name)
96
if len(subnets['subnets']) == 0:
97
logging.info('Creating subnet for %s',
102
'network_id': network['id'],
103
'enable_dhcp': opts.dhcp,
106
'tenant_id': tenant_id
109
subnet = quantum.create_subnet(subnet_msg)['subnet']
111
logging.warning('Subnet %s already exists.', subnet_name)
112
subnet = subnets['subnets'][0]
114
# Update dns_nameservers
118
'dns_nameservers': opts.dns_servers.split(',')
121
logging.info('Updating dns_nameservers (%s) for subnet %s',
124
quantum.update_subnet(subnet['id'], msg)
126
# Plug subnet into router if provided
128
routers = quantum.list_routers(name=opts.router)
129
if len(routers['routers']) == 0:
130
logging.error('Unable to locate provider router %s', opts.router)
133
# Check to see if subnet already plugged into router
134
ports = quantum.list_ports(device_owner='network:router_interface',
135
network_id=network['id'])
136
if len(ports['ports']) == 0:
137
logging.info('Adding interface from %s to %s',
138
opts.router, subnet_name)
139
router = routers['routers'][0]
140
quantum.add_interface_router(router['id'],
141
{'subnet_id': subnet['id']})
143
logging.warning('Router already connected to subnet')