========== 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: 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: .. code-block:: bash export OS_USERNAME="admin" export OS_PASSWORD="password" export OS_TENANT_NAME="admin" export OS_AUTH_URL="http://IPADDRESS/v2.0" .. _get-credentials: Get credentials ~~~~~~~~~~~~~~~ The examples in this section use the ``get_credentials`` method: .. code-block:: python 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: .. code-block:: python credentials = get_credentials() .. _get-nova-credentials: Get Nova credentials ~~~~~~~~~~~~~~~~~~~~ The examples in this section use the ``get_nova_credentials`` method: .. code-block:: python 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: .. code-block:: python nova_credentials = get_nova_credentials() .. _print-values: Print values ~~~~~~~~~~~~ The examples in this section use the ``print_values`` and ``print_values_server`` methods: .. code-block:: python 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: Create network ~~~~~~~~~~~~~~ The following program creates a network: .. code-block:: python #!/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-network: List networks ~~~~~~~~~~~~~ The following program lists networks: .. code-block:: python #!/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 :ref:`Print values `. .. _create-ports: Create ports ~~~~~~~~~~~~ The following program creates a port: .. code-block:: python #!/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 :ref:`Get Nova credentials `. For ``get_credentials``, see :ref:`Get credentials `. .. _list-ports: List ports ~~~~~~~~~~ The following program lists ports: .. code-block:: python #!/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 :ref:`Get credentials `. For ``print_values``, see :ref:`Print values `. .. _list-server-ports: List server ports ~~~~~~~~~~~~~~~~~ The following program lists the ports for a server: .. code-block:: python #!/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-port-add-port-subnet: Create router and add port to subnet ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This example queries OpenStack Networking to create a router and add a port to a subnet. #. Import the following modules: .. code-block:: 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 #. Get Nova Credentials. See :ref:'Get Nova credentials '. #. Instantiate the ``nova_client`` client object by using the ``credentials`` dictionary object: .. code-block:: python nova_client = nvclient.Client(**credentials) #. Create a router and add a port to the subnet: .. code-block:: python # Replace with network_id from your environment network_id = '81bf592a-9e3f-4f84-a839-ae87df188dc1' credentials = get_credentials() neutron = client.Client(**credentials) neutron.format = json request = {'router': {'name': 'router name', 'admin_state_up': True}} router = neutron.create_router(request) router_id = router['router']['id'] # for example: '72cf1682-60a8-4890-b0ed-6bad7d9f5466' 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 example -------------------------------------------- .. code-block:: python #!/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 network_id from your environment network_id = '81bf592a-9e3f-4f84-a839-ae87df188dc1' try: credentials = get_credentials() neutron = client.Client(**credentials) neutron.format = 'json' request = {'router': {'name': 'router name', 'admin_state_up': True}} router = neutron.create_router(request) router_id = router['router']['id'] # for example: '72cf1682-60a8-4890-b0ed-6bad7d9f5466' 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-network: Delete a network ~~~~~~~~~~~~~~~~ This example queries OpenStack Networking to delete a network. To delete a network: #. Import the following modules: .. code-block:: python from neutronclient.v2_0 import client from credentials import get_credentials #. Get credentials. See :ref:`Get Nova credentials `. #. Instantiate the ``neutron`` client object by using the ``credentials`` dictionary object: .. code-block:: python neutron = client.Client(**credentials) #. Delete the network: .. code-block:: python 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 example --------------------------------------------- .. code-block:: python #!/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: List routers ~~~~~~~~~~~~ This example queries OpenStack Networking to list all routers. #. Import the following modules: .. code-block:: python from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values #. Get credentials. See :ref:`Get Nova credentials `. #. Instantiate the ``neutron`` client object by using the ``credentials`` dictionary object: .. code-block:: python neutron = client.Client(**credentials) #. List the routers: .. code-block:: python routers_list = neutron.list_routers(retrieve_all=True) print_values(routers_list, 'routers') print("Execution completed") For ``print_values``, see :ref:`Print values `. List routers: complete code listing example ------------------------------------------- .. code-block:: python #!/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: List security groups ~~~~~~~~~~~~~~~~~~~~ This example queries OpenStack Networking to list security groups. #. Import the following modules: .. code-block:: python from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values #. Get credentials. See :ref:`Get credentials `. #. Instantiate the ``neutron`` client object by using the ``credentials`` dictionary object: .. code-block:: python neutron = client.Client(**credentials) #. List Security groups .. code-block:: python sg = neutron.list_security_groups() print(sg) List security groups: complete code listing example --------------------------------------------------- .. code-block:: python #!/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) .. note:: 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. #. Import the following modules: .. code-block:: python from neutronclient.v2_0 import client from credentials import get_credentials from utils import print_values #. Get credentials. See :ref:'Get credentials '. #. Instantiate the ``neutron`` client object by using the ``credentials`` dictionary object: .. code-block:: python neutron = client.Client(**credentials) #. List subnets: .. code-block:: python subnets = neutron.list_subnets() print(subnets) List subnets: complete code listing example ------------------------------------------- .. code-block:: python #!/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)