Skip to content

Commit 60d6d1a

Browse files
committed
MCO-1957: OSImageStream gathering from ReleaseImage
1 parent 07bdde1 commit 60d6d1a

File tree

96 files changed

+6366
-676
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+6366
-676
lines changed

cmd/machine-config-operator/bootstrap.go

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"os"
77

8+
"github.com/openshift/machine-config-operator/pkg/controller/osimagestream"
89
"github.com/spf13/cobra"
910
"k8s.io/klog/v2"
1011

@@ -82,6 +83,7 @@ func init() {
8283
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.haproxyImage, "haproxy-image", "", "Image for haproxy.")
8384
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.baremetalRuntimeCfgImage, "baremetal-runtimecfg-image", "", "Image for baremetal-runtimecfg.")
8485
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.oauthProxyImage, "oauth-proxy-image", "", "Image for origin oauth proxy.")
86+
// TODO: @pablintino I'm not sure who's passing the baseos options
8587
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.baseOSContainerImage, "baseos-image", "", "ostree-bootable container image reference")
8688
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.baseOSExtensionsContainerImage, "baseos-extensions-image", "", "Image with extensions")
8789
bootstrapCmd.PersistentFlags().StringVar(&bootstrapOpts.kubeRbacProxyImage, "kube-rbac-proxy-image", "", "Image for origin kube-rbac proxy.")
@@ -118,20 +120,14 @@ func runBootstrapCmd(_ *cobra.Command, _ []string) {
118120
// To help debugging, immediately log version
119121
klog.Infof("Version: %+v (%s)", version.Raw, version.Hash)
120122

121-
baseOSContainerImageTag := "rhel-coreos"
122-
if version.IsFCOS() {
123-
baseOSContainerImageTag = "fedora-coreos"
124-
} else if version.IsSCOS() {
125-
baseOSContainerImageTag = "stream-coreos"
126-
}
127-
123+
var imgstream *imagev1.ImageStream
128124
if bootstrapOpts.imageReferences != "" {
129125
imageRefData, err := os.ReadFile(bootstrapOpts.imageReferences)
130126
if err != nil {
131127
klog.Fatalf("failed to read %s: %v", bootstrapOpts.imageReferences, err)
132128
}
133129

134-
imgstream := resourceread.ReadImageStreamV1OrDie(imageRefData)
130+
imgstream = resourceread.ReadImageStreamV1OrDie(imageRefData)
135131

136132
bootstrapOpts.mcoImage = findImageOrDie(imgstream, "machine-config-operator")
137133
bootstrapOpts.keepalivedImage = findImageOrDie(imgstream, "keepalived-ipfailover")
@@ -142,26 +138,25 @@ func runBootstrapCmd(_ *cobra.Command, _ []string) {
142138
bootstrapOpts.kubeRbacProxyImage = findImageOrDie(imgstream, "kube-rbac-proxy")
143139
bootstrapOpts.infraImage = findImageOrDie(imgstream, "pod")
144140
bootstrapOpts.haproxyImage = findImageOrDie(imgstream, "haproxy-router")
145-
bootstrapOpts.baseOSContainerImage, err = findImage(imgstream, baseOSContainerImageTag)
146-
if err != nil {
141+
142+
// TODO: @pablintino. I've not identified a usage of the bootstrap that doesn't pass the image-references option
143+
streamName := osimagestream.GetDefaultStreamName()
144+
if _, err = findImage(imgstream, streamName); err != nil {
147145
klog.Warningf("Base OS container not found: %s", err)
148146
}
149-
bootstrapOpts.baseOSExtensionsContainerImage, err = findImage(imgstream, fmt.Sprintf("%s-extensions", baseOSContainerImageTag))
150-
if err != nil {
147+
if _, err = findImage(imgstream, fmt.Sprintf("%s-extensions", streamName)); err != nil {
151148
klog.Warningf("Base OS extensions container not found: %s", err)
152149
}
153150
}
154151

155152
imgs := ctrlcommon.Images{
156153
RenderConfigImages: ctrlcommon.RenderConfigImages{
157-
MachineConfigOperator: bootstrapOpts.mcoImage,
158-
KeepalivedBootstrap: bootstrapOpts.keepalivedImage,
159-
CorednsBootstrap: bootstrapOpts.corednsImage,
160-
BaremetalRuntimeCfgBootstrap: bootstrapOpts.baremetalRuntimeCfgImage,
161-
OauthProxy: bootstrapOpts.oauthProxyImage,
162-
KubeRbacProxy: bootstrapOpts.kubeRbacProxyImage,
163-
BaseOSContainerImage: bootstrapOpts.baseOSContainerImage,
164-
BaseOSExtensionsContainerImage: bootstrapOpts.baseOSExtensionsContainerImage,
154+
MachineConfigOperator: bootstrapOpts.mcoImage,
155+
KeepalivedBootstrap: bootstrapOpts.keepalivedImage,
156+
CorednsBootstrap: bootstrapOpts.corednsImage,
157+
BaremetalRuntimeCfgBootstrap: bootstrapOpts.baremetalRuntimeCfgImage,
158+
OauthProxy: bootstrapOpts.oauthProxyImage,
159+
KubeRbacProxy: bootstrapOpts.kubeRbacProxyImage,
165160
},
166161
ControllerConfigImages: ctrlcommon.ControllerConfigImages{
167162
InfraImage: bootstrapOpts.infraImage,
@@ -172,6 +167,11 @@ func runBootstrapCmd(_ *cobra.Command, _ []string) {
172167
},
173168
}
174169

170+
// todo: @pablintino Add the CLI image URLs as another source fot the OS Stream parser
171+
var cliOSImageStreamParser *osimagestream.CliOSImageStreamParser
172+
if bootstrapOpts.baseOSContainerImage != "" && bootstrapOpts.baseOSExtensionsContainerImage != "" {
173+
cliOSImageStreamParser = osimagestream.NewCliOSImageStreamParser(bootstrapOpts.baseOSContainerImage, bootstrapOpts.baseOSExtensionsContainerImage)
174+
}
175175
if err := operator.RenderBootstrap(
176176
bootstrapOpts.additionalTrustBundleFile,
177177
bootstrapOpts.proxyConfigFile,
@@ -185,6 +185,8 @@ func runBootstrapCmd(_ *cobra.Command, _ []string) {
185185
&imgs,
186186
bootstrapOpts.destinationDir,
187187
bootstrapOpts.releaseImage,
188+
imgstream,
189+
cliOSImageStreamParser,
188190
); err != nil {
189191
klog.Fatalf("error rendering bootstrap manifests: %v", err)
190192
}

go.mod

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ require (
5050
golang.org/x/net v0.43.0
5151
golang.org/x/time v0.11.0
5252
google.golang.org/grpc v1.71.0
53-
k8s.io/api v0.33.3
53+
k8s.io/api v0.34.1
5454
k8s.io/apiextensions-apiserver v0.33.2
55-
k8s.io/apimachinery v0.33.3
55+
k8s.io/apimachinery v0.34.1
5656
k8s.io/client-go v0.33.2
5757
k8s.io/code-generator v0.33.2
5858
k8s.io/component-base v0.33.2
@@ -129,7 +129,7 @@ require (
129129
github.com/google/btree v1.1.3 // indirect
130130
github.com/google/cadvisor v0.52.1 // indirect
131131
github.com/google/cel-go v0.23.2 // indirect
132-
github.com/google/gnostic-models v0.6.9 // indirect
132+
github.com/google/gnostic-models v0.7.0 // indirect
133133
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect
134134
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
135135
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
@@ -208,7 +208,7 @@ require (
208208
go.uber.org/atomic v1.9.0 // indirect
209209
go.uber.org/automaxprocs v1.6.0 // indirect
210210
go.yaml.in/yaml/v2 v2.4.2 // indirect
211-
go.yaml.in/yaml/v3 v3.0.3 // indirect
211+
go.yaml.in/yaml/v3 v3.0.4 // indirect
212212
golang.org/x/tools/go/expect v0.1.1-deprecated // indirect
213213
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect
214214
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
@@ -223,7 +223,7 @@ require (
223223
k8s.io/cri-client v0.0.0 // indirect
224224
k8s.io/csi-translation-lib v0.0.0 // indirect
225225
k8s.io/dynamic-resource-allocation v0.0.0 // indirect
226-
k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7 // indirect
226+
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f // indirect
227227
k8s.io/kms v0.33.2 // indirect
228228
k8s.io/kube-scheduler v0.0.0 // indirect
229229
k8s.io/mount-utils v0.0.0 // indirect
@@ -232,6 +232,7 @@ require (
232232
sigs.k8s.io/kustomize/api v0.19.0 // indirect
233233
sigs.k8s.io/kustomize/kyaml v0.19.0 // indirect
234234
sigs.k8s.io/randfill v1.0.0 // indirect
235+
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
235236
)
236237

237238
require (
@@ -335,7 +336,7 @@ require (
335336
github.com/mitchellh/mapstructure v1.5.0 // indirect
336337
github.com/moby/sys/mountinfo v0.7.2 // indirect
337338
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
338-
github.com/modern-go/reflect2 v1.0.2 // indirect
339+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
339340
github.com/moricho/tparallel v0.3.2 // indirect
340341
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
341342
github.com/nakabonne/nestif v0.3.1 // indirect
@@ -410,7 +411,7 @@ require (
410411
k8s.io/apiserver v0.33.2
411412
k8s.io/klog/v2 v2.130.1
412413
k8s.io/kube-aggregator v0.33.2 // indirect
413-
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
414+
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
414415
mvdan.cc/gofumpt v0.7.0 // indirect
415416
mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect
416417
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
@@ -454,3 +455,5 @@ replace (
454455
k8s.io/sample-cli-plugin => github.com/openshift/kubernetes/staging/src/k8s.io/sample-cli-plugin v0.0.0-20250716113245-b94367cabf3e
455456
k8s.io/sample-controller => github.com/openshift/kubernetes/staging/src/k8s.io/sample-controller v0.0.0-20250716113245-b94367cabf3e
456457
)
458+
459+
replace github.com/openshift/api => github.com/pablintino/api v0.0.0-20251030115546-80b1b5867a30

go.sum

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -360,8 +360,8 @@ github.com/google/cadvisor v0.52.1 h1:sC8SZ6jio9ds+P2dk51bgbeYeufxo55n0X3tmrpA9a
360360
github.com/google/cadvisor v0.52.1/go.mod h1:OAhPcx1nOm5YwMh/JhpUOMKyv1YKLRtS9KgzWPndHmA=
361361
github.com/google/cel-go v0.23.2 h1:UdEe3CvQh3Nv+E/j9r1Y//WO0K0cSyD7/y0bzyLIMI4=
362362
github.com/google/cel-go v0.23.2/go.mod h1:52Pb6QsDbC5kvgxvZhiL9QX1oZEkcUF/ZqaPx1J5Wwo=
363-
github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
364-
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
363+
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
364+
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
365365
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
366366
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
367367
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -545,8 +545,9 @@ github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFL
545545
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
546546
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
547547
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
548-
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
549548
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
549+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
550+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
550551
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
551552
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
552553
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0=
@@ -595,8 +596,6 @@ github.com/opencontainers/selinux v1.12.0 h1:6n5JV4Cf+4y0KNXW48TLj5DwfXpvWlxXplU
595596
github.com/opencontainers/selinux v1.12.0/go.mod h1:BTPX+bjVbWGXw7ZZWUbdENt8w0htPSrlgOOysQaU62U=
596597
github.com/openshift-eng/openshift-tests-extension v0.0.0-20250722101414-8083129ab8f9 h1:4ZeSM80DVCb5WWB3Q/fyCI9jYXAl9bfrGnFvFONqzN4=
597598
github.com/openshift-eng/openshift-tests-extension v0.0.0-20250722101414-8083129ab8f9/go.mod h1:6gkP5f2HL0meusT0Aim8icAspcD1cG055xxBZ9yC68M=
598-
github.com/openshift/api v0.0.0-20251013165757-fe48e8fd548b h1:X18aj8dcvmGC9T7xiHHz3B9YRT4b5KiX/snG27cj9mc=
599-
github.com/openshift/api v0.0.0-20251013165757-fe48e8fd548b/go.mod h1:SPLf21TYPipzCO67BURkCfK6dcIIxx0oNRVWaOyRcXM=
600599
github.com/openshift/client-go v0.0.0-20250911202206-1bc0cb0da03b h1:VQpSjWE8jmsPj+EXB+XABTLmDgg9xtT8/fudB/31/aI=
601600
github.com/openshift/client-go v0.0.0-20250911202206-1bc0cb0da03b/go.mod h1:w7sV33ASK/HcuEb0Ll9qvChZdJwNwqo8GocVAnd7fVY=
602601
github.com/openshift/kubernetes v1.30.1-0.20250716113245-b94367cabf3e h1:M5BrUTglTltZjcRz5ouJBqSw0a60p760Bl520ndOGS0=
@@ -660,6 +659,8 @@ github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJ
660659
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
661660
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
662661
github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
662+
github.com/pablintino/api v0.0.0-20251030115546-80b1b5867a30 h1:rPPG1IpYgTEpslrXXdjILXR+ZT8vekpSlBMQfu6v2HU=
663+
github.com/pablintino/api v0.0.0-20251030115546-80b1b5867a30/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY=
663664
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
664665
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
665666
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
@@ -934,8 +935,8 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
934935
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
935936
go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
936937
go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
937-
go.yaml.in/yaml/v3 v3.0.3 h1:bXOww4E/J3f66rav3pX3m8w6jDE4knZjGOw8b5Y6iNE=
938-
go.yaml.in/yaml/v3 v3.0.3/go.mod h1:tBHosrYAkRZjRAOREWbDnBXUf08JOwYq++0QNwQiWzI=
938+
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
939+
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
939940
go4.org v0.0.0-20200104003542-c7e774b10ea0 h1:M6XsnQeLwG+rHQ+/rrGh3puBI3WZEy9TBWmf2H+enQA=
940941
go4.org v0.0.0-20200104003542-c7e774b10ea0/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
941942
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -1153,14 +1154,14 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
11531154
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
11541155
honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I=
11551156
honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs=
1156-
k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7 h1:2OX19X59HxDprNCVrWi6jb7LW1PoqTlYqEq5H2oetog=
1157-
k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
1157+
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f h1:SLb+kxmzfA87x4E4brQzB33VBbT2+x7Zq9ROIHmGn9Q=
1158+
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
11581159
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
11591160
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
11601161
k8s.io/kms v0.33.2 h1:GFwNXX4CZGQCg9DPOaJi1/+iKidCtB9/OIAGdzRo8FI=
11611162
k8s.io/kms v0.33.2/go.mod h1:C1I8mjFFBNzfUZXYt9FZVJ8MJl7ynFbGgZFbBzkBJ3E=
1162-
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
1163-
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
1163+
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA=
1164+
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts=
11641165
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
11651166
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
11661167
mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU=
@@ -1186,6 +1187,8 @@ sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
11861187
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
11871188
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI=
11881189
sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
1190+
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
1191+
sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
11891192
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
11901193
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
11911194
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=

pkg/controller/build/imagepruner/errors.go

Lines changed: 2 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package imagepruner
22

33
import (
44
"errors"
5-
"fmt"
65
"net/http"
76
"strings"
87

98
"github.com/containers/image/v5/docker"
109
"github.com/docker/distribution/registry/api/errcode"
1110
errcodev2 "github.com/docker/distribution/registry/api/v2"
11+
"github.com/openshift/machine-config-operator/pkg/controller/image"
1212
)
1313

1414
// IsTolerableDeleteErr determines if the returned error message during image deletion can be
@@ -27,7 +27,7 @@ func IsTolerableDeleteErr(err error) bool {
2727
// Any errors related to the actual image registry query are wrapped in an
2828
// ErrImage instance. This allows us to easily identify intolerable errors
2929
// such as not being able to write the authfile or certs, etc.
30-
var errImage *ErrImage
30+
var errImage *image.ErrImage
3131
if !errors.As(err, &errImage) {
3232
return false
3333
}
@@ -142,50 +142,3 @@ func isTolerableUnexpectedHTTPStatusError(err error) bool {
142142

143143
return false
144144
}
145-
146-
// ErrImage holds and wraps an error related to a specific image.
147-
type ErrImage struct {
148-
msg string
149-
img string
150-
err error
151-
}
152-
153-
// newErrImageWithMessage constructs a new ErrImage instance with a custom message,
154-
// image pullspec, and wrapped error.
155-
func newErrImageWithMessage(msg, img string, err error) error {
156-
return &ErrImage{msg: msg, img: img, err: err}
157-
}
158-
159-
// newErrImage constructs a new ErrImage instance with an image pullspec and
160-
// wrapped error, without a custom message.
161-
func newErrImage(img string, err error) error {
162-
return &ErrImage{img: img, err: err}
163-
}
164-
165-
// Image returns the image pullspec that caused the error.
166-
func (e *ErrImage) Image() string {
167-
return e.img
168-
}
169-
170-
// Error implements the error interface, providing a formatted error string
171-
// including the message (if present), image (if present), and the wrapped error's string.
172-
func (e *ErrImage) Error() string {
173-
if e.msg != "" && e.img != "" {
174-
// If both the message and image are not empty, include both.
175-
return fmt.Sprintf("%s: image %q: %s", e.msg, e.img, e.err.Error())
176-
}
177-
178-
if e.msg == "" && e.img != "" {
179-
// If the message is empty and the image is not, only include the image.
180-
return fmt.Sprintf("image %q: %s", e.img, e.err.Error())
181-
}
182-
183-
// If neither the message nor the image is populated, just return the error
184-
// string as-is.
185-
return e.err.Error()
186-
}
187-
188-
// Unwrap implements the Unwrap interface, allowing the nested error to be surfaced.
189-
func (e *ErrImage) Unwrap() error {
190-
return e.err
191-
}

0 commit comments

Comments
 (0)