diff --git a/go.mod b/go.mod index bbda2b7deb..bca111bbdb 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,6 @@ require ( github.com/containers/storage v1.55.2-0.20241104201357-ad5f2a48e9e9 github.com/containers/winquit v1.1.0 github.com/coreos/go-systemd/v22 v22.5.1-0.20231103132048-7d375ecc2b09 - github.com/coreos/stream-metadata-go v0.4.4 github.com/crc-org/crc/v2 v2.38.0 github.com/crc-org/vfkit v0.5.1 github.com/cyphar/filepath-securejoin v0.3.4 diff --git a/go.sum b/go.sum index 0beb7f39ed..79944c3957 100644 --- a/go.sum +++ b/go.sum @@ -109,8 +109,6 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.1-0.20231103132048-7d375ecc2b09 h1:OoRAFlvDGCUqDLampLQjk0yeeSGdF9zzst/3G9IkBbc= github.com/coreos/go-systemd/v22 v22.5.1-0.20231103132048-7d375ecc2b09/go.mod h1:m2r/smMKsKwgMSAoFKHaa68ImdCSNuKE1MxvQ64xuCQ= -github.com/coreos/stream-metadata-go v0.4.4 h1:PM/6iNhofKGydsatiY1zdnMMHBT34skb5P7nfEFR4GU= -github.com/coreos/stream-metadata-go v0.4.4/go.mod h1:fMObQqQm8Ku91G04btKzEH3AsdP1mrAb986z9aaK0tE= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crc-org/crc/v2 v2.38.0 h1:8QcoH4hYksfKUQOLXHZw4jIY1aNS162WraZR4mzQzC8= github.com/crc-org/crc/v2 v2.38.0/go.mod h1:HPY6grOaExM4Bhmd3T4RSkP0eizWsb8wSgoSwNsV5+k= diff --git a/pkg/machine/e2e/pull_test.go b/pkg/machine/e2e/pull_test.go deleted file mode 100644 index b0ffead981..0000000000 --- a/pkg/machine/e2e/pull_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package e2e_test - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "runtime" - - "github.com/containers/podman/v5/pkg/machine/define" - "github.com/containers/podman/v5/pkg/machine/vmconfigs" - "github.com/coreos/stream-metadata-go/fedoracoreos" - "github.com/coreos/stream-metadata-go/stream" - "github.com/sirupsen/logrus" -) - -func GetDownload(vmType define.VMType) (string, error) { - var ( - fcosstable stream.Stream - artifactType, format string - ) - url := fedoracoreos.GetStreamURL("testing") - resp, err := http.Get(url.String()) - if err != nil { - return "", err - } - body, err := io.ReadAll(resp.Body) - if err != nil { - return "", err - } - defer func() { - if err := resp.Body.Close(); err != nil { - logrus.Error(err) - } - }() - - if err := json.Unmarshal(body, &fcosstable); err != nil { - return "", err - } - - switch vmType { - case define.AppleHvVirt: - artifactType = "applehv" - format = "raw.gz" - case define.HyperVVirt: - artifactType = "hyperv" - format = "vhdx.zip" - default: - artifactType = "qemu" - format = "qcow2.xz" - } - - arch, err := vmconfigs.NormalizeMachineArch(runtime.GOARCH) - if err != nil { - return "", err - } - fcosArch, ok := fcosstable.Architectures[arch] - if !ok { - return "", fmt.Errorf("unable to pull VM image: no targetArch in stream") - } - upstreamArtifacts := fcosArch.Artifacts - if upstreamArtifacts == nil { - return "", fmt.Errorf("unable to pull VM image: no artifact in stream") - } - upstreamArtifact, ok := upstreamArtifacts[artifactType] - if !ok { - return "", fmt.Errorf("unable to pull VM image: no %s artifact in stream", artifactType) - } - formats := upstreamArtifact.Formats - if formats == nil { - return "", fmt.Errorf("unable to pull VM image: no formats in stream") - } - formatType, ok := formats[format] - if !ok { - return "", fmt.Errorf("unable to pull VM image: no %s format in stream", format) - } - disk := formatType.Disk - return disk.Location, nil -} diff --git a/vendor/github.com/coreos/stream-metadata-go/LICENSE b/vendor/github.com/coreos/stream-metadata-go/LICENSE deleted file mode 100644 index 261eeb9e9f..0000000000 --- a/vendor/github.com/coreos/stream-metadata-go/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/vendor/github.com/coreos/stream-metadata-go/fedoracoreos/fcos.go b/vendor/github.com/coreos/stream-metadata-go/fedoracoreos/fcos.go deleted file mode 100644 index 9fc2b3e2f2..0000000000 --- a/vendor/github.com/coreos/stream-metadata-go/fedoracoreos/fcos.go +++ /dev/null @@ -1,60 +0,0 @@ -// Package fedoracoreos contains APIs defining well-known -// streams for Fedora CoreOS and a method to retrieve -// the URL for a stream endpoint. -package fedoracoreos - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "net/url" - - "github.com/coreos/stream-metadata-go/fedoracoreos/internals" - "github.com/coreos/stream-metadata-go/stream" -) - -const ( - // StreamStable is the default stream - StreamStable = "stable" - // StreamTesting is what is intended to land in stable - StreamTesting = "testing" - // StreamNext usually tracks the next Fedora major version - StreamNext = "next" -) - -// GetStreamURL returns the URL for the given stream -func GetStreamURL(stream string) url.URL { - u := internals.GetBaseURL() - u.Path = fmt.Sprintf("streams/%s.json", stream) - return u -} - -func getStream(u url.URL) (*stream.Stream, error) { - resp, err := http.Get(u.String()) - if err != nil { - return nil, err - } - body, err := io.ReadAll(resp.Body) - resp.Body.Close() - if err != nil { - return nil, err - } - - var s stream.Stream - err = json.Unmarshal(body, &s) - if err != nil { - return nil, err - } - return &s, nil -} - -// FetchStream fetches and parses stream metadata for a stream -func FetchStream(streamName string) (*stream.Stream, error) { - u := GetStreamURL(streamName) - s, err := getStream(u) - if err != nil { - return nil, fmt.Errorf("failed to fetch stream %s: %w", streamName, err) - } - return s, nil -} diff --git a/vendor/github.com/coreos/stream-metadata-go/fedoracoreos/internals/fcosinternals.go b/vendor/github.com/coreos/stream-metadata-go/fedoracoreos/internals/fcosinternals.go deleted file mode 100644 index 48b6addbc8..0000000000 --- a/vendor/github.com/coreos/stream-metadata-go/fedoracoreos/internals/fcosinternals.go +++ /dev/null @@ -1,33 +0,0 @@ -// Package internals contains functions for accessing -// the underlying "releases" and coreos-assembler builds -// backing streams. General user code should avoid -// this package and use streams. -package internals - -import ( - "fmt" - "net/url" -) - -// GetBaseURL returns the base URL -func GetBaseURL() url.URL { - return url.URL{ - Scheme: "https", - Host: "builds.coreos.fedoraproject.org", - } -} - -// GetReleaseIndexURL returns the URL for the release index of a given stream. -// Avoid this unless you have a specific need to test a specific release. -func GetReleaseIndexURL(stream string) url.URL { - u := GetBaseURL() - u.Path = fmt.Sprintf("prod/streams/%s/releases.json", stream) - return u -} - -// GetCosaBuild returns the coreos-assembler build URL -func GetCosaBuild(stream, buildID, arch string) url.URL { - u := GetBaseURL() - u.Path = fmt.Sprintf("prod/streams/%s/builds/%s/%s/", stream, buildID, arch) - return u -} diff --git a/vendor/github.com/coreos/stream-metadata-go/stream/artifact_utils.go b/vendor/github.com/coreos/stream-metadata-go/stream/artifact_utils.go deleted file mode 100644 index 68ae6476b6..0000000000 --- a/vendor/github.com/coreos/stream-metadata-go/stream/artifact_utils.go +++ /dev/null @@ -1,95 +0,0 @@ -package stream - -import ( - "crypto/sha256" - "fmt" - "io" - "net/http" - "net/url" - "os" - "path" - "path/filepath" -) - -// Fetch an artifact, validating its checksum. If applicable, -// the artifact will not be decompressed. Does not -// validate GPG signature. -func (a *Artifact) Fetch(w io.Writer) error { - resp, err := http.Get(a.Location) - if err != nil { - return err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("%s returned status: %s", a.Location, resp.Status) - } - hasher := sha256.New() - reader := io.TeeReader(resp.Body, hasher) - - _, err = io.Copy(w, reader) - if err != nil { - return err - } - - // Validate sha256 checksum - foundChecksum := fmt.Sprintf("%x", hasher.Sum(nil)) - if a.Sha256 != foundChecksum { - return fmt.Errorf("checksum mismatch for %s; expected=%s found=%s", a.Location, a.Sha256, foundChecksum) - } - - return nil -} - -// Name returns the "basename" of the artifact, i.e. the contents -// after the last `/`. This can be useful when downloading to a file. -func (a *Artifact) Name() (string, error) { - loc, err := url.Parse(a.Location) - if err != nil { - return "", fmt.Errorf("failed to parse artifact url: %w", err) - } - // Note this one uses `path` since even on Windows URLs have forward slashes. - return path.Base(loc.Path), nil -} - -// Download fetches the specified artifact and saves it to the target -// directory. The full file path will be returned as a string. -// If the target file path exists, it will be overwritten. -// If the download fails, the temporary file will be deleted. -func (a *Artifact) Download(destdir string) (string, error) { - name, err := a.Name() - if err != nil { - return "", err - } - destfile := filepath.Join(destdir, name) - w, err := os.CreateTemp(destdir, ".coreos-artifact-") - if err != nil { - return "", err - } - finalized := false - defer func() { - if !finalized { - // Ignore an error to unlink - _ = os.Remove(w.Name()) - } - }() - - if err := a.Fetch(w); err != nil { - return "", err - } - if err := w.Sync(); err != nil { - return "", err - } - if err := w.Chmod(0644); err != nil { - return "", err - } - if err := w.Close(); err != nil { - return "", err - } - if err := os.Rename(w.Name(), destfile); err != nil { - return "", err - } - finalized = true - - return destfile, nil -} diff --git a/vendor/github.com/coreos/stream-metadata-go/stream/rhcos/rhcos.go b/vendor/github.com/coreos/stream-metadata-go/stream/rhcos/rhcos.go deleted file mode 100644 index 320d84b41d..0000000000 --- a/vendor/github.com/coreos/stream-metadata-go/stream/rhcos/rhcos.go +++ /dev/null @@ -1,18 +0,0 @@ -package rhcos - -// Extensions is data specific to Red Hat Enterprise Linux CoreOS -type Extensions struct { - AzureDisk *AzureDisk `json:"azure-disk,omitempty"` -} - -// AzureDisk represents an Azure disk image that can be imported -// into an image gallery or otherwise replicated, and then used -// as a boot source for virtual machines. -type AzureDisk struct { - // Release is the source release version - Release string `json:"release"` - // URL to an image already stored in Azure infrastructure - // that can be copied into an image gallery. Avoid creating VMs directly - // from this URL as that may lead to performance limitations. - URL string `json:"url,omitempty"` -} diff --git a/vendor/github.com/coreos/stream-metadata-go/stream/stream.go b/vendor/github.com/coreos/stream-metadata-go/stream/stream.go deleted file mode 100644 index 1ed9b1fd70..0000000000 --- a/vendor/github.com/coreos/stream-metadata-go/stream/stream.go +++ /dev/null @@ -1,116 +0,0 @@ -// Package stream models a CoreOS "stream", which is -// a description of the recommended set of binary images for CoreOS. Use -// this API to find cloud images, bare metal disk images, etc. -package stream - -import ( - "github.com/coreos/stream-metadata-go/stream/rhcos" -) - -// Stream contains artifacts available in a stream -type Stream struct { - Stream string `json:"stream"` - Metadata Metadata `json:"metadata"` - Architectures map[string]Arch `json:"architectures"` -} - -// Metadata for a release or stream -type Metadata struct { - LastModified string `json:"last-modified"` - Generator string `json:"generator,omitempty"` -} - -// Arch contains release details for a particular hardware architecture -type Arch struct { - Artifacts map[string]PlatformArtifacts `json:"artifacts"` - Images Images `json:"images,omitempty"` - // RHELCoreOSExtensions is data specific to Red Hat Enterprise Linux CoreOS - RHELCoreOSExtensions *rhcos.Extensions `json:"rhel-coreos-extensions,omitempty"` -} - -// PlatformArtifacts contains images for a platform -type PlatformArtifacts struct { - Release string `json:"release"` - Formats map[string]ImageFormat `json:"formats"` -} - -// ImageFormat contains all artifacts for a single OS image -type ImageFormat struct { - Disk *Artifact `json:"disk,omitempty"` - Kernel *Artifact `json:"kernel,omitempty"` - Initramfs *Artifact `json:"initramfs,omitempty"` - Rootfs *Artifact `json:"rootfs,omitempty"` -} - -// Artifact represents one image file, plus its metadata -type Artifact struct { - Location string `json:"location"` - Signature string `json:"signature,omitempty"` - Sha256 string `json:"sha256"` - UncompressedSha256 string `json:"uncompressed-sha256,omitempty"` -} - -// Images contains images available in cloud providers -type Images struct { - Aliyun *ReplicatedImage `json:"aliyun,omitempty"` - Aws *AwsImage `json:"aws,omitempty"` - Gcp *GcpImage `json:"gcp,omitempty"` - Ibmcloud *ReplicatedObject `json:"ibmcloud,omitempty"` - KubeVirt *ContainerImage `json:"kubevirt,omitempty"` - PowerVS *ReplicatedObject `json:"powervs,omitempty"` -} - -// ReplicatedImage represents an image in all regions of an AWS-like cloud -type ReplicatedImage struct { - Regions map[string]SingleImage `json:"regions,omitempty"` -} - -// SingleImage represents a globally-accessible image or an image in a -// single region of an AWS-like cloud -type SingleImage struct { - Release string `json:"release"` - Image string `json:"image"` -} - -// ContainerImage represents a tagged container image -type ContainerImage struct { - Release string `json:"release"` - // Preferred way to reference the image, which might be by tag or digest - Image string `json:"image"` - DigestRef string `json:"digest-ref"` -} - -// AwsImage is a typedef for backwards compatibility. -type AwsImage = ReplicatedImage - -// AwsRegionImage is a typedef for backwards compatibility. -type AwsRegionImage = SingleImage - -// RegionImage is a typedef for backwards compatibility. -type RegionImage = SingleImage - -// GcpImage represents a GCP cloud image -type GcpImage struct { - Release string `json:"release"` - Project string `json:"project"` - Family string `json:"family,omitempty"` - Name string `json:"name"` -} - -// ReplicatedObject represents an object in all regions of an IBMCloud-like -// cloud -type ReplicatedObject struct { - Regions map[string]SingleObject `json:"regions,omitempty"` -} - -// SingleObject represents a globally-accessible cloud storage object, or -// an object in a single region of an IBMCloud-like cloud -type SingleObject struct { - Release string `json:"release"` - Object string `json:"object"` - Bucket string `json:"bucket"` - Url string `json:"url"` -} - -// RegionObject is a typedef for backwards compatibility. -type RegionObject = SingleObject diff --git a/vendor/github.com/coreos/stream-metadata-go/stream/stream_utils.go b/vendor/github.com/coreos/stream-metadata-go/stream/stream_utils.go deleted file mode 100644 index b1ca955641..0000000000 --- a/vendor/github.com/coreos/stream-metadata-go/stream/stream_utils.go +++ /dev/null @@ -1,94 +0,0 @@ -package stream - -import "fmt" - -// FormatPrefix describes a stream+architecture combination, intended for prepending to error messages -func (st *Stream) FormatPrefix(archname string) string { - return fmt.Sprintf("%s/%s", st.Stream, archname) -} - -// GetArchitecture loads the architecture-specific builds from a stream, -// with a useful descriptive error message if the architecture is not found. -func (st *Stream) GetArchitecture(archname string) (*Arch, error) { - archdata, ok := st.Architectures[archname] - if !ok { - return nil, fmt.Errorf("stream:%s does not have architecture '%s'", st.Stream, archname) - } - return &archdata, nil -} - -// GetAliyunRegionImage returns the release data (Image ID and release ID) for a particular -// architecture and region. -func (st *Stream) GetAliyunRegionImage(archname, region string) (*SingleImage, error) { - starch, err := st.GetArchitecture(archname) - if err != nil { - return nil, err - } - aliyunimages := starch.Images.Aliyun - if aliyunimages == nil { - return nil, fmt.Errorf("%s: No Aliyun images", st.FormatPrefix(archname)) - } - var regionVal SingleImage - var ok bool - if regionVal, ok = aliyunimages.Regions[region]; !ok { - return nil, fmt.Errorf("%s: No Aliyun images in region %s", st.FormatPrefix(archname), region) - } - - return ®ionVal, nil -} - -// GetAliyunImage returns the Aliyun image for a particular architecture and region. -func (st *Stream) GetAliyunImage(archname, region string) (string, error) { - regionVal, err := st.GetAliyunRegionImage(archname, region) - if err != nil { - return "", err - } - return regionVal.Image, nil -} - -// GetAwsRegionImage returns the release data (AMI and release ID) for a particular -// architecture and region. -func (st *Stream) GetAwsRegionImage(archname, region string) (*SingleImage, error) { - starch, err := st.GetArchitecture(archname) - if err != nil { - return nil, err - } - awsimages := starch.Images.Aws - if awsimages == nil { - return nil, fmt.Errorf("%s: No AWS images", st.FormatPrefix(archname)) - } - var regionVal SingleImage - var ok bool - if regionVal, ok = awsimages.Regions[region]; !ok { - return nil, fmt.Errorf("%s: No AWS images in region %s", st.FormatPrefix(archname), region) - } - - return ®ionVal, nil -} - -// GetAMI returns the AWS machine image for a particular architecture and region. -func (st *Stream) GetAMI(archname, region string) (string, error) { - regionVal, err := st.GetAwsRegionImage(archname, region) - if err != nil { - return "", err - } - return regionVal.Image, nil -} - -// QueryDisk finds the singleton disk artifact for a given format and architecture. -func (st *Stream) QueryDisk(architectureName, artifactName, formatName string) (*Artifact, error) { - arch, err := st.GetArchitecture(architectureName) - if err != nil { - return nil, err - } - artifacts := arch.Artifacts[artifactName] - if artifacts.Release == "" { - return nil, fmt.Errorf("%s: artifact '%s' not found", st.FormatPrefix(architectureName), artifactName) - } - format := artifacts.Formats[formatName] - if format.Disk == nil { - return nil, fmt.Errorf("%s: artifact '%s' format '%s' disk not found", st.FormatPrefix(architectureName), artifactName, formatName) - } - - return format.Disk, nil -} diff --git a/vendor/modules.txt b/vendor/modules.txt index d2657f0c24..17a2ccedd0 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -423,12 +423,6 @@ github.com/coreos/go-systemd/v22/dbus github.com/coreos/go-systemd/v22/internal/dlopen github.com/coreos/go-systemd/v22/journal github.com/coreos/go-systemd/v22/sdjournal -# github.com/coreos/stream-metadata-go v0.4.4 -## explicit; go 1.18 -github.com/coreos/stream-metadata-go/fedoracoreos -github.com/coreos/stream-metadata-go/fedoracoreos/internals -github.com/coreos/stream-metadata-go/stream -github.com/coreos/stream-metadata-go/stream/rhcos # github.com/crc-org/crc/v2 v2.38.0 ## explicit; go 1.21 github.com/crc-org/crc/v2/pkg/crc/logging