Files
podman/pkg/machine/fcos_arm64.go
baude b6089a5e99 resolve proper aarch64 image names
when automatically downloading fcos for the Apple M1, we needed
to replace a statically defined URL with the dynamically
determined one.

also, it appears boolean qemu options `server` and `onwait` are
not defined as `server=on` and `wait=off`.

[NO TESTS NEEDED]

Signed-off-by: baude <bbaude@redhat.com>
2021-03-29 20:20:39 -05:00

178 lines
7.2 KiB
Go

package machine
import (
"encoding/json"
"io/ioutil"
"net/http"
url2 "net/url"
"github.com/sirupsen/logrus"
)
const aarchBaseURL = "https://fedorapeople.org/groups/fcos-images/builds/latest/aarch64/"
// Total hack until automation is possible.
// We need a proper json file at least to automate
func getFCOSDownload() (*fcosDownloadInfo, error) {
meta := Build{}
resp, err := http.Get(aarchBaseURL + "meta.json")
if err != nil {
return nil, err
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
defer func() {
if err := resp.Body.Close(); err != nil {
logrus.Error(err)
}
}()
if err := json.Unmarshal(body, &meta); err != nil {
return nil, err
}
pathURL, err := url2.Parse(meta.BuildArtifacts.Qemu.Path)
if err != nil {
return nil, err
}
baseURL, err := url2.Parse(aarchBaseURL)
if err != nil {
return nil, err
}
pullURL := baseURL.ResolveReference(pathURL)
return &fcosDownloadInfo{
Location: pullURL.String(),
Release: "",
Sha256Sum: meta.BuildArtifacts.Qemu.Sha256,
}, nil
}
/*
All of this can be nuked when fcos upstream generates a proper meta data file for aarch.
*/
type AliyunImage struct {
ImageID string `json:"id"`
Region string `json:"name"`
}
type Amis struct {
Hvm string `json:"hvm"`
Region string `json:"name"`
Snapshot string `json:"snapshot"`
}
type Artifact struct {
Path string `json:"path"`
Sha256 string `json:"sha256"`
SizeInBytes float64 `json:"size,omitempty"`
UncompressedSha256 string `json:"uncompressed-sha256,omitempty"`
UncompressedSize int `json:"uncompressed-size,omitempty"`
}
type Build struct {
AlibabaAliyunUploads []AliyunImage `json:"aliyun,omitempty"`
Amis []Amis `json:"amis,omitempty"`
Architecture string `json:"coreos-assembler.basearch,omitempty"`
Azure *Cloudartifact `json:"azure,omitempty"`
BuildArtifacts *BuildArtifacts `json:"images,omitempty"`
BuildID string `json:"buildid"`
BuildRef string `json:"ref,omitempty"`
BuildSummary string `json:"summary"`
BuildTimeStamp string `json:"coreos-assembler.build-timestamp,omitempty"`
BuildURL string `json:"build-url,omitempty"`
ConfigGitRev string `json:"coreos-assembler.config-gitrev,omitempty"`
ContainerConfigGit *Git `json:"coreos-assembler.container-config-git,omitempty"`
CoreOsSource string `json:"coreos-assembler.code-source,omitempty"`
CosaContainerImageGit *Git `json:"coreos-assembler.container-image-git,omitempty"`
CosaDelayedMetaMerge bool `json:"coreos-assembler.delayed-meta-merge,omitempty"`
CosaImageChecksum string `json:"coreos-assembler.image-config-checksum,omitempty"`
CosaImageVersion int `json:"coreos-assembler.image-genver,omitempty"`
Extensions *Extensions `json:"extensions,omitempty"`
FedoraCoreOsParentCommit string `json:"fedora-coreos.parent-commit,omitempty"`
FedoraCoreOsParentVersion string `json:"fedora-coreos.parent-version,omitempty"`
Gcp *Gcp `json:"gcp,omitempty"`
GitDirty string `json:"coreos-assembler.config-dirty,omitempty"`
ImageInputChecksum string `json:"coreos-assembler.image-input-checksum,omitempty"`
InputHasOfTheRpmOstree string `json:"rpm-ostree-inputhash"`
MetaStamp float64 `json:"coreos-assembler.meta-stamp,omitempty"`
Name string `json:"name"`
Oscontainer *Image `json:"oscontainer,omitempty"`
OstreeCommit string `json:"ostree-commit"`
OstreeContentBytesWritten int `json:"ostree-content-bytes-written,omitempty"`
OstreeContentChecksum string `json:"ostree-content-checksum"`
OstreeNCacheHits int `json:"ostree-n-cache-hits,omitempty"`
OstreeNContentTotal int `json:"ostree-n-content-total,omitempty"`
OstreeNContentWritten int `json:"ostree-n-content-written,omitempty"`
OstreeNMetadataTotal int `json:"ostree-n-metadata-total,omitempty"`
OstreeNMetadataWritten int `json:"ostree-n-metadata-written,omitempty"`
OstreeTimestamp string `json:"ostree-timestamp"`
OstreeVersion string `json:"ostree-version"`
OverridesActive bool `json:"coreos-assembler.overrides-active,omitempty"`
PkgdiffAgainstParent PackageSetDifferences `json:"parent-pkgdiff,omitempty"`
PkgdiffBetweenBuilds PackageSetDifferences `json:"pkgdiff,omitempty"`
ReleasePayload *Image `json:"release-payload,omitempty"`
}
type BuildArtifacts struct {
Aliyun *Artifact `json:"aliyun,omitempty"`
Aws *Artifact `json:"aws,omitempty"`
Azure *Artifact `json:"azure,omitempty"`
AzureStack *Artifact `json:"azurestack,omitempty"`
Dasd *Artifact `json:"dasd,omitempty"`
DigitalOcean *Artifact `json:"digitalocean,omitempty"`
Exoscale *Artifact `json:"exoscale,omitempty"`
Gcp *Artifact `json:"gcp,omitempty"`
IbmCloud *Artifact `json:"ibmcloud,omitempty"`
Initramfs *Artifact `json:"initramfs,omitempty"`
Iso *Artifact `json:"iso,omitempty"`
Kernel *Artifact `json:"kernel,omitempty"`
LiveInitramfs *Artifact `json:"live-initramfs,omitempty"`
LiveIso *Artifact `json:"live-iso,omitempty"`
LiveKernel *Artifact `json:"live-kernel,omitempty"`
LiveRootfs *Artifact `json:"live-rootfs,omitempty"`
Metal *Artifact `json:"metal,omitempty"`
Metal4KNative *Artifact `json:"metal4k,omitempty"`
OpenStack *Artifact `json:"openstack,omitempty"`
Ostree Artifact `json:"ostree"`
Qemu *Artifact `json:"qemu,omitempty"`
Vmware *Artifact `json:"vmware,omitempty"`
Vultr *Artifact `json:"vultr,omitempty"`
}
type Cloudartifact struct {
Image string `json:"image"`
URL string `json:"url"`
}
type Extensions struct {
Manifest map[string]interface{} `json:"manifest"`
Path string `json:"path"`
RpmOstreeState string `json:"rpm-ostree-state"`
Sha256 string `json:"sha256"`
}
type Gcp struct {
ImageFamily string `json:"family,omitempty"`
ImageName string `json:"image"`
ImageProject string `json:"project,omitempty"`
URL string `json:"url"`
}
type Git struct {
Branch string `json:"branch,omitempty"`
Commit string `json:"commit"`
Dirty string `json:"dirty,omitempty"`
Origin string `json:"origin"`
}
type Image struct {
Comment string `json:"comment,omitempty"`
Digest string `json:"digest"`
Image string `json:"image"`
}
type Items interface{}
type PackageSetDifferences []Items