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 ---
136 lines
2.7 KiB
Go
136 lines
2.7 KiB
Go
// © Broadcom. All Rights Reserved.
|
|
// The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package nfc
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"net/url"
|
|
"sync"
|
|
"sync/atomic"
|
|
"time"
|
|
|
|
"github.com/vmware/govmomi/vim25/progress"
|
|
"github.com/vmware/govmomi/vim25/types"
|
|
)
|
|
|
|
type FileItem struct {
|
|
types.OvfFileItem
|
|
|
|
URL *url.URL
|
|
Thumbprint string
|
|
|
|
ch chan progress.Report
|
|
}
|
|
|
|
func NewFileItem(u *url.URL, item types.OvfFileItem) FileItem {
|
|
return FileItem{
|
|
OvfFileItem: item,
|
|
URL: u,
|
|
ch: make(chan progress.Report),
|
|
}
|
|
}
|
|
|
|
func (o FileItem) Sink() chan<- progress.Report {
|
|
return o.ch
|
|
}
|
|
|
|
// File converts the FileItem.OvfFileItem to an OvfFile
|
|
func (o FileItem) File() types.OvfFile {
|
|
return types.OvfFile{
|
|
DeviceId: o.DeviceId,
|
|
Path: o.Path,
|
|
Size: o.Size,
|
|
}
|
|
}
|
|
|
|
type LeaseUpdater struct {
|
|
pos int64 // Number of bytes (keep first to ensure 64 bit alignment)
|
|
total int64 // Total number of bytes (keep first to ensure 64 bit alignment)
|
|
|
|
lease *Lease
|
|
|
|
done chan struct{} // When lease updater should stop
|
|
|
|
wg sync.WaitGroup // Track when update loop is done
|
|
}
|
|
|
|
func newLeaseUpdater(ctx context.Context, lease *Lease, info *LeaseInfo) *LeaseUpdater {
|
|
l := LeaseUpdater{
|
|
lease: lease,
|
|
|
|
done: make(chan struct{}),
|
|
}
|
|
|
|
for _, item := range info.Items {
|
|
l.total += item.Size
|
|
go l.waitForProgress(item)
|
|
}
|
|
|
|
// Kickstart update loop
|
|
l.wg.Add(1)
|
|
go l.run()
|
|
|
|
return &l
|
|
}
|
|
|
|
func (l *LeaseUpdater) waitForProgress(item FileItem) {
|
|
var pos, total int64
|
|
|
|
total = item.Size
|
|
|
|
for {
|
|
select {
|
|
case <-l.done:
|
|
return
|
|
case p, ok := <-item.ch:
|
|
// Return in case of error
|
|
if ok && p.Error() != nil {
|
|
return
|
|
}
|
|
|
|
if !ok {
|
|
// Last element on the channel, add to total
|
|
atomic.AddInt64(&l.pos, total-pos)
|
|
return
|
|
}
|
|
|
|
// Approximate progress in number of bytes
|
|
x := int64(float32(total) * (p.Percentage() / 100.0))
|
|
atomic.AddInt64(&l.pos, x-pos)
|
|
pos = x
|
|
}
|
|
}
|
|
}
|
|
|
|
func (l *LeaseUpdater) run() {
|
|
defer l.wg.Done()
|
|
|
|
tick := time.NewTicker(2 * time.Second)
|
|
defer tick.Stop()
|
|
|
|
for {
|
|
select {
|
|
case <-l.done:
|
|
return
|
|
case <-tick.C:
|
|
// From the vim api HttpNfcLeaseProgress(percent) doc, percent ==
|
|
// "Completion status represented as an integer in the 0-100 range."
|
|
// Always report the current value of percent, as it will renew the
|
|
// lease even if the value hasn't changed or is 0.
|
|
percent := int32(float32(100*atomic.LoadInt64(&l.pos)) / float32(l.total))
|
|
err := l.lease.Progress(context.TODO(), percent)
|
|
if err != nil {
|
|
log.Printf("NFC lease progress: %s", err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func (l *LeaseUpdater) Done() {
|
|
close(l.done)
|
|
l.wg.Wait()
|
|
}
|