How to Create and Delete Virtual Machine(VM) from Command line in OpenStack

As we all of know that Openstack is getting popular day by day. Most of the organizations are moving their IT infrastructure from traditional virtualization to the private cloud like OpenStack. Openstack is available in two versions:

  • Community OpenStack – As the name suggests, it is an open source and community based private cloud. Community usually release new version of openstack in every 6 months
  • Enterprise OpenStack – As the name suggests, it is commercial openstack, different vendors created their own openstack like Red hat has its own RHOSP ( Red Hat Openstack Platform), Mirantis Openstack,  Canonical OpenStack, SUSE OpenStack Cloud and VIO (VMware Integrated OpenStack).

Being a cloud administrator we generally create and delete virtual machines from GUI (Horizon dashboard). But a Linux geek always prefer to use command line to do all day to day openstack operations task, so in this article I will demonstrate how to create and delete virtual machine from the command line.

Create-Delete-VMs-Command-Line-Openstack

Creating Virtual Machine from command Line

To create virtual machine from command line, first login to the controller node. Create a project credential file. In this tutorial I will be using non production project credential.

~]# source  keystone_linuxtechi_rc

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,

[[email protected] ~]# openstack flavor list
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+
| ID                                   | Name      |   RAM | Disk | Ephemeral | VCPUs | Is Public |
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+
| 1                                    | m1.tiny   |   512 |    1 |         0 |     1 | True      |
| 1093ac5d-9383-4ffb-96d8-4fbf9e28fdbf | Size15    | 10240 |  100 |         0 |     4 | True      |
| 1cf5a2ec-b111-403f-97dc-5670836a1d03 | Size3     |  2048 |   50 |         0 |     1 | True      |
| 3                                    | m1.medium |  4096 |   40 |         0 |     2 | True      |
| 4                                    | m1.large  |  8192 |   80 |         0 |     4 | True      |
| 5                                    | m1.xlarge | 16384 |  160 |         0 |     8 | True      |
| 5109b174-7348-4b21-9f6b-785adc842cf0 | Size7     |  4096 |  100 |         0 |     2 | True      |
| 711b0acc-5a1a-4514-93d1-c11b8862cea1 | Size8     |  2096 |  100 |         0 |     2 | True      |
| 71e8b1b8-43a6-4328-a749-f065da988e8f | Size12    |  4096 |   50 |         0 |     2 | True      |
| 73ac76f9-026e-4038-b34a-bac542141351 | Size6     |  4096 |  100 |         0 |     2 | True      |
| 79e6456e-6238-4502-b086-222e97e2989c | Size11    |  8192 |  100 |         0 |     2 | True      |
| 85c9f8ef-e89d-4422-a8fc-88c29d0b8f97 | size10    |  6144 |   50 |         0 |     2 | True      |
| a9912a54-e389-4da5-9be8-c22b033d59f3 | Size2     |  8192 |  150 |         0 |     2 | True      |
| ae23d0a5-777b-4520-b2e5-d5776cb88a55 | Size14    |  7168 |  100 |         0 |     7 | True      |
| ce236593-7324-4408-945b-863932e70df9 | m1.small  |  2048 |   25 |         0 |     1 | True      |
| d7c2ff23-8f3d-424b-a42d-c3027ccd05d3 | Size4     |  4096 |   30 |         0 |     2 | True      |
| e02efedd-f9d4-42df-9c89-096a8093291f | Size16    | 16384 |  200 |         0 |     4 | True      |
| e323b927-411a-40a3-8d02-0dac446f6464 | Size13    |  8192 |  110 |         0 |     3 | True      |
| f6125634-93e5-4531-b678-e91b4d75aed9 | Size5     |  4096 |  200 |         0 |     1 | True      |
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+
[[email protected] ~]#

Get the image name and its id,

[[email protected] ~]# openstack image list  | grep cirros
| 02fc6c59-8dc2-4a88-90fa-b811077b6df9 | cirros   | active |
[[email protected] ~]#

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

[[email protected] ~]# openstack network list | grep -i nonprod
| e0be93b8-728b-4d4d-a272-7d672b2560a6 | TnQ-NonProd-Internal | 02d5eec2-6ca1-4e73-b4a4-08a7a2d6a4e2 |
[[email protected] ~]#

Find the Security Group

[[email protected] ~]# openstack security group list | grep SG
| 2266f789-3c4d-4751-8609-041c09625860 | LinuxTechi_SG | LinuxTechi SG | 49853ccef4864d6dbc62c024c10ca543 |
[[email protected] ~]#

Find the Key pair, in my case I have below ,

[[email protected] ~]# openstack keypair list | grep -i linuxtechi
| linuxtechi | e3:12:89:fd:97:75:75:be:8f:41:75:26:09:03:4d:9f |
[[email protected] ~]#

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

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

Syntax :

# openstack server create --flavor {flavor-name} --image {Image-Name-Or-Image-ID}  --nic net-id={Network-ID} --security-group {Security_Group_ID} –key-name {Keypair-Name} <VM_Name>

Example:

