Networking To use the information in this section, you should have a general understanding of OpenStack Networking, OpenStack Compute, and the integration between the two. You should also have access to a plug-in that implements the Networking API v2.0.
Set environment variables Make sure that you set the relevant environment variables. As an example, see the sample shell file that sets these variables to get credentials: export OS_USERNAME="admin" export OS_PASSWORD="password" export OS_TENANT_NAME="admin" export OS_AUTH_URL="http://IPADDRESS/v2.0"
Get credentials The examples in this section use the get_credentials method: def get_credentials(): d = {} d['username'] = os.environ['OS_USERNAME'] d['password'] = os.environ['OS_PASSWORD'] d['auth_url'] = os.environ['OS_AUTH_URL'] d['tenant_name'] = os.environ['OS_TENANT_NAME'] return d This code resides in the credentials.py file, which all samples import. Use the get_credentials() method to populate and get a dictionary: credentials = get_credentials()
Get Nova credentials Few examples in this section use the get_nova_credentials method: def get_nova_credentials(): d = {} d['username'] = os.environ['OS_USERNAME'] d['api_key'] = os.environ['OS_PASSWORD'] d['auth_url'] = os.environ['OS_AUTH_URL'] d['project_id'] = os.environ['OS_TENANT_NAME'] return d This code resides in the credentials.py file, which all samples import. Use the get_nova_credentials() method to populate and get a dictionary: nova_credentials = get_nova_credentials()
Print values The examples in this section use the print_values and print_values_server methods: def print_values(val, type): if type == 'ports': val_list = val['ports'] if type == 'networks': val_list = val['networks'] if type == 'routers': val_list = val['routers'] for p in val_list: for k, v in p.items(): print("%s : %s" % (k, v)) print('\n') def print_values_server(val, server_id, type): if type == 'ports': val_list = val['ports'] if type == 'networks': val_list = val['networks'] for p in val_list: bool = False for k, v in p.items(): if k == 'device_id' and v == server_id: bool = True if bool: for k, v in p.items(): print("%s : %s" % (k, v)) print('\n') This code resides in the utils.py file, which all samples import.
Create network The following program creates a network: #!/usr/bin/env python from neutronclient.v2_0 import client from credentials import get_credentials network_name = 'sample_network' credentials = get_credentials() neutron = client.Client(**credentials) try: body_sample = {'network': {'name': network_name, 'admin_state_up': True}} netw = neutron.create_network(body=body_sample) net_dict = netw['network'] network_id = net_dict['id'] print('Network %s created' % network_id) body_create_subnet = {'subnets': [{'cidr': '192.168.199.0/24', 'ip_version': 4, 'network_id': network_id}]} subnet = neutron.create_subnet(body=body_create_subnet) print('Created subnet %s' % subnet) finally: print("Execution completed")
List networks The following program lists networks: #!/usr/bin/env python from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values credentials = get_credentials() neutron = client.Client(**credentials) netw = neutron.list_networks() print_values(netw, 'networks') For print_values see .
Create ports The following program creates a port: #!/usr/bin/env python from neutronclient.v2_0 import client import novaclient.v1_1.client as nvclient from credentials import get_credentials from credentials import get_nova_credentials credentials = get_nova_credentials() nova_client = nvclient.Client(**credentials) # Replace with server_id and network_id from your environment server_id = '9a52795a-a70d-49a8-a5d0-5b38d78bd12d' network_id = 'ce5d204a-93f5-43ef-bd89-3ab99ad09a9a' server_detail = nova_client.servers.get(server_id) print(server_detail.id) if server_detail != None: credentials = get_credentials() neutron = client.Client(**credentials) body_value = { "port": { "admin_state_up": True, "device_id": server_id, "name": "port1", "network_id": network_id } } response = neutron.create_port(body=body_value) print(response) For get_nova_credentials see . For get_credentials see .
List ports The following program lists ports: #!/usr/bin/env python from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values credentials = get_credentials() neutron = client.Client(**credentials) ports = neutron.list_ports() print_values(ports, 'ports') For get_credentials see . For print_values see .
List server ports The following program lists the ports for a server: #!/usr/bin/env python from neutronclient.v2_0 import client import novaclient.v1_1.client as nvclient from credentials import get_credentials from credentials import get_nova_credentials from utils import print_values_server credentials = get_nova_credentials() nova_client = nvclient.Client(**credentials) # change these values according to your environment server_id = '9a52795a-a70d-49a8-a5d0-5b38d78bd12d' network_id = 'ce5d204a-93f5-43ef-bd89-3ab99ad09a9a' server_detail = nova_client.servers.get(server_id) print(server_detail.id) if server_detail is not None: credentials = get_credentials() neutron = client.Client(**credentials) ports = neutron.list_ports() print_values_server(ports, server_id, 'ports') body_value = {'port': { 'admin_state_up': True, 'device_id': server_id, 'name': 'port1', 'network_id': network_id, }} response = neutron.create_port(body=body_value) print(response)
Create router and add port to subnet This example queries OpenStack Networking to create a router and add a port to a subnet. To create a router and add a port to a subnet Import the following modules: from neutronclient.v2_0 import client import novaclient.v1_1.client as nvclient from credentials import get_credentials from credentials import get_nova_credentials from utils import print_values_server Get Nova Credentials. See . Instantiate the nova_client client object by using the credentials dictionary object: nova_client = nvclient.Client(**credentials) Create a router and add a port to the subnet: # Replace with server_id and network_id from your environment router_id = '72cf1682-60a8-4890-b0ed-6bad7d9f5466' network_id = '81bf592a-9e3f-4f84-a839-ae87df188dc1' credentials = get_credentials() neutron = client.Client(**credentials) router = neutron.show_router(router_id) print(router) body_value = {'port': { 'admin_state_up': True, 'device_id': router_id, 'name': 'port1', 'network_id': network_id, }} response = neutron.create_port(body=body_value) print(response) print("Execution Completed") Create router: complete code listing #!/usr/bin/env python from neutronclient.v2_0 import client import novaclient.v1_1.client as nvclient from credentials import get_credentials from credentials import get_nova_credentials from utils import print_values_server credentials = get_nova_credentials() nova_client = nvclient.Client(**credentials) # Replace with server_id and network_id from your environment router_id = '72cf1682-60a8-4890-b0ed-6bad7d9f5466' network_id = '81bf592a-9e3f-4f84-a839-ae87df188dc1' try: credentials = get_credentials() neutron = client.Client(**credentials) router = neutron.show_router(router_id) print(router) body_value = {'port': { 'admin_state_up': True, 'device_id': router_id, 'name': 'port1', 'network_id': network_id, }} response = neutron.create_port(body=body_value) print(response) finally: print("Execution completed")
Delete a network This example queries OpenStack Networking to delete a network. To delete a network Import the following modules: from neutronclient.v2_0 import client from credentials import get_credentials Get credentials. See . Instantiate the neutron client object by using the credentials dictionary object: neutron = client.Client(**credentials) Delete the network: body_sample = {'network': {'name': network_name, 'admin_state_up': True}} netw = neutron.create_network(body=body_sample) net_dict = netw['network'] network_id = net_dict['id'] print('Network %s created' % network_id) body_create_subnet = {'subnets': [{'cidr': '192.168.199.0/24', 'ip_version': 4, 'network_id': network_id}]} subnet = neutron.create_subnet(body=body_create_subnet) print('Created subnet %s' % subnet) neutron.delete_network(network_id) print('Deleted Network %s' % network_id) print("Execution completed") Delete network: complete code listing #!/usr/bin/env python from neutronclient.v2_0 import client from credentials import get_credentials network_name = 'temp_network' credentials = get_credentials() neutron = client.Client(**credentials) try: body_sample = {'network': {'name': network_name, 'admin_state_up': True}} netw = neutron.create_network(body=body_sample) net_dict = netw['network'] network_id = net_dict['id'] print('Network %s created' % network_id) body_create_subnet = {'subnets': [{'cidr': '192.168.199.0/24', 'ip_version': 4, 'network_id': network_id}]} subnet = neutron.create_subnet(body=body_create_subnet) print('Created subnet %s' % subnet) neutron.delete_network(network_id) print('Deleted Network %s' % network_id) finally: print("Execution Completed")
List routers This example queries OpenStack Networking to list all routers. To list routers Import the following modules: from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values Get credentials. See . Instantiate the neutron client object by using the credentials dictionary object: neutron = client.Client(**credentials) List the routers routers_list = neutron.list_routers(retrieve_all=True) print_values(routers_list, 'routers') print("Execution completed") For print_values see . List routers: complete code listing #!/usr/bin/env python from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values try: credentials = get_credentials() neutron = client.Client(**credentials) routers_list = neutron.list_routers(retrieve_all=True) print_values(routers_list, 'routers') finally: print("Execution completed")
List security groups This example queries OpenStack Networking to list security groups. To list security groups Import the following modules: from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values Get credentials. See . Instantiate the neutron client object by using the credentials dictionary object: neutron = client.Client(**credentials) List Security groups sg = neutron.list_security_groups() print(sg) List security groups: complete code listing #!/usr/bin/env python from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values credentials = get_credentials() neutron = client.Client(**credentials) sg = neutron.list_security_groups() print(sg) OpenStack Networking security groups are case-sensitive while the nova-network security groups are case-insensitive.
List subnets This example queries OpenStack Networking to list subnets. To list subnets Import the following modules: from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values Get credentials. See . Instantiate the neutron client object by using the credentials dictionary object: neutron = client.Client(**credentials) List subnets: subnets = neutron.list_subnets() print(subnets) List subnets: complete code listing #!/usr/bin/env python from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values credentials = get_credentials() neutron = client.Client(**credentials) subnets = neutron.list_subnets() print(subnets)