| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- /*
- Copyright (c) 2015-2023 VMware, Inc. All Rights Reserved.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package ovf
- import (
- "fmt"
- )
- type Envelope struct {
- References []File `xml:"References>File"`
- // Package level meta-data
- Annotation *AnnotationSection `xml:"AnnotationSection"`
- Product *ProductSection `xml:"ProductSection"`
- Network *NetworkSection `xml:"NetworkSection"`
- Disk *DiskSection `xml:"DiskSection"`
- OperatingSystem *OperatingSystemSection `xml:"OperatingSystemSection"`
- Eula *EulaSection `xml:"EulaSection"`
- VirtualHardware *VirtualHardwareSection `xml:"VirtualHardwareSection"`
- ResourceAllocation *ResourceAllocationSection `xml:"ResourceAllocationSection"`
- DeploymentOption *DeploymentOptionSection `xml:"DeploymentOptionSection"`
- // Content: A VirtualSystem or a VirtualSystemCollection
- VirtualSystem *VirtualSystem `xml:"VirtualSystem"`
- }
- type VirtualSystem struct {
- Content
- Annotation []AnnotationSection `xml:"AnnotationSection"`
- Product []ProductSection `xml:"ProductSection"`
- OperatingSystem []OperatingSystemSection `xml:"OperatingSystemSection"`
- Eula []EulaSection `xml:"EulaSection"`
- VirtualHardware []VirtualHardwareSection `xml:"VirtualHardwareSection"`
- }
- type File struct {
- ID string `xml:"id,attr"`
- Href string `xml:"href,attr"`
- Size uint `xml:"size,attr"`
- Compression *string `xml:"compression,attr"`
- ChunkSize *int `xml:"chunkSize,attr"`
- }
- type Content struct {
- ID string `xml:"id,attr"`
- Info string `xml:"Info"`
- Name *string `xml:"Name"`
- }
- type Section struct {
- Required *bool `xml:"required,attr"`
- Info string `xml:"Info"`
- Category string `xml:"Category"`
- }
- type AnnotationSection struct {
- Section
- Annotation string `xml:"Annotation"`
- }
- type ProductSection struct {
- Section
- Class *string `xml:"class,attr"`
- Instance *string `xml:"instance,attr"`
- Product string `xml:"Product"`
- Vendor string `xml:"Vendor"`
- Version string `xml:"Version"`
- FullVersion string `xml:"FullVersion"`
- ProductURL string `xml:"ProductUrl"`
- VendorURL string `xml:"VendorUrl"`
- AppURL string `xml:"AppUrl"`
- Property []Property `xml:"Property"`
- }
- func (p ProductSection) Key(prop Property) string {
- // From OVF spec, section 9.5.1:
- // key-value-env = [class-value "."] key-value-prod ["." instance-value]
- k := prop.Key
- if p.Class != nil {
- k = fmt.Sprintf("%s.%s", *p.Class, k)
- }
- if p.Instance != nil {
- k = fmt.Sprintf("%s.%s", k, *p.Instance)
- }
- return k
- }
- type Property struct {
- Key string `xml:"key,attr"`
- Type string `xml:"type,attr"`
- Qualifiers *string `xml:"qualifiers,attr"`
- UserConfigurable *bool `xml:"userConfigurable,attr"`
- Default *string `xml:"value,attr"`
- Password *bool `xml:"password,attr"`
- Label *string `xml:"Label"`
- Description *string `xml:"Description"`
- Values []PropertyConfigurationValue `xml:"Value"`
- }
- type PropertyConfigurationValue struct {
- Value string `xml:"value,attr"`
- Configuration *string `xml:"configuration,attr"`
- }
- type NetworkSection struct {
- Section
- Networks []Network `xml:"Network"`
- }
- type Network struct {
- Name string `xml:"name,attr"`
- Description string `xml:"Description"`
- }
- type DiskSection struct {
- Section
- Disks []VirtualDiskDesc `xml:"Disk"`
- }
- type VirtualDiskDesc struct {
- DiskID string `xml:"diskId,attr"`
- FileRef *string `xml:"fileRef,attr"`
- Capacity string `xml:"capacity,attr"`
- CapacityAllocationUnits *string `xml:"capacityAllocationUnits,attr"`
- Format *string `xml:"format,attr"`
- PopulatedSize *int `xml:"populatedSize,attr"`
- ParentRef *string `xml:"parentRef,attr"`
- }
- type OperatingSystemSection struct {
- Section
- ID int16 `xml:"id,attr"`
- Version *string `xml:"version,attr"`
- OSType *string `xml:"osType,attr"`
- Description *string `xml:"Description"`
- }
- type EulaSection struct {
- Section
- License string `xml:"License"`
- }
- type Config struct {
- Required *bool `xml:"required,attr"`
- Key string `xml:"key,attr"`
- Value string `xml:"value,attr"`
- }
- type VirtualHardwareSection struct {
- Section
- ID *string `xml:"id,attr"`
- Transport *string `xml:"transport,attr"`
- System *VirtualSystemSettingData `xml:"System"`
- Item []ResourceAllocationSettingData `xml:"Item"`
- StorageItem []StorageAllocationSettingData `xml:"StorageItem"`
- Config []Config `xml:"Config"`
- ExtraConfig []Config `xml:"ExtraConfig"`
- }
- type VirtualSystemSettingData struct {
- CIMVirtualSystemSettingData
- }
- type ResourceAllocationSettingData struct {
- CIMResourceAllocationSettingData
- Required *bool `xml:"required,attr"`
- Configuration *string `xml:"configuration,attr"`
- Bound *string `xml:"bound,attr"`
- }
- type StorageAllocationSettingData struct {
- CIMStorageAllocationSettingData
- Required *bool `xml:"required,attr"`
- Configuration *string `xml:"configuration,attr"`
- Bound *string `xml:"bound,attr"`
- }
- type ResourceAllocationSection struct {
- Section
- Item []ResourceAllocationSettingData `xml:"Item"`
- }
- type DeploymentOptionSection struct {
- Section
- Configuration []DeploymentOptionConfiguration `xml:"Configuration"`
- }
- type DeploymentOptionConfiguration struct {
- ID string `xml:"id,attr"`
- Default *bool `xml:"default,attr"`
- Label string `xml:"Label"`
- Description string `xml:"Description"`
- }
|