Created
December 4, 2020 11:32
-
-
Save Xophmeister/5c60dc8fadb0f653ef2ffe0af74eab64 to your computer and use it in GitHub Desktop.
Create an externally routed OpenStack network
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
from keystoneauth1 import identity, session | |
from neutronclient.v2_0 import client | |
def _neutron(): | |
creds = { | |
"auth_url": os.environ["OS_AUTH_URL"] + "/v3", | |
"username": os.environ["OS_USERNAME"], | |
"password": os.environ["OS_PASSWORD"], | |
"project_name": os.environ["OS_PROJECT_NAME"], | |
"project_domain_id": "default", # OS_PROJECT_DOMAIN_ID | |
"user_domain_id": "default" # OS_USER_DOMAIN_NAME fails; case-dependent | |
} | |
return client.Client(session=session.Session(auth=identity.Password(**creds))) | |
if __name__ == "__main__": | |
prefix = "ch12_test" | |
neutron = _neutron() | |
# Get the externally routed network | |
public = neutron.list_networks(retrieve_all=True, **{ | |
"router:external": True | |
})["networks"][0] | |
# Create router with an external gateway to the public network | |
router = neutron.create_router({"router": { | |
"name": f"{prefix}-router", | |
"admin_state_up": True, | |
"external_gateway_info": { | |
"network_id": public["id"] | |
} | |
}})["router"] | |
# Create network and subnet | |
network = neutron.create_network({"network": { | |
"name": f"{prefix}-network", | |
"admin_state_up": True | |
}})["network"] | |
subnet = neutron.create_subnet({"subnets": [{ | |
"name": f"{prefix}-subnet", | |
"network_id": network["id"], | |
"ip_version": 4, | |
"cidr": "10.1.0.1/24" | |
}]})["subnets"][0] | |
# Attach router to subnet through interface | |
interface = neutron.add_interface_router(router["id"], { | |
"subnet_id": subnet["id"] | |
}) | |
print(f"""\ | |
# Network created; destroy (in this order): | |
openstack router remove port {router['id']} {interface['port_id']} | |
openstack router delete {router['id']} | |
openstack subnet delete {subnet['id']} | |
openstack network delete {network['id']}""") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment