You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Nov 1, 2022. It is now read-only.
Flux is unable to automate workloads with multi-arch images with manifests that do not have linux/amd64.
Logs show:
inconsistent repository metadata: missing metadata for image tag \"0.1.3\"
fluxctl list-images on a workload that has uses 0.1.3 of the image gets:
drone:cronjob/tag-latest-release-home-assistant-ldap tag-latest-release
'->
0.1.3-linux-arm64 21 May 20 09:27 UTC
0.1.3-linux-arm 21 May 20 09:28 UTC
'->
'->
'->
'->
0.1-linux-arm64 21 May 20 09:27 UTC
0.1-linux-arm 21 May 20 09:28 UTC
To Reproduce
Steps to reproduce the behaviour:
Deploy flux with stable helm chart
Build and push a multi-arch image 0.1.0 with a manifest linking to linux/arm/v7 and linux/arm64/v8 to Docker Hub
Create a deployment with the multi-arch image on an linux/arm or linux/arm64 node
Set up workload automation with semver:~0
Build and push the same multi-arch image with tag 0.1.1
Follow flux logs and see that the workload will not update the container image to 0.1.1
Expected behavior
Workload automation should update container images that do not have linux/amd64 in the manifest.
Logs
On deleting and recreating flux and memcached, one would observe this:
I've checked pkg/registry/client.go and found this:
case*manifestlist.DeserializedManifestList:
varlist manifestlist.ManifestList=deserialised.ManifestList// TODO(michael): is it valid to just pick the first one that matches?for_, m:=rangelist.Manifests {
ifm.Platform.OS=="linux"&&m.Platform.Architecture=="amd64" {
manifest, fetchErr=manifests.Get(ctx, m.Digest, digestOpt)
goto interpret
}
}
entry:=ImageEntry{}
entry.ExcludedReason="no suitable manifest (linux amd64) in manifestlist"returnentry, nil
I'm not versed in Go, but based on what I see, if there are no manifests with linux/amd64, an empty ImageEntry with no Info will be returned with a nil value for error
This would trigger the error in pkg/image/image.go:
Correct me if I'm wrong but does this mean that for an image manifest to be processed/cached correctly, flux needs the presence of a linux/amd64 entry?
IMO, a valid manifest should not need linux/amd64 but should depend on the os/architecture that the workload runs on.
There have been some community efforts to build flux for other architectures, most notably, arm and arm64 such as #1761, so I see no danger in processing images that aren't the same as the official flux image.
Describe the bug
Flux is unable to automate workloads with multi-arch images with manifests that do not have
linux/amd64
.Logs show:
fluxctl list-images
on a workload that has uses0.1.3
of the image gets:To Reproduce
Steps to reproduce the behaviour:
0.1.0
with a manifest linking tolinux/arm/v7
andlinux/arm64/v8
to Docker Hublinux/arm
orlinux/arm64
nodesemver:~0
0.1.1
0.1.1
Expected behavior
Workload automation should update container images that do not have
linux/amd64
in the manifest.Logs
On deleting and recreating flux and memcached, one would observe this:
Followed by:
Additional context
The text was updated successfully, but these errors were encountered: