Skip to content

Launch a VM using OpenStack CLI

First find the following details using openstack command, we would required these details during the creation of virtual machine.

  • Flavor

  • Image

  • Network

  • Security Group

  • Key Name

Get the flavor list using below openstack command:

openstack flavor list
+--------------------------------------+-------------+--------+------+-----------+-------+-----------+
| ID                                   | Name        |    RAM | Disk | Ephemeral | VCPUs | Is Public |
+--------------------------------------+-------------+--------+------+-----------+-------+-----------+
| 12ded228-1a7f-4d35-b994-7dd394a6ca90 |gpu-su-a100.2| 196608 |   20 |         0 |    24 | True      |
| 15581358-3e81-4cf2-a5b8-c0fd2ad771b4 | mem-su.8    |  65536 |   20 |         0 |     8 | True      |
| 17521416-0ecf-4d85-8d4c-ec6fd1bc5f9d | cpu-su.1    |   2048 |   20 |         0 |     1 | True      |
| 2b1dbea2-736d-4b85-b466-4410bba35f1e | cpu-su.8    |  16384 |   20 |         0 |     8 | True      |
| 2f33578f-c3df-4210-b369-84a998d77dac | mem-su.4    |  32768 |   20 |         0 |     4 | True      |
| 4498bfdb-5342-4e51-aa20-9ee74e522d59 | mem-su.1    |   8192 |   20 |         0 |     1 | True      |
| 7f2f5f4e-684b-4c24-bfc6-3fce9cf1f446 | mem-su.16   | 131072 |   20 |         0 |    16 | True      |
| 8c05db2f-6696-446b-9319-c32341a09c41 | cpu-su.16   |  32768 |   20 |         0 |    16 | True      |
| 9662b5b2-aeaa-4d56-9bd3-450deee668af | cpu-su.4    |   8192 |   20 |         0 |     4 | True      |
| b3377fdd-fd0f-4c88-9b4b-3b5c8ada0732 |gpu-su-a100.1|  98304 |   20 |         0 |    12 | True      |
| e9125ab0-c8df-4488-a252-029c636cbd0f | mem-su.2    |  16384 |   20 |         0 |     2 | True      |
| ee6417bd-7cd4-4431-a6ce-d09f0fba3ba9 | cpu-su.2    |   4096 |   20 |         0 |     2 | True      |
+--------------------------------------+------------+--------+------+-----------+-------+------------+

Get the image name and its ID,

openstack image list  | grep almalinux-9
| 263f045e-86c6-4344-b2de-aa475dbfa910 | almalinux-9-x86_64  | active |

Get Private Virtual network details, which will be attached to the VM:

openstack network list
+--------------------------------------+-----------------+--------------------------------------+
| ID                                   | Name            | Subnets                              |
+--------------------------------------+-----------------+--------------------------------------+
| 43613b84-e1fb-44a4-b1ea-c530edc49018 | provider        | 1cbbb98d-3b57-4f6d-8053-46045904d910 |
| 8a91900b-d43c-474d-b913-930283e0bf43 | default_network | e62ce2fd-b11c-44ce-b7cc-4ca943e75a23 |
+--------------------------------------+-----------------+--------------------------------------+

Find the Security Group:

openstack security group list
+--------------------------------------+----------------------------------+-----------------------+----------------------------------+------+
| ID                                   | Name                             | Description            |Project                          | Tags |
+--------------------------------------+----------------------------------+-----------------------+----------------------------------+------+
| 8285530a-34e3-4d96-8e01-a7b309a91f9f | default                          | Default security group |8ae3ae25c3a84c689cd24c48785ca23a | []   |
| bbb738d0-45fb-4a9a-8bc4-a3eafeb49ba7 | ssh_only                         |                        |8ae3ae25c3a84c689cd24c48785ca23a | []   |
+--------------------------------------+----------------------------------+-----------------------+----------------------------------+------+

Find the Key pair, in my case you can choose your own,

openstack keypair list | grep -i cloud_key
| cloud_key | d5:ab:dc:1f:e5:08:44:7f:a6:21:47:23:85:32:cc:04 | ssh  |

Note

Above details will be different for you based on your project and env.

Launch an instance from an Image

Now we have all the details, let’s create a virtual machine using "openstack server create" command

Syntax :

openstack server create --flavor {Flavor-Name-Or-Flavor-ID } \
    --image {Image-Name-Or-Image-ID} \
    --nic net-id={Network-ID} \
    --user-data USER-DATA-FILE \
    --security-group {Security_Group_ID} \
    --key-name {Keypair-Name} \
    --property KEY=VALUE \
    <Instance_Name>

Important Note

