debian-forge-composer/vendor/github.com/vmware/govmomi/ovf/envelope.go
Achilleas Koutsou 3fd7092db5 go.mod: update osbuild/images to v0.156.0
tag v0.155.0
Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com>

Changes with 0.155.0

----------------
  * Fedora 43: add shadow-utils when LockRoot is enabled, update cloud-init service name (osbuild/images#1618)
    * Author: Achilleas Koutsou, Reviewers: Gianluca Zuccarelli, Michael Vogt
  * Update osbuild dependency commit ID to latest (osbuild/images#1609)
    * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger, Tomáš Hozza
  * Update snapshots to 20250626 (osbuild/images#1623)
    * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger
  * distro/rhel9: xz compress azure-cvm image type [HMS-8587] (osbuild/images#1620)
    * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza
  * distro/rhel: introduce new image type: Azure SAP Apps [HMS-8738] (osbuild/images#1612)
    * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza
  * distro/rhel: move ansible-core to sap_extras_pkgset (osbuild/images#1624)
    * Author: Achilleas Koutsou, Reviewers: Brian C. Lane, Tomáš Hozza
  * github/create-tag: allow passing the version when run manually (osbuild/images#1621)
    * Author: Achilleas Koutsou, Reviewers: Lukáš Zapletal, Tomáš Hozza
  * rhel9: move image-config into pure YAML (HMS-8593) (osbuild/images#1616)
    * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger
  * test: split manifest checksums into separate files (osbuild/images#1625)
    * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza

— Somewhere on the Internet, 2025-06-30

---

tag v0.156.0
Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com>

Changes with 0.156.0

----------------
  * Many: delete repositories for EOL distributions (HMS-7044) (osbuild/images#1607)
    * Author: Tomáš Hozza, Reviewers: Michael Vogt, Simon de Vlieger
  * RHSM/facts: add 'image-builder CLI' API type (osbuild/images#1640)
    * Author: Tomáš Hozza, Reviewers: Brian C. Lane, Simon de Vlieger
  * Update dependencies 2025-06-29 (osbuild/images#1628)
    * Author: SchutzBot, Reviewers: Simon de Vlieger, Tomáš Hozza
  * Update osbuild dependency commit ID to latest (osbuild/images#1627)
    * Author: SchutzBot, Reviewers: Simon de Vlieger, Tomáš Hozza
  * [RFC] image: drop `InstallWeakDeps` from image.DiskImage (osbuild/images#1642)
    * Author: Michael Vogt, Reviewers: Brian C. Lane, Simon de Vlieger, Tomáš Hozza
  * build(deps): bump the go-deps group across 1 directory with 3 updates (osbuild/images#1632)
    * Author: dependabot[bot], Reviewers: SchutzBot, Tomáš Hozza
  * distro/rhel10: xz compress azure-cvm image type (osbuild/images#1638)
    * Author: Achilleas Koutsou, Reviewers: Brian C. Lane, Simon de Vlieger
  * distro: cleanup/refactor distro/{defs,generic} (HMS-8744) (osbuild/images#1570)
    * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza
  * distro: remove some hardcoded values from generic/images.go (osbuild/images#1636)
    * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza
  * distro: small tweaks for the YAML based imagetypes (osbuild/images#1622)
    * Author: Michael Vogt, Reviewers: Brian C. Lane, Simon de Vlieger
  * fedora/wsl: packages and locale (osbuild/images#1635)
    * Author: Simon de Vlieger, Reviewers: Michael Vogt, Tomáš Hozza
  * image/many: make compression more generic (osbuild/images#1634)
    * Author: Simon de Vlieger, Reviewers: Brian C. Lane, Michael Vogt
  * manifest: handle content template name with spaces (osbuild/images#1641)
    * Author: Bryttanie, Reviewers: Brian C. Lane, Michael Vogt, Tomáš Hozza
  * many: implement gzip (osbuild/images#1633)
    * Author: Simon de Vlieger, Reviewers: Michael Vogt, Tomáš Hozza
  * rhel/azure: set GRUB_TERMINAL based on architecture [RHEL-91383] (osbuild/images#1626)
    * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza

— Somewhere on the Internet, 2025-07-07

---
2025-07-14 13:13:20 +02:00

237 lines
8.8 KiB
Go

// © Broadcom. All Rights Reserved.
// The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
// SPDX-License-Identifier: Apache-2.0
package ovf
import (
"fmt"
)
// Envelope is defined according to
// https://www.dmtf.org/sites/default/files/standards/documents/DSP0243_2.1.1.pdf.
//
// Section 9 describes the parent/child relationships.
//
// A VirtualSystem may have zero or more VirtualHardware sections.
type Envelope struct {
References []File `xml:"References>File" json:"references,omitempty"`
// Package level meta-data
Disk *DiskSection `xml:"DiskSection,omitempty" json:"diskSection,omitempty"`
Network *NetworkSection `xml:"NetworkSection,omitempty" json:"networkSection,omitempty"`
DeploymentOption *DeploymentOptionSection `xml:"DeploymentOptionSection,omitempty" json:"deploymentOptionSection,omitempty"`
// Content: A VirtualSystem or a VirtualSystemCollection
VirtualSystem *VirtualSystem `xml:"VirtualSystem,omitempty" json:"virtualSystem,omitempty"`
VirtualSystemCollection *VirtualSystemCollection `xml:"VirtualSystemCollection,omitempty" json:"virtualSystemCollection,omitempty"`
}
type VirtualSystem struct {
Content
Annotation *AnnotationSection `xml:"AnnotationSection,omitempty" json:"annotationSection,omitempty"`
Product []ProductSection `xml:"ProductSection,omitempty" json:"productSection,omitempty"`
Eula []EulaSection `xml:"EulaSection,omitempty" json:"eulaSection,omitempty"`
OperatingSystem *OperatingSystemSection `xml:"OperatingSystemSection,omitempty" json:"operatingSystemSection,omitempty"`
VirtualHardware []VirtualHardwareSection `xml:"VirtualHardwareSection,omitempty" json:"virtualHardwareSection,omitempty"`
}
type VirtualSystemCollection struct {
Content
// Collection level meta-data
ResourceAllocation *ResourceAllocationSection `xml:"ResourceAllocationSection,omitempty" json:"resourceAllocationSection,omitempty"`
Annotation *AnnotationSection `xml:"AnnotationSection,omitempty" json:"annotationSection,omitempty"`
Product []ProductSection `xml:"ProductSection,omitempty" json:"productSection,omitempty"`
Eula []EulaSection `xml:"EulaSection,omitempty" json:"eulaSection,omitempty"`
// Content: One or more VirtualSystems
VirtualSystem []VirtualSystem `xml:"VirtualSystem,omitempty" json:"virtualSystem,omitempty"`
}
type File struct {
ID string `xml:"id,attr" json:"id,omitempty"`
Href string `xml:"href,attr" json:"href,omitempty"`
Size uint `xml:"size,attr" json:"size,omitempty"`
Compression *string `xml:"compression,attr" json:"compression,omitempty"`
ChunkSize *int `xml:"chunkSize,attr" json:"chunkSize,omitempty"`
}
type Content struct {
ID string `xml:"id,attr" json:"id,omitempty"`
Info string `xml:"Info" json:"info,omitempty"`
Name *string `xml:"Name" json:"name,omitempty"`
}
type Section struct {
Required *bool `xml:"required,attr" json:"required,omitempty"`
Info string `xml:"Info" json:"info,omitempty"`
Category string `xml:"Category" json:"category,omitempty"`
}
type AnnotationSection struct {
Section
Annotation string `xml:"Annotation" json:"annotation,omitempty"`
}
type ProductSection struct {
Section
Class *string `xml:"class,attr" json:"class,omitempty"`
Instance *string `xml:"instance,attr" json:"instance,omitempty"`
Product string `xml:"Product" json:"product,omitempty"`
Vendor string `xml:"Vendor" json:"vendor,omitempty"`
Version string `xml:"Version" json:"version,omitempty"`
FullVersion string `xml:"FullVersion" json:"fullVersion,omitempty"`
ProductURL string `xml:"ProductUrl" json:"productUrl,omitempty"`
VendorURL string `xml:"VendorUrl" json:"vendorUrl,omitempty"`
AppURL string `xml:"AppUrl" json:"appUrl,omitempty"`
Property []Property `xml:"Property" json:"property,omitempty"`
}
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" json:"key,omitempty"`
Type string `xml:"type,attr" json:"type,omitempty"`
Qualifiers *string `xml:"qualifiers,attr" json:"qualifiers,omitempty"`
UserConfigurable *bool `xml:"userConfigurable,attr" json:"userConfigurable,omitempty"`
Default *string `xml:"value,attr" json:"default,omitempty"`
Password *bool `xml:"password,attr" json:"password,omitempty"`
Configuration *string `xml:"configuration,attr" json:"configuration,omitempty"`
Label *string `xml:"Label" json:"label,omitempty"`
Description *string `xml:"Description" json:"description,omitempty"`
Values []PropertyConfigurationValue `xml:"Value" json:"value,omitempty"`
}
type PropertyConfigurationValue struct {
Value string `xml:"value,attr" json:"value,omitempty"`
Configuration *string `xml:"configuration,attr" json:"configuration,omitempty"`
}
type NetworkSection struct {
Section
Networks []Network `xml:"Network" json:"network,omitempty"`
}
type Network struct {
Name string `xml:"name,attr" json:"name,omitempty"`
Description string `xml:"Description" json:"description,omitempty"`
}
type DiskSection struct {
Section
Disks []VirtualDiskDesc `xml:"Disk" json:"disk,omitempty"`
}
type VirtualDiskDesc struct {
DiskID string `xml:"diskId,attr" json:"diskId,omitempty"`
FileRef *string `xml:"fileRef,attr" json:"fileRef,omitempty"`
Capacity string `xml:"capacity,attr" json:"capacity,omitempty"`
CapacityAllocationUnits *string `xml:"capacityAllocationUnits,attr" json:"capacityAllocationUnits,omitempty"`
Format *string `xml:"format,attr" json:"format,omitempty"`
PopulatedSize *int `xml:"populatedSize,attr" json:"populatedSize,omitempty"`
ParentRef *string `xml:"parentRef,attr" json:"parentRef,omitempty"`
}
type OperatingSystemSection struct {
Section
ID int16 `xml:"id,attr" json:"id"`
Version *string `xml:"version,attr" json:"version,omitempty"`
OSType *string `xml:"osType,attr" json:"osType,omitempty"`
Description *string `xml:"Description" json:"description,omitempty"`
}
type EulaSection struct {
Section
License string `xml:"License" json:"license,omitempty"`
}
type Config struct {
Required *bool `xml:"required,attr" json:"required,omitempty"`
Key string `xml:"key,attr" json:"key,omitempty"`
Value string `xml:"value,attr" json:"value,omitempty"`
}
type VirtualHardwareSection struct {
Section
ID *string `xml:"id,attr" json:"id"`
Transport *string `xml:"transport,attr" json:"transport,omitempty"`
System *VirtualSystemSettingData `xml:"System" json:"system,omitempty"`
Item []ResourceAllocationSettingData `xml:"Item" json:"item,omitempty"`
StorageItem []StorageAllocationSettingData `xml:"StorageItem" json:"storageItem,omitempty"`
Config []Config `xml:"Config" json:"config,omitempty"`
ExtraConfig []Config `xml:"ExtraConfig" json:"extraConfig,omitempty"`
}
type VirtualSystemSettingData struct {
CIMVirtualSystemSettingData
}
type ResourceAllocationSettingData struct {
CIMResourceAllocationSettingData
Required *bool `xml:"required,attr" json:"required,omitempty"`
Configuration *string `xml:"configuration,attr" json:"configuration,omitempty"`
Bound *string `xml:"bound,attr" json:"bound,omitempty"`
Config []Config `xml:"Config" json:"config,omitempty"`
CoresPerSocket *CoresPerSocket `xml:"CoresPerSocket" json:"coresPerSocket,omitempty"`
}
type StorageAllocationSettingData struct {
CIMStorageAllocationSettingData
Required *bool `xml:"required,attr" json:"required,omitempty"`
Configuration *string `xml:"configuration,attr" json:"configuration,omitempty"`
Bound *string `xml:"bound,attr" json:"bound,omitempty"`
}
type ResourceAllocationSection struct {
Section
Item []ResourceAllocationSettingData `xml:"Item" json:"item,omitempty"`
}
type DeploymentOptionSection struct {
Section
Configuration []DeploymentOptionConfiguration `xml:"Configuration" json:"configuration,omitempty"`
}
type DeploymentOptionConfiguration struct {
ID string `xml:"id,attr" json:"id"`
Default *bool `xml:"default,attr" json:"default,omitempty"`
Label string `xml:"Label" json:"label,omitempty"`
Description string `xml:"Description" json:"description,omitempty"`
}
type CoresPerSocket struct {
Required *bool `xml:"required,attr" json:"required,omitempty"`
Value int32 `xml:",chardata" json:"value,omitempty"`
}