feat: initial support for OVA VM export (#6006)

Co-authored-by: Florent Beauchamp <flo850@free.fr>
This commit is contained in:
Nicolas Raynaud 2022-04-19 11:01:53 +02:00 committed by GitHub
parent 96f83d92fc
commit 4b9db257fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 3781 additions and 31 deletions

View File

@ -7,6 +7,8 @@
> Users must be able to say: “Nice enhancement, I'm eager to test it” > Users must be able to say: “Nice enhancement, I'm eager to test it”
- [VM export] Feat export to `ova` format (PR [#6006](https://github.com/vatesfr/xen-orchestra/pull/6006))
### Bug fixes ### Bug fixes
> Users must be able to say: “I had this issue, happy to know it's fixed” > Users must be able to say: “I had this issue, happy to know it's fixed”
@ -27,3 +29,7 @@
> - major: if the change breaks compatibility > - major: if the change breaks compatibility
> >
> In case of conflict, the highest (lowest in previous list) `$version` wins. > In case of conflict, the highest (lowest in previous list) `$version` wins.
- xo-vmdk-to-vhd minor
- xo-server minor
- xo-web minor

View File

@ -4,7 +4,7 @@ FROM ubuntu:xenial
# https://qastack.fr/programming/25899912/how-to-install-nvm-in-docker # https://qastack.fr/programming/25899912/how-to-install-nvm-in-docker
RUN apt-get update RUN apt-get update
RUN apt-get install -y curl qemu-utils blktap-utils vmdk-stream-converter git RUN apt-get install -y curl qemu-utils blktap-utils vmdk-stream-converter git libxml2-utils
ENV NVM_DIR /usr/local/nvm ENV NVM_DIR /usr/local/nvm
RUN mkdir -p /usr/local/nvm RUN mkdir -p /usr/local/nvm
RUN cd /usr/local/nvm RUN cd /usr/local/nvm

View File

@ -6,8 +6,8 @@ import getStream from 'get-stream'
import hrp from 'http-request-plus' import hrp from 'http-request-plus'
import { createLogger } from '@xen-orchestra/log' import { createLogger } from '@xen-orchestra/log'
import { defer } from 'golike-defer' import { defer } from 'golike-defer'
import { FAIL_ON_QUEUE } from 'limit-concurrency-decorator'
import { format } from 'json-rpc-peer' import { format } from 'json-rpc-peer'
import { FAIL_ON_QUEUE } from 'limit-concurrency-decorator'
import { ignoreErrors } from 'promise-toolbox' import { ignoreErrors } from 'promise-toolbox'
import { invalidParameters, noSuchObject, operationFailed, unauthorized } from 'xo-common/api-errors.js' import { invalidParameters, noSuchObject, operationFailed, unauthorized } from 'xo-common/api-errors.js'
import { Ref } from 'xen-api' import { Ref } from 'xen-api'
@ -1004,10 +1004,11 @@ revert.resolve = {
// ------------------------------------------------------------------- // -------------------------------------------------------------------
async function handleExport(req, res, { xapi, vmRef, compress }) { async function handleExport(req, res, { xapi, vmRef, compress, format = 'xva' }) {
const stream = await xapi.VM_export(FAIL_ON_QUEUE, vmRef, { // @todo : should we put back the handleExportFAIL_ON_QUEUE ?
compress, const stream =
}) format === 'ova' ? await xapi.exportVmOva(vmRef) : await xapi.VM_export(FAIL_ON_QUEUE, vmRef, { compress })
res.on('close', () => stream.cancel()) res.on('close', () => stream.cancel())
// Remove the filename as it is already part of the URL. // Remove the filename as it is already part of the URL.
stream.headers['content-disposition'] = 'attachment' stream.headers['content-disposition'] = 'attachment'
@ -1017,7 +1018,7 @@ async function handleExport(req, res, { xapi, vmRef, compress }) {
} }
// TODO: integrate in xapi.js // TODO: integrate in xapi.js
async function export_({ vm, compress }) { async function export_({ vm, compress, format = 'xva' }) {
if (vm.power_state === 'Running') { if (vm.power_state === 'Running') {
await checkPermissionOnSrs.call(this, vm) await checkPermissionOnSrs.call(this, vm)
} }
@ -1026,11 +1027,12 @@ async function export_({ vm, compress }) {
xapi: this.getXapi(vm), xapi: this.getXapi(vm),
vmRef: vm._xapiRef, vmRef: vm._xapiRef,
compress, compress,
format,
} }
return { return {
$getFrom: await this.registerHttpRequest(handleExport, data, { $getFrom: await this.registerHttpRequest(handleExport, data, {
suffix: '/' + encodeURIComponent(`${safeDateFormat(new Date())} - ${vm.name_label}.xva`), suffix: '/' + encodeURIComponent(`${safeDateFormat(new Date())} - ${vm.name_label}.${format}`),
}), }),
} }
} }
@ -1038,6 +1040,7 @@ async function export_({ vm, compress }) {
export_.params = { export_.params = {
vm: { type: 'string' }, vm: { type: 'string' },
compress: { type: ['boolean', 'string'], optional: true }, compress: { type: ['boolean', 'string'], optional: true },
format: { enum: ['xva', 'ova'], optional: true },
} }
export_.resolve = { export_.resolve = {
@ -1060,6 +1063,7 @@ async function handleVmImport(req, res, { data, srId, type, xapi }) {
// Timeout seems to be broken in Node 4. // Timeout seems to be broken in Node 4.
// See https://github.com/nodejs/node/issues/3319 // See https://github.com/nodejs/node/issues/3319
req.setTimeout(43200000) // 12 hours req.setTimeout(43200000) // 12 hours
// expect "multipart/form-data; boundary=something" // expect "multipart/form-data; boundary=something"
const contentType = req.headers['content-type'] const contentType = req.headers['content-type']
const vm = await (contentType !== undefined && contentType.startsWith('multipart/form-data') const vm = await (contentType !== undefined && contentType.startsWith('multipart/form-data')

View File

@ -20,7 +20,7 @@ import semver from 'semver'
import tarStream from 'tar-stream' import tarStream from 'tar-stream'
import uniq from 'lodash/uniq.js' import uniq from 'lodash/uniq.js'
import { asyncMap } from '@xen-orchestra/async-map' import { asyncMap } from '@xen-orchestra/async-map'
import { vmdkToVhd, vhdToVMDK } from 'xo-vmdk-to-vhd' import { vmdkToVhd, vhdToVMDK, writeOvaOn } from 'xo-vmdk-to-vhd'
import { cancelable, CancelToken, fromEvents, ignoreErrors, pCatch, pRetry } from 'promise-toolbox' import { cancelable, CancelToken, fromEvents, ignoreErrors, pCatch, pRetry } from 'promise-toolbox'
import { createLogger } from '@xen-orchestra/log' import { createLogger } from '@xen-orchestra/log'
import { decorateWith } from '@vates/decorate-with' import { decorateWith } from '@vates/decorate-with'
@ -519,6 +519,76 @@ export default class Xapi extends XapiBase {
return console return console
} }
@cancelable
async exportVmOva($cancelToken, vmRef) {
const vm = this.getObject(vmRef)
const useSnapshot = isVmRunning(vm)
let exportedVm
if (useSnapshot) {
const snapshotRef = await this.VM_snapshot(vmRef, {
name_label: vm.name_label,
cancelToken: $cancelToken,
})
exportedVm = this.getObject(snapshotRef)
} else {
exportedVm = vm
}
const collectedDisks = []
for (const blockDevice of exportedVm.$VBDs) {
if (blockDevice.type === 'Disk') {
const vdi = blockDevice.$VDI
collectedDisks.push({
getStream: () => {
return this.exportVdiContent($cancelToken, vdi, VDI_FORMAT_VHD)
},
name: vdi.name_label,
fileName: vdi.name_label + '.vmdk',
description: vdi.name_description,
capacityMB: Math.ceil(vdi.virtual_size / 1024 / 1024),
})
}
}
const nics = []
for (const vif of exportedVm.$VIFs) {
nics.push({
macAddress: vif.MAC_autogenerated ? '' : vif.MAC,
networkName: this.getObject(vif.network).name_label,
})
}
const writeStream = new PassThrough()
writeStream.task = this.task_create('VM OVA export', exportedVm.name_label)
writeOvaOn(writeStream, {
disks: collectedDisks,
vmName: exportedVm.name_label,
vmDescription: exportedVm.name_description,
cpuCount: exportedVm.VCPUs_at_startup,
vmMemoryMB: Math.ceil(exportedVm.memory_dynamic_max / 1024 / 1024),
firmware: exportedVm.HVM_boot_params.firmware,
nics,
})
writeStream.statusCode = 200
writeStream.headers = { 'content-type': 'application/ova' }
writeStream.statusMessage = 'OK'
let destroyed = false
const destroySnapshot = () => {
if (useSnapshot && !destroyed) {
destroyed = true
this.VM_destroy(exportedVm.$ref)::ignoreErrors()
}
}
writeStream.cancel = () => {
destroySnapshot()
return writeStream.destroy()
}
writeStream.once('end', destroySnapshot)
writeStream.once('error', destroySnapshot)
return writeStream
}
// Create a snapshot (if necessary) of the VM and returns a delta export // Create a snapshot (if necessary) of the VM and returns a delta export
// object. // object.
@cancelable @cancelable
@ -1670,8 +1740,11 @@ export default class Xapi extends XapiBase {
if (base !== undefined) { if (base !== undefined) {
params.base = base params.base = base
} }
const vhdResult = await this.VDI_exportContent(vdi.$ref, params) let vhdResult
const vmdkStream = await vhdToVMDK(filename, vhdResult) const vmdkStream = await vhdToVMDK(`${vdi.name_label}.vmdk`, async () => {
vhdResult = await this.VDI_exportContent(vdi.$ref, params)
return vhdResult
})
// callers expect the stream to be an HTTP response. // callers expect the stream to be an HTTP response.
vmdkStream.headers = { vmdkStream.headers = {
...vhdResult.headers, ...vhdResult.headers,

View File

@ -3,7 +3,7 @@
"name": "xo-vmdk-to-vhd", "name": "xo-vmdk-to-vhd",
"version": "2.2.0", "version": "2.2.0",
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"description": "JS lib streaming a vmdk file to a vhd", "description": "JS lib reading and writing .vmdk and .ova files",
"keywords": [ "keywords": [
"vhd", "vhd",
"vmdk" "vmdk"
@ -25,6 +25,7 @@
"lodash": "^4.17.15", "lodash": "^4.17.15",
"pako": "^2.0.4", "pako": "^2.0.4",
"promise-toolbox": "^0.21.0", "promise-toolbox": "^0.21.0",
"tar-stream": "^2.2.0",
"vhd-lib": "^3.1.0", "vhd-lib": "^3.1.0",
"xml2js": "^0.4.23" "xml2js": "^0.4.23"
}, },
@ -39,7 +40,8 @@
"fs-extra": "^10.0.0", "fs-extra": "^10.0.0",
"get-stream": "^6.0.0", "get-stream": "^6.0.0",
"rimraf": "^3.0.0", "rimraf": "^3.0.0",
"tmp": "^0.2.1" "tmp": "^0.2.1",
"validate-with-xmllint": "^1.2.0"
}, },
"scripts": { "scripts": {
"build": "cross-env NODE_ENV=production babel --source-maps --out-dir=dist/ src/", "build": "cross-env NODE_ENV=production babel --source-maps --out-dir=dist/ src/",

View File

@ -1,9 +1,10 @@
import asyncIteratorToStream from 'async-iterator-to-stream' import asyncIteratorToStream from 'async-iterator-to-stream'
import createReadableSparseStream from 'vhd-lib/createReadableSparseStream.js' import createReadableSparseStream from 'vhd-lib/createReadableSparseStream.js'
import { parseOVAFile, ParsableFile } from './ova' import { parseOVAFile, ParsableFile } from './ova-read'
import VMDKDirectParser from './vmdk-read' import VMDKDirectParser from './vmdk-read'
import { generateVmdkData } from './vmdk-generate' import { generateVmdkData } from './vmdk-generate'
import { parseVhdToBlocks } from './parseVhdToBlocks.js' import { writeOvaOn } from './ova-generate'
import { parseVhdToBlocks } from './parseVhdToBlocks'
export { default as readVmdkGrainTable, readCapacityAndGrainTable } from './vmdk-read-table' export { default as readVmdkGrainTable, readCapacityAndGrainTable } from './vmdk-read-table'
@ -26,15 +27,43 @@ async function vmdkToVhd(vmdkReadStream, grainLogicalAddressList, grainFileOffse
) )
} }
export async function computeVmdkLength(diskName, vhdReadStream) {
let length = 0
for await (const b of await vhdToVMDKIterator(diskName, vhdReadStream)) {
length += b.length
}
return length
}
/** /**
* * @param diskName
* @param vhdReadStreamGetter an async function whose call brings a fresh VHD readStream.
* We need to read the VHD twice when generating OVA files to get the VMDK file length.
* @param withLength if true, the returned VMDK stream will have its `length` field set. The VHD stream will be entirely read to compute it.
* @returns a readable stream representing a VMDK file
*/
export async function vhdToVMDK(diskName, vhdReadStreamGetter, withLength = false) {
let length
if (withLength) {
length = await computeVmdkLength(diskName, await vhdReadStreamGetter())
}
const iterable = await vhdToVMDKIterator(diskName, await vhdReadStreamGetter())
const stream = await asyncIteratorToStream(iterable)
if (withLength) {
stream.length = length
}
return stream
}
/**
* the returned stream will have its length set IIF compress === false
* @param diskName * @param diskName
* @param vhdReadStream * @param vhdReadStream
* @returns a readable stream representing a VMDK file * @returns a readable stream representing a VMDK file
*/ */
async function vhdToVMDK(diskName, vhdReadStream) { export async function vhdToVMDKIterator(diskName, vhdReadStream) {
const { blockSize, blocks, diskSize, geometry } = await parseVhdToBlocks(vhdReadStream) const { blockSize, blocks, diskSize, geometry } = await parseVhdToBlocks(vhdReadStream)
return asyncIteratorToStream(generateVmdkData(diskName, diskSize, blockSize, blocks, geometry)) return generateVmdkData(diskName, diskSize, blockSize, blocks, geometry)
} }
export { ParsableFile, parseOVAFile, vmdkToVhd, vhdToVMDK } export { ParsableFile, parseOVAFile, vmdkToVhd, writeOvaOn }

View File

@ -0,0 +1,91 @@
/* eslint-env jest */
import { validateXMLWithXSD } from 'validate-with-xmllint'
import { createReadStream, createWriteStream, readFile } from 'fs-extra'
import execa from 'execa'
import path from 'path'
import { pFromCallback, fromEvent } from 'promise-toolbox'
import tmp from 'tmp'
import rimraf from 'rimraf'
import { writeOvaOn } from './ova-generate'
import { parseOVF } from './ova-read'
const initialDir = process.cwd()
jest.setTimeout(100000)
beforeEach(async () => {
const dir = await pFromCallback(cb => tmp.dir(cb))
process.chdir(dir)
})
afterEach(async () => {
const tmpDir = process.cwd()
process.chdir(initialDir)
await pFromCallback(cb => rimraf(tmpDir, cb))
})
test('An ova file is generated correctly', async () => {
const inputRawFileName1 = 'random-data1.raw'
const inputRawFileName2 = 'random-data2.raw'
const vhdFileName1 = 'random-data1.vhd'
const vhdFileName2 = 'random-data2.vhd'
const ovaFileName1 = 'random-disk1.ova'
const dataSize = 100 * 1024 * 1024 // this number is an integer head/cylinder/count equation solution
try {
await execa('base64 /dev/urandom | head -c ' + dataSize + ' > ' + inputRawFileName1, [], { shell: true })
await execa('base64 /dev/urandom | head -c ' + dataSize + ' > ' + inputRawFileName2, [], { shell: true })
await execa('qemu-img', ['convert', '-fraw', '-Ovpc', inputRawFileName1, vhdFileName1])
await execa('qemu-img', ['convert', '-fraw', '-Ovpc', inputRawFileName2, vhdFileName2])
const destination = await createWriteStream(ovaFileName1)
const diskName1 = 'disk1'
const diskName2 = 'disk2'
const vmdkDiskName1 = `${diskName1}.vmdk`
const vmdkDiskName2 = `${diskName2}.vmdk`
const pipe = await writeOvaOn(destination, {
vmName: 'vm1',
vmDescription: 'desc',
vmMemoryMB: 100,
cpuCount: 3,
nics: [{ name: 'eth12', networkName: 'BigLan' }],
disks: [
{
name: diskName1,
fileName: 'diskName1.vmdk',
capacityMB: Math.ceil((dataSize / 1024) * 1024),
getStream: async () => {
return createReadStream(vhdFileName1)
},
},
{
name: diskName2,
fileName: 'diskName1.vmdk',
capacityMB: Math.ceil((dataSize / 1024) * 1024),
getStream: async () => {
return createReadStream(vhdFileName2)
},
},
],
})
await fromEvent(pipe, 'finish')
await execa('tar', ['xf', ovaFileName1, 'vm1.ovf'])
const xml = await readFile('vm1.ovf', { encoding: 'utf-8' })
try {
await validateXMLWithXSD(xml, path.join(__dirname, 'ova-schema', 'dsp8023_1.1.1.xsd'))
await execa('tar', ['xf', ovaFileName1, vmdkDiskName1])
await execa('tar', ['xf', ovaFileName1, vmdkDiskName2])
await execa('qemu-img', ['check', vmdkDiskName1])
await execa('qemu-img', ['check', vmdkDiskName2])
await execa('qemu-img', ['compare', inputRawFileName1, vmdkDiskName1])
await execa('qemu-img', ['compare', inputRawFileName2, vmdkDiskName2])
await parseOVF({ read: () => xml }, s => s)
} catch (e) {
e.xml = xml
// console.log({ xml })
throw e
}
} catch (error) {
console.error(error.stdout)
console.error(error.stderr)
console.error(error.message)
throw error
}
})

View File

@ -0,0 +1,194 @@
import tar from 'tar-stream'
import { computeVmdkLength, vhdToVMDKIterator } from '.'
import { fromCallback } from 'promise-toolbox'
// WE MIGHT WANT TO HAVE A LOOK HERE: https://opennodecloud.com/howto/2013/12/25/howto-ON-ovf-reference.html
/**
*
* @param writeStream
* @param vmName
* @param vmDescription
* @param disks [{name, fileName, capacityMB, getStream}]
* @param nics [{name, networkName}]
* @param vmMemoryMB
* @param cpuCount
* @returns readStream
*/
export async function writeOvaOn(
writeStream,
{ vmName, vmDescription = '', disks = [], firmware = 'bios', nics = [], vmMemoryMB = 64, cpuCount = 1 }
) {
const ovf = createOvf(vmName, vmDescription, disks, nics, vmMemoryMB, cpuCount, firmware)
const pack = tar.pack()
const pipe = pack.pipe(writeStream)
await fromCallback.call(pack, pack.entry, { name: `${vmName}.ovf` }, Buffer.from(ovf, 'utf8'))
async function writeDisk(entry, blockIterator) {
for await (const block of blockIterator) {
entry.write(block)
}
}
// https://github.com/mafintosh/tar-stream/issues/24#issuecomment-558358268
async function pushDisk(disk) {
const size = await computeVmdkLength(disk.name, await disk.getStream())
disk.fileSize = size
const blockIterator = await vhdToVMDKIterator(disk.name, await disk.getStream())
return new Promise((resolve, reject) => {
const entry = pack.entry({ name: `${disk.name}.vmdk`, size: size }, err => {
if (err == null) {
return resolve()
} else return reject(err)
})
return writeDisk(entry, blockIterator).then(
() => entry.end(),
e => reject(e)
)
})
}
for (const disk of disks) {
await pushDisk(disk)
}
pack.finalize()
return pipe
}
function createDiskSections(disks) {
const fileReferences = []
const diskFragments = []
const diskItems = []
for (let i = 0; i < disks.length; i++) {
const disk = disks[i]
const diskId = `vmdisk${i + 1}`
fileReferences.push(` <File ovf:href="${disk.fileName}" ovf:id="file${i + 1}"/>`)
diskFragments.push(
` <Disk ovf:capacity="${
disk.capacityMB
}" ovf:capacityAllocationUnits="byte * 2^20" ovf:diskId="${diskId}" ovf:fileRef="file${
i + 1
}" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" />`
)
diskItems.push(`
<Item>
<rasd:AddressOnParent>${i}</rasd:AddressOnParent>
<rasd:ElementName>Hard Disk ${i + 1}</rasd:ElementName>
<rasd:HostResource>ovf:/disk/${diskId}</rasd:HostResource>
<rasd:InstanceID>${diskId}</rasd:InstanceID>
<rasd:Parent>4</rasd:Parent>
<rasd:ResourceType>17</rasd:ResourceType>
</Item>
`)
}
return {
fileReferences: fileReferences.join('\n'),
diskFragments: diskFragments.join('\n'),
diskItems: diskItems.join('\n'),
}
}
function createNicsSection(nics) {
const networks = new Set()
const nicItems = []
for (let i = 0; i < nics.length; i++) {
const nic = nics[i]
networks.add(nic.networkName)
const text = `
<Item>
<rasd:AddressOnParent>${i}</rasd:AddressOnParent>
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
<rasd:Connection>${nic.networkName}</rasd:Connection>
<rasd:Description>PCNet32 ethernet adapter on "${nic.networkName}"</rasd:Description>
<rasd:ElementName>Connection to ${nic.networkName}</rasd:ElementName>
<rasd:InstanceID>${'nic' + i}</rasd:InstanceID>
<rasd:ResourceSubType>PCNet32</rasd:ResourceSubType>
<rasd:Address>${nic.macAddress}</rasd:Address>
<rasd:ResourceType>10</rasd:ResourceType>
</Item>
`
nicItems.push(text)
}
const networksElements = []
for (const network of networks) {
networksElements.push(` <Network ovf:name="${network}"/>`)
}
return { nicsSection: nicItems.join('\n'), networksSection: networksElements.join('\n') }
}
function createOvf(vmName, vmDescription, disks = [], nics = [], vmMemoryMB = 64, cpuCount = 1, firmware = 'bios') {
const diskSection = createDiskSections(disks)
const networkSection = createNicsSection(nics)
let id = 1
const nextId = () => id++
return `<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Xen Orchestra-->
<ovf:Envelope xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1"
xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"
xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData">
<References>
${diskSection.fileReferences}
</References>
<DiskSection>
<Info>Virtual disk information</Info>
${diskSection.diskFragments}
</DiskSection>
<NetworkSection>
<Info>The list of logical networks</Info>
${networkSection.networksSection}
</NetworkSection>
<VirtualSystem ovf:id="${vmName}">
<Info>A virtual machine</Info>
<Name>${vmName}</Name>
<OperatingSystemSection ovf:id="${nextId()}">
<Info>The kind of installed guest operating system</Info>
</OperatingSystemSection>
<VirtualHardwareSection>
<Info>Virtual hardware requirements</Info>
<System>
<vssd:ElementName>Virtual Hardware Family</vssd:ElementName>
<vssd:InstanceID>0</vssd:InstanceID>
<vssd:VirtualSystemIdentifier>${vmName}</vssd:VirtualSystemIdentifier>
<vssd:VirtualSystemType>vmx-11</vssd:VirtualSystemType>
</System>
<Item>
<rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
<rasd:Description>Number of Virtual CPUs</rasd:Description>
<rasd:ElementName>${cpuCount} virtual CPU(s)</rasd:ElementName>
<rasd:InstanceID>1</rasd:InstanceID>
<rasd:ResourceType>3</rasd:ResourceType>
<rasd:VirtualQuantity>${cpuCount}</rasd:VirtualQuantity>
</Item>
<Item>
<rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
<rasd:Description>Memory Size</rasd:Description>
<rasd:ElementName>${vmMemoryMB}MB of memory</rasd:ElementName>
<rasd:InstanceID>2</rasd:InstanceID>
<rasd:ResourceType>4</rasd:ResourceType>
<rasd:VirtualQuantity>${vmMemoryMB}</rasd:VirtualQuantity>
</Item>
<Item>
<rasd:Address>0</rasd:Address>
<rasd:Description>IDE Controller</rasd:Description>
<rasd:ElementName>VirtualIDEController 0</rasd:ElementName>
<rasd:InstanceID>4</rasd:InstanceID>
<rasd:ResourceType>5</rasd:ResourceType>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
<rasd:ElementName>VirtualVideoCard</rasd:ElementName>
<rasd:InstanceID>5</rasd:InstanceID>
<rasd:ResourceType>24</rasd:ResourceType>
</Item>
${diskSection.diskItems}
${networkSection.nicsSection}
</VirtualHardwareSection>
<AnnotationSection ovf:required="false">
<Info>A human-readable annotation</Info>
<Annotation>${vmDescription}</Annotation>
</AnnotationSection>
</VirtualSystem>
</ovf:Envelope>`
}

View File

@ -141,7 +141,7 @@ const filterDisks = disks => {
} }
} }
async function parseOVF(fileFragment, stringDeserializer) { export async function parseOVF(fileFragment, stringDeserializer) {
const xmlString = stringDeserializer(await fileFragment.read(), 'utf-8') const xmlString = stringDeserializer(await fileFragment.read(), 'utf-8')
return new Promise((resolve, reject) => return new Promise((resolve, reject) =>
xml2js.parseString( xml2js.parseString(

View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:class="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootConfigSetting" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified" targetNamespace="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootConfigSetting">
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/common" schemaLocation="http://schemas.dmtf.org/wbem/wscim/1/common.xsd"/>
<xs:element name="InstanceID" type="cim:cimString"/>
<xs:element name="ElementName" type="cim:cimString"/>
<xs:element name="ChangeableType" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimUnsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ConfigurationName" nillable="true" type="cim:cimString"/>
<xs:element name="ComponentSetting" nillable="true" type="xs:anyType"/>
<xs:element name="SoID" nillable="true" type="cim:cimString"/>
<xs:element name="SoOrgID" nillable="true" type="cim:cimString"/>
<xs:element name="Caption" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimString">
<xs:maxLength value="64"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" nillable="true" type="cim:cimString"/>
<xs:element name="Generation" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="ChangeBootOrder_INPUT">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="Source" nillable="true" type="cim:cimReference"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ChangeBootOrder_OUTPUT">
<xs:complexType>
<xs:sequence>
<xs:element name="Job" nillable="true" type="cim:cimReference"/>
<xs:element name="ReturnValue" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="7"/>
<xs:maxInclusive value="32767"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="32768"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ValidateSettings_INPUT">
<xs:complexType/>
</xs:element>
<xs:element name="ValidateSettings_OUTPUT">
<xs:complexType>
<xs:sequence>
<xs:element name="ReturnValue" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="4"/>
<xs:maxInclusive value="32767"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="32768"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CIM_BootConfigSetting" type="class:CIM_BootConfigSetting_Type"/>
<xs:complexType name="CIM_BootConfigSetting_Type">
<xs:sequence>
<xs:element minOccurs="0" ref="class:Caption"/>
<xs:element minOccurs="0" ref="class:ChangeableType"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:ComponentSetting"/>
<xs:element minOccurs="0" ref="class:ConfigurationName"/>
<xs:element minOccurs="0" ref="class:Description"/>
<xs:element ref="class:ElementName"/>
<xs:element minOccurs="0" ref="class:Generation"/>
<xs:element ref="class:InstanceID"/>
<xs:element minOccurs="0" ref="class:SoID"/>
<xs:element minOccurs="0" ref="class:SoOrgID"/>
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:class="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootSourceSetting" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified" targetNamespace="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootSourceSetting">
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/common" schemaLocation="http://schemas.dmtf.org/wbem/wscim/1/common.xsd"/>
<xs:element name="BootString" nillable="true" type="cim:cimString"/>
<xs:element name="BIOSBootString" nillable="true" type="cim:cimString"/>
<xs:element name="StructuredBootString" nillable="true" type="cim:cimString"/>
<xs:element name="FailThroughSupported" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimUnsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="InstanceID" type="cim:cimString"/>
<xs:element name="ElementName" type="cim:cimString"/>
<xs:element name="ChangeableType" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimUnsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ConfigurationName" nillable="true" type="cim:cimString"/>
<xs:element name="ComponentSetting" nillable="true" type="xs:anyType"/>
<xs:element name="SoID" nillable="true" type="cim:cimString"/>
<xs:element name="SoOrgID" nillable="true" type="cim:cimString"/>
<xs:element name="Caption" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimString">
<xs:maxLength value="64"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" nillable="true" type="cim:cimString"/>
<xs:element name="Generation" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="CIM_BootSourceSetting" type="class:CIM_BootSourceSetting_Type"/>
<xs:complexType name="CIM_BootSourceSetting_Type">
<xs:sequence>
<xs:element minOccurs="0" ref="class:BIOSBootString"/>
<xs:element minOccurs="0" ref="class:BootString"/>
<xs:element minOccurs="0" ref="class:Caption"/>
<xs:element minOccurs="0" ref="class:ChangeableType"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:ComponentSetting"/>
<xs:element minOccurs="0" ref="class:ConfigurationName"/>
<xs:element minOccurs="0" ref="class:Description"/>
<xs:element ref="class:ElementName"/>
<xs:element minOccurs="0" ref="class:FailThroughSupported"/>
<xs:element minOccurs="0" ref="class:Generation"/>
<xs:element ref="class:InstanceID"/>
<xs:element minOccurs="0" ref="class:SoID"/>
<xs:element minOccurs="0" ref="class:SoOrgID"/>
<xs:element minOccurs="0" ref="class:StructuredBootString"/>
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,372 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:class="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_EthernetPortAllocationSettingData" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified" targetNamespace="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_EthernetPortAllocationSettingData">
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/common" schemaLocation="http://schemas.dmtf.org/wbem/wscim/1/common.xsd"/>
<xs:element name="DesiredVLANEndpointMode" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="7"/>
<xs:maxInclusive value="32767"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32768"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="OtherEndpointMode" nillable="true" type="cim:cimString"/>
<xs:element name="AllowedPriorities" nillable="true" type="cim:cimUnsignedShort"/>
<xs:element name="AllowedToReceiveMACAddresses" nillable="true" type="cim:cimString"/>
<xs:element name="AllowedToReceiveVLANs" nillable="true" type="cim:cimUnsignedShort"/>
<xs:element name="AllowedToTransmitMACAddresses" nillable="true" type="cim:cimString"/>
<xs:element name="AllowedToTransmitVLANs" nillable="true" type="cim:cimUnsignedShort"/>
<xs:element name="DefaultPortVID" nillable="true" type="cim:cimUnsignedShort"/>
<xs:element name="DefaultPriority" nillable="true" type="cim:cimUnsignedShort"/>
<xs:element name="GroupID" nillable="true" type="cim:cimUnsignedInt"/>
<xs:element name="ManagerID" nillable="true" type="cim:cimUnsignedInt"/>
<xs:element name="NetworkPortProfileID" nillable="true" type="cim:cimString"/>
<xs:element name="NetworkPortProfileIDType" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="5"/>
<xs:maxInclusive value="32767"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32768"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="OtherNetworkPortProfileIDTypeInfo" nillable="true" type="cim:cimString"/>
<xs:element name="PortCorrelationID" nillable="true" type="cim:cimString"/>
<xs:element name="PortVID" nillable="true" type="cim:cimUnsignedShort"/>
<xs:element name="Promiscuous" nillable="true" type="cim:cimBoolean"/>
<xs:element name="ReceiveBandwidthLimit" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="ReceiveBandwidthReservation" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="SourceMACFilteringEnabled" nillable="true" type="cim:cimBoolean"/>
<xs:element name="VSITypeID" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimUnsignedInt">
<xs:maxInclusive value="16777215"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="VSITypeIDVersion" nillable="true" type="cim:cimUnsignedByte"/>
<xs:element name="ResourceType" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
<xs:enumeration value="7"/>
<xs:enumeration value="8"/>
<xs:enumeration value="9"/>
<xs:enumeration value="10"/>
<xs:enumeration value="11"/>
<xs:enumeration value="12"/>
<xs:enumeration value="13"/>
<xs:enumeration value="14"/>
<xs:enumeration value="15"/>
<xs:enumeration value="16"/>
<xs:enumeration value="17"/>
<xs:enumeration value="18"/>
<xs:enumeration value="19"/>
<xs:enumeration value="20"/>
<xs:enumeration value="21"/>
<xs:enumeration value="22"/>
<xs:enumeration value="23"/>
<xs:enumeration value="24"/>
<xs:enumeration value="25"/>
<xs:enumeration value="26"/>
<xs:enumeration value="27"/>
<xs:enumeration value="28"/>
<xs:enumeration value="29"/>
<xs:enumeration value="30"/>
<xs:enumeration value="31"/>
<xs:enumeration value="32"/>
<xs:enumeration value="33"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="34"/>
<xs:maxInclusive value="32767"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32768"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="OtherResourceType" nillable="true" type="cim:cimString"/>
<xs:element name="ResourceSubType" nillable="true" type="cim:cimString"/>
<xs:element name="PoolID" nillable="true" type="cim:cimString"/>
<xs:element name="ConsumerVisibility" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="5"/>
<xs:maxInclusive value="32766"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32767"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="HostResource" nillable="true" type="cim:cimString"/>
<xs:element name="AllocationUnits" nillable="true" type="cim:cimString"/>
<xs:element name="VirtualQuantity" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="Reservation" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="Limit" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="Weight" nillable="true" type="cim:cimUnsignedInt"/>
<xs:element name="AutomaticAllocation" nillable="true" type="cim:cimBoolean"/>
<xs:element name="AutomaticDeallocation" nillable="true" type="cim:cimBoolean"/>
<xs:element name="Parent" nillable="true" type="cim:cimString"/>
<xs:element name="Connection" nillable="true" type="cim:cimString"/>
<xs:element name="Address" nillable="true" type="cim:cimString"/>
<xs:element name="MappingBehavior" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="6"/>
<xs:maxInclusive value="32766"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32767"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="AddressOnParent" nillable="true" type="cim:cimString"/>
<xs:element name="VirtualQuantityUnits" nillable="true" type="cim:cimString"/>
<xs:element name="InstanceID" type="cim:cimString"/>
<xs:element name="ElementName" type="cim:cimString"/>
<xs:element name="ChangeableType" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimUnsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ConfigurationName" nillable="true" type="cim:cimString"/>
<xs:element name="ComponentSetting" nillable="true" type="xs:anyType"/>
<xs:element name="SoID" nillable="true" type="cim:cimString"/>
<xs:element name="SoOrgID" nillable="true" type="cim:cimString"/>
<xs:element name="Caption" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimString">
<xs:maxLength value="64"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" nillable="true" type="cim:cimString"/>
<xs:element name="Generation" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="CIM_EthernetPortAllocationSettingData" type="class:CIM_EthernetPortAllocationSettingData_Type"/>
<xs:complexType name="CIM_EthernetPortAllocationSettingData_Type">
<xs:sequence>
<xs:element minOccurs="0" ref="class:Address"/>
<xs:element minOccurs="0" ref="class:AddressOnParent"/>
<xs:element minOccurs="0" ref="class:AllocationUnits"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:AllowedPriorities"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:AllowedToReceiveMACAddresses"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:AllowedToReceiveVLANs"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:AllowedToTransmitMACAddresses"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:AllowedToTransmitVLANs"/>
<xs:element minOccurs="0" ref="class:AutomaticAllocation"/>
<xs:element minOccurs="0" ref="class:AutomaticDeallocation"/>
<xs:element minOccurs="0" ref="class:Caption"/>
<xs:element minOccurs="0" ref="class:ChangeableType"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:ComponentSetting"/>
<xs:element minOccurs="0" ref="class:ConfigurationName"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:Connection"/>
<xs:element minOccurs="0" ref="class:ConsumerVisibility"/>
<xs:element minOccurs="0" ref="class:DefaultPortVID"/>
<xs:element minOccurs="0" ref="class:DefaultPriority"/>
<xs:element minOccurs="0" ref="class:Description"/>
<xs:element minOccurs="0" ref="class:DesiredVLANEndpointMode"/>
<xs:element ref="class:ElementName"/>
<xs:element minOccurs="0" ref="class:Generation"/>
<xs:element minOccurs="0" ref="class:GroupID"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:HostResource"/>
<xs:element ref="class:InstanceID"/>
<xs:element minOccurs="0" ref="class:Limit"/>
<xs:element minOccurs="0" ref="class:ManagerID"/>
<xs:element minOccurs="0" ref="class:MappingBehavior"/>
<xs:element minOccurs="0" ref="class:NetworkPortProfileID"/>
<xs:element minOccurs="0" ref="class:NetworkPortProfileIDType"/>
<xs:element minOccurs="0" ref="class:OtherEndpointMode"/>
<xs:element minOccurs="0" ref="class:OtherNetworkPortProfileIDTypeInfo"/>
<xs:element minOccurs="0" ref="class:OtherResourceType"/>
<xs:element minOccurs="0" ref="class:Parent"/>
<xs:element minOccurs="0" ref="class:PoolID"/>
<xs:element minOccurs="0" ref="class:PortCorrelationID"/>
<xs:element minOccurs="0" ref="class:PortVID"/>
<xs:element minOccurs="0" ref="class:Promiscuous"/>
<xs:element minOccurs="0" ref="class:ReceiveBandwidthLimit"/>
<xs:element minOccurs="0" ref="class:ReceiveBandwidthReservation"/>
<xs:element minOccurs="0" ref="class:Reservation"/>
<xs:element minOccurs="0" ref="class:ResourceSubType"/>
<xs:element minOccurs="0" ref="class:ResourceType"/>
<xs:element minOccurs="0" ref="class:SoID"/>
<xs:element minOccurs="0" ref="class:SoOrgID"/>
<xs:element minOccurs="0" ref="class:SourceMACFilteringEnabled"/>
<xs:element minOccurs="0" ref="class:VSITypeID"/>
<xs:element minOccurs="0" ref="class:VSITypeIDVersion"/>
<xs:element minOccurs="0" ref="class:VirtualQuantity"/>
<xs:element minOccurs="0" ref="class:VirtualQuantityUnits"/>
<xs:element minOccurs="0" ref="class:Weight"/>
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,220 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by WBEM Solutions, Inc. SDKPro 3.0.0-->
<xs:schema xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:class="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/common" schemaLocation="http://schemas.dmtf.org/wbem/wscim/1/common.xsd"/>
<xs:element name="ResourceType" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
<xs:enumeration value="7"/>
<xs:enumeration value="8"/>
<xs:enumeration value="9"/>
<xs:enumeration value="10"/>
<xs:enumeration value="11"/>
<xs:enumeration value="12"/>
<xs:enumeration value="13"/>
<xs:enumeration value="14"/>
<xs:enumeration value="15"/>
<xs:enumeration value="16"/>
<xs:enumeration value="17"/>
<xs:enumeration value="18"/>
<xs:enumeration value="19"/>
<xs:enumeration value="20"/>
<xs:enumeration value="21"/>
<xs:enumeration value="22"/>
<xs:enumeration value="23"/>
<xs:enumeration value="24"/>
<xs:enumeration value="25"/>
<xs:enumeration value="26"/>
<xs:enumeration value="27"/>
<xs:enumeration value="28"/>
<xs:enumeration value="29"/>
<xs:enumeration value="30"/>
<xs:enumeration value="31"/>
<xs:enumeration value="32"/>
<xs:enumeration value="33"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="34"/>
<xs:maxInclusive value="32767"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32768"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="OtherResourceType" nillable="true" type="cim:cimString"/>
<xs:element name="ResourceSubType" nillable="true" type="cim:cimString"/>
<xs:element name="PoolID" nillable="true" type="cim:cimString"/>
<xs:element name="ConsumerVisibility" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="5"/>
<xs:maxInclusive value="32766"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32767"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="HostResource" nillable="true" type="cim:cimString"/>
<xs:element name="AllocationUnits" nillable="true" type="cim:cimString"/>
<xs:element name="VirtualQuantity" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="Reservation" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="Limit" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="Weight" nillable="true" type="cim:cimUnsignedInt"/>
<xs:element name="AutomaticAllocation" nillable="true" type="cim:cimBoolean"/>
<xs:element name="AutomaticDeallocation" nillable="true" type="cim:cimBoolean"/>
<xs:element name="Parent" nillable="true" type="cim:cimString"/>
<xs:element name="Connection" nillable="true" type="cim:cimString"/>
<xs:element name="Address" nillable="true" type="cim:cimString"/>
<xs:element name="MappingBehavior" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="6"/>
<xs:maxInclusive value="32766"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32767"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="AddressOnParent" nillable="true" type="cim:cimString"/>
<xs:element name="VirtualQuantityUnits" nillable="true" type="cim:cimString"/>
<xs:element name="InstanceID" type="cim:cimString"/>
<xs:element name="ElementName" type="cim:cimString"/>
<xs:element name="Caption" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimString">
<xs:maxLength value="64"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" nillable="true" type="cim:cimString"/>
<xs:element name="CIM_ResourceAllocationSettingData" type="class:CIM_ResourceAllocationSettingData_Type"/>
<xs:complexType name="CIM_ResourceAllocationSettingData_Type">
<xs:sequence>
<xs:element minOccurs="0" ref="class:Address"/>
<xs:element minOccurs="0" ref="class:AddressOnParent"/>
<xs:element minOccurs="0" ref="class:AllocationUnits"/>
<xs:element minOccurs="0" ref="class:AutomaticAllocation"/>
<xs:element minOccurs="0" ref="class:AutomaticDeallocation"/>
<xs:element minOccurs="0" ref="class:Caption"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:Connection"/>
<xs:element minOccurs="0" ref="class:ConsumerVisibility"/>
<xs:element minOccurs="0" ref="class:Description"/>
<xs:element ref="class:ElementName"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:HostResource"/>
<xs:element ref="class:InstanceID"/>
<xs:element minOccurs="0" ref="class:Limit"/>
<xs:element minOccurs="0" ref="class:MappingBehavior"/>
<xs:element minOccurs="0" ref="class:OtherResourceType"/>
<xs:element minOccurs="0" ref="class:Parent"/>
<xs:element minOccurs="0" ref="class:PoolID"/>
<xs:element minOccurs="0" ref="class:Reservation"/>
<xs:element minOccurs="0" ref="class:ResourceSubType"/>
<xs:element minOccurs="0" ref="class:ResourceType"/>
<xs:element minOccurs="0" ref="class:VirtualQuantity"/>
<xs:element minOccurs="0" ref="class:VirtualQuantityUnits"/>
<xs:element minOccurs="0" ref="class:Weight"/>
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,367 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:class="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_StorageAllocationSettingData" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified" targetNamespace="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_StorageAllocationSettingData">
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/common" schemaLocation="http://schemas.dmtf.org/wbem/wscim/1/common.xsd"/>
<xs:element name="VirtualResourceBlockSize" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="VirtualQuantity" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="VirtualQuantityUnits" nillable="true" type="cim:cimString"/>
<xs:element name="Access" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="HostResourceBlockSize" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="Reservation" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="Limit" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="HostExtentStartingAddress" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="HostExtentName" nillable="true" type="cim:cimString"/>
<xs:element name="HostExtentNameFormat" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="7"/>
<xs:enumeration value="9"/>
<xs:enumeration value="10"/>
<xs:enumeration value="11"/>
<xs:enumeration value="12"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="2"/>
<xs:maxInclusive value="6"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="13"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="OtherHostExtentNameFormat" nillable="true" type="cim:cimString"/>
<xs:element name="HostExtentNameNamespace" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
<xs:enumeration value="7"/>
<xs:enumeration value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="9"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="OtherHostExtentNameNamespace" nillable="true" type="cim:cimString"/>
<xs:element name="ResourceType" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
<xs:enumeration value="7"/>
<xs:enumeration value="8"/>
<xs:enumeration value="9"/>
<xs:enumeration value="10"/>
<xs:enumeration value="11"/>
<xs:enumeration value="12"/>
<xs:enumeration value="13"/>
<xs:enumeration value="14"/>
<xs:enumeration value="15"/>
<xs:enumeration value="16"/>
<xs:enumeration value="17"/>
<xs:enumeration value="18"/>
<xs:enumeration value="19"/>
<xs:enumeration value="20"/>
<xs:enumeration value="21"/>
<xs:enumeration value="22"/>
<xs:enumeration value="23"/>
<xs:enumeration value="24"/>
<xs:enumeration value="25"/>
<xs:enumeration value="26"/>
<xs:enumeration value="27"/>
<xs:enumeration value="28"/>
<xs:enumeration value="29"/>
<xs:enumeration value="30"/>
<xs:enumeration value="31"/>
<xs:enumeration value="32"/>
<xs:enumeration value="33"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="34"/>
<xs:maxInclusive value="32767"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32768"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="OtherResourceType" nillable="true" type="cim:cimString"/>
<xs:element name="ResourceSubType" nillable="true" type="cim:cimString"/>
<xs:element name="PoolID" nillable="true" type="cim:cimString"/>
<xs:element name="ConsumerVisibility" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="5"/>
<xs:maxInclusive value="32766"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32767"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="HostResource" nillable="true" type="cim:cimString"/>
<xs:element name="AllocationUnits" nillable="true" type="cim:cimString"/>
<xs:element name="Weight" nillable="true" type="cim:cimUnsignedInt"/>
<xs:element name="AutomaticAllocation" nillable="true" type="cim:cimBoolean"/>
<xs:element name="AutomaticDeallocation" nillable="true" type="cim:cimBoolean"/>
<xs:element name="Parent" nillable="true" type="cim:cimString"/>
<xs:element name="Connection" nillable="true" type="cim:cimString"/>
<xs:element name="Address" nillable="true" type="cim:cimString"/>
<xs:element name="MappingBehavior" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="5"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="6"/>
<xs:maxInclusive value="32766"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="32767"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="AddressOnParent" nillable="true" type="cim:cimString"/>
<xs:element name="InstanceID" type="cim:cimString"/>
<xs:element name="ElementName" type="cim:cimString"/>
<xs:element name="ChangeableType" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimUnsignedShort">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ConfigurationName" nillable="true" type="cim:cimString"/>
<xs:element name="ComponentSetting" nillable="true" type="xs:anyType"/>
<xs:element name="SoID" nillable="true" type="cim:cimString"/>
<xs:element name="SoOrgID" nillable="true" type="cim:cimString"/>
<xs:element name="Caption" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimString">
<xs:maxLength value="64"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" nillable="true" type="cim:cimString"/>
<xs:element name="Generation" nillable="true" type="cim:cimUnsignedLong"/>
<xs:element name="CIM_StorageAllocationSettingData" type="class:CIM_StorageAllocationSettingData_Type"/>
<xs:complexType name="CIM_StorageAllocationSettingData_Type">
<xs:sequence>
<xs:element minOccurs="0" ref="class:Access"/>
<xs:element minOccurs="0" ref="class:Address"/>
<xs:element minOccurs="0" ref="class:AddressOnParent"/>
<xs:element minOccurs="0" ref="class:AllocationUnits"/>
<xs:element minOccurs="0" ref="class:AutomaticAllocation"/>
<xs:element minOccurs="0" ref="class:AutomaticDeallocation"/>
<xs:element minOccurs="0" ref="class:Caption"/>
<xs:element minOccurs="0" ref="class:ChangeableType"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:ComponentSetting"/>
<xs:element minOccurs="0" ref="class:ConfigurationName"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:Connection"/>
<xs:element minOccurs="0" ref="class:ConsumerVisibility"/>
<xs:element minOccurs="0" ref="class:Description"/>
<xs:element ref="class:ElementName"/>
<xs:element minOccurs="0" ref="class:Generation"/>
<xs:element minOccurs="0" ref="class:HostExtentName"/>
<xs:element minOccurs="0" ref="class:HostExtentNameFormat"/>
<xs:element minOccurs="0" ref="class:HostExtentNameNamespace"/>
<xs:element minOccurs="0" ref="class:HostExtentStartingAddress"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:HostResource"/>
<xs:element minOccurs="0" ref="class:HostResourceBlockSize"/>
<xs:element ref="class:InstanceID"/>
<xs:element minOccurs="0" ref="class:Limit"/>
<xs:element minOccurs="0" ref="class:MappingBehavior"/>
<xs:element minOccurs="0" ref="class:OtherHostExtentNameFormat"/>
<xs:element minOccurs="0" ref="class:OtherHostExtentNameNamespace"/>
<xs:element minOccurs="0" ref="class:OtherResourceType"/>
<xs:element minOccurs="0" ref="class:Parent"/>
<xs:element minOccurs="0" ref="class:PoolID"/>
<xs:element minOccurs="0" ref="class:Reservation"/>
<xs:element minOccurs="0" ref="class:ResourceSubType"/>
<xs:element minOccurs="0" ref="class:ResourceType"/>
<xs:element minOccurs="0" ref="class:SoID"/>
<xs:element minOccurs="0" ref="class:SoOrgID"/>
<xs:element minOccurs="0" ref="class:VirtualQuantity"/>
<xs:element minOccurs="0" ref="class:VirtualQuantityUnits"/>
<xs:element minOccurs="0" ref="class:VirtualResourceBlockSize"/>
<xs:element minOccurs="0" ref="class:Weight"/>
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by WBEM Solutions, Inc. SDKPro 3.0.0-->
<xs:schema xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:class="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData">
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/common" schemaLocation="http://schemas.dmtf.org/wbem/wscim/1/common.xsd"/>
<xs:element name="VirtualSystemIdentifier" nillable="true" type="cim:cimString"/>
<xs:element name="VirtualSystemType" nillable="true" type="cim:cimString"/>
<xs:element name="Notes" nillable="true" type="cim:cimString"/>
<xs:element name="CreationTime" nillable="true" type="cim:cimDateTime"/>
<xs:element name="ConfigurationID" nillable="true" type="cim:cimString"/>
<xs:element name="ConfigurationDataRoot" nillable="true" type="cim:cimString"/>
<xs:element name="ConfigurationFile" nillable="true" type="cim:cimString"/>
<xs:element name="SnapshotDataRoot" nillable="true" type="cim:cimString"/>
<xs:element name="SuspendDataRoot" nillable="true" type="cim:cimString"/>
<xs:element name="SwapFileDataRoot" nillable="true" type="cim:cimString"/>
<xs:element name="LogDataRoot" nillable="true" type="cim:cimString"/>
<xs:element name="AutomaticStartupAction" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:maxInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="AutomaticStartupActionDelay" nillable="true" type="cim:cimDateTime"/>
<xs:element name="AutomaticStartupActionSequenceNumber" nillable="true" type="cim:cimUnsignedShort"/>
<xs:element name="AutomaticShutdownAction" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:maxInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="AutomaticRecoveryAction" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimAnySimpleType">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
<xs:maxInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="RecoveryFile" nillable="true" type="cim:cimString"/>
<xs:element name="InstanceID" type="cim:cimString"/>
<xs:element name="ElementName" type="cim:cimString"/>
<xs:element name="Caption" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="cim:cimString">
<xs:maxLength value="64"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" nillable="true" type="cim:cimString"/>
<xs:element name="CIM_VirtualSystemSettingData" type="class:CIM_VirtualSystemSettingData_Type"/>
<xs:complexType name="CIM_VirtualSystemSettingData_Type">
<xs:sequence>
<xs:element minOccurs="0" ref="class:AutomaticRecoveryAction"/>
<xs:element minOccurs="0" ref="class:AutomaticShutdownAction"/>
<xs:element minOccurs="0" ref="class:AutomaticStartupAction"/>
<xs:element minOccurs="0" ref="class:AutomaticStartupActionDelay"/>
<xs:element minOccurs="0" ref="class:AutomaticStartupActionSequenceNumber"/>
<xs:element minOccurs="0" ref="class:Caption"/>
<xs:element minOccurs="0" ref="class:ConfigurationDataRoot"/>
<xs:element minOccurs="0" ref="class:ConfigurationFile"/>
<xs:element minOccurs="0" ref="class:ConfigurationID"/>
<xs:element minOccurs="0" ref="class:CreationTime"/>
<xs:element minOccurs="0" ref="class:Description"/>
<xs:element ref="class:ElementName"/>
<xs:element ref="class:InstanceID"/>
<xs:element minOccurs="0" ref="class:LogDataRoot"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="class:Notes"/>
<xs:element minOccurs="0" ref="class:RecoveryFile"/>
<xs:element minOccurs="0" ref="class:SnapshotDataRoot"/>
<xs:element minOccurs="0" ref="class:SuspendDataRoot"/>
<xs:element minOccurs="0" ref="class:SwapFileDataRoot"/>
<xs:element minOccurs="0" ref="class:VirtualSystemIdentifier"/>
<xs:element minOccurs="0" ref="class:VirtualSystemType"/>
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,229 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- DMTF Document number: DSP8004 -->
<!-- Status: Final -->
<!-- Copyright © 2007 Distributed Management Task Force, Inc. (DMTF). All rights reserved. -->
<xs:schema targetNamespace="http://schemas.dmtf.org/wbem/wscim/1/common"
xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<!-- The following are runtime attribute definitions -->
<xs:attribute name="Key" type="xs:boolean"/>
<xs:attribute name="Version" type="xs:string"/>
<!-- The following section defines the extended WS-CIM datatypes -->
<xs:complexType name="cimDateTime">
<xs:choice>
<xs:element name="CIM_DateTime" type="xs:string" nillable="true"/>
<xs:element name="Interval" type="xs:duration"/>
<xs:element name="Date" type="xs:date" />
<xs:element name="Time" type="xs:time" />
<xs:element name="Datetime" type="xs:dateTime"/>
</xs:choice>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:complexType name="cimUnsignedByte">
<xs:simpleContent>
<xs:extension base="xs:unsignedByte">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimByte">
<xs:simpleContent>
<xs:extension base="xs:byte">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimUnsignedShort">
<xs:simpleContent>
<xs:extension base="xs:unsignedShort">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimShort">
<xs:simpleContent>
<xs:extension base="xs:short">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimUnsignedInt">
<xs:simpleContent>
<xs:extension base="xs:unsignedInt">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimInt">
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimUnsignedLong">
<xs:simpleContent>
<xs:extension base="xs:unsignedLong">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimLong">
<xs:simpleContent>
<xs:extension base="xs:long">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimString">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimBoolean">
<xs:simpleContent>
<xs:extension base="xs:boolean">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimFloat">
<xs:simpleContent>
<xs:extension base="xs:float">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimDouble">
<xs:simpleContent>
<xs:extension base="xs:double">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimChar16">
<xs:simpleContent>
<xs:restriction base="cim:cimString">
<xs:maxLength value="1"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimBase64Binary">
<xs:simpleContent>
<xs:extension base="xs:base64Binary">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimReference">
<xs:sequence>
<xs:any namespace="##other" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:complexType name="cimHexBinary">
<xs:simpleContent>
<xs:extension base="xs:hexBinary">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cimAnySimpleType">
<xs:simpleContent>
<xs:extension base="xs:anySimpleType">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- The following datatypes are used exclusively to define metadata fragments -->
<xs:attribute name="qualifier" type="xs:boolean"/>
<xs:complexType name="qualifierString">
<xs:simpleContent>
<xs:extension base="cim:cimString">
<xs:attribute ref="cim:qualifier" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="qualifierBoolean">
<xs:simpleContent>
<xs:extension base="cim:cimBoolean">
<xs:attribute ref="cim:qualifier" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="qualifierUInt32">
<xs:simpleContent>
<xs:extension base="cim:cimUnsignedInt">
<xs:attribute ref="cim:qualifier" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="qualifierSInt64">
<xs:simpleContent>
<xs:extension base="cim:cimLong">
<xs:attribute ref="cim:qualifier" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="qualifierSArray">
<xs:complexContent>
<xs:extension base="cim:qualifierString"/>
</xs:complexContent>
</xs:complexType>
<!-- The following element is to be used only for defining metadata -->
<xs:element name="DefaultValue" type="xs:anySimpleType" />
</xs:schema>

View File

@ -0,0 +1,884 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
DMTF - Distributed Management Task Force, Inc. - http://www.dmtf.org
Release URLs:
http://schemas.dmtf.org/ovf/envelope/1/dsp8023_1.1.xsd
Document number: DSP8023
Date: 2013-08-22
Version: 1.1.1
Document status: DMTF Standard
Title: OVF Envelope XSD
XML Schema Specification for OVF Envelope
Document type: Specification (W3C XML Schema Document)
Document language: en-US
Contact group: ovfwg@dmtf.org
Copyright notice:
Copyright (C) 2008-2013 Distributed Management Task Force, Inc. (DMTF). All rights reserved. DMTF is a not-for-profit
association of industry members dedicated to promoting enterprise and systems management and interoperability. Members
and non-members may reproduce DMTF specifications and documents for uses consistent with this purpose, provided that
correct attribution is given. As DMTF specifications may be revised from time to time, the particular version and
release date should always be noted. Implementation of certain elements of this standard or proposed standard may be
subject to third party patent rights, including provisional patent rights (herein "patent rights"). DMTF makes no
representations to users of the standard as to the existence of such rights, and is not responsible to recognize,
disclose, or identify any or all such third party patent right, owners or claimants, nor for any incomplete or
inaccurate identification or disclosure of such rights, owners or claimants. DMTF shall have no liability to any party,
in any manner or circumstance, under any legal theory whatsoever, for failure to recognize, disclose, or identify any
such third party patent rights, or for such party's reliance on the standard or incorporation thereof in its product,
protocols or testing procedures. DMTF shall have no liability to any party implementing such standard, whether such
implementation is foreseeable or not, nor to any patent owner or claimant, and shall have no liability or responsibility
for costs or losses incurred if a standard is withdrawn or modified after publication, and shall be indemnified and held
harmless by any party implementing the standard from any and all claims of infringement by a patent owner for such
implementations. For information about patents held by third-parties which have notified the DMTF that, in their
opinion, such patent may relate to or impact implementations of DMTF standards, visit
http://www.dmtf.org/about/policies/disclosures.php.
Compatibility:
This XML schema maintains forward compatibility w.r.t. its XML instance documents as follows: An updated minor version of
the XML schema (e.g. "m.n+1.*") shall successfully validate XML instance documents that validated successfully using the
original version of the XML schema (e.g. "m.n.*"). An XML instance document that successfully validates against an updated
minor version of the XML schema may or may not validate against the original version of the XML schema. In other words,
the XML schema may introduce additional functionality as long as it does not break existing XML instance documents.
Change log:
1.0.0 - 2009-01-15
1.1.0 - 2009-12-22 - DMTF Standard
1.1.1 - 2013-08-22 - Released as a DMTF Standard
changed transport attribute from 'comma separated' to 'space separated' to match DSP0243
updated Introduction
added Compatibility statement line 41
changed description on startup order to "Startup order. Allows the package author the capability of specifying the startup order of the virtual systems. “
changed initialBootStopDelay to use="required" to align with DSP0243
-->
<xs:schema xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" targetNamespace="http://schemas.dmtf.org/ovf/envelope/1" elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/common" schemaLocation="common.xsd"/>
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" schemaLocation="CIM_VirtualSystemSettingData.xsd"/>
<xs:import namespace="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" schemaLocation="CIM_ResourceAllocationSettingData.xsd"/>
<xs:attribute name="required" type="xs:boolean" default="true">
<xs:annotation>
<xs:documentation>Determines whether import should fail if the Section is
not understood</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="transport" type="xs:string" default="">
<xs:annotation>
<xs:documentation>Space separated list of supported transport types</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:element name="Envelope" type="ovf:EnvelopeType">
<xs:annotation>
<xs:documentation>Root element of OVF Descriptor</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="EnvelopeType">
<xs:annotation>
<xs:documentation>Root OVF descriptor type</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="References" type="ovf:References_Type">
<xs:annotation>
<xs:documentation>References to all external files</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="ovf:Section" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Package level meta-data</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="ovf:Content">
<xs:annotation>
<xs:documentation>Content: A VirtualSystem or a
VirtualSystemCollection</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Strings" type="ovf:Strings_Type" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Localized string resource bundles
</xs:documentation>
</xs:annotation>
</xs:element>
<!-- xs:any with namespace ##other extension point not present here,
extensions at outermost Envelope level should be done by defining
new members of the ovf:Section substitution group -->
</xs:sequence>
<xs:attribute ref="xml:lang" use="optional" default="en-US"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:complexType name="References_Type">
<xs:annotation>
<xs:documentation>Type for list of external resources</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="File" type="ovf:File_Type" minOccurs="0" maxOccurs="unbounded"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:complexType name="File_Type">
<xs:annotation>
<xs:documentation>Type for an external reference to a
resource</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Reference key used in other parts of the
package</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="href" type="xs:anyURI" use="required">
<xs:annotation>
<xs:documentation>Location of external resource</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="size" type="xs:unsignedLong" use="optional">
<xs:annotation>
<xs:documentation>Size in bytes of the files (if
known)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="compression" type="xs:string" use="optional" default="">
<xs:annotation>
<xs:documentation>Compression type (gzip, bzip2, or none if empty or not
specified)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="chunkSize" type="xs:long" use="optional">
<xs:annotation>
<xs:documentation>Chunk size (except for last chunk)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:element name="Content" type="ovf:Content_Type">
<xs:annotation>
<xs:documentation>Base element for content types. This is the head the
subsitution group</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="Content_Type" abstract="true">
<xs:annotation>
<xs:documentation>Base class for content</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Info" type="ovf:Msg_Type">
<xs:annotation>
<xs:documentation>Info element describes the meaning of the content,
this is typically shown if the type is not understood by an
application</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Name" type="ovf:Msg_Type" minOccurs="0">
<xs:annotation>
<xs:documentation>An optional localizable display name of the content
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="ovf:Section" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Content body is a list of Sections
</xs:documentation>
</xs:annotation>
</xs:element>
<!-- xs:any with namespace ##other extension point not present here,
extensions at Content level should be done by defining new members
of the ovf:Section substitution group -->
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:element name="VirtualSystem" type="ovf:VirtualSystem_Type" substitutionGroup="ovf:Content">
<xs:annotation>
<xs:documentation>Element substitutable for Content since VirtualSystem_Type
is a derivation of Content_Type </xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="VirtualSystem_Type">
<xs:annotation>
<xs:documentation>Content describing a virtual system</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Content_Type"/>
</xs:complexContent>
</xs:complexType>
<xs:element name="VirtualSystemCollection" type="ovf:VirtualSystemCollection_Type" substitutionGroup="ovf:Content">
<xs:annotation>
<xs:documentation>Element substitutable for Content since VirtualSystemCollection_Type
is a derivation of Content_Type </xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="VirtualSystemCollection_Type">
<xs:annotation>
<xs:documentation>A collection of Content.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Content_Type">
<xs:sequence>
<xs:element ref="ovf:Content" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- STRINGS -->
<xs:element name="Strings" type="ovf:Strings_Type">
<xs:annotation>
<xs:documentation>Root element of I18N string bundle</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="Strings_Type">
<xs:annotation>
<xs:documentation>Type for string resource bundle</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Msg" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Resource bundle element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:annotation>
<xs:documentation>String element value</xs:documentation>
</xs:annotation>
<xs:attribute name="msgid" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>String element identifier
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute ref="xml:lang">
<xs:annotation>
<xs:documentation>Locale for this string resource
bundle</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="fileRef" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Reference to external resource
bundle</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<!--- SECTION -->
<xs:element name="Section" type="ovf:Section_Type">
<xs:annotation>
<xs:documentation>Base elements for OVF sections. This is the head of the
substitution group.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="Section_Type" abstract="true">
<xs:sequence>
<xs:annotation>
<xs:documentation>Base type for Sections, subclassing this is the most
common form of extensibility. Subtypes define more specific
elements.</xs:documentation>
</xs:annotation>
<xs:element name="Info" type="ovf:Msg_Type">
<xs:annotation>
<xs:documentation>Info element describes the meaning of the Section,
this is typically shown if the Section is not understood by an
application</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute ref="ovf:required" use="optional"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:complexType name="Msg_Type">
<xs:annotation>
<xs:documentation>Type for localizable string</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:annotation>
<xs:documentation>Default string value</xs:documentation>
</xs:annotation>
<xs:attribute name="msgid" type="xs:string" use="optional" default="">
<xs:annotation>
<xs:documentation>Identifier for lookup in string resource bundle
for alternate locale</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- CORE SECTIONS -->
<xs:element name="AnnotationSection" type="ovf:AnnotationSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since
AnnotationSection_Type is a derivation of Section_Type
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="AnnotationSection_Type">
<xs:annotation>
<xs:documentation>User defined annotation</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="Annotation" type="ovf:Msg_Type"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ProductSection" type="ovf:ProductSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since ProductSection_Type
is a derivation of Section_Type </xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="ProductSection_Type">
<xs:annotation>
<xs:documentation>Product information for a virtual
appliance</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="Product" type="ovf:Msg_Type" minOccurs="0">
<xs:annotation>
<xs:documentation>Name of product</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Vendor" type="ovf:Msg_Type" minOccurs="0">
<xs:annotation>
<xs:documentation>Name of product vendor</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Version" type="cim:cimString" minOccurs="0">
<xs:annotation>
<xs:documentation>Product version, short form</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="FullVersion" type="cim:cimString" minOccurs="0">
<xs:annotation>
<xs:documentation>Product version, long form</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ProductUrl" type="cim:cimString" minOccurs="0">
<xs:annotation>
<xs:documentation>URL resolving to product description</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="VendorUrl" type="cim:cimString" minOccurs="0">
<xs:annotation>
<xs:documentation>URL resolving to vendor description</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AppUrl" type="cim:cimString" minOccurs="0">
<xs:annotation>
<xs:documentation>Experimental: URL resolving to deployed product instance</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Icon" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Experimental: Display icon for product</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="height" type="xs:unsignedShort" use="optional"/>
<xs:attribute name="width" type="xs:unsignedShort" use="optional"/>
<xs:attribute name="mimeType" type="xs:string" use="optional"/>
<xs:attribute name="fileRef" type="xs:string" use="required"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:element>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Properties for application-level
customization</xs:documentation>
</xs:annotation>
<xs:element name="Category" type="ovf:Msg_Type">
<xs:annotation>
<xs:documentation>Property grouping
delimiter</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Property">
<xs:annotation>
<xs:documentation>Property element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Label" type="ovf:Msg_Type" minOccurs="0">
<xs:annotation>
<xs:documentation>Short description of
property</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Description" type="ovf:Msg_Type" minOccurs="0">
<xs:annotation>
<xs:documentation>Description of
property</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Value" type="ovf:PropertyConfigurationValue_Type" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Alternative default
property values for different
configuration</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="key" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Property
identifier</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="type" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Property
type</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="qualifiers" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>A comma-separated set of type
qualifiers</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="userConfigurable" type="xs:boolean" use="optional" default="false">
<xs:annotation>
<xs:documentation>Determines whether the property
value is configurable during
installation</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="value" type="xs:string" use="optional" default="">
<xs:annotation>
<xs:documentation>Default value for
property</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="password" type="xs:boolean" use="optional" default="false">
<xs:annotation>
<xs:documentation>Determines whether the property
value should be obscured during deployment
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:element>
</xs:choice>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="class" type="xs:string" use="optional" default="">
<xs:annotation>
<xs:documentation>Property identifier prefix</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="instance" type="xs:string" use="optional" default="">
<xs:annotation>
<xs:documentation>Property identifier suffix</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="PropertyConfigurationValue_Type">
<xs:annotation>
<xs:documentation>Type for alternative default values for properties when
DeploymentOptionSection is used</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="value" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Alternative default property value</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="configuration" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Configuration from DeploymentOptionSection in which
this value is default</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:element name="NetworkSection" type="ovf:NetworkSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since NetworkSection_Type
is a derivation of Section_Type </xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="NetworkSection_Type">
<xs:annotation>
<xs:documentation>Descriptions of logical networks used within the
package</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="Network" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Description" type="ovf:Msg_Type" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:element>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DiskSection" type="ovf:DiskSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since DiskSection_Type is
a derivation of Section_Type </xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="DiskSection_Type">
<xs:annotation>
<xs:documentation>Descriptions of virtual disks used within the
package</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="Disk" type="ovf:VirtualDiskDesc_Type" minOccurs="0" maxOccurs="unbounded"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="VirtualDiskDesc_Type">
<xs:annotation>
<xs:documentation>Type for virtual disk descriptor</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="diskId" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Identifier for virtual disk</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="fileRef" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Reference to virtual disk content. If not specified a
blank virtual disk is created of size given by capacity
attribute</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="capacity" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Virtual disk capacity, can be specified as either an
xs:long size or as a reference to a property using ${property_name}.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="capacityAllocationUnits" type="xs:string" use="optional" default="byte">
<xs:annotation>
<xs:documentation>Unit of allocation for ovf:capacity. If not specified
default value is bytes. Value shall match a recognized value for the
UNITS qualifier in DSP0004.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="format" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Format of virtual disk given as a URI that identifies
the disk type</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="populatedSize" type="xs:long" use="optional">
<xs:annotation>
<xs:documentation>Estimated populated size of disk in
bytes</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="parentRef" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Reference to potential parent disk</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
<xs:element name="OperatingSystemSection" type="ovf:OperatingSystemSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since
OperatingSystemSection_Type is a derivation of Section_Type
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="OperatingSystemSection_Type">
<xs:annotation>
<xs:documentation>Specification of the operating system installed in the
guest</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="Description" type="ovf:Msg_Type" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>Identifier defined by the
CIM_OperatingSystem.OsType enumeration</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="version" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Version defined by the
CIM_OperatingSystem.Version field</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="EulaSection" type="ovf:EulaSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since EulaSection_Type is
a derivation of Section_Type </xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="EulaSection_Type">
<xs:annotation>
<xs:documentation>End-User License Agreement</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="License" type="ovf:Msg_Type"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="VirtualHardwareSection" type="ovf:VirtualHardwareSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since
VirtualHardwareSection_Type is a derivation of Section_Type
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="VirtualHardwareSection_Type">
<xs:annotation>
<xs:documentation>Specifies virtual hardware requirements for a virtual
machine</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="System" type="ovf:VSSD_Type" minOccurs="0"/>
<xs:element name="Item" type="ovf:RASD_Type" minOccurs="0" maxOccurs="unbounded"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="optional" default="">
<xs:annotation>
<xs:documentation>Unique identifier of this VirtualHardwareSection
(within a VirtualSystem)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute ref="ovf:transport" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ResourceAllocationSection" type="ovf:ResourceAllocationSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since
ResourceAllocationSection_Type is a derivation of Section_Type
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="ResourceAllocationSection_Type">
<xs:annotation>
<xs:documentation>Resource constraints on a
VirtualSystemCollection</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="Item" type="ovf:RASD_Type" minOccurs="0" maxOccurs="unbounded"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="InstallSection" type="ovf:InstallSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since InstallSection_Type
is a derivation of Section_Type </xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="InstallSection_Type">
<xs:annotation>
<xs:documentation>If present indicates that the virtual machine needs to be
initially booted to install and configure the software</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="initialBootStopDelay" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>Delay in seconds to wait for power off to
complete after initial boot</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="StartupSection" type="ovf:StartupSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since StartupSection_Type
is a derivation of Section_Type </xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="StartupSection_Type">
<xs:annotation>
<xs:documentation>Specifies the order in which entities in a
VirtualSystemCollection are powered on and shut down</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="Item" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Unique identifier of
the content (within a VirtualSystemCollection)
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="order" type="xs:unsignedShort" use="required">
<xs:annotation>
<xs:documentation>Startup order. Allows the package author the capability of specifying the startup order of the virtual systems.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="startDelay" type="xs:unsignedShort" use="optional" default="0">
<xs:annotation>
<xs:documentation>Delay in seconds to wait for power
on to complete</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="waitingForGuest" type="xs:boolean" use="optional" default="false">
<xs:annotation>
<xs:documentation>Resumes power-on sequence if guest
software reports ok</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="stopDelay" type="xs:unsignedShort" use="optional" default="0">
<xs:annotation>
<xs:documentation>Delay in seconds to wait for power
off to complete</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="startAction" type="xs:string" use="optional" default="powerOn">
<xs:annotation>
<xs:documentation>Start action to use, valid values
are: 'powerOn', 'none' </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="stopAction" type="xs:string" use="optional" default="powerOff">
<xs:annotation>
<xs:documentation>Stop action to use, valid values
are: ''powerOff' , 'guestShutdown',
'none'</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:element>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DeploymentOptionSection" type="ovf:DeploymentOptionSection_Type" substitutionGroup="ovf:Section">
<xs:annotation>
<xs:documentation>Element substitutable for Section since
DeploymentOptionSection_Type is a derivation of Section_Type
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="DeploymentOptionSection_Type">
<xs:annotation>
<xs:documentation>Enumeration of discrete deployment
options</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ovf:Section_Type">
<xs:sequence>
<xs:element name="Configuration" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Label" type="ovf:Msg_Type"/>
<xs:element name="Description" type="ovf:Msg_Type"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="default" type="xs:boolean" use="optional" default="false"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
</xs:element>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="VSSD_Type">
<xs:annotation>
<xs:documentation>Wrapper for
CIM_VirtualSystemSettingData_Type</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="vssd:CIM_VirtualSystemSettingData_Type">
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="RASD_Type">
<xs:complexContent>
<xs:annotation>
<xs:documentation>Wrapper for
CIM_ResourceAllocationSettingData_Type</xs:documentation>
</xs:annotation>
<xs:extension base="rasd:CIM_ResourceAllocationSettingData_Type">
<xs:attribute name="required" type="xs:boolean" use="optional" default="true">
<xs:annotation>
<xs:documentation>Determines whether import should fail if entry
is not understood</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="configuration" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Configuration from DeploymentOptionSection this
entry is valid for</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="bound" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>States that this entry is a range
marker</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
#
# Copyright ©[2011] World Wide Web Consortium
# (Massachusetts Institute of Technology,
# European Research Consortium for Informatics and Mathematics,
# Keio University). All Rights Reserved.
# This work is distributed under the W3C® Software License [1] in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even
# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE.
# [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
#
-->
<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN"
"http://www.w3.org/2001/XMLSchema.dtd"
[
<!ATTLIST schema
xmlns:xenc CDATA #FIXED 'http://www.w3.org/2001/04/xmlenc#'
xmlns:ds CDATA #FIXED 'http://www.w3.org/2000/09/xmldsig#'
xmlns:xenc11 CDATA #FIXED 'http://www.w3.org/2009/xmlenc11#'>
<!ENTITY xenc 'http://www.w3.org/2001/04/xmlenc#'>
<!ENTITY % p ''>
<!ENTITY % s ''>
]>
<schema xmlns='http://www.w3.org/2001/XMLSchema' version='1.0'
xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'
xmlns:xenc11='http://www.w3.org/2009/xmlenc11#'
xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
targetNamespace='http://www.w3.org/2009/xmlenc11#'
elementFormDefault='qualified'>
<import namespace='http://www.w3.org/2000/09/xmldsig#'
schemaLocation='http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd'/>
<import namespace='http://www.w3.org/2001/04/xmlenc#'
schemaLocation='http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/xenc-schema.xsd'/>
<element name="ConcatKDFParams" type="xenc11:ConcatKDFParamsType"/>
<complexType name="ConcatKDFParamsType">
<sequence>
<element ref="ds:DigestMethod"/>
</sequence>
<attribute name="AlgorithmID" type="hexBinary"/>
<attribute name="PartyUInfo" type="hexBinary"/>
<attribute name="PartyVInfo" type="hexBinary"/>
<attribute name="SuppPubInfo" type="hexBinary"/>
<attribute name="SuppPrivInfo" type="hexBinary"/>
</complexType>
<element name="DerivedKey" type="xenc11:DerivedKeyType"/>
<complexType name="DerivedKeyType">
<sequence>
<element ref="xenc11:KeyDerivationMethod" minOccurs="0"/>
<element ref="xenc:ReferenceList" minOccurs="0"/>
<element name="DerivedKeyName" type="string" minOccurs="0"/>
<element name="MasterKeyName" type="string" minOccurs="0"/>
</sequence>
<attribute name="Recipient" type="string" use="optional"/>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<element name="KeyDerivationMethod" type="xenc11:KeyDerivationMethodType"/>
<complexType name="KeyDerivationMethodType">
<sequence>
<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="PBKDF2-params" type="xenc11:PBKDF2ParameterType"/>
<complexType name="AlgorithmIdentifierType">
<sequence>
<element name="Parameters" minOccurs="0"/>
</sequence>
<attribute name="Algorithm" type="anyURI" use="required" />
</complexType>
<complexType name="PRFAlgorithmIdentifierType">
<complexContent>
<restriction base="xenc11:AlgorithmIdentifierType">
<attribute name="Algorithm" type="anyURI" use="required" />
</restriction>
</complexContent>
</complexType>
<complexType name="PBKDF2ParameterType">
<sequence>
<element name="Salt">
<complexType>
<choice>
<element name="Specified" type="base64Binary"/>
<element name="OtherSource" type="xenc11:AlgorithmIdentifierType"/>
</choice>
</complexType>
</element>
<element name="IterationCount" type="positiveInteger"/>
<element name="KeyLength" type="positiveInteger"/>
<element name="PRF" type="xenc11:PRFAlgorithmIdentifierType"/>
</sequence>
</complexType>
<element name="MGF" type="xenc11:MGFType"/>
<complexType name="MGFType">
<complexContent>
<restriction base="xenc11:AlgorithmIdentifierType">
<attribute name="Algorithm" type="anyURI" use="required" />
</restriction>
</complexContent>
</complexType>
</schema>

View File

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN"
"http://www.w3.org/2001/XMLSchema.dtd"
[
<!ATTLIST schema
xmlns:xenc CDATA #FIXED 'http://www.w3.org/2001/04/xmlenc#'
xmlns:ds CDATA #FIXED 'http://www.w3.org/2000/09/xmldsig#'>
<!ENTITY xenc 'http://www.w3.org/2001/04/xmlenc#'>
<!ENTITY % p ''>
<!ENTITY % s ''>
]>
<schema xmlns='http://www.w3.org/2001/XMLSchema' version='1.0'
xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'
xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
targetNamespace='http://www.w3.org/2001/04/xmlenc#'
elementFormDefault='qualified'>
<import namespace='http://www.w3.org/2000/09/xmldsig#'
schemaLocation='http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd'/>
<complexType name='EncryptedType' abstract='true'>
<sequence>
<element name='EncryptionMethod' type='xenc:EncryptionMethodType'
minOccurs='0'/>
<element ref='ds:KeyInfo' minOccurs='0'/>
<element ref='xenc:CipherData'/>
<element ref='xenc:EncryptionProperties' minOccurs='0'/>
</sequence>
<attribute name='Id' type='ID' use='optional'/>
<attribute name='Type' type='anyURI' use='optional'/>
<attribute name='MimeType' type='string' use='optional'/>
<attribute name='Encoding' type='anyURI' use='optional'/>
</complexType>
<complexType name='EncryptionMethodType' mixed='true'>
<sequence>
<element name='KeySize' minOccurs='0' type='xenc:KeySizeType'/>
<element name='OAEPparams' minOccurs='0' type='base64Binary'/>
<any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
</sequence>
<attribute name='Algorithm' type='anyURI' use='required'/>
</complexType>
<simpleType name='KeySizeType'>
<restriction base="integer"/>
</simpleType>
<element name='CipherData' type='xenc:CipherDataType'/>
<complexType name='CipherDataType'>
<choice>
<element name='CipherValue' type='base64Binary'/>
<element ref='xenc:CipherReference'/>
</choice>
</complexType>
<element name='CipherReference' type='xenc:CipherReferenceType'/>
<complexType name='CipherReferenceType'>
<choice>
<element name='Transforms' type='xenc:TransformsType' minOccurs='0'/>
</choice>
<attribute name='URI' type='anyURI' use='required'/>
</complexType>
<complexType name='TransformsType'>
<sequence>
<element ref='ds:Transform' maxOccurs='unbounded'/>
</sequence>
</complexType>
<element name='EncryptedData' type='xenc:EncryptedDataType'/>
<complexType name='EncryptedDataType'>
<complexContent>
<extension base='xenc:EncryptedType'>
</extension>
</complexContent>
</complexType>
<!-- Children of ds:KeyInfo -->
<element name='EncryptedKey' type='xenc:EncryptedKeyType'/>
<complexType name='EncryptedKeyType'>
<complexContent>
<extension base='xenc:EncryptedType'>
<sequence>
<element ref='xenc:ReferenceList' minOccurs='0'/>
<element name='CarriedKeyName' type='string' minOccurs='0'/>
</sequence>
<attribute name='Recipient' type='string'
use='optional'/>
</extension>
</complexContent>
</complexType>
<element name="AgreementMethod" type="xenc:AgreementMethodType"/>
<complexType name="AgreementMethodType" mixed="true">
<sequence>
<element name="KA-Nonce" minOccurs="0" type="base64Binary"/>
<!-- <element ref="ds:DigestMethod" minOccurs="0"/> -->
<any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
<element name="OriginatorKeyInfo" minOccurs="0" type="ds:KeyInfoType"/>
<element name="RecipientKeyInfo" minOccurs="0" type="ds:KeyInfoType"/>
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- End Children of ds:KeyInfo -->
<element name='ReferenceList'>
<complexType>
<choice minOccurs='1' maxOccurs='unbounded'>
<element name='DataReference' type='xenc:ReferenceType'/>
<element name='KeyReference' type='xenc:ReferenceType'/>
</choice>
</complexType>
</element>
<complexType name='ReferenceType'>
<sequence>
<any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
</sequence>
<attribute name='URI' type='anyURI' use='required'/>
</complexType>
<element name='EncryptionProperties' type='xenc:EncryptionPropertiesType'/>
<complexType name='EncryptionPropertiesType'>
<sequence>
<element ref='xenc:EncryptionProperty' maxOccurs='unbounded'/>
</sequence>
<attribute name='Id' type='ID' use='optional'/>
</complexType>
<element name='EncryptionProperty' type='xenc:EncryptionPropertyType'/>
<complexType name='EncryptionPropertyType' mixed='true'>
<choice maxOccurs='unbounded'>
<any namespace='##other' processContents='lax'/>
</choice>
<attribute name='Target' type='anyURI' use='optional'/>
<attribute name='Id' type='ID' use='optional'/>
<anyAttribute namespace="http://www.w3.org/XML/1998/namespace"/>
</complexType>
</schema>

View File

@ -0,0 +1,287 @@
<?xml version='1.0'?>
<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns ="http://www.w3.org/1999/xhtml"
xml:lang="en">
<xs:annotation>
<xs:documentation>
<div>
<h1>About the XML namespace</h1>
<div class="bodytext">
<p>
This schema document describes the XML namespace, in a form
suitable for import by other schema documents.
</p>
<p>
See <a href="http://www.w3.org/XML/1998/namespace.html">
http://www.w3.org/XML/1998/namespace.html</a> and
<a href="http://www.w3.org/TR/REC-xml">
http://www.w3.org/TR/REC-xml</a> for information
about this namespace.
</p>
<p>
Note that local names in this namespace are intended to be
defined only by the World Wide Web Consortium or its subgroups.
The names currently defined in this namespace are listed below.
They should not be used with conflicting semantics by any Working
Group, specification, or document instance.
</p>
<p>
See further below in this document for more information about <a
href="#usage">how to refer to this schema document from your own
XSD schema documents</a> and about <a href="#nsversioning">the
namespace-versioning policy governing this schema document</a>.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:attribute name="lang">
<xs:annotation>
<xs:documentation>
<div>
<h3>lang (as an attribute name)</h3>
<p>
denotes an attribute whose value
is a language code for the natural language of the content of
any element; its value is inherited. This name is reserved
by virtue of its definition in the XML specification.</p>
</div>
<div>
<h4>Notes</h4>
<p>
Attempting to install the relevant ISO 2- and 3-letter
codes as the enumerated possible values is probably never
going to be a realistic possibility.
</p>
<p>
See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
and the IANA language subtag registry at
<a href="http://www.iana.org/assignments/language-subtag-registry">
http://www.iana.org/assignments/language-subtag-registry</a>
for further information.
</p>
<p>
The union allows for the 'un-declaration' of xml:lang with
the empty string.
</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:union memberTypes="xs:language">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="space">
<xs:annotation>
<xs:documentation>
<div>
<h3>space (as an attribute name)</h3>
<p>
denotes an attribute whose
value is a keyword indicating what whitespace processing
discipline is intended for the content of the element; its
value is inherited. This name is reserved by virtue of its
definition in the XML specification.</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:NCName">
<xs:enumeration value="default"/>
<xs:enumeration value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
<xs:documentation>
<div>
<h3>base (as an attribute name)</h3>
<p>
denotes an attribute whose value
provides a URI to be used as the base for interpreting any
relative URIs in the scope of the element on which it
appears; its value is inherited. This name is reserved
by virtue of its definition in the XML Base specification.</p>
<p>
See <a
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="id" type="xs:ID">
<xs:annotation>
<xs:documentation>
<div>
<h3>id (as an attribute name)</h3>
<p>
denotes an attribute whose value
should be interpreted as if declared to be of type ID.
This name is reserved by virtue of its definition in the
xml:id specification.</p>
<p>
See <a
href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attributeGroup name="specialAttrs">
<xs:attribute ref="xml:base"/>
<xs:attribute ref="xml:lang"/>
<xs:attribute ref="xml:space"/>
<xs:attribute ref="xml:id"/>
</xs:attributeGroup>
<xs:annotation>
<xs:documentation>
<div>
<h3>Father (in any context at all)</h3>
<div class="bodytext">
<p>
denotes Jon Bosak, the chair of
the original XML Working Group. This name is reserved by
the following decision of the W3C XML Plenary and
XML Coordination groups:
</p>
<blockquote>
<p>
In appreciation for his vision, leadership and
dedication the W3C XML Plenary on this 10th day of
February, 2000, reserves for Jon Bosak in perpetuity
the XML name "xml:Father".
</p>
</blockquote>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div xml:id="usage" id="usage">
<h2><a name="usage">About this schema document</a></h2>
<div class="bodytext">
<p>
This schema defines attributes and an attribute group suitable
for use by schemas wishing to allow <code>xml:base</code>,
<code>xml:lang</code>, <code>xml:space</code> or
<code>xml:id</code> attributes on elements they define.
</p>
<p>
To enable this, such a schema must import this schema for
the XML namespace, e.g. as follows:
</p>
<pre>
&lt;schema . . .>
. . .
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
</pre>
<p>
or
</p>
<pre>
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
</pre>
<p>
Subsequently, qualified reference to any of the attributes or the
group defined below will have the desired effect, e.g.
</p>
<pre>
&lt;type . . .>
. . .
&lt;attributeGroup ref="xml:specialAttrs"/>
</pre>
<p>
will define a type which will schema-validate an instance element
with any of those attributes.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div id="nsversioning" xml:id="nsversioning">
<h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
<div class="bodytext">
<p>
In keeping with the XML Schema WG's standard versioning
policy, this schema document will persist at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a>.
</p>
<p>
At the date of issue it can also be found at
<a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd</a>.
</p>
<p>
The schema document at that URI may however change in the future,
in order to remain compatible with the latest version of XML
Schema itself, or with the XML namespace itself. In other words,
if the XML Schema or XML namespaces change, the version of this
document at <a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd
</a>
will change accordingly; the version at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd
</a>
will not change.
</p>
<p>
Previous dated (and unchanging) versions of this schema
document are at:
</p>
<ul>
<li><a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a></li>
<li><a href="http://www.w3.org/2007/08/xml.xsd">
http://www.w3.org/2007/08/xml.xsd</a></li>
<li><a href="http://www.w3.org/2004/10/xml.xsd">
http://www.w3.org/2004/10/xml.xsd</a></li>
<li><a href="http://www.w3.org/2001/03/xml.xsd">
http://www.w3.org/2001/03/xml.xsd</a></li>
</ul>
</div>
</div>
</xs:documentation>
</xs:annotation>
</xs:schema>

View File

@ -0,0 +1,318 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE schema
PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd"
[
<!ATTLIST schema
xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#">
<!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'>
<!ENTITY % p ''>
<!ENTITY % s ''>
]>
<!-- Schema for XML Signatures
http://www.w3.org/2000/09/xmldsig#
$Revision: 1.1 $ on $Date: 2002/02/08 20:32:26 $ by $Author: reagle $
Copyright 2001 The Internet Society and W3C (Massachusetts Institute
of Technology, Institut National de Recherche en Informatique et en
Automatique, Keio University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/
This document is governed by the W3C Software License [1] as described
in the FAQ [2].
[1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
[2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
targetNamespace="http://www.w3.org/2000/09/xmldsig#"
version="0.1" elementFormDefault="qualified">
<!-- Basic Types Defined for Signatures -->
<simpleType name="CryptoBinary">
<restriction base="base64Binary">
</restriction>
</simpleType>
<!-- Start Signature -->
<element name="Signature" type="ds:SignatureType"/>
<complexType name="SignatureType">
<sequence>
<element ref="ds:SignedInfo"/>
<element ref="ds:SignatureValue"/>
<element ref="ds:KeyInfo" minOccurs="0"/>
<element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureValue" type="ds:SignatureValueType"/>
<complexType name="SignatureValueType">
<simpleContent>
<extension base="base64Binary">
<attribute name="Id" type="ID" use="optional"/>
</extension>
</simpleContent>
</complexType>
<!-- Start SignedInfo -->
<element name="SignedInfo" type="ds:SignedInfoType"/>
<complexType name="SignedInfoType">
<sequence>
<element ref="ds:CanonicalizationMethod"/>
<element ref="ds:SignatureMethod"/>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/>
<complexType name="CanonicalizationMethodType" mixed="true">
<sequence>
<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
<!-- (0,unbounded) elements from (1,1) namespace -->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="SignatureMethod" type="ds:SignatureMethodType"/>
<complexType name="SignatureMethodType" mixed="true">
<sequence>
<element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/>
<any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
<!-- (0,unbounded) elements from (1,1) external namespace -->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- Start Reference -->
<element name="Reference" type="ds:ReferenceType"/>
<complexType name="ReferenceType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
<element ref="ds:DigestMethod"/>
<element ref="ds:DigestValue"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="URI" type="anyURI" use="optional"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<element name="Transforms" type="ds:TransformsType"/>
<complexType name="TransformsType">
<sequence>
<element ref="ds:Transform" maxOccurs="unbounded"/>
</sequence>
</complexType>
<element name="Transform" type="ds:TransformType"/>
<complexType name="TransformType" mixed="true">
<choice minOccurs="0" maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
<element name="XPath" type="string"/>
</choice>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- End Reference -->
<element name="DigestMethod" type="ds:DigestMethodType"/>
<complexType name="DigestMethodType" mixed="true">
<sequence>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="DigestValue" type="ds:DigestValueType"/>
<simpleType name="DigestValueType">
<restriction base="base64Binary"/>
</simpleType>
<!-- End SignedInfo -->
<!-- Start KeyInfo -->
<element name="KeyInfo" type="ds:KeyInfoType"/>
<complexType name="KeyInfoType" mixed="true">
<choice maxOccurs="unbounded">
<element ref="ds:KeyName"/>
<element ref="ds:KeyValue"/>
<element ref="ds:RetrievalMethod"/>
<element ref="ds:X509Data"/>
<element ref="ds:PGPData"/>
<element ref="ds:SPKIData"/>
<element ref="ds:MgmtData"/>
<any processContents="lax" namespace="##other"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
</choice>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="KeyName" type="string"/>
<element name="MgmtData" type="string"/>
<element name="KeyValue" type="ds:KeyValueType"/>
<complexType name="KeyValueType" mixed="true">
<choice>
<element ref="ds:DSAKeyValue"/>
<element ref="ds:RSAKeyValue"/>
<any namespace="##other" processContents="lax"/>
</choice>
</complexType>
<element name="RetrievalMethod" type="ds:RetrievalMethodType"/>
<complexType name="RetrievalMethodType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
</sequence>
<attribute name="URI" type="anyURI"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<!-- Start X509Data -->
<element name="X509Data" type="ds:X509DataType"/>
<complexType name="X509DataType">
<sequence maxOccurs="unbounded">
<choice>
<element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
<element name="X509SKI" type="base64Binary"/>
<element name="X509SubjectName" type="string"/>
<element name="X509Certificate" type="base64Binary"/>
<element name="X509CRL" type="base64Binary"/>
<any namespace="##other" processContents="lax"/>
</choice>
</sequence>
</complexType>
<complexType name="X509IssuerSerialType">
<sequence>
<element name="X509IssuerName" type="string"/>
<element name="X509SerialNumber" type="integer"/>
</sequence>
</complexType>
<!-- End X509Data -->
<!-- Begin PGPData -->
<element name="PGPData" type="ds:PGPDataType"/>
<complexType name="PGPDataType">
<choice>
<sequence>
<element name="PGPKeyID" type="base64Binary"/>
<element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/>
<any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
<sequence>
<element name="PGPKeyPacket" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
</choice>
</complexType>
<!-- End PGPData -->
<!-- Begin SPKIData -->
<element name="SPKIData" type="ds:SPKIDataType"/>
<complexType name="SPKIDataType">
<sequence maxOccurs="unbounded">
<element name="SPKISexp" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0"/>
</sequence>
</complexType>
<!-- End SPKIData -->
<!-- End KeyInfo -->
<!-- Start Object (Manifest, SignatureProperty) -->
<element name="Object" type="ds:ObjectType"/>
<complexType name="ObjectType" mixed="true">
<sequence minOccurs="0" maxOccurs="unbounded">
<any namespace="##any" processContents="lax"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="MimeType" type="string" use="optional"/> <!-- add a grep facet -->
<attribute name="Encoding" type="anyURI" use="optional"/>
</complexType>
<element name="Manifest" type="ds:ManifestType"/>
<complexType name="ManifestType">
<sequence>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperties" type="ds:SignaturePropertiesType"/>
<complexType name="SignaturePropertiesType">
<sequence>
<element ref="ds:SignatureProperty" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperty" type="ds:SignaturePropertyType"/>
<complexType name="SignaturePropertyType" mixed="true">
<choice maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (1,unbounded) namespaces -->
</choice>
<attribute name="Target" type="anyURI" use="required"/>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<!-- End Object (Manifest, SignatureProperty) -->
<!-- Start Algorithm Parameters -->
<simpleType name="HMACOutputLengthType">
<restriction base="integer"/>
</simpleType>
<!-- Start KeyValue Element-types -->
<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
<complexType name="DSAKeyValueType">
<sequence>
<sequence minOccurs="0">
<element name="P" type="ds:CryptoBinary"/>
<element name="Q" type="ds:CryptoBinary"/>
</sequence>
<element name="G" type="ds:CryptoBinary" minOccurs="0"/>
<element name="Y" type="ds:CryptoBinary"/>
<element name="J" type="ds:CryptoBinary" minOccurs="0"/>
<sequence minOccurs="0">
<element name="Seed" type="ds:CryptoBinary"/>
<element name="PgenCounter" type="ds:CryptoBinary"/>
</sequence>
</sequence>
</complexType>
<element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
<complexType name="RSAKeyValueType">
<sequence>
<element name="Modulus" type="ds:CryptoBinary"/>
<element name="Exponent" type="ds:CryptoBinary"/>
</sequence>
</complexType>
<!-- End KeyValue Element-types -->
<!-- End Signature -->
</schema>

View File

@ -8,7 +8,7 @@ import { pFromCallback } from 'promise-toolbox'
import rimraf from 'rimraf' import rimraf from 'rimraf'
import tmp from 'tmp' import tmp from 'tmp'
import { ParsableFile, parseOVAFile } from './ova' import { ParsableFile, parseOVAFile } from './ova-read'
import readVmdkGrainTable from './vmdk-read-table' import readVmdkGrainTable from './vmdk-read-table'
const initialDir = process.cwd() const initialDir = process.cwd()

View File

@ -185,6 +185,7 @@ export default class VMDKDirectParser {
const grainPosition = this.grainFileOffsetList[tableIndex] * SECTOR_SIZE const grainPosition = this.grainFileOffsetList[tableIndex] * SECTOR_SIZE
const grainSizeBytes = this.header.grainSizeSectors * SECTOR_SIZE const grainSizeBytes = this.header.grainSizeSectors * SECTOR_SIZE
const lba = this.grainLogicalAddressList[tableIndex] * grainSizeBytes const lba = this.grainLogicalAddressList[tableIndex] * grainSizeBytes
assert.strictEqual(grainPosition >= position, true)
await this.virtualBuffer.readChunk(grainPosition - position, `blank from ${position} to ${grainPosition}`) await this.virtualBuffer.readChunk(grainPosition - position, `blank from ${position} to ${grainPosition}`)
let grain let grain
if (this.header.flags.hasMarkers) { if (this.header.flags.hasMarkers) {
@ -194,5 +195,6 @@ export default class VMDKDirectParser {
} }
yield { logicalAddressBytes: lba, data: grain } yield { logicalAddressBytes: lba, data: grain }
} }
console.log('yielded last VMDK block')
} }
} }

View File

@ -0,0 +1,32 @@
import _ from 'intl'
import React from 'react'
import { injectState, provideState } from 'reaclette'
import decorate from './apply-decorators'
import { Select } from './form'
const OPTIONS = [
{
label: 'xva',
value: 'xva',
},
{
label: 'ova',
value: 'ova',
},
]
const SelectExportFormat = decorate([
provideState({
computed: {
options: () => OPTIONS,
selectProps: (_, props) => props,
},
}),
injectState,
({ onChange, state, value }) => (
<Select labelKey='label' valueKey='value' options={state.options} required simpleValue {...state.selectProps} />
),
])
export { SelectExportFormat as default }

View File

@ -4,6 +4,7 @@ import React from 'react'
import _ from '../../intl' import _ from '../../intl'
import SelectCompression from '../../select-compression' import SelectCompression from '../../select-compression'
import SelectExportFormat from '../../select-export-vm-format'
import { connectStore } from '../../utils' import { connectStore } from '../../utils'
import { Container, Row, Col } from '../../grid' import { Container, Row, Col } from '../../grid'
import { createGetObject, createSelector } from '../../selectors' import { createGetObject, createSelector } from '../../selectors'
@ -20,16 +21,27 @@ import { createGetObject, createSelector } from '../../selectors'
export default class ExportVmModalBody extends BaseComponent { export default class ExportVmModalBody extends BaseComponent {
state = { state = {
compression: '', compression: '',
format: 'xva',
} }
get value() { get value() {
const compression = this.state.compression const compression = this.state.compression === 'zstd' ? 'zstd' : this.state.compression === 'native'
return compression === 'zstd' ? 'zstd' : compression === 'native' const format = this.state.format
return { compression, format }
} }
render() { render() {
return ( return (
<Container> <Container>
<Row>
<Col mediumSize={6}>
<strong> {_('exportType')}</strong>
</Col>
<Col mediumSize={6}>
<SelectExportFormat onChange={this.linkState('format')} value={this.state.format} />
</Col>
</Row>
{this.state.format === 'xva' && (
<Row> <Row>
<Col mediumSize={6}> <Col mediumSize={6}>
<strong>{_('compression')}</strong> <strong>{_('compression')}</strong>
@ -42,6 +54,7 @@ export default class ExportVmModalBody extends BaseComponent {
/> />
</Col> </Col>
</Row> </Row>
)}
</Container> </Container>
) )
} }

View File

@ -1695,13 +1695,13 @@ export const importDisks = (disks, sr) =>
import ExportVmModalBody from './export-vm-modal' // eslint-disable-line import/first import ExportVmModalBody from './export-vm-modal' // eslint-disable-line import/first
export const exportVm = async vm => { export const exportVm = async vm => {
const compress = await confirm({ const { compression, format } = await confirm({
body: <ExportVmModalBody vm={vm} />, body: <ExportVmModalBody vm={vm} />,
icon: 'export', icon: 'export',
title: _('exportVmLabel'), title: _('exportVmLabel'),
}) })
const id = resolveId(vm) const id = resolveId(vm)
const { $getFrom: url } = await _call('vm.export', { vm: id, compress }) const { $getFrom: url } = await _call('vm.export', { vm: id, compress: compression, format })
const fullUrl = window.location.origin + url const fullUrl = window.location.origin + url
const copytoClipboard = () => copy(fullUrl) const copytoClipboard = () => copy(fullUrl)
const _info = () => info(_('startVmExport'), id) const _info = () => info(_('startVmExport'), id)