If you boot an instance with an "Instance_Name" greater than 63 characters, Compute truncates it automatically when turning it into a hostname to ensure the correct functionality of dnsmasq.

Optionally, you can provide a key name for access control and a security group for security.

You can also include metadata key and value pairs: --key-name {Keypair-Name}. For example, you can add a description for your server by providing the --property description="My Server" parameter.

You can pass user data in a local file at instance launch by using the --user-data USER-DATA-FILE parameter. If you do not provide a key pair, you will be unable to access the instance.

You can also place arbitrary local files into the instance file system at creation time by using the --file <dest-filename=source-filename> parameter. You can store up to five files. For example, if you have a special authorized keys file named special_authorized_keysfile that you want to put on the instance rather than using the regular SSH key injection, you can add the –file option as shown in the following example.

--file /root/.ssh/authorized_keys=special_authorized_keysfile

To create a VM in Specific "Availability Zone and compute Host" specify --availability-zone {Availbility-Zone-Name}:{Compute-Host} in above syntax.

Example:

openstack server create --flavor cpu-su.2 \
    --image almalinux-8-x86_64 \
    --nic net-id=8ee63932-464b-4999-af7e-949190d8fe93 \
    --security-group default \
    --key-name cloud_key \
    --property description="My Server" \
    my-vm

NOTE: To get more help on "openstack server create" command , use:

openstack -h server create

Detailed syntax:

openstack server create
  (--image <image> | --volume <volume>)
  --flavor <flavor>
  [--security-group <security-group>]
  [--key-name <key-name>]
  [--property <key=value>]
  [--file <dest-filename=source-filename>]
  [--user-data <user-data>]
  [--availability-zone <zone-name>]
  [--block-device-mapping <dev-name=mapping>]
  [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,port-id=port-uuid,auto,none>]
  [--network <network>]
  [--port <port>]
  [--hint <key=value>]
  [--config-drive <config-drive-volume>|True]
  [--min <count>]
  [--max <count>]
  [--wait]
  <server-name>

Note

Similarly, we can lauch a VM using bootable "Volume" as described here.

Now verify the test vm "my-vm" is "Running" using the following commands:

openstack server list | grep my-vm

OR,

openstack server show my-vm

Check console of virtual machine

The console for a Linux VM can be displayed using console log.

openstack console log show --line 20 my-vm

Associating a Floating IP to VM

To Associate a Floating IP to VM, first get the unused Floating IP using the following command:

openstack floating ip list | grep None | head -2
| 071f08ac-cd10-4b89-aee4-856ead8e3ead | 169.144.107.154 | None |
None                                 |
| 1baf4232-9cb7-4a44-8684-c604fa50ff60 | 169.144.107.184 | None |
None                                 |

Now Associate the first IP to the server using the following command:

openstack server add floating ip my-vm 169.144.107.154

Use the following command to verify whether Floating IP is assigned to the VM or not:

openstack server list | grep my-vm
| 056c0937-6222-4f49-8405-235b20d173dd | my-vm | ACTIVE  | ...
nternal=192.168.15.62, 169.144.107.154 |

Remove existing floating ip from the VM

openstack server remove floating ip <INSTANCE_NAME_OR_ID> <FLOATING_IP_ADDRESS>

Get all available security group in your project

openstack security group list
+--------------------------------------+----------+-----------------------+----------------------------------+------+
| 3ca248ac-56ac-4e5f-a57c-777ed74bbd7c | default  | Default security group |
f01df1439b3141f8b76e68a3b58ef74a | []   |
| 5cdc5f33-78fc-4af8-bf25-60b8d4e5db2a | ssh_only | Enable SSH access.     |
f01df1439b3141f8b76e68a3b58ef74a | []   |
+--------------------------------------+----------+-----------------------+----------------------------------+------+

Add existing security group to the VM

openstack server add security group <INSTANCE_NAME_OR_ID> <SECURITY_GROUP>

Example:

openstack server add security group my-vm ssh_only

Remove existing security group from the VM

openstack server remove security group <INSTANCE_NAME_OR_ID> <SECURITY_GROUP>

Example:

openstack server remove security group my-vm ssh_only

Alternatively, you can use the openstack port unset command to remove the group from a port:

openstack port unset --security-group <SECURITY_GROUP> <PORT>

Adding volume to the VM

openstack server add volume
  [--device <device>]
  <INSTANCE_NAME_OR_ID>
  <VOLUME_NAME_OR_ID>

Remove existing volume from the VM

openstack server remove volume <INSTANCE_NAME_OR_ID> <volume>

Reboot a virtual machine

openstack server reboot my-vm

Deleting Virtual Machine from Command Line

openstack server delete my-vm