mirror of
https://github.com/containers/podman.git
synced 2025-06-23 18:59:30 +08:00
Merge pull request #17624 from containers/dependabot/go_modules/github.com/coreos/stream-metadata-go-0.4.1
build(deps): bump github.com/coreos/stream-metadata-go from 0.0.0-20210225230131-70edb9eb47b3 to 0.4.1
This commit is contained in:
2
go.mod
2
go.mod
@ -19,7 +19,7 @@ require (
|
|||||||
github.com/containers/psgo v1.8.0
|
github.com/containers/psgo v1.8.0
|
||||||
github.com/containers/storage v1.45.4
|
github.com/containers/storage v1.45.4
|
||||||
github.com/coreos/go-systemd/v22 v22.5.0
|
github.com/coreos/go-systemd/v22 v22.5.0
|
||||||
github.com/coreos/stream-metadata-go v0.0.0-20210225230131-70edb9eb47b3
|
github.com/coreos/stream-metadata-go v0.4.1
|
||||||
github.com/cyphar/filepath-securejoin v0.2.3
|
github.com/cyphar/filepath-securejoin v0.2.3
|
||||||
github.com/digitalocean/go-qemu v0.0.0-20210326154740-ac9e0b687001
|
github.com/digitalocean/go-qemu v0.0.0-20210326154740-ac9e0b687001
|
||||||
github.com/docker/docker v23.0.1+incompatible
|
github.com/docker/docker v23.0.1+incompatible
|
||||||
|
4
go.sum
4
go.sum
@ -308,8 +308,8 @@ github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8
|
|||||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/coreos/stream-metadata-go v0.0.0-20210225230131-70edb9eb47b3 h1:0JspqV66RwYqYfvi8lCUoL5zUZMh9uN4hx/J5+NRXIE=
|
github.com/coreos/stream-metadata-go v0.4.1 h1:5fCXpH/cDi8cR2hEpkc5dS8+Kp23tZeuKfSnRql5VOI=
|
||||||
github.com/coreos/stream-metadata-go v0.0.0-20210225230131-70edb9eb47b3/go.mod h1:RTjQyHgO/G37oJ3qnqYK6Z4TPZ5EsaabOtfMjVXmgko=
|
github.com/coreos/stream-metadata-go v0.4.1/go.mod h1:Lwjwqf1zwnVa7uy/v/KW28eUkda4jnOTOW8sx9s4kzc=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
|
33
vendor/github.com/coreos/stream-metadata-go/fedoracoreos/fcos.go
generated
vendored
33
vendor/github.com/coreos/stream-metadata-go/fedoracoreos/fcos.go
generated
vendored
@ -4,10 +4,14 @@
|
|||||||
package fedoracoreos
|
package fedoracoreos
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/coreos/stream-metadata-go/fedoracoreos/internals"
|
"github.com/coreos/stream-metadata-go/fedoracoreos/internals"
|
||||||
|
"github.com/coreos/stream-metadata-go/stream"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -25,3 +29,32 @@ func GetStreamURL(stream string) url.URL {
|
|||||||
u.Path = fmt.Sprintf("streams/%s.json", stream)
|
u.Path = fmt.Sprintf("streams/%s.json", stream)
|
||||||
return u
|
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
|
||||||
|
}
|
||||||
|
68
vendor/github.com/coreos/stream-metadata-go/release/release.go
generated
vendored
68
vendor/github.com/coreos/stream-metadata-go/release/release.go
generated
vendored
@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Index models the release index:
|
// Index models the release index:
|
||||||
// https://github.com/coreos/fedora-coreos-tracker/tree/master/metadata/release-index
|
// https://github.com/coreos/fedora-coreos-tracker/tree/main/metadata/release-index
|
||||||
type Index struct {
|
type Index struct {
|
||||||
Note string `json:"note"` // used to note to users not to consume the release metadata index
|
Note string `json:"note"` // used to note to users not to consume the release metadata index
|
||||||
Releases []IndexRelease `json:"releases"`
|
Releases []IndexRelease `json:"releases"`
|
||||||
@ -52,18 +52,24 @@ type Arch struct {
|
|||||||
|
|
||||||
// Media contains release details for various platforms
|
// Media contains release details for various platforms
|
||||||
type Media struct {
|
type Media struct {
|
||||||
Aliyun *PlatformBase `json:"aliyun"`
|
Aliyun *PlatformAliyun `json:"aliyun"`
|
||||||
Aws *PlatformAws `json:"aws"`
|
Aws *PlatformAws `json:"aws"`
|
||||||
Azure *PlatformBase `json:"azure"`
|
Azure *PlatformBase `json:"azure"`
|
||||||
Digitalocean *PlatformBase `json:"digitalocean"`
|
AzureStack *PlatformBase `json:"azurestack"`
|
||||||
Exoscale *PlatformBase `json:"exoscale"`
|
Digitalocean *PlatformBase `json:"digitalocean"`
|
||||||
Gcp *PlatformGcp `json:"gcp"`
|
Exoscale *PlatformBase `json:"exoscale"`
|
||||||
Ibmcloud *PlatformBase `json:"ibmcloud"`
|
Gcp *PlatformGcp `json:"gcp"`
|
||||||
Metal *PlatformBase `json:"metal"`
|
Ibmcloud *PlatformIBMCloud `json:"ibmcloud"`
|
||||||
Openstack *PlatformBase `json:"openstack"`
|
KubeVirt *PlatformKubeVirt `json:"kubevirt"`
|
||||||
Qemu *PlatformBase `json:"qemu"`
|
Metal *PlatformBase `json:"metal"`
|
||||||
Vmware *PlatformBase `json:"vmware"`
|
Nutanix *PlatformBase `json:"nutanix"`
|
||||||
Vultr *PlatformBase `json:"vultr"`
|
Openstack *PlatformBase `json:"openstack"`
|
||||||
|
PowerVS *PlatformIBMCloud `json:"powervs"`
|
||||||
|
Qemu *PlatformBase `json:"qemu"`
|
||||||
|
QemuSecex *PlatformBase `json:"qemu-secex"`
|
||||||
|
VirtualBox *PlatformBase `json:"virtualbox"`
|
||||||
|
Vmware *PlatformBase `json:"vmware"`
|
||||||
|
Vultr *PlatformBase `json:"vultr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// PlatformBase with no cloud images
|
// PlatformBase with no cloud images
|
||||||
@ -71,6 +77,12 @@ type PlatformBase struct {
|
|||||||
Artifacts map[string]ImageFormat `json:"artifacts"`
|
Artifacts map[string]ImageFormat `json:"artifacts"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PlatformAliyun contains Aliyun image information
|
||||||
|
type PlatformAliyun struct {
|
||||||
|
PlatformBase
|
||||||
|
Images map[string]CloudImage `json:"images"`
|
||||||
|
}
|
||||||
|
|
||||||
// PlatformAws contains AWS image information
|
// PlatformAws contains AWS image information
|
||||||
type PlatformAws struct {
|
type PlatformAws struct {
|
||||||
PlatformBase
|
PlatformBase
|
||||||
@ -83,6 +95,18 @@ type PlatformGcp struct {
|
|||||||
Image *GcpImage `json:"image"`
|
Image *GcpImage `json:"image"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PlatformIBMCloud IBMCloud/PowerVS image detail
|
||||||
|
type PlatformIBMCloud struct {
|
||||||
|
PlatformBase
|
||||||
|
Images map[string]IBMCloudImage `json:"images"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PlatformKubeVirt containerDisk metadata
|
||||||
|
type PlatformKubeVirt struct {
|
||||||
|
PlatformBase
|
||||||
|
Image *ContainerImage `json:"image"`
|
||||||
|
}
|
||||||
|
|
||||||
// ImageFormat contains all artifacts for a single OS image
|
// ImageFormat contains all artifacts for a single OS image
|
||||||
type ImageFormat struct {
|
type ImageFormat struct {
|
||||||
Disk *Artifact `json:"disk,omitempty"`
|
Disk *Artifact `json:"disk,omitempty"`
|
||||||
@ -104,9 +128,23 @@ type CloudImage struct {
|
|||||||
Image string `json:"image"`
|
Image string `json:"image"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ContainerImage represents a tagged container image
|
||||||
|
type ContainerImage struct {
|
||||||
|
// Preferred way to reference the image, which might be by tag or digest
|
||||||
|
Image string `json:"image"`
|
||||||
|
DigestRef string `json:"digest-ref"`
|
||||||
|
}
|
||||||
|
|
||||||
// GcpImage represents a GCP cloud image
|
// GcpImage represents a GCP cloud image
|
||||||
type GcpImage struct {
|
type GcpImage struct {
|
||||||
Project string `json:"project,omitempty"`
|
Project string `json:"project"`
|
||||||
Family string `json:"family,omitempty"`
|
Family string `json:"family,omitempty"`
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// IBMCloudImage represents an IBMCloud/PowerVS cloud object - which is an ova image for PowerVS and a qcow for IBMCloud in the cloud object storage bucket
|
||||||
|
type IBMCloudImage struct {
|
||||||
|
Object string `json:"object"`
|
||||||
|
Bucket string `json:"bucket"`
|
||||||
|
Url string `json:"url"`
|
||||||
}
|
}
|
||||||
|
114
vendor/github.com/coreos/stream-metadata-go/release/translate.go
generated
vendored
114
vendor/github.com/coreos/stream-metadata-go/release/translate.go
generated
vendored
@ -39,18 +39,37 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch {
|
|||||||
if relRHCOSExt != nil {
|
if relRHCOSExt != nil {
|
||||||
rhcosExt = &rhcos.Extensions{}
|
rhcosExt = &rhcos.Extensions{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if releaseArch.Media.Aliyun != nil {
|
||||||
|
artifacts["aliyun"] = stream.PlatformArtifacts{
|
||||||
|
Release: rel.Release,
|
||||||
|
Formats: mapFormats(releaseArch.Media.Aliyun.Artifacts),
|
||||||
|
}
|
||||||
|
aliyunImages := stream.ReplicatedImage{
|
||||||
|
Regions: make(map[string]stream.SingleImage),
|
||||||
|
}
|
||||||
|
if releaseArch.Media.Aliyun.Images != nil {
|
||||||
|
for region, image := range releaseArch.Media.Aliyun.Images {
|
||||||
|
si := stream.SingleImage{Release: rel.Release, Image: image.Image}
|
||||||
|
aliyunImages.Regions[region] = si
|
||||||
|
|
||||||
|
}
|
||||||
|
cloudImages.Aliyun = &aliyunImages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if releaseArch.Media.Aws != nil {
|
if releaseArch.Media.Aws != nil {
|
||||||
artifacts["aws"] = stream.PlatformArtifacts{
|
artifacts["aws"] = stream.PlatformArtifacts{
|
||||||
Release: rel.Release,
|
Release: rel.Release,
|
||||||
Formats: mapFormats(releaseArch.Media.Aws.Artifacts),
|
Formats: mapFormats(releaseArch.Media.Aws.Artifacts),
|
||||||
}
|
}
|
||||||
awsAmis := stream.AwsImage{
|
awsAmis := stream.ReplicatedImage{
|
||||||
Regions: make(map[string]stream.AwsRegionImage),
|
Regions: make(map[string]stream.SingleImage),
|
||||||
}
|
}
|
||||||
if releaseArch.Media.Aws.Images != nil {
|
if releaseArch.Media.Aws.Images != nil {
|
||||||
for region, ami := range releaseArch.Media.Aws.Images {
|
for region, ami := range releaseArch.Media.Aws.Images {
|
||||||
ri := stream.AwsRegionImage{Release: rel.Release, Image: ami.Image}
|
si := stream.SingleImage{Release: rel.Release, Image: ami.Image}
|
||||||
awsAmis.Regions[region] = ri
|
awsAmis.Regions[region] = si
|
||||||
|
|
||||||
}
|
}
|
||||||
cloudImages.Aws = &awsAmis
|
cloudImages.Aws = &awsAmis
|
||||||
@ -76,10 +95,10 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch {
|
|||||||
// See https://github.com/coreos/stream-metadata-go/issues/13
|
// See https://github.com/coreos/stream-metadata-go/issues/13
|
||||||
}
|
}
|
||||||
|
|
||||||
if releaseArch.Media.Aliyun != nil {
|
if releaseArch.Media.AzureStack != nil {
|
||||||
artifacts["aliyun"] = stream.PlatformArtifacts{
|
artifacts["azurestack"] = stream.PlatformArtifacts{
|
||||||
Release: rel.Release,
|
Release: rel.Release,
|
||||||
Formats: mapFormats(releaseArch.Media.Aliyun.Artifacts),
|
Formats: mapFormats(releaseArch.Media.AzureStack.Artifacts),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,6 +124,7 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch {
|
|||||||
|
|
||||||
if releaseArch.Media.Gcp.Image != nil {
|
if releaseArch.Media.Gcp.Image != nil {
|
||||||
cloudImages.Gcp = &stream.GcpImage{
|
cloudImages.Gcp = &stream.GcpImage{
|
||||||
|
Release: rel.Release,
|
||||||
Name: releaseArch.Media.Gcp.Image.Name,
|
Name: releaseArch.Media.Gcp.Image.Name,
|
||||||
Family: releaseArch.Media.Gcp.Image.Family,
|
Family: releaseArch.Media.Gcp.Image.Family,
|
||||||
Project: releaseArch.Media.Gcp.Image.Project,
|
Project: releaseArch.Media.Gcp.Image.Project,
|
||||||
@ -112,6 +132,20 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if releaseArch.Media.KubeVirt != nil {
|
||||||
|
artifacts["kubevirt"] = stream.PlatformArtifacts{
|
||||||
|
Release: rel.Release,
|
||||||
|
Formats: mapFormats(releaseArch.Media.KubeVirt.Artifacts),
|
||||||
|
}
|
||||||
|
if releaseArch.Media.KubeVirt.Image != nil {
|
||||||
|
cloudImages.KubeVirt = &stream.ContainerImage{
|
||||||
|
Release: rel.Release,
|
||||||
|
Image: releaseArch.Media.KubeVirt.Image.Image,
|
||||||
|
DigestRef: releaseArch.Media.KubeVirt.Image.DigestRef,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if releaseArch.Media.Digitalocean != nil {
|
if releaseArch.Media.Digitalocean != nil {
|
||||||
artifacts["digitalocean"] = stream.PlatformArtifacts{
|
artifacts["digitalocean"] = stream.PlatformArtifacts{
|
||||||
Release: rel.Release,
|
Release: rel.Release,
|
||||||
@ -130,6 +164,22 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch {
|
|||||||
Release: rel.Release,
|
Release: rel.Release,
|
||||||
Formats: mapFormats(releaseArch.Media.Ibmcloud.Artifacts),
|
Formats: mapFormats(releaseArch.Media.Ibmcloud.Artifacts),
|
||||||
}
|
}
|
||||||
|
ibmcloudObjects := stream.ReplicatedObject{
|
||||||
|
Regions: make(map[string]stream.SingleObject),
|
||||||
|
}
|
||||||
|
if releaseArch.Media.Ibmcloud.Images != nil {
|
||||||
|
for region, object := range releaseArch.Media.Ibmcloud.Images {
|
||||||
|
so := stream.SingleObject{
|
||||||
|
Release: rel.Release,
|
||||||
|
Object: object.Object,
|
||||||
|
Bucket: object.Bucket,
|
||||||
|
Url: object.Url,
|
||||||
|
}
|
||||||
|
ibmcloudObjects.Regions[region] = so
|
||||||
|
|
||||||
|
}
|
||||||
|
cloudImages.Ibmcloud = &ibmcloudObjects
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if releaseArch.Media.Packet != nil {
|
// if releaseArch.Media.Packet != nil {
|
||||||
@ -143,6 +193,13 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch {
|
|||||||
// cloudImages.Packet = &packetImage
|
// cloudImages.Packet = &packetImage
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
if releaseArch.Media.Nutanix != nil {
|
||||||
|
artifacts["nutanix"] = stream.PlatformArtifacts{
|
||||||
|
Release: rel.Release,
|
||||||
|
Formats: mapFormats(releaseArch.Media.Nutanix.Artifacts),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if releaseArch.Media.Openstack != nil {
|
if releaseArch.Media.Openstack != nil {
|
||||||
artifacts["openstack"] = stream.PlatformArtifacts{
|
artifacts["openstack"] = stream.PlatformArtifacts{
|
||||||
Release: rel.Release,
|
Release: rel.Release,
|
||||||
@ -150,6 +207,29 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if releaseArch.Media.PowerVS != nil {
|
||||||
|
artifacts["powervs"] = stream.PlatformArtifacts{
|
||||||
|
Release: rel.Release,
|
||||||
|
Formats: mapFormats(releaseArch.Media.PowerVS.Artifacts),
|
||||||
|
}
|
||||||
|
powervsObjects := stream.ReplicatedObject{
|
||||||
|
Regions: make(map[string]stream.SingleObject),
|
||||||
|
}
|
||||||
|
if releaseArch.Media.PowerVS.Images != nil {
|
||||||
|
for region, object := range releaseArch.Media.PowerVS.Images {
|
||||||
|
so := stream.SingleObject{
|
||||||
|
Release: rel.Release,
|
||||||
|
Object: object.Object,
|
||||||
|
Bucket: object.Bucket,
|
||||||
|
Url: object.Url,
|
||||||
|
}
|
||||||
|
powervsObjects.Regions[region] = so
|
||||||
|
|
||||||
|
}
|
||||||
|
cloudImages.PowerVS = &powervsObjects
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if releaseArch.Media.Qemu != nil {
|
if releaseArch.Media.Qemu != nil {
|
||||||
artifacts["qemu"] = stream.PlatformArtifacts{
|
artifacts["qemu"] = stream.PlatformArtifacts{
|
||||||
Release: rel.Release,
|
Release: rel.Release,
|
||||||
@ -157,13 +237,19 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if releaseArch.Media.Virtualbox != nil {
|
if releaseArch.Media.QemuSecex != nil {
|
||||||
// virtualbox := StreamMediaDetails{
|
artifacts["qemu-secex"] = stream.PlatformArtifacts{
|
||||||
// Release: rel.Release,
|
Release: rel.Release,
|
||||||
// Formats: releaseArch.Media.Virtualbox.Artifacts,
|
Formats: mapFormats(releaseArch.Media.QemuSecex.Artifacts),
|
||||||
// }
|
}
|
||||||
// artifacts.Virtualbox = &virtualbox
|
}
|
||||||
// }
|
|
||||||
|
if releaseArch.Media.VirtualBox != nil {
|
||||||
|
artifacts["virtualbox"] = stream.PlatformArtifacts{
|
||||||
|
Release: rel.Release,
|
||||||
|
Formats: mapFormats(releaseArch.Media.VirtualBox.Artifacts),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if releaseArch.Media.Vmware != nil {
|
if releaseArch.Media.Vmware != nil {
|
||||||
artifacts["vmware"] = stream.PlatformArtifacts{
|
artifacts["vmware"] = stream.PlatformArtifacts{
|
||||||
|
95
vendor/github.com/coreos/stream-metadata-go/stream/artifact_utils.go
generated
vendored
Normal file
95
vendor/github.com/coreos/stream-metadata-go/stream/artifact_utils.go
generated
vendored
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
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
|
||||||
|
}
|
62
vendor/github.com/coreos/stream-metadata-go/stream/stream.go
generated
vendored
62
vendor/github.com/coreos/stream-metadata-go/stream/stream.go
generated
vendored
@ -17,6 +17,7 @@ type Stream struct {
|
|||||||
// Metadata for a release or stream
|
// Metadata for a release or stream
|
||||||
type Metadata struct {
|
type Metadata struct {
|
||||||
LastModified string `json:"last-modified"`
|
LastModified string `json:"last-modified"`
|
||||||
|
Generator string `json:"generator,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Arch contains release details for a particular hardware architecture
|
// Arch contains release details for a particular hardware architecture
|
||||||
@ -44,31 +45,72 @@ type ImageFormat struct {
|
|||||||
// Artifact represents one image file, plus its metadata
|
// Artifact represents one image file, plus its metadata
|
||||||
type Artifact struct {
|
type Artifact struct {
|
||||||
Location string `json:"location"`
|
Location string `json:"location"`
|
||||||
Signature string `json:"signature"`
|
Signature string `json:"signature,omitempty"`
|
||||||
Sha256 string `json:"sha256"`
|
Sha256 string `json:"sha256"`
|
||||||
UncompressedSha256 string `json:"uncompressed-sha256,omitempty"`
|
UncompressedSha256 string `json:"uncompressed-sha256,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Images contains images available in cloud providers
|
// Images contains images available in cloud providers
|
||||||
type Images struct {
|
type Images struct {
|
||||||
Aws *AwsImage `json:"aws,omitempty"`
|
Aliyun *ReplicatedImage `json:"aliyun,omitempty"`
|
||||||
Gcp *GcpImage `json:"gcp,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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// AwsImage represents an image across all AWS regions
|
// ReplicatedImage represents an image in all regions of an AWS-like cloud
|
||||||
type AwsImage struct {
|
type ReplicatedImage struct {
|
||||||
Regions map[string]AwsRegionImage `json:"regions,omitempty"`
|
Regions map[string]SingleImage `json:"regions,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// AwsRegionImage represents an image in one AWS region
|
// SingleImage represents a globally-accessible image or an image in a
|
||||||
type AwsRegionImage struct {
|
// single region of an AWS-like cloud
|
||||||
|
type SingleImage struct {
|
||||||
Release string `json:"release"`
|
Release string `json:"release"`
|
||||||
Image string `json:"image"`
|
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
|
// GcpImage represents a GCP cloud image
|
||||||
type GcpImage struct {
|
type GcpImage struct {
|
||||||
Project string `json:"project,omitempty"`
|
Release string `json:"release"`
|
||||||
|
Project string `json:"project"`
|
||||||
Family string `json:"family,omitempty"`
|
Family string `json:"family,omitempty"`
|
||||||
Name string `json:"name,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
|
||||||
|
51
vendor/github.com/coreos/stream-metadata-go/stream/stream_utils.go
generated
vendored
51
vendor/github.com/coreos/stream-metadata-go/stream/stream_utils.go
generated
vendored
@ -17,9 +17,38 @@ func (st *Stream) GetArchitecture(archname string) (*Arch, error) {
|
|||||||
return &archdata, nil
|
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
|
// GetAwsRegionImage returns the release data (AMI and release ID) for a particular
|
||||||
// architecture and region.
|
// architecture and region.
|
||||||
func (st *Stream) GetAwsRegionImage(archname, region string) (*AwsRegionImage, error) {
|
func (st *Stream) GetAwsRegionImage(archname, region string) (*SingleImage, error) {
|
||||||
starch, err := st.GetArchitecture(archname)
|
starch, err := st.GetArchitecture(archname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -28,7 +57,7 @@ func (st *Stream) GetAwsRegionImage(archname, region string) (*AwsRegionImage, e
|
|||||||
if awsimages == nil {
|
if awsimages == nil {
|
||||||
return nil, fmt.Errorf("%s: No AWS images", st.FormatPrefix(archname))
|
return nil, fmt.Errorf("%s: No AWS images", st.FormatPrefix(archname))
|
||||||
}
|
}
|
||||||
var regionVal AwsRegionImage
|
var regionVal SingleImage
|
||||||
var ok bool
|
var ok bool
|
||||||
if regionVal, ok = awsimages.Regions[region]; !ok {
|
if regionVal, ok = awsimages.Regions[region]; !ok {
|
||||||
return nil, fmt.Errorf("%s: No AWS images in region %s", st.FormatPrefix(archname), region)
|
return nil, fmt.Errorf("%s: No AWS images in region %s", st.FormatPrefix(archname), region)
|
||||||
@ -45,3 +74,21 @@ func (st *Stream) GetAMI(archname, region string) (string, error) {
|
|||||||
}
|
}
|
||||||
return regionVal.Image, nil
|
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
|
||||||
|
}
|
||||||
|
4
vendor/modules.txt
vendored
4
vendor/modules.txt
vendored
@ -338,8 +338,8 @@ github.com/coreos/go-systemd/v22/dbus
|
|||||||
github.com/coreos/go-systemd/v22/internal/dlopen
|
github.com/coreos/go-systemd/v22/internal/dlopen
|
||||||
github.com/coreos/go-systemd/v22/journal
|
github.com/coreos/go-systemd/v22/journal
|
||||||
github.com/coreos/go-systemd/v22/sdjournal
|
github.com/coreos/go-systemd/v22/sdjournal
|
||||||
# github.com/coreos/stream-metadata-go v0.0.0-20210225230131-70edb9eb47b3
|
# github.com/coreos/stream-metadata-go v0.4.1
|
||||||
## explicit; go 1.15
|
## explicit; go 1.17
|
||||||
github.com/coreos/stream-metadata-go/fedoracoreos
|
github.com/coreos/stream-metadata-go/fedoracoreos
|
||||||
github.com/coreos/stream-metadata-go/fedoracoreos/internals
|
github.com/coreos/stream-metadata-go/fedoracoreos/internals
|
||||||
github.com/coreos/stream-metadata-go/release
|
github.com/coreos/stream-metadata-go/release
|
||||||
|
Reference in New Issue
Block a user