Skip to content

Instantly share code, notes, and snippets.

@Xophmeister
Created December 4, 2020 11:32
Show Gist options
  • Save Xophmeister/5c60dc8fadb0f653ef2ffe0af74eab64 to your computer and use it in GitHub Desktop.
Save Xophmeister/5c60dc8fadb0f653ef2ffe0af74eab64 to your computer and use it in GitHub Desktop.
Create an externally routed OpenStack network
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