Private networking

Private networking gives you control over the networking setup for your instance(s) and is considered the preferred method for launching instances. Also, providers these days are increasingly requiring use of private networks.

If you do not explicitly specify a private network to use when launching an instance, CloudBridge will attempt to use a default one. A ‘default’ network is one tagged as such by the native API. If such tag or functionality does not exist, CloudBridge will look for one with a predefined name (by default, called ‘CloudBridgeNet’, which can be overridden with environment variable CB_DEFAULT_NETWORK_NAME).

Create a new private network

Creating a private network is a simple, one-line command but appropriately connecting it so it has Internet access is a multi-step process: (1) create a network; (2) create a subnet within this network; (3) create a router; (4) attach the router to an external network; and (5) add a route to the router that links with a subnet. For some providers, any network can be external (ie, connected to the Internet) while for others it’s a specific, pre-defined one that exists in the an account by default. In order to properly connect the router, we need to ensure we’re using an external network.

When creating the subnet, we need to set an address pool. We can obtain the private network address space via network object’s cidr_block field (e.g., 10.0.0.0/16). Below, we’ll create a subnet starting from the beginning of the block and allow up to 16 IP addresses into the subnet (/28).

net = provider.network.create('cloudbridge_intro')
sn = net.create_subnet('10.0.0.0/28', 'cloudbridge-intro')
router = provider.network.create_router('cloudbridge-intro')
if not net.external:
    for n in self.provider.network.list():
        if n.external:
            net = n
            break
router.attach_network(net.id)
router.add_route(sn.id)

Retrieve an existing private network

If you already have existing networks, we can query for those:

provider.network.list()  # Find a desired network ID
net = provider.network.get('desired network ID')