Skip to content

Commit 62bb0bf

Browse files
committed
generate bundle: Add Image Digest Resolver Option
Add option to select the image digest resolver when rendering bundles with image digests pinned. The set of supported tools is defined in the `operator-manifest-tools` library (curretnly `crane`, `skopeo`, and `script`). Fixes operator-framework#6868 Signed-off-by: Adam Kaplan <[email protected]>
1 parent 0735b20 commit 62bb0bf

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
entries:
2+
- description: >
3+
Add `--image-digest-resolver` option to the operator-sdk
4+
`generate bundle` command. When using image digests in operator bundles,
5+
this lets developers choose `crane`, `skopeo` or a custom script to
6+
resolve image SHAs.
7+
kind: "addition"
8+
9+
# Is this a breaking change?
10+
breaking: false

internal/cmd/operator-sdk/generate/bundle/bundle.go

+33-3
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ func (c *bundleCmd) setDefaults() (err error) {
117117
if c.packageName, c.layout, err = genutil.GetPackageNameAndLayout(c.packageName); err != nil {
118118
return err
119119
}
120+
120121
return nil
121122
}
122123

@@ -148,6 +149,23 @@ func (c bundleCmd) validateManifests() (err error) {
148149
}
149150
}
150151

152+
if c.useImageDigests {
153+
if len(c.imageDigestResolver) == 0 {
154+
return errors.New("--image-digest-resolver cannot be empty when using image digests")
155+
}
156+
isValid := false
157+
for _, r := range imageresolver.GetResolverOptions() {
158+
if c.imageDigestResolver == string(r) {
159+
isValid = true
160+
break
161+
}
162+
}
163+
if !isValid {
164+
return fmt.Errorf("--image-digest-resolver must be one of: %s", imageresolver.GetResolverOptions())
165+
}
166+
167+
}
168+
151169
return nil
152170
}
153171

@@ -311,9 +329,8 @@ func (c bundleCmd) pinImages(manifestPath string) error {
311329
if err != nil {
312330
return err
313331
}
314-
resolverArgs := make(map[string]string)
315-
resolverArgs["usedefault"] = "true"
316-
resolver, err := imageresolver.GetResolver(imageresolver.ResolverCrane, resolverArgs)
332+
333+
resolver, err := imageresolver.GetResolver(imageresolver.ResolverOption(c.imageDigestResolver), c.resolverArgs())
317334
if err != nil {
318335
return err
319336
}
@@ -329,3 +346,16 @@ func (c bundleCmd) pinImages(manifestPath string) error {
329346

330347
return nil
331348
}
349+
350+
func (c bundleCmd) resolverArgs() map[string]string {
351+
resolverArgs := make(map[string]string)
352+
353+
switch c.imageDigestResolver {
354+
case string(imageresolver.ResolverCrane):
355+
resolverArgs["usedefault"] = "true"
356+
case string(imageresolver.ResolverSkopeo):
357+
case string(imageresolver.ResolverScript):
358+
default:
359+
}
360+
return resolverArgs
361+
}

internal/cmd/operator-sdk/generate/bundle/cmd.go

+3
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ type bundleCmd struct {
5252

5353
// Use Image Digests flag to toggle using traditional Image tags vs SHA Digests
5454
useImageDigests bool
55+
// Tool to use when resolving image digests. Defaults to crane.
56+
imageDigestResolver string
5557
}
5658

5759
// NewCmd returns the 'bundle' command configured for the new project layout.
@@ -144,6 +146,7 @@ func (c *bundleCmd) addFlagsTo(fs *pflag.FlagSet) {
144146
fs.StringVar(&c.packageName, "package", "", "Bundle's package name")
145147

146148
fs.BoolVar(&c.useImageDigests, "use-image-digests", false, "Use SHA Digest for images")
149+
fs.StringVar(&c.imageDigestResolver, "image-digest-resolver", "crane", "Resolver for image digests. Options are crane, skopeo, or script")
147150
}
148151

149152
func (c bundleCmd) println(a ...interface{}) {

0 commit comments

Comments
 (0)