Virtual Machine Definition File 2.2

Virtual Machine Definition File 2.2

http://archives.opennebula.org/documentation:archives:rel2.2:template#disks_device_mapping

A template file consists of a set of attributes that defines a Virtual Machine. The syntax of the template file is as follows:

  • Anything behind the pound or hash sign (#) is a  comment.
  • Strings are delimited with double quotes (”), if the a double quote is part of the string it needs to be escaped (\”).
  • Single Attributes are in the form:

 

NAME=VALUE

 

  • Vector Attributes that contain several values can be defined as follows:

 

NAME=[NAME1=VALUE1,NAME2=VALUE2...]

 

  • Vector Attributes must contain at least one value.
  • Attribute names are case insensitive, in fact the names are converted to uppercase internally.

Capacity Section

The following attributes can be defined to specified the capacity of a VM.

AttributeDescription
NAMEName that the VM will get for description purposes. If NAME is not supplied a name generated by one will be in the form of one-<VID>.
MEMORYAmount of RAM required for the VM, in Megabytes.
CPUPercentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.
VCPUNumber of virtual cpus. This value is optional, the default hypervisor behavior is used, usually one virtual CPU

Example:

  NAME   = test-vm
  MEMORY = 128 

  CPU    = 1

 

OS and Boot Options Section

The OS system is defined with the OS vector attribute. The following sub-attributes are supported:

Note the hypervisor column states that the attribute is Optional, Mandatory, or - not supported for that hypervisor

OS Sub-AttributeDescriptionXENKVM
ARCHCPU architecture to virtualization-M (default i686)
KERNELpath to the OS kernel to boot the imageM see (*)O
INITRDpath to the initrd imageO (for kernel)O (for kernel)
ROOTdevice to be mounted as rootO (for kernel)O (for kernel)
KERNEL_CMDarguments for the booting kernelO (for kernel)O (for kernel)
BOOTLOADERpath to the bootloader executableM see (*)O
BOOTboot device type: hd,fd,cdrom ,network-M

(*) Xen needs a kernel or a bootloader to be specified. If both are set in the template, the kernel boot method will be used.

Example, a VM booting from sda1 with kernel /vmlinuz :

OS = [ KERNEL     = /vmlinuz,
       INITRD     = /initrd.img,
       ROOT       = sda1,
       KERNEL_CMD = "ro xencons=tty console=tty1"]

 

Disks Section

The disks of a VM are defined with the DISK vector attribute. You can define as many DISK attributes as you need.

There are two ways to attach a disk to a VM: using an OpenNebula image from the image repository, or declaring a disk type that can be created from a source disk file in your system. Both kinds of disks can be combined, with some considerations to be taken into account.

Using an Image

In OpenNebula 2.0 the image repository was introduced. To use the registered images in your VMs, you need to specify either the IMAGE or the IMAGE_ID sub-attributes.

Once the VM machine is shut down, the changes made to the images can be saved back to the repository. To do so, use theonevm saveas command.

DISK Sub-AttributeM / ODescription
IMAGEMName of the Image to use
IMAGE_IDO (M if IMAGE is not present)ID of the Image to use
BUSOType of disk device to emulate: idescsi
TARGETODevice to map image disk. If set, it will overwrite the default device mapping.
DRIVEROSpecific image mapping driver. KVM: rawqcow2. Xen:tap:aio:file:. VMware unsupported

Declaring the Disk Type

You can define a DISK from a disk file without having to register it first in the image repository. There are two special disk types that are created on-the-fly in the target resource: swap and fs. The following sub-attributes for DISK are supported:

Note the hypervisor column states that the attribute is Optional, Mandatory, or - not supported for that hypervisor

DISK Sub-AttributeDescriptionXENKVM
TYPEdisk type:floppydiskcdromswapfs,blockO (only swapfs and block) (if not present,disk will be assumed)O
SOURCEdisk file location path or URLMM
SIZEsize in MB for swapfs and block imagesM (for swap and fs)M (for swapand fs)
FORMATfilesystem type for the fs imagesM (for fs)M (for fs)
TARGETdevice to map diskM (O for swap)M (O forswap)
CLONEclone this image yes (default), or noOO
SAVEsave this image after shutting down the VM yes, or no (default)OO
READONLYyes, or no (default)OO
BUStype of disk device to emulate: idescsi-O
DRIVERspecial disk mapping options. KVM: raw,qcow2. Xen: tap:aio:file:OO

 

:!: When using the Image Catalog (not specifying the SOURCE attribute), these attributes (this note especially applies to SAVE and  CLONE attributes) will be overridden and automatically modified by the Image Catalog module.

 

Disks Device Mapping

When you use images in your VM template, you don't have to define the target device to mount them. OpenNebula will mount the disks as follows:

  • sdaOS type Image.
  • sdb: Contextualization CDROM.
  • sdc: CDROM type Image.
  • sdd: Swap disk.
  • sd[e,f,g…]: DATABLOCK type Images.

This automatic mapping doesn't take into account any disk defined by type (those that do not use an image from the repository), apart from the swap ones.

Only one OS type image per VM template can be declared, the same applies for CDROM type images. You can use as many DATABLOCK images as you need. Please visit the guide for managing images and the image template reference to learn more about the different image types.

You can find a complete description of the contextualization features in the contextualization guide.

The device prefix sd can be changed to hd or other prefix that suits your virtualization hypervisor requirements. You can find more information in the configuration guide and the daemon configuration guide.

An Example

This a sample section for disks. There are three disks using the image repository, and two beeing defined by type. The fs disk target has been set to sdg to avoid conflicts with the other disks that are mapped automatically. Note that fs and swap are generated on-the-fly:

 

# OS image, mapped to sda.
DISK = [ IMAGE     = "Debian 5.0" ]

# First DATABLOCK image, mapped to sde
DISK = [ IMAGE     = "Testing results" ]

# Second DATABLOCK image, mapped to sdf
DISK = [ IMAGE     = "Experiment scripts" ]

# swap, sdd
DISK = [ TYPE     = swap,
         SIZE     = 1024,
         READONLY = "no" ]

DISK = [ TYPE   = fs,
         SIZE   = 4096,
         FORMAT = ext3,
         SAVE   = yes,
         TARGET = sdg ]

 

For more information on image management and moving please check the Storage guide.

Network Section

Each network interface of a VM is defined with the NIC vector attribute. You can define as many NIC attributes as you need. The following sub-attributes for NIC are supported:

Note the hypervisor column states that the attribute is Optional, Mandatory, or - not supported for that hypervisor

NIC Sub-AttributeDescriptionXENKVM
NETWORKName of the network, as defined by onevnet to attach this deviceOO
NETWORK_IDID of the network, to attach this deviceOO
IPRequest an specific IP from the NETWORKOO
MACHW address associated with the network interfaceOO
BRIDGEName of the bridge the network device is going to be attached to.OO
TARGETname for the tun device created for the VM-O
SCRIPTname of a shell script to be executed after creating the tun device for the VM-O
MODELhardware that will emulate this network interface. With Xen this is the type attribute of the vif.OO

Example, a VM with two NIC attached to two different networks, one make use of the Virtual Network Manager lease feature:

NIC = [ NETWORK = "Public" ]

NIC = [ MAC    = "00:11:22:33:44:55"
        BRIDGE = eth0 ]

 

For more information on setting up virtual networks please check the Managing Virtual Networks guide.

I/O Devices Section

The following I/O interfaces can be defined for a VM:

Note the hypervisor column states that the attribute is Optional, Mandatory, or - not supported for that hypervisor

AttributeDescriptionXENKVM
INPUTDefine input devices, available sub-attributes:
- TYPE: values are mouse or tablet
- BUS: values are usbps2 or xen
-O
GRAPHICSWether the VM should export its graphical display and how, available sub-attributes:
- TYPE: values: vnc sdl
- LISTEN: IP to listen on.
- PORT: port for the VNC server
- PASSWD: password for the VNC server
- KEYMAP: keyboard configuration locale to use in the VNC display
OO

Example:

GRAPHICS = [ 
  TYPE    = "vnc",              
  LISTEN  = "0.0.0.0",
  PORT    = "5"]

 

 

:!: For KVM hypervisor the port number is a real one, not the VNC port. So for VNC port 0 you should specify 5900, for port 1 is 5901 and so on.

 

 

:!: If the user does not specify the port variable, OpenNebula will automatically assign  $VNC_BASE_PORT + $VMID, allowing to generate different ports for VMs so they do not collide. The  VNC_BASE_PORT is specified inside the oned.conf file.

 

Context Section

Context information is passed to the Virtual Machine via an ISO mounted as a partition. This information can be defined in the VM template in the optional section called Context, with the following attributes:

AttributeDescription
VARIABLEVariables that store values related to this virtual machine or others. The name of the variable is arbitrary (in the example, we use hostname).
FILESspace-separated list of paths to include in context device.
TARGETdevice to attach the context ISO.

The values referred to by VARIABLE can be defined :

  • Hardcoded values:
    HOSTNAME   = "MAINHOST"
  • Using template variables
    • $<template_variable>: any single value variable of the VM template, like for example:
      IP_GEN     = "10.0.0.$VMID"
    • $<template_variable>[<attribute>]: Any single value contained in a multiple value variable in the VM template, like for example:
      IP_PRIVATE = $NIC[IP]
    • $<template_variable>[<attribute>, <attribute2>=<value2>]: Any single value contained in a multiple value variable in the VM template, setting one atribute to discern between multiple variables called the same way, like for example:
      IP_PUBLIC = "$NIC[IP, NETWORK=\"Public\"]"
  • Using Virtual Network template variables
    • $NETWORK[<vnet_attribute>, NAME=<vnet_name>]: Any single value variable in the Virtual Network (vnet_name) template, like for example:
      DNS        = "$NETWORK[DNS, NAME=\"Public\"]"

Example:

CONTEXT = [
  HOSTNAME   = "MAINHOST",
  IP_PRIVATE = "$NIC[IP]",
  DNS        = "$NETWORK[DNS, NAME=\"Public\"]",
  IP_GEN     = "10.0.0.$VMID",
  FILES      = "/service/init.sh /service/certificates /service/service.conf",
  TARGET     = "sdc"
]

 

Placement Section

The following attributes placement constraints and preferences for the VM:

Note the hypervisor column states that the attribute is Optional, Mandatory, or - not supported for that hypervisor

AttributeDescriptionXENKVM
REQUIREMENTSBoolean expression that rules out provisioning hosts from list of machines suitable to run this VM.OO
RANKThis field sets which attribute will be used to sort the suitable hosts for this VM. Basically, it defines which hosts are more suitable than others.OO

Example:

REQUIREMENTS = "CPUSPEED > 1000"
RANK         = FREECPU

 

Requirement Expression Syntax

The syntax of the requirement expressions is defined as:

 

  stmt::= expr';'
  expr::= VARIABLE '=' NUMBER
        | VARIABLE '!=' NUMBER
        | VARIABLE '>' NUMBER
        | VARIABLE '<' NUMBER
        | VARIABLE '=' STRING
        | VARIABLE '!=' STRING
        | expr '&' expr
        | expr '|' expr
        | '!' expr
        | '(' expr ')'

 

Each expression is evaluated to 1 (TRUE) or 0 (FALSE). Only those hosts for which the requirement expression is evaluated to TRUE will be considered to run the VM.

Logical operators work as expected ( less '<', greater '>', '&' AND, '|' OR, '!' NOT), '=' means equals with numbers (floats and integers). When you use '=' operator with strings, it performs a shell wildcard pattern matching.

:!: Any variable defined by the Information Manager driver can be used in the requirements. Check the configuration guide to find out how to extend the information model

:!: There are some predefined variables that can be used: NAMETOTALCPUTOTALMEMORYFREEMEMORYFREECPU,USEDMEMORYUSEDCPUHYPERVISOR

Examples:

 

  REQUIREMENTS = "NAME = \"aquila*\"" #Only aquila nodes, note the quotes
  REQUIREMENTS = FREECPU > 0.6          #Only those resources with more than 60% of free CPU

 

:!: If using OpenNebula's default match-making scheduler in a hypervisor heterogeneous environment, it is a good idea to add an extra line like the following to the VM template to ensure its placement in a VMWare hypervisor enabled machine.

 

REQUIREMENTS = "HYPERVISOR=\"vmware\""

 

:!: Template variables can be used in the REQUIREMENTS section.

  • $<template_variable>: any single value variable of the VM template.
  • $<template_variable>[<attribute>]: Any single value contained in a multiple value variable in the VM template.
  • $<template_variable>[<attribute>, <attribute2>=<value2>]: Any single value contained in a multiple value variable in the VM template, setting one atribute to discern between multiple variables called the same way.

For example, if you have a custom probe that generates a MACS attribute for the hosts, you can do short of a MAC pinning, so only VMs with a given MAC runs in a given host.

REQUIREMENTS = "MAC=\"$NIC[MAC]\""

 

Rank Expression Syntax

The syntax of the rank expressions is defined as:

 

  stmt::= expr';'
  expr::= VARIABLE
        | NUMBER
        | expr '+' expr
        | expr '-' expr
        | expr '*' expr
        | expr '/' expr
        | '-' expr
        | '(' expr ')'

 

Rank expressions are evaluated using each host information. '+', '-', '*', '/' and '-' are arithmetic operators. The rank expression is calculated using floating point arithmetics, and then round to an integer value.

:!: The rank expression is evaluated for each host, those hosts with a higher rank are used first to start the VM. The rank policy must be implemented by the scheduler. Check the configuration guide to configure the scheduler.

:!: Similar to the requirements attribute, any number (integer or float) attribute defined for the host can be used in the rank attribute

Examples:

 

  RANK = FREECPU                     # First those resources with a higher Free CPU
  RANK = FREECPU * 100 - TEMPERATURE # Consider also the CPU temperature

 

RAW Section

This optional section of the VM template is used whenever the need to pass special attributes to the underlying hypervisor arises. Anything placed in the data attribute gets passed straight to the hypervisor, unmodified.

RAW Sub-AttributeDescriptionXENKVM
TYPEPossible values are: kvm,xenOO
DATARaw data to be passed directly to the hypervisorOO

Example

RAW     = [
      TYPE  = "xen",
      DATA  = "builder=\"linux\"
               bootloader=\"/usr/lib/xen/boot/domUloader.py\"
               bootargs=\"--entry=xvda2:/boot/vmlinuz-xenpae,/boot/vmlinuz-xenpae\""]

 

 

 

转载于:https://www.cnblogs.com/heidsoft/p/3897567.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值