[[email protected] ~]# openstack server create --flavor m1.tiny --image cirros --nic net-id=e0be93b8-728b-4d4d-a272-7d672b2560a6 --security-group LinuxTechi_SG  --key-name linuxtechi pkumar_test_vm
+--------------------------------------+-----------------------------------------------+
| Field                                | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          |                                               |
| OS-EXT-SRV-ATTR:host                 | None                                          |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | None                                          |
| OS-EXT-SRV-ATTR:instance_name        | instance-000002b3                             |
| OS-EXT-STS:power_state               | 0                                             |
| OS-EXT-STS:task_state                | scheduling                                    |
| OS-EXT-STS:vm_state                  | building                                      |
| OS-SRV-USG:launched_at               | None                                          |
| OS-SRV-USG:terminated_at             | None                                          |
| accessIPv4                           |                                               |
| accessIPv6                           |                                               |
| addresses                            |                                               |
| adminPass                            | uUf3Nrq5P5ei                                  |
| config_drive                         |                                               |
| created                              | 2018-07-07T07:56:15Z                          |
| flavor                               | m1.tiny (1)                                   |
| hostId                               |                                               |
| id                                   | 056c0937-6222-4f49-8405-235b20d173dd          |
| image                                | cirros (02fc6c59-8dc2-4a88-90fa-b811077b6df9) |
| key_name                             | linuxtechi                                    |
| name                                 | pkumar_test_vm                                |
| os-extended-volumes:volumes_attached | []                                            |
| progress                             | 0                                             |
| project_id                           | 49853ccef4864d6dbc62c024c10ca543              |
| properties                           |                                               |
| security_groups                      | [{u'name': u'LinuxTechi_SG'}]                 |
| status                               | BUILD                                         |
| updated                              | 2018-07-07T07:56:15Z                          |
| user_id                              | 322c33b03c424563b43642994cae0709              |
+--------------------------------------+-----------------------------------------------+
[[email protected] ~]#

Note : To get more help on “openstack server create” command , use

# openstack -h server create

Now Verify the test vm status using below commands,

[[email protected] ~]# openstack server list | grep pkumar
| 056c0937-6222-4f49-8405-235b20d173dd | pkumar_test_vm | ACTIVE | TnQ-NonProd-Internal=192.168.15.62               |
[[email protected] ~]#

or

[[email protected] ~]# openstack server show pkumar_test_vm

Associating a Floating IP to VM

To Associate a floating IP to VM, first get the unused floating IP using beneath command,

[[email protected] ~]# openstack ip floating 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                                 |
[[email protected] ~]#

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

[email protected] ~]# openstack ip floating add  169.144.107.154  pkumar_test_vm
[[email protected] ~]#

Use the beneath command  to verify whether floating ip is assigned to the VM or not

[[email protected] ~]# openstack server list | grep pkumar_test_vm
| 056c0937-6222-4f49-8405-235b20d173dd | pkumar_test_vm | ACTIVE  | TnQ-NonProd-Internal=192.168.15.62, 169.144.107.154 |
[[email protected] ~]#

Now you can access this VM from outside using the floating IP.

Create a Virtual machine in Specific Availability zone and compute Host

Let’s assume we want to create a test VM on compute-02 in NonProduction Availability Zone. To accomplish this pass “–availability-zone” parameter in openstack server create command,

Syntax would be something like below:

# openstack server create --flavor {flavor-name} --image {Image-Name-Or-Image-ID}  --nic net-id={Network-ID} --security-group {Security_Group_ID} --key-name {Keypair-Name} --availability-zone {Availbility-Zone-Name}:{Compute-Host}    <VM_Name>

Example:

[[email protected] ~]# openstack server create --flavor m1.tiny --image cirros --nic net-id=e0be93b8-728b-4d4d-a272-7d672b2560a6 --security-group LinuxTechi_SG  --key-name linuxtechi --availability-zone NonProduction:compute-02  nonprod_test_vm

Deleting Virtual Machine from Command Line

Use “openstack server delete” command to delete the virtual machines, let’s assume we want to delete above created test vm.

[[email protected] ~]# openstack server delete  pkumar_test_vm
[[email protected] ~]#

This conclude our article, I hope you got basic idea on how to create and delete virtual machine from command line in openstack.

Read Also : How to Create Availability Zones in OpenStack from Command Line

2 Responses

  1. Alex Ted says:

    great article, ty!
    Can u say how to define Volume size when create vm?
    in my case i got error:
    Block Device Mapping is Invalid: You specified more local devices than the limit allows (HTTP 400) (Request-ID: req-503a768e-e92e-434b-86f4-1a88ebd2abea)

    • Pradeep Kumar says:

      Hi Alex,

      There are two ways to create a VM, either on Compute Internal Disk(ephemeral disk) and Cinder Block Storage Volume. When we go with first option then disk size is picked from flavor that we specify during VM provisioning.

      When we provision a vm using Block storage Volume ( i.e Cinder Volume) then we specify disk size while creating Bootable volume, refer below command to create bootable volume using glance image,

      # cinder create –image-id {enter-image-id} –display-name bootable-volume 15

      In the above command, 15 GB is size of volume.

Leave a Reply to Pradeep Kumar Cancel reply

Your email address will not be published. Required fields are marked *

Pin It on Pinterest