OVM series part 1: Getting started with OVMCLI

Intro

I have been introduced to Oracle OVM rather accidentally. I was more familiar with the traditional vmware or hyper-V but when I was asked to help a client to implement their ovm backups, I got more curious about it. This post is the first of a series of 3.

I will try to show some basic examples on how to create resources like a vm using OVMCLI, since the web Console equivalent is overrated πŸ™‚. OVM Manager CLI supports the same functions as those on the browser interface but can be scripted & fully automated to enable flexibility to help deploy and manage your OVM environment. CLI changes are reflected in real time in the OVM Manager Console.

Concepts

OVM Server is based upon Xen hypervisor technology, and includes Oracle VM Agent. Its Linux kernel is run as Dom0 to manage one or more DomU virtual machines, each of which could be Linux/ Solaris, or Microsoft Windows.

OVM Manager is a server side component that allows you to configure and manage your Oracle VM environment. It includes both a CLI and a web-based user interface. Users can create server pools and virtual machines, as well as manage networking and storage.

All right, let’s see how these commands work.

CLI examples

First let’s get acquainted with the CLI environment. How to connect to it and how its commands look like.

Create user
Admin user is created by default during the installation of ovm manager but additional users can be created.

[root@ovm-manager01 bin]# cd  /u01/app/oracle/ovm-manager-3/bin/
[root@ovm-manager01 bin]# ./ovm_admin --createuser    

Connection to OVMMCLI
It can be done through  ovm manger’s hostname or IP

[ovm-mgr01]# ssh -l admin localhost -p 10000
           # export ovmmhost=`hostname -s`
[ovm-mgr01]# ssh -l admin $ovmmhost -p 10000
           # export ovmip=10.10.30.60
[ovm-mgr01]# ssh -l admin $ovmip -p 10000

     Known connection issue:

         Error β€œ OVMM CLI connection is not available on port 10000 host ovm-mgr01”

        Workarounds

  • Check /start ovmcli service if stopped

    [ovm-mgr01]#  service ovmcli status|start  
    
  • If Both diffie-hellman-group1-sha1 key exchange and “ssh-dss” host keys used by OVMMCLI ssh-server are disabled. Try them explicitly during the connection (openssh-client 7+) :

    # ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss -l admin  localhost -p 10000
    
  • Likely Solution:
    Upgrade OVMM to 3.4.5 release or higher (i.e 3.4.6 ) if the version is older.


OVMMCLI commands
 

  • Like any CLI linked to an API CRUD like commands are available

create <objectType> [(attribute1)="value1"] ... [on <objectType> <instance>]
delete <objectType> <instance>
edit   <objectType> <instance>  (attribute1)="value1" ...
list   <objectType>
show   <objectType> <instance>
-- For Most Object Types with Children:
add    <objectType> <instance> to <objectType> <instance>
remove <objectType> <instance> from <objectType> <instance>

- Object types: ServerPool/vm/Vnic/Repository/Fileserver/network/Vdisk/physicaldisk …etc.
- Instance: { id=value | name=value }
  • Client Session Commands

set alphabetizeAttributes=[Yes|No]  ---> display output in alphabetical order.
set commandMode=[Asynchronous|Synchronous] --->  default CLI run mode is Synchronous.
set commandTimeout=[1-43200]               ---> in seconds.
set endLineChars=[CRLF,CR,LF]       ---> end of line character to use for your SSH client.
set outputMode=[Verbose,XML,Sparse] --->  output mode for command results.
showclisession                      ---> list CLI session options and their settings
  • Other Commands:

showallcustomcmds             ---> list all commands and the objects that they relate to.
showcustomcmds <objectType>   ---> list all commands for an objectType (i.e vm)
showobjtypes                  ---> list all object types.
showversion                   ---> Shows the version of OVMM and its CLI.
exit

Our environment

This image has an empty alt attribute; its file name is image-10.png

1. Create a VM

  • Syntax

create Vm [ memory=value ] [ memoryLimit=value ] [ cpuCount=value ] [ cpuCountLimit=value ] [ cpuPriority=value ] [ cpuUtilizationCap=value ] [ highAvailability= { Yes | No } ] [ hugePagesEnabled= { Yes | No } ] [ osType=value ] [ restartActionOnCrash= { RESTART | STOP | RESTART_AFTER_DUMP | STOP_AFTER_DUMP } ] [ mouseType= { OS_DEFAULT | PS2_MOUSE | USB_MOUSE | USB_TABLET } ] domainType= { XEN_HVM | XEN_HVM_PV_DRIVERS | XEN_PVM| LDOMS_PVM | UNKNOWN } [ keymapName= { en-us |..| fr } ] [ bootOrder= { PXE | DISK | CDROM } ] [ networkInstallPath=value ] repository=value [ server=value ] [ startPolicy= { BEST_SERVER | BALANCE_SERVER | CURRENT_SERVER | USE_POOL_POLICY } ] [ viridian= { Yes | No } ] name=value [ description=value ] on ServerPool instance

  • Example

OVM> create Vm name=My_server memory=8192 memoryLimit=8192 cpuCount=3 cpuCountLimit=4      osType="Microsoft Windows Server 2012" repository=OVM_repo1 domainType=XEN_HVM     server=ovs-01 startPolicy=BEST_SERVER on ServerPool name=OVM-Lab ;

Time: 2021-03-28 02:47:35,332 EDT Data:id:0004fb0000060000549e161d2ea0400b  name:My_server

  • Note: You can always edit the vm’s attributes after creation (i.e below domain Type has windows drivers)

