Static Addresses in OpenStack Networking

When you launch a virtual machine on an OpenStack-managed network, the VM generally receives a random address in the active subnet. A researcher at work, however, needed a system for launching instances that have static addresses so he could preconfigure the local /etc/hosts file with all his machines.

The trick is to use set up some networking ports in OpenStack with pre-assigned IPv4 addresses and then launch the instances with the --port option rather than the --network option.

In the example below, the mySubnet network uses the 10.10.10.0/24 CIDR block.

# create a network port with the static IPv4 address
# 10.10.10.101
openstack port create static-101 \
  --network myNetwork \
  --description "10.10.10.101 on mySubnet" \
  --vnic-type normal \
  --fixed-ip subnet=mySubnet,ip-address=10.10.10.101

# launch an instance using that port rather than specifying
# a network
openstack server create vm-101 \
  --flavor m1.small \
  --image cirros \
  --port static-101 \
  --key work-ed25519 \
  --security-group default \
  --boot-from-volume 10

Scaling up that solution is easy enough, and cloud-init can be used to pre-populate each instance’s /etc/hosts file.

Openstack