提交 93118c7e 编写于 作者: D Daniel P. Berrange

Update RNG schema for domains

上级 95675d4d
...@@ -8,88 +8,130 @@ ...@@ -8,88 +8,130 @@
<!-- <!--
We handle only document defining a domain We handle only document defining a domain
Currently the virtualization types supported are:
- xen, either paravirualized with a linux os or fully virtualized (hvm)
- kvm, requiring a path to the emulator in devices
- qemu, where the arch and machine must be provided in the os block
--> -->
<define name='domain'> <define name='domain'>
<element name="domain"> <element name="domain">
<choice> <ref name='hvs'/>
<ref name='xen-domain'/>
<ref name='kvm-domain'/>
<ref name='qemu-domain'/>
</choice>
</element>
</define>
<!--
Description of a Xen domain:
The description must start with the identification information and then
os or bootloader, resources, features, devices and termination information
can be given in any order.
-->
<define name='xen-domain'>
<group>
<attribute name='type'>
<value>xen</value>
</attribute>
<ref name='ids'/> <ref name='ids'/>
<interleave> <interleave>
<choice> <ref name='os'/>
<group> <ref name='clock'/>
<ref name='os'/>
<optional>
<ref name='bootloader'/>
</optional>
</group>
<group>
<ref name='bootloader'/>
<optional>
<ref name='os'/>
</optional>
</group>
</choice>
<ref name='resources'/> <ref name='resources'/>
<ref name='features'/> <ref name='features'/>
<ref name='termination'/> <ref name='termination'/>
<ref name='devices'/> <optional>
<ref name='devices'/>
</optional>
</interleave> </interleave>
</group> </element>
</define> </define>
<!-- <define name='hvs'>
Description of a QEmu domain: <attribute name='type'>
The description must start with the identification information and then <choice>
os, resources, devices can be given in any order. <value>xen</value>
The specific part are the combinations of architectures and machines <value>kvm</value>
being emulated. <value>kqemu</value>
--> <value>qemu</value>
<define name='qemu-domain'> <value>lxc</value>
<group> <value>openvz</value>
<attribute name='type'> <value>test</value>
<value>qemu</value> </choice>
</attribute> </attribute>
<ref name='ids'/> </define>
<define name='os'>
<choice>
<ref name='osxen'/>
<ref name='oshvm'/>
</choice>
</define>
<define name='osxen'>
<choice>
<group>
<optional>
<ref name='bootloader'/>
</optional>
<element name='os'>
<ref name='ostypexen'/>
<ref name='osbootkernel'/>
</element>
</group>
<group>
<ref name='bootloader'/>
<optional>
<element name='os'>
<ref name='ostypexen'/>
<optional>
<ref name='osbootkernel'/>
</optional>
</element>
</optional>
</group>
</choice>
</define>
<define name='oshvm'>
<element name='os'>
<ref name='ostypehvm'/>
<interleave> <interleave>
<element name='os'> <optional>
<element name='type'> <element name='loader'>
<choice> <ref name='absFilePath'/>
<ref name='qemu-x86'/>
<ref name='qemu-mips'/>
<ref name='qemu-sparc'/>
<ref name='qemu-ppc'/>
</choice>
<value>hvm</value>
</element> </element>
</element> </optional>
<ref name='resources'/> <choice>
<ref name='devices'/> <ref name='osbootkernel'/>
<ref name='osbootdev'/>
</choice>
</interleave> </interleave>
</group> </element>
</define>
<define name='ostypexen'>
<element name='type'>
<optional>
<attribute name='arch'>
<choice>
<value>i686</value>
<value>x86_64</value>
<value>ia64</value>
</choice>
</attribute>
</optional>
<optional>
<attribute name='machine'>
<choice>
<value>xenpv</value>
<value>xenner</value>
</choice>
</attribute>
</optional>
<choice>
<value>xen</value>
<value>linux</value>
</choice>
</element>
</define>
<define name='ostypehvm'>
<element name='type'>
<optional>
<choice>
<ref name='hvmx86'/>
<ref name='hvmmips'/>
<ref name='hvmsparc'/>
<ref name='hvmppc'/>
</choice>
</optional>
<value>hvm</value>
</element>
</define> </define>
<define name='qemu-x86'> <define name='hvmx86'>
<group> <group>
<attribute name='arch'> <attribute name='arch'>
<choice> <choice>
...@@ -106,7 +148,7 @@ ...@@ -106,7 +148,7 @@
</group> </group>
</define> </define>
<define name='qemu-mips'> <define name='hvmmips'>
<group> <group>
<attribute name='arch'> <attribute name='arch'>
<value>mips</value> <value>mips</value>
...@@ -117,7 +159,7 @@ ...@@ -117,7 +159,7 @@
</group> </group>
</define> </define>
<define name='qemu-sparc'> <define name='hvmsparc'>
<group> <group>
<attribute name='arch'> <attribute name='arch'>
<value>sparc</value> <value>sparc</value>
...@@ -128,7 +170,7 @@ ...@@ -128,7 +170,7 @@
</group> </group>
</define> </define>
<define name='qemu-ppc'> <define name='hvmppc'>
<group> <group>
<attribute name='arch'> <attribute name='arch'>
<value>ppc</value> <value>ppc</value>
...@@ -143,28 +185,6 @@ ...@@ -143,28 +185,6 @@
</group> </group>
</define> </define>
<!--
Description of a KVM domain:
The description must start with the identification information and then
os, resources, devices can be given in any order.
-->
<define name='kvm-domain'>
<group>
<attribute name='type'>
<value>kvm</value>
</attribute>
<ref name='ids'/>
<interleave>
<element name='os'>
<element name='type'>
<value>hvm</value>
</element>
</element>
<ref name='resources'/>
<ref name='devices-with-emulator'/>
</interleave>
</group>
</define>
<!-- <!--
The Identifiers can be: The Identifiers can be:
...@@ -208,44 +228,51 @@ ...@@ -208,44 +228,51 @@
</optional> </optional>
<optional> <optional>
<element name='vcpu'> <element name='vcpu'>
<optional>
<attribute name='cpuset' />
</optional>
<ref name='countCPU'/> <ref name='countCPU'/>
</element> </element>
</optional> </optional>
</interleave> </interleave>
</define> </define>
<define name='clock'>
<optional>
<element name='clock'>
<attribute name='offset'>
<choice>
<value>localtime</value>
<value>utc</value>
</choice>
</attribute>
<empty/>
</element>
</optional>
</define>
<!-- <!--
A bootloader may be used to extract the OS information instead of A bootloader may be used to extract the OS information instead of
defining the OS parameter in the instance. It points just to the defining the OS parameter in the instance. It points just to the
binary or script used to extract the data from the first disk device. binary or script used to extract the data from the first disk device.
--> -->
<define name='bootloader'> <define name='bootloader'>
<element name='bootloader'> <interleave>
<ref name='absFilePath'/> <element name='bootloader'>
</element> <choice>
</define> <ref name='absFilePath'/>
<!-- <empty/>
The Operating system can be: </choice>
- a linux paravirtualized OS </element>
- a fully virtualized machine where the OS is unknown <optional>
--> <element name='bootloader_args'>
<define name='os'> <text/>
<element name='os'> </element>
<choice> </optional>
<ref name='linux'/> </interleave>
<ref name='hvm'/>
</choice>
</element>
</define> </define>
<!-- <define name='osbootkernel'>
A paravirtualized linux domain, this requires at least a kernel path
and the root device, the initrd and command line arguments are optional
-->
<define name='linux'>
<element name='type'>
<value>linux</value>
</element>
<interleave> <interleave>
<element name='kernel'> <element name='kernel'>
<ref name='absFilePath'/> <ref name='absFilePath'/>
...@@ -268,31 +295,36 @@ ...@@ -268,31 +295,36 @@
</interleave> </interleave>
</define> </define>
<!-- <define name='osbootdev'>
A fully virtualized domain, this requires the path to the loader and <element name='boot'>
an optional boot device (hd, fd or cdrom). <attribute name='dev'>
--> <choice>
<define name='hvm'> <value>hd</value>
<element name='type'> <value>fd</value>
<value>hvm</value> <value>cdrom</value>
<value>network</value>
</choice>
</attribute>
<empty/>
</element> </element>
<interleave> </define>
<element name='loader'>
<ref name='absFilePath'/>
<define name='diskspec'>
<optional>
<ref name='driver'/>
</optional>
<ref name='target'/>
<optional>
<element name='readonly'>
<empty/>
</element> </element>
<optional> </optional>
<element name='boot'> <optional>
<attribute name='dev'> <element name='shareable'>
<choice> <empty/>
<value>hd</value> </element>
<value>fd</value> </optional>
<value>cdrom</value>
</choice>
</attribute>
<empty/>
</element>
</optional>
</interleave>
</define> </define>
<!-- <!--
...@@ -315,43 +347,36 @@ ...@@ -315,43 +347,36 @@
<group> <group>
<attribute name='type'> <attribute name='type'>
<value>file</value> <value>file</value>
</attribute> </attribute>
<interleave> <interleave>
<element name='source'>
<attribute name='file'>
<ref name='absFilePath'/>
</attribute>
<empty/>
</element>
<optional>
<ref name='driver'/>
</optional>
<ref name='target'/>
<optional> <optional>
<ref name='readonly'/> <element name='source'>
<attribute name='file'>
<ref name='absFilePath'/>
</attribute>
<empty/>
</element>
</optional> </optional>
</interleave> <ref name='diskspec'/>
</interleave>
</group> </group>
<group> <group>
<attribute name='type'> <attribute name='type'>
<value>block</value> <value>block</value>
</attribute> </attribute>
<interleave> <interleave>
<element name='source'>
<attribute name='dev'>
<ref name='deviceName'/>
</attribute>
<empty/>
</element>
<optional> <optional>
<ref name='driver'/> <element name='source'>
<attribute name='dev'>
<ref name='deviceName'/>
</attribute>
<empty/>
</element>
</optional> </optional>
<ref name='target'/> <ref name='diskspec'/>
<optional> </interleave>
<ref name='readonly'/>
</optional>
</interleave>
</group> </group>
<ref name='diskspec'/>
</choice> </choice>
</element> </element>
</define> </define>
...@@ -361,12 +386,16 @@ ...@@ -361,12 +386,16 @@
<attribute name='dev'> <attribute name='dev'>
<ref name='deviceName'/> <ref name='deviceName'/>
</attribute> </attribute>
</element> <optional>
</define> <attribute name='bus'>
<choice>
<define name='readonly'> <value>ide</value>
<element name='readonly'> <value>virtio</value>
<empty/> <value>fdc</value>
<value>xen</value>
</choice>
</attribute>
</optional>
</element> </element>
</define> </define>
...@@ -376,23 +405,23 @@ ...@@ -376,23 +405,23 @@
extended in the future, and libvirt doesn't look for specific values. extended in the future, and libvirt doesn't look for specific values.
--> -->
<define name='driver'> <define name='driver'>
<element name='driver'> <element name='driver'>
<attribute name='name'> <attribute name='name'>
<ref name='genericName'/>
</attribute>
<optional>
<attribute name='type'>
<ref name='genericName'/> <ref name='genericName'/>
</attribute> </attribute>
<optional> </optional>
<attribute name='type'> <empty/>
<ref name='genericName'/> </element>
</attribute>
</optional>
<empty/>
</element>
</define> </define>
<!-- <!--
An interface description can either be of type bridge in which case An interface description can either be of type bridge in which case
it will use a bridging source, or of type ethernet which uses a device it will use a bridging source, or of type ethernet which uses a device
source and a device target instead. They both share a set of interface source and a device target instead. They both share a set of interface
options. options. FIXME
--> -->
<define name='interface'> <define name='interface'>
<element name='interface'> <element name='interface'>
...@@ -402,12 +431,14 @@ ...@@ -402,12 +431,14 @@
<value>bridge</value> <value>bridge</value>
</attribute> </attribute>
<interleave> <interleave>
<element name='source'> <optional>
<attribute name='bridge'> <element name='source'>
<ref name='deviceName'/> <attribute name='bridge'>
</attribute> <ref name='deviceName'/>
<empty/> </attribute>
</element> <empty/>
</element>
</optional>
<ref name='interface-options'/> <ref name='interface-options'/>
</interleave> </interleave>
</group> </group>
...@@ -415,9 +446,25 @@ ...@@ -415,9 +446,25 @@
<attribute name='type'> <attribute name='type'>
<value>ethernet</value> <value>ethernet</value>
</attribute> </attribute>
<interleave>
<optional>
<element name='source'>
<attribute name='dev'>
<ref name='deviceName'/>
</attribute>
<empty/>
</element>
</optional>
<ref name='interface-options'/>
</interleave>
</group>
<group>
<attribute name='type'>
<value>network</value>
</attribute>
<interleave> <interleave>
<element name='source'> <element name='source'>
<attribute name='dev'> <attribute name='network'>
<ref name='deviceName'/> <ref name='deviceName'/>
</attribute> </attribute>
<empty/> <empty/>
...@@ -445,44 +492,50 @@ ...@@ -445,44 +492,50 @@
- the target device used - the target device used
--> -->
<define name='interface-options'> <define name='interface-options'>
<interleave> <interleave>
<optional> <optional>
<element name='target'> <element name='target'>
<attribute name='dev'> <attribute name='dev'>
<ref name='deviceName'/> <ref name='deviceName'/>
</attribute> </attribute>
<empty/> <empty/>
</element> </element>
</optional> </optional>
<optional> <optional>
<element name='mac'> <element name='mac'>
<attribute name='address'> <attribute name='address'>
<ref name='addrMAC'/> <ref name='addrMAC'/>
</attribute>
<empty/>
</element>
</optional>
<optional>
<element name='ip'>
<attribute name='address'>
<ref name='addrIP'/>
</attribute>
<empty/>
</element>
</optional>
<optional>
<element name='script'>
<attribute name='path'>
<ref name='filePath'/>
</attribute> </attribute>
<empty/> <empty/>
</element> </element>
</optional> </optional>
</interleave> <optional>
<element name='ip'>
<attribute name='address'>
<ref name='addrIP'/>
</attribute>
<empty/>
</element>
</optional>
<optional>
<element name='script'>
<attribute name='path'>
<ref name='filePath'/>
</attribute>
<empty/>
</element>
</optional>
<optional>
<element name='model'>
<attribute name='type' />
<empty/>
</element>
</optional>
</interleave>
</define> </define>
<!-- <!--
An emulator descritpion is just a path to the binary used for the task An emulator description is just a path to the binary used for the task
--> -->
<define name='emulator'> <define name='emulator'>
<element name='emulator'> <element name='emulator'>
...@@ -493,7 +546,8 @@ ...@@ -493,7 +546,8 @@
<!-- <!--
A graphic description, currently in Xen only 2 types are supported: A graphic description, currently in Xen only 2 types are supported:
- sdl without arguments - sdl without arguments
- vnc with a required port and optional listen IP address and password - vnc with a required port and optional listen IP address, password
and keymap
--> -->
<define name='graphic'> <define name='graphic'>
<element name='graphics'> <element name='graphics'>
...@@ -505,9 +559,19 @@ ...@@ -505,9 +559,19 @@
<attribute name='type'> <attribute name='type'>
<value>vnc</value> <value>vnc</value>
</attribute> </attribute>
<attribute name='port'> <optional>
<ref name='PortNumber'/> <attribute name='port'>
</attribute> <ref name='PortNumber'/>
</attribute>
</optional>
<optional>
<attribute name='autoport'>
<choice>
<value>yes</value>
<value>no</value>
</choice>
</attribute>
</optional>
<optional> <optional>
<attribute name='listen'> <attribute name='listen'>
<ref name='addrIP'/> <ref name='addrIP'/>
...@@ -518,6 +582,11 @@ ...@@ -518,6 +582,11 @@
<text/> <text/>
</attribute> </attribute>
</optional> </optional>
<optional>
<attribute name='keymap'>
<text/>
</attribute>
</optional>
</group> </group>
</choice> </choice>
</element> </element>
...@@ -564,67 +633,150 @@ ...@@ -564,67 +633,150 @@
</choice> </choice>
</define> </define>
<!--
Specific setup for a qemu emulated character device. Note: this
definition doesn't fully specify the constraints on this node.
-->
<define name='qemucdev'>
<attribute name='type'>
<choice>
<value>dev</value>
<value>file</value>
<value>pipe</value>
<value>unix</value>
<value>tcp</value>
<value>udp</value>
<value>null</value>
<value>stdio</value>
<value>vc</value>
<value>pty</value>
</choice>
</attribute>
<interleave>
<optional>
<oneOrMore>
<element name='source'>
<optional>
<attribute name='mode' />
</optional>
<optional>
<attribute name='path' />
</optional>
<optional>
<attribute name='host' />
</optional>
<optional>
<attribute name='service' />
</optional>
<optional>
<attribute name='wiremode' />
</optional>
</element>
</oneOrMore>
</optional>
<optional>
<element name='protocol'>
<optional>
<attribute name='type' />
</optional>
</element>
</optional>
<optional>
<element name='target'>
<optional>
<attribute name='port' />
</optional>
</element>
</optional>
</interleave>
</define>
<!-- <!--
The description for a console The description for a console
just a tty device just a tty device
--> -->
<define name='console'> <define name='console'>
<element name='console'> <element name='console'>
<attribute name='tty'> <choice>
<ref name='devicePath'/> <group>
<optional>
<attribute name='tty'>
<ref name='devicePath'/>
</attribute>
</optional>
<empty/>
</group>
<ref name='qemucdev' />
</choice>
</element>
</define>
<define name='sound'>
<element name='sound'>
<attribute name='model'>
<choice>
<value>sb16</value>
<value>es1370</value>
<value>pcspk</value>
</choice>
</attribute> </attribute>
<empty/>
</element> </element>
</define> </define>
<!-- <define name='parallel'>
The devices bloc allows: <element name='parallel'>
- an optional emulator path, restricted to hvm configs but hard to check <ref name='qemucdev' />
- an optional graphic description , restricted to hvm configs too </element>
- zero or more disk devices </define>
- zero or more interface devices
--> <define name='serial'>
<define name='devices'> <element name='serial'>
<element name='devices'> <ref name='qemucdev' />
<interleave> </element>
<optional> </define>
<ref name='emulator'/>
</optional> <define name='input'>
<optional> <element name='input'>
<ref name='graphic'/> <attribute name='type'>
</optional> <choice>
<zeroOrMore> <value>tablet</value>
<ref name='disk'/> <value>mouse</value>
</zeroOrMore> </choice>
<zeroOrMore> </attribute>
<ref name='interface'/> <optional>
</zeroOrMore> <attribute name='bus'>
<optional> <choice>
<ref name='console'/> <value>ps2</value>
</optional> <value>usb</value>
</interleave> <value>xen</value>
</choice>
</attribute>
</optional>
</element> </element>
</define> </define>
<!-- <!--
Sometimes the emulator is mandatory, e.g. with KVM Devices attached to a domain.
--> -->
<define name='devices-with-emulator'> <define name='devices'>
<element name='devices'> <element name='devices'>
<interleave> <interleave>
<ref name='emulator'/>
<optional> <optional>
<ref name='graphic'/> <ref name='emulator'/>
</optional> </optional>
<zeroOrMore> <zeroOrMore>
<ref name='disk'/> <choice>
</zeroOrMore> <ref name='graphic'/>
<zeroOrMore> <ref name='disk'/>
<ref name='interface'/> <ref name='interface'/>
<ref name='console'/>
<ref name='sound'/>
<ref name='parallel'/>
<ref name='serial'/>
<ref name='input'/>
</choice>
</zeroOrMore> </zeroOrMore>
<optional>
<ref name='console'/>
</optional>
</interleave> </interleave>
</element> </element>
</define> </define>
...@@ -688,7 +840,7 @@ ...@@ -688,7 +840,7 @@
</define> </define>
<define name='domainName'> <define name='domainName'>
<data type='string'> <data type='string'>
<param name="pattern">[a-zA-Z0-9_\+\-]+</param> <param name="pattern">[a-zA-Z0-9_\+\-&amp;]+</param>
</data> </data>
</define> </define>
<define name='genericName'> <define name='genericName'>
...@@ -708,12 +860,12 @@ ...@@ -708,12 +860,12 @@
</define> </define>
<define name='filePath'> <define name='filePath'>
<data type='string'> <data type='string'>
<param name="pattern">[a-zA-Z0-9_\+\-%./]+</param> <param name="pattern">[a-zA-Z0-9_\+\-%./&amp;]+</param>
</data> </data>
</define> </define>
<define name='absFilePath'> <define name='absFilePath'>
<data type='string'> <data type='string'>
<param name="pattern">/[a-zA-Z0-9_\+\-%./]+</param> <param name="pattern">/[a-zA-Z0-9_\+\-%./&amp;]+</param>
</data> </data>
</define> </define>
<define name='devicePath'> <define name='devicePath'>
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
<memory>219200</memory> <memory>219200</memory>
<currentMemory>219200</currentMemory> <currentMemory>219200</currentMemory>
<vcpu>1</vcpu> <vcpu>1</vcpu>
<bootloader>/foo</bootloader>
<os> <os>
<type>xen</type> <type>xen</type>
<boot dev='hd'/>
</os> </os>
<clock offset='utc'/> <clock offset='utc'/>
<on_poweroff>destroy</on_poweroff> <on_poweroff>destroy</on_poweroff>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册