OVM> edit Vm name=My_server domainType=XEN_HVM_PV_DRIVERS

2. Create a virtual disk to use as the boot disk

  • Syntax

Create VirtualDisk size=value shareable= { Yes | No } sparse= { Yes | No } name=value [ description=value ] on Repository instance

  • Example

OVM> create VirtualDisk name=My_disk size=60 sparse=Yes  shareable=No on Repository name=OVM_repo2

Time: 2021-03-28 02:48:17,120 EDT Data: id:0004fb0000120000edae47c4bf5252c8.img  name:My_disk

3. Map the virtual disk to the virtual machine

  • Syntax

OVM> create VmDiskMapping slot=value { physicalDisk=value | virtualDisk=value | virtualCd= { value | EMPTY_CDROM } } name=value [ description=value ] on Vm instance

  • Example

OVM> create VmDiskMapping slot=0 virtualDisk=My_disk name="My server Boot Disk" on Vm name=My_server Time: 2021-03-28 02:49:10,135 EDT Data:id:0004fb0000130000dce7093f1fb141c4  name:My_server Boot Disk

4. Map an ISO file to the virtual machine

  • Syntax

create VmDiskMapping slot=value  { physicalDisk=value | virtualDisk=value | virtualCd= { value | EMPTY_CDROM } } name=value [ description=value ] on Vm instance

  • Example (here the Iso is located in the same repository than the vm config file OVM_repo1)

OVM> create VmDiskMapping slot=1 virtualCd=WINDOWS_2012R2.iso  name="DVDROM Drive"     on Vm name=My_server

Time: 2021-03-28 02:49:42,553 EDT Data:id:0004fb00001300004693d433aafceca7  name:DVDROM Drive

       with 100% completion but a warning that wasn’t impactful .

5. Set up the disk boot order

  • Example

OVM> edit Vm name=My_server bootOrder='CDROM,DISK' startPolicy=BEST_SERVER Status: Success   Time: 2021-03-28 02:50:30,114 EDT             JobId: 1585378228467

6. Create a VNIC and add it to the virtual machine

  • Syntax

create Vnic network=value name=value [ macAddress=value ] [ description=value ] on Vm instance

  • Example

OVM> create Vnic name=Ethernet1 network=OVM-LAB-NET on Vm name=My_server Status: Success  Time: 2021-03-28 02:51:46,227 EDT                                        JobId: 1585378294963                                                       Data: id:0004fb0000070000e6d766a1ce769034  name:Ethernet1

7- Start the vm

OVM> start vm name=My_server         -- Restart a vm OVM> restart { Server | Vm }   name =value -- Resume OVM> resume  Vm   name=My_server --> Miscellaneous <-- -- Kill a server or a vm OVM> kill { Server | Vm } name =value -- Migrate a vm OVM> migrate Vm name=My_server destServer=MyServer

OVM> migrate Vm name=My_server destServerPool=MyServerPool 


List Commands

  • Repositories

OVM> list repository       Command: list repository  Status: Success       Time: 2020-03-19 19:47:16,227 EDT Data: id:0004fb0000030000d6744a0a7e3649db  name:OVM_repo1 id:0004fb0000030000394dd4b78643b4b5  name:OVM_repo2

  • Servers

OVM> list server      Command: list server     Status: Success      Time: 2020-02-24 18:08:27,900 EST Data:     id:ff:20:00:08:ff:ff:ff:ff:ff:ff:00:21:28:e7:df:8e  name:ovs-01     id:08:00:20:ff:ff:ff:ff:ff:ff:ff:a0:df:e7:28:21:00  name:ovs-02

  • Fileserver

OVM> list fileserver      Command: list fileserver     Status: Success      Time: 2020-02-24 18:10:27,634 EST      Data:        id:0004fb0000090000033d51d61b4a92fa  name:Oracle ZFS

Show Commands

  • VM

OVM> show Vm name=My_Server
Data:
 Status = Stopped
 Memory (MB) = 4096
 Max. Memory (MB) = 4096
 Processors = 2
 Max. Processors = 2
 VmDiskMapping 1 = 0004fb00001300002b1908da5ee6c251  [Mapping for disk Id
  • Virtual disk

OVM> show virtualdisk name=0004fb0000120000ed4b60a8dea41e5d.img                            
Data:                                                                                 
Absolute Path = /dev/mapper/3600144f08e../VirtualDisks/0004fb0000120000ed4b60a8dea41e5d.img
Mounted Path = /OVS/Repositories/0004fb../VirtualDisks/0004fb0000120000ed4b60a8dea41e5d.img
VmDiskMapping 1 = 0004fb000..  [Mapping for disk Id (0004fb0000120000ed4b60a8dea41e5d.img)]

 Max (GiB) = 300.0                                                                      
 Used (GiB) = 278.45                                                                  
 Shareable = No        
Repository Id = 0004fb00000300007292ef76d1746897  [VM Storage]     

Add a server to the server pool

  • In case the server is unassigned to a pool

OVM> add Server name=ovs-03 to ServerPool name=OVM-LaB

CONCLUSION

I didn’t want to put too much in one post but you get the gist of how the CLI interface works in OVM. The list of object types and the related commands is quite long. However, If you want to explore them in detail you can refer to the below document.
Next we will be talking about the logs available for OVM and some diagnostic tools required for SRs .

Thank you for reading