Repository: osbuild/osbuild-composer
Pull request #3516 (2023-06-27 05:01:23)

build(deps): bump github.com/vmware/govmomi from 0.29.0 to 0.30.5
Bumps [github.com/vmware/govmomi](https://github.com/vmware/govmomi) from 0.29.0 to 0.30.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/vmware/govmomi/releases">github.com/vmware/govmomi's releases</a>.</em></p>
<blockquote>
<h2>v0.30.5</h2>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h2><a href="https://github.com/vmware/govmomi/compare/v0.30.4...v0.30.5">Release v0.30.5</a></h2>
<blockquote>
<p>Release Date: 2023-06-27</p>
</blockquote>
<h3>🐞 Fix</h3>
<ul>
<li>[03aa9dca]	avoid govc -verbose flag panic if an UpdateSet is nil (<a href="https://redirect.github.com/vmware/govmomi/issues/3088">#3088</a>)</li>
<li>[b366e940]	include StoragePod Datastore children in ContainerView (<a href="https://redirect.github.com/vmware/govmomi/issues/3094">#3094</a>)</li>
<li>[ae6efc9f]	only limit the number of samples generated to maxSample when maxSample is greater than 0 and the number of samples to generate is greater than maxSample Closes: <a href="https://redirect.github.com/vmware/govmomi/issues/3097">#3097</a> (<a href="https://redirect.github.com/vmware/govmomi/issues/3097">#3097</a>)</li>
<li>[b1290083]	support govc ls -xml flag (<a href="https://redirect.github.com/vmware/govmomi/issues/3053">#3053</a>)</li>
</ul>
<h3>💡 Examples</h3>
<ul>
<li>[46bf2408]	add rest.Client.LoginByToken</li>
<li>[d4e31429]	add session.Manager.LoginByToken (<a href="https://redirect.github.com/vmware/govmomi/issues/3037">#3037</a>)</li>
</ul>
<h3>💫 API Changes</h3>
<ul>
<li>[afd45d68]	set inventory path in SearchIndex.FindByInventoryPath (<a href="https://redirect.github.com/vmware/govmomi/issues/3095">#3095</a>)</li>
</ul>
<h3>💫 <code>govc</code> (CLI)</h3>
<ul>
<li>[ecca4141]	dont check poweredOn for vm.console vmrc requests (<a href="https://redirect.github.com/vmware/govmomi/issues/2127">#2127</a>)</li>
</ul>
<h3>💫 <code>vcsim</code> (Simulator)</h3>
<ul>
<li>[844274fd]	set StandbyMode default to &quot;none&quot;</li>
<li>[a405207d]	Add RUN.env flag to inject environment variables to container-backed VM</li>
<li>[3466b11d]	Fix FindByInventoryPath to handle root folder (<a href="https://redirect.github.com/vmware/govmomi/issues/3119">#3119</a>)</li>
<li>[04737364]	Add CSV format support to QueryPerf API (<a href="https://redirect.github.com/vmware/govmomi/issues/3103">#3103</a>)</li>
<li>[d46fe80a]	add ssoadmin user and group management (<a href="https://redirect.github.com/vmware/govmomi/issues/2852">#2852</a>)</li>
</ul>
<h3>🧹 Chore</h3>
<ul>
<li>[5373c143]	Update version.go for v0.30.5</li>
<li>[e2f14cd9]	add missing guest OS IDs</li>
</ul>
<h3>⚠️ BREAKING</h3>
<h3>📖 Commits</h3>
<ul>
<li>[5373c143]	chore: Update version.go for v0.30.5</li>
<li>[844274fd]	vcsim: set StandbyMode default to &quot;none&quot;</li>
<li>[a405207d]	vcsim: Add RUN.env flag to inject environment variables to container-backed VM</li>
<li>[e2f14cd9]	chore: add missing guest OS IDs</li>
<li>[3466b11d]	vcsim: Fix FindByInventoryPath to handle root folder (<a href="https://redirect.github.com/vmware/govmomi/issues/3119">#3119</a>)</li>
<li>[3afdbf25]	Add RUN.port.xx flag to publish ports on container backed VM</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/vmware/govmomi/blob/main/CHANGELOG.md">github.com/vmware/govmomi's changelog</a>.</em></p>
<blockquote>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
<h2><a href="https://github.com/vmware/govmomi/compare/v0.29.0...v0.30.0">Release v0.30.0</a></h2>
<blockquote>
<p>Release Date: 2022-12-12</p>
</blockquote>
<h3>🐞 Fix</h3>
<ul>
<li>[1ad33d48]	Heal the broken Namespace API</li>
<li>[22c48147]	Update $mktemp to support macOS</li>
<li>[05b0b08c]	DialTLSContext / Go 1.18+ CertificateVerify support</li>
</ul>
<h3>💫 API Changes</h3>
<ul>
<li>[58f4112b]	Update types to vSphere 8.0 GA</li>
<li>[ba206c5b]	add Content Library security compliance support</li>
<li>[4c24f821]	Add SRIOV device names</li>
<li>[642156dd]	Adds vSphere 7.0u1-u3 support to namespace-management (Tanzu)</li>
</ul>
<h3>💫 <code>govc</code> (CLI)</h3>
<ul>
<li>[60a18c56]	about.cert was not respecting -k</li>
<li>[15d1181d]	bash completion improvements</li>
<li>[0dbf717b]	Add sso.lpp.info and sso.lpp.update commands</li>
<li>[fe87cff9]	host.info: use writer instead of os.stdout</li>
<li>[a7196e41]	host.info: use writer instead of os.stdout</li>
<li>[3d6de9da]	fix host.esxcli runtime error occurred when no arguments specified</li>
<li>[8c7ba5ef]	Add feature in sso.group.ls to list groups using FindGroupsInGroup method</li>
<li>[dc3e1d79]	Add feature sso.group.lsgroups using FindGroupsInGroup method</li>
<li>[bf991e6e]	add event key for json and plain text output</li>
<li>[2017e846]	Support creating content libraries with security policies</li>
</ul>
<h3>💫 <code>vcsim</code> (Simulator)</h3>
<ul>
<li>[86f9d42a]	Update test keys to be RSA 2048</li>
<li>[cedf695b]	Fix duplicated name check in CloneVM_Task</li>
<li>[8f4da558]	add QueryNetworkHint support for LLDP and CDP details</li>
<li>[1cab3254]	Fix RetrieveProperties path validation to avoid panic</li>
<li>[7f42a1d2]	use node id for ServiceContent.InstanceUuid</li>
<li>[03319493]	Fix snapshot tasks to update rootSnapshot</li>
<li>[b6ebcb6b]	Fix disk capacity validation in ConfigureDevices</li>
<li>[61032a23]	Fix StorageIOAllocationInfo of VirtualDisk</li>
<li>[cbfe0c93]	support disconnect/reconnect host</li>
<li>[b44828a4]	Fix datastore freespace changed by ReconfigVM_Task</li>
</ul>
<h3>📃 Documentation</h3>
<ul>
<li>[813a5d88]	update <code>README.md</code></li>
</ul>
<h3>🧹 Chore</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/vmware/govmomi/commit/5373c143b0247c1578d5181ea789a2e97e05837a"><code>5373c14</code></a> chore: Update version.go for v0.30.5</li>
<li><a href="https://github.com/vmware/govmomi/commit/844274fd86f38ef2bf83eb72792541a73b14293c"><code>844274f</code></a> vcsim: set StandbyMode default to &quot;none&quot;</li>
<li><a href="https://github.com/vmware/govmomi/commit/a405207d18915e5acb7f5cedec45f0051f7d3285"><code>a405207</code></a> vcsim: Add RUN.env flag to inject environment variables to container-backed VM</li>
<li><a href="https://github.com/vmware/govmomi/commit/e2f14cd90f5c22f1ef2c75b7e6bc353ee10ef70f"><code>e2f14cd</code></a> chore: add missing guest OS IDs</li>
<li><a href="https://github.com/vmware/govmomi/commit/3466b11da066580654f9cafe7ebcd1aab7215784"><code>3466b11</code></a> vcsim: Fix FindByInventoryPath to handle root folder</li>
<li><a href="https://github.com/vmware/govmomi/commit/3afdbf253b821e2ed6ed8e37b7adf2da5ff67b22"><code>3afdbf2</code></a> Add RUN.port.xx flag to publish ports on container backed VM</li>
<li><a href="https://github.com/vmware/govmomi/commit/03aa9dca1e0f0a8450895ebdefa0ff7edadd549c"><code>03aa9dc</code></a> fix: avoid govc -verbose flag panic if an UpdateSet is nil</li>
<li><a href="https://github.com/vmware/govmomi/commit/0473736480b98434be3f9805533141bf052f9fb4"><code>0473736</code></a> vcsim: Add CSV format support to QueryPerf API</li>
<li><a href="https://github.com/vmware/govmomi/commit/b366e9401ba7cfeef0d4faa0f09a0ff857fe0de8"><code>b366e94</code></a> fix: include StoragePod Datastore children in ContainerView</li>
<li><a href="https://github.com/vmware/govmomi/commit/ae6efc9f8b3b2bfd5a380c0d5b156547070c9a78"><code>ae6efc9</code></a> fix: only limit the number of samples generated to maxSample when maxSample i...</li>
<li>Additional commits viewable in <a href="https://github.com/vmware/govmomi/compare/v0.29.0...v0.30.5">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/vmware/govmomi&package-manager=go_modules&previous-version=0.29.0&new-version=0.30.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>


Patch:
diff --git a/go.mod b/go.mod
index a1e6ef977..d65fb1b15 100644
--- a/go.mod
+++ b/go.mod
@@ -41,7 +41,7 @@ require (
 	github.com/spf13/cobra v1.7.0
 	github.com/stretchr/testify v1.8.3
 	github.com/ubccr/kerby v0.0.0-20170626144437-201a958fc453
-	github.com/vmware/govmomi v0.29.0
+	github.com/vmware/govmomi v0.30.5
 	golang.org/x/exp v0.0.0-20230307190834-24139beb5833
 	golang.org/x/oauth2 v0.8.0
 	golang.org/x/sync v0.2.0
diff --git a/go.sum b/go.sum
index 051a1dbaa..093c71dcd 100644
--- a/go.sum
+++ b/go.sum
@@ -1340,8 +1340,8 @@ github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17
 github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
 github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U=
 github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY=
-github.com/vmware/govmomi v0.29.0 h1:SHJQ7DUc4fltFZv16znJNGHR1/XhiDK5iKxm2OqwkuU=
-github.com/vmware/govmomi v0.29.0/go.mod h1:F7adsVewLNHsW/IIm7ziFURaXDaHEwcc+ym4r3INMdY=
+github.com/vmware/govmomi v0.30.5 h1:p4sFypY4AJlFRiS2OFEGh9DCzufBrexbtPL5DB9Pxw0=
+github.com/vmware/govmomi v0.30.5/go.mod h1:F7adsVewLNHsW/IIm7ziFURaXDaHEwcc+ym4r3INMdY=
 github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
 github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
 github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
diff --git a/internal/osbuild/fdo_stage.go b/internal/osbuild/fdo_stage.go
index e5fa8d09a..6d85586b7 100644
--- a/internal/osbuild/fdo_stage.go
+++ b/internal/osbuild/fdo_stage.go
@@ -15,7 +15,7 @@ func (FDOStageInputs) isStageInputs() {}
 func NewFDOStageForRootCerts(rootCertsData string) *Stage {
 	dataBytes := []byte(rootCertsData)
 	input := NewFilesInput(NewFilesInputSourcePlainRef([]string{
-		fmt.Sprintf("%x", sha256.Sum256(dataBytes)),
+		fmt.Sprintf("sha256:%x", sha256.Sum256(dataBytes)),
 	}))
 
 	return &Stage{
diff --git a/internal/osbuild/files_input.go b/internal/osbuild/files_input.go
index 757d3b1cc..0b613471f 100644
--- a/internal/osbuild/files_input.go
+++ b/internal/osbuild/files_input.go
@@ -3,6 +3,7 @@ package osbuild
 import (
 	"encoding/json"
 	"fmt"
+	"strings"
 
 	"github.com/osbuild/osbuild-composer/internal/container"
 )
@@ -195,13 +196,14 @@ type FilesInputSourcePlainRef []string
 
 func (*FilesInputSourcePlainRef) isFilesInputRef() {}
 
-// NewFilesInputSourcePlainRef creates a FilesInputSourcePlainRef from a list of sha256sums.
-// The slice items are the SHA256 checksums of files as a hexadecimal string without any prefix (e.g. "sha256:").
-func NewFilesInputSourcePlainRef(sha256Sums []string) FilesInputRef {
-	refs := FilesInputSourcePlainRef{}
-	for _, sha256Sum := range sha256Sums {
-		refs = append(refs, fmt.Sprintf("sha256:%s", sha256Sum))
+// NewFilesInputSourcePlainRef creates a FilesInputSourcePlainRef from a list
+// of checksums. The checksums must be prefixed by the name of the corresponding
+// hashing algorithm followed by a colon (e.g. sha256:, sha1:, etc).
+func NewFilesInputSourcePlainRef(checksums []string) FilesInputRef {
+	for _, cs := range checksums {
+		validateChecksum(cs)
 	}
+	refs := FilesInputSourcePlainRef(checksums)
 	return &refs
 }
 
@@ -235,11 +237,14 @@ type FilesInputSourceArrayRefEntry struct {
 	Options *FilesInputSourceOptions `json:"options,omitempty"`
 }
 
-// NewFilesInputSourceArrayRefEntry creates a FilesInputSourceArrayRefEntry from a sha256sum and metadata.
-// The sha256sum is the SHA256 checksum of the file as a hexadecimal string without any prefix (e.g. "sha256:").
-func NewFilesInputSourceArrayRefEntry(sha256Sum string, metadata FilesInputRefMetadata) FilesInputSourceArrayRefEntry {
+// NewFilesInputSourceArrayRefEntry creates a FilesInputSourceArrayRefEntry
+// from a checksum and metadata. The checksum must be prefixed by the name of
+// the corresponding hashing algorithm followed by a colon (e.g. sha256:,
+// sha1:, etc).
+func NewFilesInputSourceArrayRefEntry(checksum string, metadata FilesInputRefMetadata) FilesInputSourceArrayRefEntry {
+	validateChecksum(checksum)
 	ref := FilesInputSourceArrayRefEntry{
-		ID: fmt.Sprintf("sha256:%s", sha256Sum),
+		ID: checksum,
 	}
 	if metadata != nil {
 		ref.Options = &FilesInputSourceOptions{Metadata: metadata}
@@ -269,12 +274,15 @@ type FilesInputSourceObjectRef map[string]FilesInputSourceOptions
 
 func (*FilesInputSourceObjectRef) isFilesInputRef() {}
 
-// NewFilesInputSourceObjectRef creates a FilesInputSourceObjectRef from a map of sha256sums to metadata
-// The key is the SHA256 checksum of the file as a hexadecimal string without any prefix (e.g. "sha256:").
+// NewFilesInputSourceObjectRef creates a FilesInputSourceObjectRef from a map
+// of checksums to metadata. The checksums must be prefixed by the name of the
+// corresponding hashing algorithm followed by a colon (e.g. sha256:, sha1:,
+// etc).
 func NewFilesInputSourceObjectRef(entries map[string]FilesInputRefMetadata) FilesInputRef {
 	refs := FilesInputSourceObjectRef{}
-	for sha256Sum, metadata := range entries {
-		refs[fmt.Sprintf("sha256:%s", sha256Sum)] = FilesInputSourceOptions{Metadata: metadata}
+	for checksum, metadata := range entries {
+		validateChecksum(checksum)
+		refs[checksum] = FilesInputSourceOptions{Metadata: metadata}
 	}
 	return &refs
 }
@@ -294,3 +302,12 @@ func NewFilesInputForManifestLists(containers []container.Spec) *FilesInput {
 	filesRef := FilesInputSourcePlainRef(refs)
 	return NewFilesInput(&filesRef)
 }
+
+// validateChecksum panics if the given string does not contain an algorithm
+// prefix. It checks this by making sure that the : delimiter exists and is not
+// at the start of the string.
+func validateChecksum(checksum string) {
+	if strings.IndexRune(checksum, ':') == 0 || strings.Count(checksum, ":") != 1 {
+		panic(fmt.Sprintf("invalid checksum format; must contain algorithm prefix: %s", checksum))
+	}
+}
diff --git a/internal/osbuild/fsnode.go b/internal/osbuild/fsnode.go
index dbcac95a7..922cab20b 100644
--- a/internal/osbuild/fsnode.go
+++ b/internal/osbuild/fsnode.go
@@ -31,7 +31,7 @@ func GenFileNodesStages(files []*fsnode.File) []*Stage {
 			RemoveDestination: true,
 		})
 		copyStageInputs[copyStageInputKey] = NewFilesInput(NewFilesInputSourceArrayRef([]FilesInputSourceArrayRefEntry{
-			NewFilesInputSourceArrayRefEntry(fileDataChecksum, nil),
+			NewFilesInputSourceArrayRefEntry(fmt.Sprintf("sha256:%s", fileDataChecksum), nil),
 		}))
 
 		if file.Mode() != nil {
diff --git a/internal/osbuild/ignition_stage.go b/internal/osbuild/ignition_stage.go
index e7d7f5132..a31ea2e53 100644
--- a/internal/osbuild/ignition_stage.go
+++ b/internal/osbuild/ignition_stage.go
@@ -26,7 +26,7 @@ func (IgnitionStageInputInline) isStageInputs() {}
 
 func NewIgnitionInlineInput(embeddedData string) Inputs {
 	input := NewFilesInput(NewFilesInputSourcePlainRef([]string{
-		fmt.Sprintf("%x", sha256.Sum256([]byte(embeddedData))),
+		fmt.Sprintf("sha256:%x", sha256.Sum256([]byte(embeddedData))),
 	}))
 	return &IgnitionStageInputInline{InlineFile: input}
 }
diff --git a/internal/osbuild/rpm_stage.go b/internal/osbuild/rpm_stage.go
index ade1dea08..02bbf9fa7 100644
--- a/internal/osbuild/rpm_stage.go
+++ b/internal/osbuild/rpm_stage.go
@@ -1,8 +1,6 @@
 package osbuild
 
 import (
-	"strings"
-
 	"github.com/osbuild/osbuild-composer/internal/rpmmd"
 )
 
@@ -128,14 +126,13 @@ func NewRpmStageSourceFilesInputs(specs []rpmmd.PackageSpec) *RPMStageInputs {
 func pkgRefs(specs []rpmmd.PackageSpec) FilesInputRef {
 	refs := make([]FilesInputSourceArrayRefEntry, len(specs))
 	for idx, pkg := range specs {
-		pkgSum := strings.TrimPrefix(pkg.Checksum, "sha256:")
 		var pkgMetadata FilesInputRefMetadata
 		if pkg.CheckGPG {
 			pkgMetadata = &RPMStageReferenceMetadata{
 				CheckGPG: pkg.CheckGPG,
 			}
 		}
-		refs[idx] = NewFilesInputSourceArrayRefEntry(pkgSum, pkgMetadata)
+		refs[idx] = NewFilesInputSourceArrayRefEntry(pkg.Checksum, pkgMetadata)
 	}
 	return NewFilesInputSourceArrayRef(refs)
 }
diff --git a/vendor/github.com/vmware/govmomi/CONTRIBUTORS b/vendor/github.com/vmware/govmomi/CONTRIBUTORS
index 8a23a1d82..ef8c56de8 100644
--- a/vendor/github.com/vmware/govmomi/CONTRIBUTORS
+++ b/vendor/github.com/vmware/govmomi/CONTRIBUTORS
@@ -6,7 +6,9 @@
 Abhijeet Kasurde <akasurde@redhat.com>
 abrarshivani <abrarshivani@users.noreply.github.com>
 Adam Chalkley <atc0005@users.noreply.github.com>
+Adam Fowler <adam@adamfowler.org>
 Adam Shannon <adamkshannon@gmail.com>
+Akanksha Panse <pansea@vmware.com>
 Al Biheiri <abiheiri@apple.com>
 Alessandro Cortiana <alessandro.cortiana@gmail.com>
 Alex <puzo2002@gmail.com>
@@ -28,6 +30,7 @@ aniketGslab <aniket.shinde@gslab.com>
 Ankit Vaidya <vaidyaa@vmware.com>
 Ankur Huralikoppi <huralikoppia@vmware.com>
 Anna Carrigan <anna.carrigan@hpe.com>
+Antony Saba <awsaba@gmail.com>
 Ariel Chinn <arielchinn@gmail.com>
 Arran Walker <arran.walker@zopa.com>
 Artem Anisimov <aanisimov@inbox.ru>
@@ -41,14 +44,18 @@ Ben Corrie <bcorrie@vmware.com>
 Ben Vickers <bvickers@pivotal.io>
 Benjamin Davini <davinib@vmware.com>
 Benjamin Peterson <benjamin@python.org>
+Benjamin Vickers <bvickers@vmware.com>
 Bhavya Choudhary <bhavyac@vmware.com>
 Bob Killen <killen.bob@gmail.com>
 Brad Fitzpatrick <bradfitz@golang.org>
+Brian Rak <brak@vmware.com>
 brian57860 <brian57860@users.noreply.github.com>
 Bruce Downs <bruceadowns@gmail.com>
+Bryan Venteicher <bryanventeicher@gmail.com>
 Cédric Blomart <cblomart@gmail.com>
 Cheng Cheng <chengch@vmware.com>
 Chethan Venkatesh <chethanv@vmware.com>
+Choudhury Sarada Prasanna Nanda <cspn@google.com>
 Chris Marchesi <chrism@vancluevertech.com>
 Christian Höltje <docwhat@gerf.org>
 Clint Greenwood <cgreenwood@vmware.com>
@@ -66,19 +73,24 @@ David Gress <gressd@vmware.com>
 David Stark <dave@davidstark.name>
 Davide Agnello <dagnello@hp.com>
 Davinder Kumar <davinderk@vmware.com>
+Defa <zhoudefa666@163.com>
 demarey <christophe.demarey@inria.fr>
 dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
 Deric Crago <deric.crago@gmail.com>
+ditsuke <ditsuke@protonmail.com>
 Divyen Patel <divyenp@vmware.com>
 Dnyanesh Gate <dnyanesh.gate@druva.com>
 Doug MacEachern <dougm@vmware.com>
 East <60801291+houfangdong@users.noreply.github.com>
 Eloy Coto <eloy.coto@gmail.com>
+embano1 <embano1@users.noreply.github.com>
+Eng Zer Jun <engzerjun@gmail.com>
 Eric Edens <ericedens@google.com>
 Eric Graham <16710890+Pheric@users.noreply.github.com>
 Eric Gray <egray@vmware.com>
 Eric Yutao <eric.yutao@gmail.com>
 Erik Hollensbe <github@hollensbe.org>
+Essodjolo KAHANAM <essodjolo@kahanam.com>
 Ethan Kaley <ethan.kaley@emc.com>
 Evan Chu <echu@vmware.com>
 Fabio Rapposelli <fabio@vmware.com>
@@ -94,9 +106,11 @@ Gerrit Renker <Gerrit.Renker@ctl.io>
 gthombare <gthombare@vmware.com>
 HakanSunay <hakansunay@abv.bg>
 Hasan Mahmood <mahmoodh@vmware.com>
+Haydon Ryan <haydon.ryan@gmail.com>
 Heiko Reese <hreese@users.noreply.github.com>
 Henrik Hodne <henrik@travis-ci.com>
 hkumar <hkumar@vmware.com>
+Hrabur Stoyanov <hstoyanov@vmware.com>
 hui luo <luoh@vmware.com>
 Ian Eyberg <ian@deferpanic.com>
 Isaac Rodman <isaac@eyz.us>
@@ -115,6 +129,7 @@ Jorge Sevilla <jorge.sevilla@rstor.io>
 Julien PILLON <jpillon@lesalternatives.org>
 Justin J. Novack <jnovack@users.noreply.github.com>
 kayrus <kay.diam@gmail.com>
+Keenan Brock <keenan@thebrocks.net>
 Kevin George <georgek@vmware.com>
 Knappek <andy.knapp.ak@gmail.com>
 Leslie Wang <qiwa@pensando.io>
@@ -124,13 +139,17 @@ Liping Xue <lipingx@vmware.com>
 Louie Jiang <jiangl@vmware.com>
 Luther Monson <luther.monson@gmail.com>
 Madanagopal Arunachalam <marunachalam@vmware.com>
+makelarisjr <8687447+makelarisjr@users.noreply.github.com>
 maplain <fangyuanl@vmware.com>
 Marc Carmier <mcarmier@gmail.com>
 Marcus Tan <marcus.tan@rubrik.com>
 Maria Ntalla <maria.ntalla@gmail.com>
 Marin Atanasov Nikolov <mnikolov@vmware.com>
 Mario Trangoni <mjtrangoni@gmail.com>
+Mark Dechiaro <mdechiaro@users.noreply.github.com>
 Mark Peek <markpeek@vmware.com>
+Mark Rexwinkel <Mark.Rexwinkel@elekta.com>
+martin <martin@catai.org>
 Matt Clay <matt@mystile.com>
 Matt Moore <mattmoor@vmware.com>
 Matt Moriarity <matt@mattmoriarity.com>
@@ -138,14 +157,19 @@ Matthew Cosgrove <matthew.cosgrove@dell.com>
 mbhadale <mbhadale@vmware.com>
 Merlijn Sebrechts <merlijn.sebrechts@gmail.com>
 Mevan Samaratunga <mevansam@gmail.com>
+Michael Gasch <15986659+embano1@users.noreply.github.com>
 Michael Gasch <mgasch@vmware.com>
 Michal Jankowski <mjankowski@vmware.com>
+Mike Schinkel <mike@newclarity.net>
 Mincho Tonev <mtonev@vmware.com>
 mingwei <mingwei@smartx.com>
 Nicolas Lamirault <nicolas.lamirault@gmail.com>
 Nikhil Kathare <nikhil.kathare@netapp.com>
 Nikhil R Deshpande <ndeshpande@vmware.com>
 Nikolas Grottendieck <git@nikolasgrottendieck.com>
+Nils Elde <nils.elde@sscinc.com>
+nirbhay <nirbhay.bagmar@nutanix.com>
+Nobuhiro MIKI <nmiki@yahoo-corp.jp>
 Om Kumar <om.kumar@hpe.com>
 Omar Kohl <omarkohl@gmail.com>
 Parham Alvani <parham.alvani@gmail.com>
@@ -153,15 +177,24 @@ Parveen Chahal <parkuma@microsoft.com>
 Paul Martin <25058109+rawstorage@users.noreply.github.com>
 Pierre Gronlier <pierre.gronlier@corp.ovh.com>
 Pieter Noordhuis <pnoordhuis@vmware.com>
+pradeepj <50135054+pradeep288@users.noreply.github.com>
+Pranshu Jain <jpranshu@vmware.com>
 prydin <prydin@vmware.com>
 rconde01 <rconde01@hotmail.com>
 rHermes <teodor_spaeren@riseup.net>
+Rianto Wahyudi <rwahyudi@gmail.com>
+Ricardo Katz <rkatz@vmware.com>
+Robin Watkins <robwatkins@gmail.com>
 Rowan Jacobs <rojacobs@pivotal.io>
 Roy Ling <royling0024@gmail.com>
 rsikdar <rsikdar@berkeley.edu>
 runner.mei <runner.mei@gmail.com>
+Ryan Johnson <johnsonryan@vmware.com>
+S R Ashrith <sashrith@vmware.com>
 S.Çağlar Onur <conur@vmware.com>
 Saad Malik <saad@spectrocloud.com>
+Sam Zhu <zhusa@zhusa-a02.vmware.com>
+samzhu333 <45263849+samzhu333@users.noreply.github.com>
 Sandeep Pissay Srinivasa Rao <ssrinivas@vmware.com>
 Scott Holden <scott@nullops.io>
 Sergey Ignatov <sergey.ignatov@jetbrains.com>
@@ -172,11 +205,15 @@ Shaozhen Ding <dsz0111@gmail.com>
 Shawn Neal <sneal@sneal.net>
 shylasrinivas <sshyla@vmware.com>
 sky-joker <sky.jokerxx@gmail.com>
+smaftoul <samuel.maftoul@gmail.com>
+smahadik <smahadik@vmware.com>
 Sten Feldman <exile@chamber.ee>
 Stepan Mazurov <smazurov@gmail.com>
 Steve Purcell <steve@sanityinc.com>
+Sudhindra Aithal <sudhiaithal@pensando.io>
 SUMIT AGRAWAL <asumit@vmware.com>
-Syuparn <s.hello.spagetti@gmail.com>
+Sunny Carter <sunny.carter@metaswitch.com>
+syuparn <s.hello.spagetti@gmail.com>
 Takaaki Furukawa <takaaki.frkw@gmail.com>
 Tamas Eger <tamas.eger@bitrise.io>
 Tanay Kothari <tkothari@vmware.com>
@@ -198,11 +235,13 @@ Waldek Maleska <w.maleska@gmail.com>
 William Lam <wlam@vmware.com>
 Witold Krecicki <wpk@culm.net>
 xing-yang <xingyang105@gmail.com>
+xinyanw409 <wxinyan@vmware.com>
 Yang Yang <yangy@vmware.com>
 yangxi <yangxi@vmware.com>
 Yann Hodique <yhodique@google.com>
 Yash Nitin Desai <desaiy@vmware.com>
 Yassine TIJANI <ytijani@vmware.com>
+Yi Jiang <yijiang@vmware.com>
 yiyingy <yiyingy@vmware.com>
 ykakarap <yuva2811@gmail.com>
 Yogesh Sobale <6104071+ysobale@users.noreply.github.com>
diff --git a/vendor/github.com/vmware/govmomi/cns/client.go b/vendor/github.com/vmware/govmomi/cns/client.go
index e4097f908..037ac2e92 100644
--- a/vendor/github.com/vmware/govmomi/cns/client.go
+++ b/vendor/github.com/vmware/govmomi/cns/client.go
@@ -269,3 +269,16 @@ func (c *Client) QuerySnapshots(ctx context.Context, snapshotQueryFilter cnstype
 	}
 	return object.NewTask(c.vim25Client, res.Returnval), nil
 }
+
+// ReconfigVolumePolicy calls the CnsReconfigVolumePolicy API
+func (c *Client) ReconfigVolumePolicy(ctx context.Context, PolicyReconfigSpecs []cnstypes.CnsVolumePolicyReconfigSpec) (*object.Task, error) {
+	req := cnstypes.CnsReconfigVolumePolicy{
+		This:                      CnsVolumeManagerInstance,
+		VolumePolicyReconfigSpecs: PolicyReconfigSpecs,
+	}
+	res, err := methods.CnsReconfigVolumePolicy(ctx, c, &req)
+	if err != nil {
+		return nil, err
+	}
+	return object.NewTask(c.vim25Client, res.Returnval), nil
+}
diff --git a/vendor/github.com/vmware/govmomi/cns/methods/methods.go b/vendor/github.com/vmware/govmomi/cns/methods/methods.go
index 6f0e0d0ae..43f41f3aa 100644
--- a/vendor/github.com/vmware/govmomi/cns/methods/methods.go
+++ b/vendor/github.com/vmware/govmomi/cns/methods/methods.go
@@ -326,3 +326,23 @@ func CnsQuerySnapshots(ctx context.Context, r soap.RoundTripper, req *types.CnsQ
 
 	return resBody.Res, nil
 }
+
+type CnsReconfigVolumePolicyBody struct {
+	Req    *types.CnsReconfigVolumePolicy         `xml:"urn:vsan CnsReconfigVolumePolicy,omitempty"`
+	Res    *types.CnsReconfigVolumePolicyResponse `xml:"urn:vsan CnsReconfigVolumePolicyResponse,omitempty"`
+	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
+}
+
+func (b *CnsReconfigVolumePolicyBody) Fault() *soap.Fault { return b.Fault_ }
+
+func CnsReconfigVolumePolicy(ctx context.Context, r soap.RoundTripper, req *types.CnsReconfigVolumePolicy) (*types.CnsReconfigVolumePolicyResponse, error) {
+	var reqBody, resBody CnsReconfigVolumePolicyBody
+
+	reqBody.Req = req
+
+	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
+		return nil, err
+	}
+
+	return resBody.Res, nil
+}
diff --git a/vendor/github.com/vmware/govmomi/cns/types/enum.go b/vendor/github.com/vmware/govmomi/cns/types/enum.go
index 53f0580b4..09186eea4 100644
--- a/vendor/github.com/vmware/govmomi/cns/types/enum.go
+++ b/vendor/github.com/vmware/govmomi/cns/types/enum.go
@@ -55,6 +55,8 @@ const (
 	QuerySelectionNameTypeComplianceStatus       = QuerySelectionNameType("COMPLIANCE_STATUS")
 	QuerySelectionNameTypeDataStoreAccessibility = QuerySelectionNameType("DATASTORE_ACCESSIBILITY_STATUS")
 	QuerySelectionNameTypeHealthStatus           = QuerySelectionNameType("HEALTH_STATUS")
+	QuerySelectionNameTypeDataStoreUrl           = QuerySelectionNameType("DATASTORE_URL")
+	QuerySelectionNameTypePolicyId               = QuerySelectionNameType("POLICY_ID")
 )
 
 func init() {
@@ -87,6 +89,9 @@ const (
 	CnsQuerySelectionName_BACKING_OBJECT_DETAILS         = CnsQuerySelectionNameType("BACKING_OBJECT_DETAILS")
 	CnsQuerySelectionName_COMPLIANCE_STATUS              = CnsQuerySelectionNameType("COMPLIANCE_STATUS")
 	CnsQuerySelectionName_DATASTORE_ACCESSIBILITY_STATUS = CnsQuerySelectionNameType("DATASTORE_ACCESSIBILITY_STATUS")
+	CnsQuerySelectionName_HEALTH_STATUS                  = CnsQuerySelectionNameType("HEALTH_STATUS")
+	CnsQuerySelectionName_DATASTORE_URL                  = CnsQuerySelectionNameType("DATASTORE_URL")
+	CnsQuerySelectionName_POLICY_ID                      = CnsQuerySelectionNameType("POLICY_ID")
 )
 
 func init() {
diff --git a/vendor/github.com/vmware/govmomi/cns/types/types.go b/vendor/github.com/vmware/govmomi/cns/types/types.go
index c5fb2812b..452b9ed38 100644
--- a/vendor/github.com/vmware/govmomi/cns/types/types.go
+++ b/vendor/github.com/vmware/govmomi/cns/types/types.go
@@ -392,8 +392,8 @@ func init() {
 type CnsBlockBackingDetails struct {
 	CnsBackingObjectDetails
 
-	BackingDiskId      string `xml:"backingDiskId,omitempty"`
-	BackingDiskUrlPath string `xml:"backingDiskUrlPath,omitempty"`
+	BackingDiskId       string `xml:"backingDiskId,omitempty"`
+	BackingDiskUrlPath  string `xml:"backingDiskUrlPath,omitempty"`
 	BackingDiskObjectId string `xml:"backingDiskObjectId,omitempty"`
 }
 
@@ -460,7 +460,7 @@ type CnsQueryFilter struct {
 	ComplianceStatus             string                         `xml:"complianceStatus,omitempty"`
 	DatastoreAccessibilityStatus string                         `xml:"datastoreAccessibilityStatus,omitempty"`
 	Cursor                       *CnsCursor                     `xml:"cursor,omitempty"`
-	healthStatus                 string                         `xml:"healthStatus,omitempty"`
+	HealthStatus                 string                         `xml:"healthStatus,omitempty"`
 }
 
 func init() {
@@ -879,3 +879,33 @@ type CnsSnapshotQuerySpec struct {
 func init() {
 	types.Add("CnsSnapshotQuerySpec", reflect.TypeOf((*CnsSnapshotQuerySpec)(nil)).Elem())
 }
+
+type CnsReconfigVolumePolicy CnsReconfigVolumePolicyRequestType
+
+func init() {
+	types.Add("vsan:CnsReconfigVolumePolicy", reflect.TypeOf((*CnsReconfigVolumePolicy)(nil)).Elem())
+}
+
+type CnsReconfigVolumePolicyRequestType struct {
+	This                      types.ManagedObjectReference  `xml:"_this"`
+	VolumePolicyReconfigSpecs []CnsVolumePolicyReconfigSpec `xml:"volumePolicyReconfigSpecs,omitempty"`
+}
+
+func init() {
+	types.Add("vsan:CnsReconfigVolumePolicyRequestType", reflect.TypeOf((*CnsReconfigVolumePolicyRequestType)(nil)).Elem())
+}
+
+type CnsReconfigVolumePolicyResponse struct {
+	Returnval types.ManagedObjectReference `xml:"returnval"`
+}
+
+type CnsVolumePolicyReconfigSpec struct {
+	types.DynamicData
+
+	VolumeId CnsVolumeId                           `xml:"volumeId"`
+	Profile  []types.BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
+}
+
+func init() {
+	types.Add("vsan:CnsVolumePolicyReconfigSpec", reflect.TypeOf((*CnsVolumePolicyReconfigSpec)(nil)).Elem())
+}
diff --git a/vendor/github.com/vmware/govmomi/find/finder.go b/vendor/github.com/vmware/govmomi/find/finder.go
index 61ac780c4..4830fc26e 100644
--- a/vendor/github.com/vmware/govmomi/find/finder.go
+++ b/vendor/github.com/vmware/govmomi/find/finder.go
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2014-2020 VMware, Inc. All Rights Reserved.
+Copyright (c) 2014-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.
@@ -784,6 +784,11 @@ func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.Network
 	}
 
 	if len(ns) == 0 {
+		net, nerr := f.networkByID(ctx, path)
+		if nerr == nil {
+			return []object.NetworkReference{net}, nil
+		}
+
 		return nil, &NotFoundError{"network", path}
 	}
 
@@ -798,18 +803,13 @@ func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.Network
 // Examples:
 // - Name:                "dvpg-1"
 // - Inventory Path:      "vds-1/dvpg-1"
+// - Cluster Path:        "/dc-1/host/cluster-1/dvpg-1"
 // - ManagedObject ID:    "DistributedVirtualPortgroup:dvportgroup-53"
 // - Logical Switch UUID: "da2a59b8-2450-4cb2-b5cc-79c4c1d2144c"
 // - Segment ID:          "/infra/segments/vnet_ce50e69b-1784-4a14-9206-ffd7f1f146f7"
 func (f *Finder) Network(ctx context.Context, path string) (object.NetworkReference, error) {
 	networks, err := f.NetworkList(ctx, path)
 	if err != nil {
-		if _, ok := err.(*NotFoundError); ok {
-			net, nerr := f.networkByID(ctx, path)
-			if nerr == nil {
-				return net, nil
-			}
-		}
 		return nil, err
 	}
 
diff --git a/vendor/github.com/vmware/govmomi/govc/flags/debug.go b/vendor/github.com/vmware/govmomi/govc/flags/debug.go
index 3f5aff87f..702cf42e6 100644
--- a/vendor/github.com/vmware/govmomi/govc/flags/debug.go
+++ b/vendor/github.com/vmware/govmomi/govc/flags/debug.go
@@ -347,6 +347,9 @@ func (v *verbose) missingSet(o types.ManagedObjectReference, m []types.MissingPr
 
 func (v *verbose) updateSet(u *types.UpdateSet) []string {
 	var s []string
+	if u == nil {
+		return s
+	}
 	for _, f := range u.FilterSet {
 		for _, o := range f.ObjectSet {
 			for _, c := range o.ChangeSet {
diff --git a/vendor/github.com/vmware/govmomi/govc/flags/library.go b/vendor/github.com/vmware/govmomi/govc/flags/library.go
index 16883d77b..3b715f457 100644
--- a/vendor/github.com/vmware/govmomi/govc/flags/library.go
+++ b/vendor/github.com/vmware/govmomi/govc/flags/library.go
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2020 VMware, Inc. All Rights Reserved.
+Copyright (c) 2020-2022 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.
diff --git a/vendor/github.com/vmware/govmomi/govc/flags/output.go b/vendor/github.com/vmware/govmomi/govc/flags/output.go
index 565bdd15a..c0338b18c 100644
--- a/vendor/github.com/vmware/govmomi/govc/flags/output.go
+++ b/vendor/github.com/vmware/govmomi/govc/flags/output.go
@@ -106,8 +106,14 @@ func (flag *OutputFlag) Write(b []byte) (int, error) {
 		return 0, nil
 	}
 
-	n, err := os.Stdout.Write(b)
-	os.Stdout.Sync()
+	w := flag.Out
+	if w == nil {
+		w = os.Stdout
+	}
+	n, err := w.Write(b)
+	if w == os.Stdout {
+		os.Stdout.Sync()
+	}
 	return n, err
 }
 
diff --git a/vendor/github.com/vmware/govmomi/govc/host/esxcli/esxcli.go b/vendor/github.com/vmware/govmomi/govc/host/esxcli/esxcli.go
index 88dc9cd64..6ca0cd39b 100644
--- a/vendor/github.com/vmware/govmomi/govc/host/esxcli/esxcli.go
+++ b/vendor/github.com/vmware/govmomi/govc/host/esxcli/esxcli.go
@@ -71,6 +71,10 @@ func (cmd *esxcli) Process(ctx context.Context) error {
 }
 
 func (cmd *esxcli) Run(ctx context.Context, f *flag.FlagSet) error {
+	if f.NArg() == 0 {
+		return flag.ErrHelp
+	}
+
 	c, err := cmd.Client()
 	if err != nil {
 		return err
diff --git a/vendor/github.com/vmware/govmomi/govc/vm/change.go b/vendor/github.com/vmware/govmomi/govc/vm/change.go
index bf223aa81..531013405 100644
--- a/vendor/github.com/vmware/govmomi/govc/vm/change.go
+++ b/vendor/github.com/vmware/govmomi/govc/vm/change.go
@@ -178,6 +178,8 @@ func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) {
 	f.Var(flags.NewOptionalBool(&cmd.MemoryHotAddEnabled), "memory-hot-add-enabled", "Enable memory hot add")
 	f.Var(flags.NewOptionalBool(&cmd.MemoryReservationLockedToMax), "memory-pin", "Reserve all guest memory")
 	f.Var(flags.NewOptionalBool(&cmd.CpuHotAddEnabled), "cpu-hot-add-enabled", "Enable CPU hot add")
+	cmd.Flags = &types.VirtualMachineFlagInfo{}
+	f.Var(flags.NewOptionalBool(&cmd.Flags.VvtdEnabled), "iommu-enabled", "Enable IOMMU")
 
 	f.StringVar(&cmd.hwUpgradePolicy, "scheduled-hw-upgrade-policy", "", fmt.Sprintf("Schedule hardware upgrade policy (%s)", strings.Join(hwUpgradePolicies, "|")))
 }
@@ -228,6 +230,10 @@ func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error {
 		cmd.Tools = nil // no flags set, avoid sending <tools/> in the request
 	}
 
+	if reflect.DeepEqual(cmd.Flags, new(types.VirtualMachineFlagInfo)) {
+		cmd.Flags = nil // no flags set, avoid sending <flags/> in the request
+	}
+
 	if err = cmd.setLatency(); err != nil {
 		return err
 	}
diff --git a/vendor/github.com/vmware/govmomi/govc/vm/console.go b/vendor/github.com/vmware/govmomi/govc/vm/console.go
index 30fc05a82..77c849b41 100644
--- a/vendor/github.com/vmware/govmomi/govc/vm/console.go
+++ b/vendor/github.com/vmware/govmomi/govc/vm/console.go
@@ -97,7 +97,7 @@ func (cmd *console) Run(ctx context.Context, f *flag.FlagSet) error {
 		return err
 	}
 
-	if state != types.VirtualMachinePowerStatePoweredOn {
+	if (cmd.capture != "" || cmd.wss) && state != types.VirtualMachinePowerStatePoweredOn {
 		return fmt.Errorf("vm is not powered on (%s)", state)
 	}
 
diff --git a/vendor/github.com/vmware/govmomi/internal/version/version.go b/vendor/github.com/vmware/govmomi/internal/version/version.go
index bb3389e59..6a901ccc9 100644
--- a/vendor/github.com/vmware/govmomi/internal/version/version.go
+++ b/vendor/github.com/vmware/govmomi/internal/version/version.go
@@ -21,5 +21,5 @@ const (
 	ClientName = "govmomi"
 
 	// ClientVersion is the version of this SDK
-	ClientVersion = "0.29.0"
+	ClientVersion = "0.30.5"
 )
diff --git a/vendor/github.com/vmware/govmomi/list/lister.go b/vendor/github.com/vmware/govmomi/list/lister.go
index 9a4caed68..92a40e8ba 100644
--- a/vendor/github.com/vmware/govmomi/list/lister.go
+++ b/vendor/github.com/vmware/govmomi/list/lister.go
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
+Copyright (c) 2014-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.
@@ -312,6 +312,7 @@ func (l Lister) ListComputeResource(ctx context.Context) ([]Element, error) {
 
 	fields := []string{
 		"host",
+		"network",
 		"resourcePool",
 	}
 
@@ -327,6 +328,7 @@ func (l Lister) ListComputeResource(ctx context.Context) ([]Element, error) {
 
 	childTypes := []string{
 		"HostSystem",
+		"Network",
 		"ResourcePool",
 	}
 
diff --git a/vendor/github.com/vmware/govmomi/object/search_index.go b/vendor/github.com/vmware/govmomi/object/search_index.go
index bcf5e29f2..288f78097 100644
--- a/vendor/github.com/vmware/govmomi/object/search_index.go
+++ b/vendor/github.com/vmware/govmomi/object/search_index.go
@@ -93,7 +93,18 @@ func (s SearchIndex) FindByInventoryPath(ctx context.Context, path string) (Refe
 	if res.Returnval == nil {
 		return nil, nil
 	}
-	return NewReference(s.c, *res.Returnval), nil
+
+	r := NewReference(s.c, *res.Returnval)
+
+	type common interface {
+		SetInventoryPath(string)
+	}
+
+	if c, ok := r.(common); ok {
+		c.SetInventoryPath(path)
+	}
+
+	return r, nil
 }
 
 // FindByIp finds a virtual machine or host by IP address.
diff --git a/vendor/github.com/vmware/govmomi/object/virtual_device_list.go b/vendor/github.com/vmware/govmomi/object/virtual_device_list.go
index 19c91519e..376550653 100644
--- a/vendor/github.com/vmware/govmomi/object/virtual_device_list.go
+++ b/vendor/github.com/vmware/govmomi/object/virtual_device_list.go
@@ -919,7 +919,13 @@ func (l VirtualDeviceList) Name(device types.BaseVirtualDevice) string {
 	dtype := l.Type(device)
 	switch dtype {
 	case DeviceTypeEthernet:
-		key = fmt.Sprintf("%d", UnitNumber-7)
+		// Ethernet devices of UnitNumber 7-19 are non-SRIOV. Ethernet devices of
+		// UnitNumber 45-36 descending are SRIOV
+		if UnitNumber <= 45 && UnitNumber >= 36 {
+			key = fmt.Sprintf("sriov-%d", 45-UnitNumber)
+		} else {
+			key = fmt.Sprintf("%d", UnitNumber-7)
+		}
 	case DeviceTypeDisk:
 		key = fmt.Sprintf("%d-%d", d.ControllerKey, UnitNumber)
 	default:
diff --git a/vendor/github.com/vmware/govmomi/task/history_collector.go b/vendor/github.com/vmware/govmomi/task/history_collector.go
index dd9b70a1b..7d8a6cf04 100644
--- a/vendor/github.com/vmware/govmomi/task/history_collector.go
+++ b/vendor/github.com/vmware/govmomi/task/history_collector.go
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2015 VMware, Inc. All Rights Reserved.
+Copyright (c) 2015-2022 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.
@@ -38,12 +38,15 @@ func newHistoryCollector(c *vim25.Client, ref types.ManagedObjectReference) *His
 	}
 }
 
-// RecentTasks returns a list of task managed objects that completed recently,
-// that are currently running, or that are queued to run.
-func (h HistoryCollector) RecentTasks(ctx context.Context) ([]types.TaskInfo, error) {
+// LatestPage returns items in the 'viewable latest page' of the task history collector.
+// As new tasks that match the collector's TaskFilterSpec are created,
+// they are added to this page, and the oldest tasks are removed from the collector to keep
+// the size of the page to that allowed by SetCollectorPageSize.
+// The "oldest task" is the one with the oldest creation time. The tasks in the returned page are unordered.
+func (h HistoryCollector) LatestPage(ctx context.Context) ([]types.TaskInfo, error) {
 	var o mo.TaskHistoryCollector
 
-	err := h.Properties(ctx, h.Reference(), []string{"recentTask"}, &o)
+	err := h.Properties(ctx, h.Reference(), []string{"latestPage"}, &o)
 	if err != nil {
 		return nil, err
 	}
diff --git a/vendor/github.com/vmware/govmomi/vapi/internal/internal.go b/vendor/github.com/vmware/govmomi/vapi/internal/internal.go
index 68fe79751..f6584c569 100644
--- a/vendor/github.com/vmware/govmomi/vapi/internal/internal.go
+++ b/vendor/github.com/vmware/govmomi/vapi/internal/internal.go
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2018 VMware, Inc. All Rights Reserved.
+Copyright (c) 2018-2022 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.
@@ -37,8 +37,10 @@ const (
 	LibraryItemDownloadSessionFile = "/com/vmware/content/library/item/downloadsession/file"
 	LocalLibraryPath               = "/com/vmware/content/local-library"
 	SubscribedLibraryPath          = "/com/vmware/content/subscribed-library"
+	SecurityPoliciesPath           = "/api/content/security-policies"
 	SubscribedLibraryItem          = "/com/vmware/content/library/subscribed-item"
 	Subscriptions                  = "/com/vmware/content/library/subscriptions"
+	TrustedCertificatesPath        = "/api/content/trusted-certificates"
 	VCenterOVFLibraryItem          = "/com/vmware/vcenter/ovf/library-item"
 	VCenterVMTXLibraryItem         = "/vcenter/vm-template/library-items"
 	VCenterVM                      = "/vcenter/vm"
diff --git a/vendor/github.com/vmware/govmomi/vapi/library/library.go b/vendor/github.com/vmware/govmomi/vapi/library/library.go
index 254a1b6dc..e5e5d0896 100644
--- a/vendor/github.com/vmware/govmomi/vapi/library/library.go
+++ b/vendor/github.com/vmware/govmomi/vapi/library/library.go
@@ -36,17 +36,19 @@ type StorageBackings struct {
 
 // Library  provides methods to create, read, update, delete, and enumerate libraries.
 type Library struct {
-	CreationTime     *time.Time        `json:"creation_time,omitempty"`
-	Description      string            `json:"description,omitempty"`
-	ID               string            `json:"id,omitempty"`
-	LastModifiedTime *time.Time        `json:"last_modified_time,omitempty"`
-	LastSyncTime     *time.Time        `json:"last_sync_time,omitempty"`
-	Name             string            `json:"name,omitempty"`
-	Storage          []StorageBackings `json:"storage_backings,omitempty"`
-	Type             string            `json:"type,omitempty"`
-	Version          string            `json:"version,omitempty"`
-	Subscription     *Subscription     `json:"subscription_info,omitempty"`
-	Publication      *Publication      `json:"publish_info,omitempty"`
+	CreationTime          *time.Time        `json:"creation_time,omitempty"`
+	Description           string            `json:"description,omitempty"`
+	ID                    string            `json:"id,omitempty"`
+	LastModifiedTime      *time.Time        `json:"last_modified_time,omitempty"`
+	LastSyncTime          *time.Time        `json:"last_sync_time,omitempty"`
+	Name                  string            `json:"name,omitempty"`
+	Storage               []StorageBackings `json:"storage_backings,omitempty"`
+	Type                  string            `json:"type,omitempty"`
+	Version               string            `json:"version,omitempty"`
+	Subscription          *Subscription     `json:"subscription_info,omitempty"`
+	Publication           *Publication      `json:"publish_info,omitempty"`
+	SecurityPolicyID      string            `json:"security_policy_id,omitempty"`
+	UnsetSecurityPolicyID bool              `json:"unset_security_policy_id,omitempty"`
 }
 
 // Subscription info
diff --git a/vendor/github.com/vmware/govmomi/vapi/library/library_item.go b/vendor/github.com/vmware/govmomi/vapi/library/library_item.go
index c596ec128..adc2101ab 100644
--- a/vendor/github.com/vmware/govmomi/vapi/library/library_item.go
+++ b/vendor/github.com/vmware/govmomi/vapi/library/library_item.go
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2018 VMware, Inc. All Rights Reserved.
+Copyright (c) 2018-2022 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.
@@ -47,6 +47,15 @@ type Item struct {
 	SourceID         string     `json:"source_id,omitempty"`
 	Type             string     `json:"type,omitempty"`
 	Version          string     `json:"version,omitempty"`
+
+	SecurityCompliance      *bool                        `json:"security_compliance,omitempty"`
+	CertificateVerification *ItemCertificateVerification `json:"certificate_verification_info,omitempty"`
+}
+
+// ItemCertificateVerification contains the certificate verification status and item's signing certificate
+type ItemCertificateVerification struct {
+	Status    string   `json:"status"`
+	CertChain []string `json:"cert_chain,omitempty"`
 }
 
 // Patch merges updates from the given src.
diff --git a/vendor/github.com/vmware/govmomi/vapi/library/security_policy.go b/vendor/github.com/vmware/govmomi/vapi/library/security_policy.go
new file mode 100644
index 000000000..dd4766356
--- /dev/null
+++ b/vendor/github.com/vmware/govmomi/vapi/library/security_policy.go
@@ -0,0 +1,63 @@
+/*
+Copyright (c) 2022-2022 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 library
+
+import (
+	"context"
+	"errors"
+	"net/http"
+
+	"github.com/vmware/govmomi/vapi/internal"
+)
+
+const (
+	OvfDefaultSecurityPolicy = "OVF default policy"
+)
+
+// ContentSecurityPoliciesInfo contains information on security policies that can
+// be used to describe security for content library items.
+type ContentSecurityPoliciesInfo struct {
+	// ItemTypeRules are rules governing the policy.
+	ItemTypeRules map[string]string `json:"item_type_rules"`
+	// Name is a human-readable identifier identifying the policy.
+	Name string `json:"name"`
+	// Policy is the unique identifier for a policy.
+	Policy string `json:"policy"`
+}
+
+// ListSecurityPolicies lists security policies
+func (c *Manager) ListSecurityPolicies(ctx context.Context) ([]ContentSecurityPoliciesInfo, error) {
+	url := c.Resource(internal.SecurityPoliciesPath)
+	var res []ContentSecurityPoliciesInfo
+	return res, c.Do(ctx, url.Request(http.MethodGet), &res)
+}
+
+func (c *Manager) DefaultOvfSecurityPolicy(ctx context.Context) (string, error) {
+	res, err := c.ListSecurityPolicies(ctx)
+
+	if err != nil {
+		return "", err
+	}
+
+	for _, policy := range res {
+		if policy.Name == OvfDefaultSecurityPolicy {
+			return policy.Policy, nil
+		}
+	}
+
+	return "", errors.New("failed to find default ovf security policy")
+}
diff --git a/vendor/github.com/vmware/govmomi/vapi/library/trusted_certificates.go b/vendor/github.com/vmware/govmomi/vapi/library/trusted_certificates.go
new file mode 100644
index 000000000..33e25a065
--- /dev/null
+++ b/vendor/github.com/vmware/govmomi/vapi/library/trusted_certificates.go
@@ -0,0 +1,70 @@
+/*
+Copyright (c) 2022-2022 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 library
+
+import (
+	"context"
+	"net/http"
+	"path"
+
+	"github.com/vmware/govmomi/vapi/internal"
+)
+
+// TrustedCertificate contains a trusted certificate in Base64 encoded PEM format
+type TrustedCertificate struct {
+	Text string `json:"cert_text"`
+}
+
+// TrustedCertificateSummary contains a trusted certificate in Base64 encoded PEM format and its id
+type TrustedCertificateSummary struct {
+	TrustedCertificate
+	ID string `json:"certificate"`
+}
+
+// ListTrustedCertificates retrieves all content library's trusted certificates
+func (c *Manager) ListTrustedCertificates(ctx context.Context) ([]TrustedCertificateSummary, error) {
+	url := c.Resource(internal.TrustedCertificatesPath)
+	var res struct {
+		Certificates []TrustedCertificateSummary `json:"certificates"`
+	}
+	err := c.Do(ctx, url.Request(http.MethodGet), &res)
+	return res.Certificates, err
+}
+
+// GetTrustedCertificate retrieves a trusted certificate for a given certificate id
+func (c *Manager) GetTrustedCertificate(ctx context.Context, id string) (*TrustedCertificate, error) {
+	url := c.Resource(path.Join(internal.TrustedCertificatesPath, id))
+	var res TrustedCertificate
+	err := c.Do(ctx, url.Request(http.MethodGet), &res)
+	if err != nil {
+		return nil, err
+	}
+	return &res, nil
+}
+
+// CreateTrustedCertificate adds a certificate to content library trust store
+func (c *Manager) CreateTrustedCertificate(ctx context.Context, cert string) error {
+	url := c.Resource(internal.TrustedCertificatesPath)
+	body := TrustedCertificate{Text: cert}
+	return c.Do(ctx, url.Request(http.MethodPost, body), nil)
+}
+
+// DeleteTrustedCertificate deletes the trusted certificate from content library's trust store for the given id
+func (c *Manager) DeleteTrustedCertificate(ctx context.Context, id string) error {
+	url := c.Resource(path.Join(internal.TrustedCertificatesPath, id))
+	return c.Do(ctx, url.Request(http.MethodDelete), nil)
+}
diff --git a/vendor/github.com/vmware/govmomi/vim25/soap/client.go b/vendor/github.com/vmware/govmomi/vim25/soap/client.go
index 5c63bcc9a..e46a17f95 100644
--- a/vendor/github.com/vmware/govmomi/vim25/soap/client.go
+++ b/vendor/github.com/vmware/govmomi/vim25/soap/client.go
@@ -156,10 +156,14 @@ func NewClient(u *url.URL, insecure bool) *Client {
 
 	c.hosts = make(map[string]string)
 	c.t.TLSClientConfig = &tls.Config{InsecureSkipVerify: c.k}
-	// Don't bother setting DialTLS if InsecureSkipVerify=true
-	if !c.k {
-		c.t.DialTLS = c.dialTLS
-	}
+
+	// Always set DialTLS and DialTLSContext, even if InsecureSkipVerify=true,
+	// because of how certificate verification has been delegated to the host's
+	// PKI framework in Go 1.18. Please see the following links for more info:
+	//
+	//   * https://tip.golang.org/doc/go1.18 (search for "Certificate.Verify")
+	//   * https://github.com/square/certigo/issues/264
+	c.t.DialTLSContext = c.dialTLSContext
 
 	c.Client.Transport = c.t
 	c.Client.Jar, _ = cookiejar.New(nil)
@@ -352,7 +356,10 @@ func ThumbprintSHA1(cert *x509.Certificate) string {
 	return strings.Join(hex, ":")
 }
 
-func (c *Client) dialTLS(network string, addr string) (net.Conn, error) {
+func (c *Client) dialTLSContext(
+	ctx context.Context,
+	network, addr string) (net.Conn, error) {
+
 	// Would be nice if there was a tls.Config.Verify func,
 	// see tls.clientHandshakeState.doFullHandshake
 
@@ -366,7 +373,20 @@ func (c *Client) dialTLS(network string, addr string) (net.Conn, error) {
 	case x509.UnknownAuthorityError:
 	case x509.HostnameError:
 	default:
-		return nil, err
+		// Allow a thumbprint verification attempt if the error indicates
+		// the failure was due to lack of trust.
+		//
+		// Please note the err variable is not a special type of x509 or HTTP
+		// error that can be validated by a type assertion. The err variable is
+		// in fact an *errors.errorString.
+		switch {
+		case strings.HasSuffix(err.Error(), "certificate is not trusted"):
+			// darwin and linux
+		case strings.HasSuffix(err.Error(), "certificate signed by unknown authority"):
+			// windows
+		default:
+			return nil, err
+		}
 	}
 
 	thumbprint := c.Thumbprint(addr)
@@ -391,6 +411,10 @@ func (c *Client) dialTLS(network string, addr string) (net.Conn, error) {
 	return conn, nil
 }
 
+func (c *Client) dialTLS(network, addr string) (net.Conn, error) {
+	return c.dialTLSContext(context.Background(), network, addr)
+}
+
 // splitHostPort is similar to net.SplitHostPort,
 // but rather than return error if there isn't a ':port',
 // return an empty string for the port.
diff --git a/vendor/github.com/vmware/govmomi/vim25/types/helpers.go b/vendor/github.com/vmware/govmomi/vim25/types/helpers.go
index 67d9793fa..70360eb4f 100644
--- a/vendor/github.com/vmware/govmomi/vim25/types/helpers.go
+++ b/vendor/github.com/vmware/govmomi/vim25/types/helpers.go
@@ -157,6 +157,18 @@ func (ci VirtualMachineConfigInfo) ToConfigSpec() VirtualMachineConfigSpec {
 		SevEnabled:                   ci.SevEnabled,
 		PmemFailoverEnabled:          ci.PmemFailoverEnabled,
 		Pmem:                         ci.Pmem,
+		NpivWorldWideNameOp:          ci.NpivWorldWideNameType,
+		RebootPowerOff:               ci.RebootPowerOff,
+		ScheduledHardwareUpgradeInfo: ci.ScheduledHardwareUpgradeInfo,
+		SgxInfo:                      ci.SgxInfo,
+		GuestMonitoringModeInfo:      ci.GuestMonitoringModeInfo,
+		VmxStatsCollectionEnabled:    ci.VmxStatsCollectionEnabled,
+		VmOpNotificationToAppEnabled: ci.VmOpNotificationToAppEnabled,
+		VmOpNotificationTimeout:      ci.VmOpNotificationTimeout,
+		DeviceSwap:                   ci.DeviceSwap,
+		SimultaneousThreads:          ci.Hardware.SimultaneousThreads,
+		DeviceGroups:                 ci.DeviceGroups,
+		MotherboardLayout:            ci.Hardware.MotherboardLayout,
 	}
 
 	// Unassign the Files field if all of its fields are empty.
@@ -234,6 +246,66 @@ func (ci VirtualMachineConfigInfo) ToConfigSpec() VirtualMachineConfigSpec {
 		}
 	}
 
+	if ni := ci.NumaInfo; ni != nil {
+		cs.VirtualNuma = &VirtualMachineVirtualNuma{
+			CoresPerNumaNode:       ni.CoresPerNumaNode,
+			ExposeVnumaOnCpuHotadd: ni.VnumaOnCpuHotaddExposed,
+		}
+	}
+
+	if civa, ok := ci.VAppConfig.(*VmConfigInfo); ok {
+		var csva VmConfigSpec
+
+		csva.Eula = civa.Eula
+		csva.InstallBootRequired = &civa.InstallBootRequired
+		csva.InstallBootStopDelay = civa.InstallBootStopDelay
+
+		ipAssignment := civa.IpAssignment
+		csva.IpAssignment = &ipAssignment
+
+		csva.OvfEnvironmentTransport = civa.OvfEnvironmentTransport
+		for i := range civa.OvfSection {
+			s := civa.OvfSection[i]
+			csva.OvfSection = append(
+				csva.OvfSection,
+				VAppOvfSectionSpec{
+					ArrayUpdateSpec: ArrayUpdateSpec{
+						Operation: ArrayUpdateOperationAdd,
+					},
+					Info: &s,
+				},
+			)
+		}
+
+		for i := range civa.Product {
+			p := civa.Product[i]
+			csva.Product = append(
+				csva.Product,
+				VAppProductSpec{
+					ArrayUpdateSpec: ArrayUpdateSpec{
+						Operation: ArrayUpdateOperationAdd,
+					},
+					Info: &p,
+				},
+			)
+		}
+
+		for i := range civa.Property {
+			p := civa.Property[i]
+			csva.Property = append(
+				csva.Property,
+				VAppPropertySpec{
+					ArrayUpdateSpec: ArrayUpdateSpec{
+						Operation: ArrayUpdateOperationAdd,
+					},
+					Info: &p,
+				},
+			)
+		}
+
+		cs.VAppConfig = &csva
+	}
+
 	return cs
 }
 
diff --git a/vendor/github.com/vmware/govmomi/vim25/types/types.go b/vendor/github.com/vmware/govmomi/vim25/types/types.go
index 30a58792b..f7ae195f7 100644
--- a/vendor/github.com/vmware/govmomi/vim25/types/types.go
+++ b/vendor/github.com/vmware/govmomi/vim25/types/types.go
@@ -8313,6 +8313,18 @@ func init() {
 	t["ClusterAttemptedVmInfo"] = reflect.TypeOf((*ClusterAttemptedVmInfo)(nil)).Elem()
 }
 
+type ClusterClusterInitialPlacementAction struct {
+	ClusterAction
+
+	TargetHost *ManagedObjectReference   `xml:"targetHost,omitempty"`
+	Pool       ManagedObjectReference    `xml:"pool"`
+	ConfigSpec *VirtualMachineConfigSpec `xml:"configSpec,omitempty"`
+}
+
+func init() {
+	t["ClusterClusterInitialPlacementAction"] = reflect.TypeOf((*ClusterClusterInitialPlacementAction)(nil)).Elem()
+}
+
 type ClusterComplianceCheckedEvent struct {
 	ClusterEvent
 
@@ -8835,18 +8847,6 @@ func init() {
 	t["ClusterDasVmConfigSpec"] = reflect.TypeOf((*ClusterDasVmConfigSpec)(nil)).Elem()
 }
 
-type ClusterDasVmPreemptiblePairInfo struct {
-	DynamicData
-
-	Key           int32                  `xml:"key,omitempty"`
-	MonitoredVm   ManagedObjectReference `xml:"monitoredVm"`
-	PreemptibleVm ManagedObjectReference `xml:"preemptibleVm"`
-}
-
-func init() {
-	t["ClusterDasVmPreemptiblePairInfo"] = reflect.TypeOf((*ClusterDasVmPreemptiblePairInfo)(nil)).Elem()
-}
-
 type ClusterDasVmSettings struct {
 	DynamicData
 
diff --git a/vendor/github.com/vmware/govmomi/vim25/types/unreleased.go b/vendor/github.com/vmware/govmomi/vim25/types/unreleased.go
index ee1c09f33..72bc1082b 100644
--- a/vendor/github.com/vmware/govmomi/vim25/types/unreleased.go
+++ b/vendor/github.com/vmware/govmomi/vim25/types/unreleased.go
@@ -98,8 +98,10 @@ func init() {
 type PlaceVmsXClusterSpec struct {
 	DynamicData
 
-	ResourcePools    []ManagedObjectReference              `xml:"resourcePools,omitempty"`
-	VmPlacementSpecs []PlaceVmsXClusterSpecVmPlacementSpec `xml:"vmPlacementSpecs,omitempty"`
+	ResourcePools           []ManagedObjectReference              `xml:"resourcePools,omitempty"`
+	VmPlacementSpecs        []PlaceVmsXClusterSpecVmPlacementSpec `xml:"vmPlacementSpecs,omitempty"`
+	HostRecommRequired      *bool                                 `xml:"hostRecommRequired"`
+	DatastoreRecommRequired *bool                                 `xml:"datastoreRecommRequired"`
 }
 
 func init() {
@@ -117,13 +119,3 @@ func init() {
 }
 
 const RecommendationReasonCodeXClusterPlacement = RecommendationReasonCode("xClusterPlacement")
-
-type ClusterClusterInitialPlacementAction struct {
-	ClusterInitialPlacementAction
-
-	ConfigSpec *VirtualMachineConfigSpec `xml:"configSpec,omitempty"`
-}
-
-func init() {
-	t["ClusterClusterInitialPlacementAction"] = reflect.TypeOf((*ClusterClusterInitialPlacementAction)(nil)).Elem()
-}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index d67f55a4d..99cfc6235 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -702,7 +702,7 @@ github.com/vbauerster/mpb/v7
 github.com/vbauerster/mpb/v7/cwriter
 github.com/vbauerster/mpb/v7/decor
 github.com/vbauerster/mpb/v7/internal
-# github.com/vmware/govmomi v0.29.0
+# github.com/vmware/govmomi v0.30.5
 ## explicit; go 1.17
 github.com/vmware/govmomi/cns
 github.com/vmware/govmomi/cns/methods


Test patch:
diff --git a/internal/distro/distro_test.go b/internal/distro/distro_test.go
index 4b17580b6..50d6f58db 100644
--- a/internal/distro/distro_test.go
+++ b/internal/distro/distro_test.go
@@ -155,8 +155,8 @@ func TestImageTypePipelineNames(t *testing.T) {
 					// manifest creation doesn't fail.
 					allPipelines := append(imageType.BuildPipelines(), imageType.PayloadPipelines()...)
 					minimalPackageSet := []rpmmd.PackageSpec{
-						{Name: "kernel"},
-						{Name: "filesystem"},
+						{Name: "kernel", Checksum: "sha256:a0c936696eb7d5ee3192bf53b9d281cecbb40ca9db520de72cb95817ad92ac72"},
+						{Name: "filesystem", Checksum: "sha256:6b4bf18ba28ccbdd49f2716c9f33c9211155ff703fa6c195c78a07bd160da0eb"},
 					}
 
 					packageSets := make(map[string][]rpmmd.PackageSpec, len(allPipelines))
diff --git a/internal/manifest/os_test.go b/internal/manifest/os_test.go
index 3e166a865..b36dd28fb 100644
--- a/internal/manifest/os_test.go
+++ b/internal/manifest/os_test.go
@@ -28,7 +28,7 @@ func NewTestOS() *OS {
 
 	os := NewOS(&manifest, build, platform, repos)
 	packages := []rpmmd.PackageSpec{
-		rpmmd.PackageSpec{Name: "pkg1"},
+		{Name: "pkg1", Checksum: "sha1:c02524e2bd19490f2a7167958f792262754c5f46"},
 	}
 	os.serializeStart(packages, nil, nil)
 
diff --git a/internal/osbuild/copy_stage_test.go b/internal/osbuild/copy_stage_test.go
index 94f5c0d36..f57ce2f14 100644
--- a/internal/osbuild/copy_stage_test.go
+++ b/internal/osbuild/copy_stage_test.go
@@ -46,11 +46,11 @@ func TestNewCopyStage(t *testing.T) {
 }
 
 func TestNewCopyStageSimpleSourcesInputs(t *testing.T) {
-	fileSum := "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
+	fileSum := "sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
 
 	paths := []CopyStagePath{
 		{
-			From: fmt.Sprintf("input://inlinefile/sha256:%x", fileSum),
+			From: fmt.Sprintf("input://inlinefile/%x", fileSum),
 			To:   "tree://etc/inlinefile",
 		},
 	}
diff --git a/internal/osbuild/files_input_test.go b/internal/osbuild/files_input_test.go
index 72f84c8aa..7f637c97f 100644
--- a/internal/osbuild/files_input_test.go
+++ b/internal/osbuild/files_input_test.go
@@ -25,20 +25,20 @@ func TestFilesInput_UnmarshalJSON(t *testing.T) {
 		},
 		{
 			name:    "source-plain-ref",
-			ref:     NewFilesInputSourcePlainRef([]string{"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"}),
+			ref:     NewFilesInputSourcePlainRef([]string{"sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"}),
 			rawJson: []byte(`{"type":"org.osbuild.files","origin":"org.osbuild.source","references":["sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"]}`),
 		},
 		{
 			name: "source-array-ref",
 			ref: NewFilesInputSourceArrayRef([]FilesInputSourceArrayRefEntry{
-				NewFilesInputSourceArrayRefEntry("1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", nil),
+				NewFilesInputSourceArrayRefEntry("sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", nil),
 			}),
 			rawJson: []byte(`{"type":"org.osbuild.files","origin":"org.osbuild.source","references":[{"id":"sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"}]}`),
 		},
 		{
 			name: "source-object-ref",
 			ref: NewFilesInputSourceObjectRef(map[string]FilesInputRefMetadata{
-				"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef": nil,
+				"sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef": nil,
 			}),
 			rawJson: []byte(`{"type":"org.osbuild.files","origin":"org.osbuild.source","references":{"sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":{}}}`),
 		},
diff --git a/internal/osbuild/fsnode_test.go b/internal/osbuild/fsnode_test.go
index 83ad15482..4f3ecab9f 100644
--- a/internal/osbuild/fsnode_test.go
+++ b/internal/osbuild/fsnode_test.go
@@ -53,7 +53,7 @@ func TestGenFileNodesStages(t *testing.T) {
 					},
 				}, &CopyStageFilesInputs{
 					fmt.Sprintf("file-%x", sha256.Sum256(fileData1)): NewFilesInput(NewFilesInputSourceArrayRef([]FilesInputSourceArrayRefEntry{
-						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("%x", sha256.Sum256(fileData1)), nil),
+						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("sha256:%x", sha256.Sum256(fileData1)), nil),
 					})),
 				}),
 			},
@@ -80,10 +80,10 @@ func TestGenFileNodesStages(t *testing.T) {
 					},
 				}, &CopyStageFilesInputs{
 					fmt.Sprintf("file-%x", sha256.Sum256(fileData1)): NewFilesInput(NewFilesInputSourceArrayRef([]FilesInputSourceArrayRefEntry{
-						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("%x", sha256.Sum256(fileData1)), nil),
+						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("sha256:%x", sha256.Sum256(fileData1)), nil),
 					})),
 					fmt.Sprintf("file-%x", sha256.Sum256(fileData2)): NewFilesInput(NewFilesInputSourceArrayRef([]FilesInputSourceArrayRefEntry{
-						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("%x", sha256.Sum256(fileData2)), nil),
+						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("sha256:%x", sha256.Sum256(fileData2)), nil),
 					})),
 				}),
 			},
@@ -110,10 +110,10 @@ func TestGenFileNodesStages(t *testing.T) {
 					},
 				}, &CopyStageFilesInputs{
 					fmt.Sprintf("file-%x", sha256.Sum256(fileData1)): NewFilesInput(NewFilesInputSourceArrayRef([]FilesInputSourceArrayRefEntry{
-						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("%x", sha256.Sum256(fileData1)), nil),
+						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("sha256:%x", sha256.Sum256(fileData1)), nil),
 					})),
 					fmt.Sprintf("file-%x", sha256.Sum256(fileData2)): NewFilesInput(NewFilesInputSourceArrayRef([]FilesInputSourceArrayRefEntry{
-						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("%x", sha256.Sum256(fileData2)), nil),
+						NewFilesInputSourceArrayRefEntry(fmt.Sprintf("sha256:%x", sha256.Sum256(fileData2)), nil),
 					})),
 				}),
 				NewChmodStage(&ChmodStageOptions{
diff --git a/internal/osbuild/rpm_stage_test.go b/internal/osbuild/rpm_stage_test.go
index 4879d3762..0ded7646b 100644
--- a/internal/osbuild/rpm_stage_test.go
+++ b/internal/osbuild/rpm_stage_test.go
@@ -87,3 +87,96 @@ func Test_OSBuildMetadataToRPMs(t *testing.T) {
 	// if neither GPG nor PGP is set, the signature is nil
 	require.Nil(t, rpms[2].Signature)
 }
+
+func TestNewRpmStageSourceFilesInputs(t *testing.T) {
+
+	assert := assert.New(t)
+	require := require.New(t)
+
+	pkgSpecs := []rpmmd.PackageSpec{
+		{
+			Name:           "openssl-libs",
+			Epoch:          1,
+			Version:        "3.0.1",
+			Release:        "5.el9",
+			Arch:           "x86_64",
+			RemoteLocation: "https://example.com/repo/Packages/openssl-libs-3.0.1-5.el9.x86_64.rpm",
+			Checksum:       "sha256:fcf2515ec9115551c99d552da721803ecbca23b7ae5a974309975000e8bef666",
+			Secrets:        "",
+			CheckGPG:       false,
+			IgnoreSSL:      true,
+		},
+		{
+			Name:           "openssl-pkcs11",
+			Epoch:          0,
+			Version:        "0.4.11",
+			Release:        "7.el9",
+			Arch:           "x86_64",
+			RemoteLocation: "https://example.com/repo/Packages/openssl-pkcs11-0.4.11-7.el9.x86_64.rpm",
+			Checksum:       "sha256:4be41142a5fb2b4cd6d812e126838cffa57b7c84e5a79d65f66bb9cf1d2830a3",
+			Secrets:        "",
+			CheckGPG:       false,
+			IgnoreSSL:      true,
+		},
+		{
+			Name:           "p11-kit",
+			Epoch:          0,
+			Version:        "0.24.1",
+			Release:        "2.el9",
+			Arch:           "x86_64",
+			RemoteLocation: "https://example.com/repo/Packages/p11-kit-0.24.1-2.el9.x86_64.rpm",
+			Checksum:       "sha256:da167e41efd19cf25fd1c708b6f123d0203824324b14dd32401d49f2aa0ef0a6",
+			Secrets:        "",
+			CheckGPG:       false,
+			IgnoreSSL:      true,
+		},
+		{
+			Name:           "package-with-sha1-checksum",
+			Epoch:          1,
+			Version:        "3.4.2.",
+			Release:        "10.el9",
+			Arch:           "x86_64",
+			RemoteLocation: "https://example.com/repo/Packages/package-with-sha1-checksum-4.3.2-10.el9.x86_64.rpm",
+			Checksum:       "sha1:6e01b8076a2ab729d564048bf2e3a97c7ac83c13",
+			Secrets:        "",
+			CheckGPG:       true,
+			IgnoreSSL:      true,
+		},
+		{
+			Name:           "package-with-md5-checksum",
+			Epoch:          1,
+			Version:        "3.4.2.",
+			Release:        "5.el9",
+			Arch:           "x86_64",
+			RemoteLocation: "https://example.com/repo/Packages/package-with-md5-checksum-4.3.2-5.el9.x86_64.rpm",
+			Checksum:       "md5:8133f479f38118c5f9facfe2a2d9a071",
+			Secrets:        "",
+			CheckGPG:       true,
+			IgnoreSSL:      true,
+		},
+	}
+	inputs := NewRpmStageSourceFilesInputs(pkgSpecs)
+
+	refsArrayPtr, convOk := inputs.Packages.References.(*FilesInputSourceArrayRef)
+	require.True(convOk)
+	require.NotNil(refsArrayPtr)
+
+	refsArray := *refsArrayPtr
+
+	for idx := range refsArray {
+		refItem := refsArray[idx]
+		pkg := pkgSpecs[idx]
+		assert.Equal(pkg.Checksum, refItem.ID)
+
+		if pkg.CheckGPG {
+			// GPG check enabled: metadata expected
+			require.NotNil(refItem.Options)
+			require.NotNil(refItem.Options.Metadata)
+
+			md, convOk := refItem.Options.Metadata.(*RPMStageReferenceMetadata)
+			require.True(convOk)
+			require.NotNil(md)
+			assert.Equal(md.CheckGPG, pkg.CheckGPG)
+		}
+	}
+}