@@ -10,7 +10,6 @@ import (
10
10
"k8s.io/apimachinery/pkg/util/errors"
11
11
"sigs.k8s.io/yaml"
12
12
13
- "github.com/operator-framework/operator-registry/alpha/action"
14
13
"github.com/operator-framework/operator-registry/alpha/declcfg"
15
14
"github.com/operator-framework/operator-registry/alpha/property"
16
15
)
@@ -25,22 +24,16 @@ func (t Template) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error
25
24
26
25
var cfgs []declcfg.DeclarativeConfig
27
26
28
- bundleDict := make (map [string ]struct {})
29
- buildBundleList (& sv .Candidate .Bundles , & bundleDict )
30
- buildBundleList (& sv .Fast .Bundles , & bundleDict )
31
- buildBundleList (& sv .Stable .Bundles , & bundleDict )
32
-
27
+ bundleDict := buildBundleList (* sv )
33
28
for b := range bundleDict {
34
- r := action.Render {
35
- AllowedRefMask : action .RefBundleImage ,
36
- Refs : []string {b },
37
- Registry : t .Registry ,
38
- Migrations : t .Migrations ,
39
- }
40
- c , err := r .Run (ctx )
29
+ c , err := t .RenderBundle (ctx , b )
41
30
if err != nil {
42
31
return nil , err
43
32
}
33
+ if len (c .Bundles ) != 1 {
34
+ return nil , fmt .Errorf ("bundle reference %q resulted in %d bundles, expected 1" , b , len (c .Bundles ))
35
+ }
36
+ bundleDict [b ] = c .Bundles [0 ].Image
44
37
cfgs = append (cfgs , * c )
45
38
}
46
39
out = * combineConfigs (cfgs )
@@ -49,7 +42,7 @@ func (t Template) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error
49
42
return nil , fmt .Errorf ("render: no bundles specified or no bundles could be rendered" )
50
43
}
51
44
52
- channelBundleVersions , err := sv .getVersionsFromStandardChannels (& out )
45
+ channelBundleVersions , err := sv .getVersionsFromStandardChannels (& out , bundleDict )
53
46
if err != nil {
54
47
return nil , fmt .Errorf ("render: unable to post-process bundle info: %v" , err )
55
48
}
@@ -61,12 +54,16 @@ func (t Template) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error
61
54
return & out , nil
62
55
}
63
56
64
- func buildBundleList (bundles * []semverTemplateBundleEntry , dict * map [string ]struct {}) {
65
- for _ , b := range * bundles {
66
- if _ , ok := (* dict )[b .Image ]; ! ok {
67
- (* dict )[b .Image ] = struct {}{}
57
+ func buildBundleList (t semverTemplate ) map [string ]string {
58
+ dict := make (map [string ]string )
59
+ for _ , bl := range []semverTemplateChannelBundles {t .Candidate , t .Fast , t .Stable } {
60
+ for _ , b := range bl .Bundles {
61
+ if _ , ok := dict [b .Image ]; ! ok {
62
+ dict [b .Image ] = b .Image
63
+ }
68
64
}
69
65
}
66
+ return dict
70
67
}
71
68
72
69
func readFile (reader io.Reader ) (* semverTemplate , error ) {
@@ -114,10 +111,10 @@ func readFile(reader io.Reader) (*semverTemplate, error) {
114
111
return & sv , nil
115
112
}
116
113
117
- func (sv * semverTemplate ) getVersionsFromStandardChannels (cfg * declcfg.DeclarativeConfig ) (* bundleVersions , error ) {
114
+ func (sv * semverTemplate ) getVersionsFromStandardChannels (cfg * declcfg.DeclarativeConfig , bundleDict map [ string ] string ) (* bundleVersions , error ) {
118
115
versions := bundleVersions {}
119
116
120
- bdm , err := sv .getVersionsFromChannel (sv .Candidate .Bundles , cfg )
117
+ bdm , err := sv .getVersionsFromChannel (sv .Candidate .Bundles , bundleDict , cfg )
121
118
if err != nil {
122
119
return nil , err
123
120
}
@@ -126,7 +123,7 @@ func (sv *semverTemplate) getVersionsFromStandardChannels(cfg *declcfg.Declarati
126
123
}
127
124
versions [candidateChannelArchetype ] = bdm
128
125
129
- bdm , err = sv .getVersionsFromChannel (sv .Fast .Bundles , cfg )
126
+ bdm , err = sv .getVersionsFromChannel (sv .Fast .Bundles , bundleDict , cfg )
130
127
if err != nil {
131
128
return nil , err
132
129
}
@@ -135,7 +132,7 @@ func (sv *semverTemplate) getVersionsFromStandardChannels(cfg *declcfg.Declarati
135
132
}
136
133
versions [fastChannelArchetype ] = bdm
137
134
138
- bdm , err = sv .getVersionsFromChannel (sv .Stable .Bundles , cfg )
135
+ bdm , err = sv .getVersionsFromChannel (sv .Stable .Bundles , bundleDict , cfg )
139
136
if err != nil {
140
137
return nil , err
141
138
}
@@ -147,7 +144,7 @@ func (sv *semverTemplate) getVersionsFromStandardChannels(cfg *declcfg.Declarati
147
144
return & versions , nil
148
145
}
149
146
150
- func (sv * semverTemplate ) getVersionsFromChannel (semverBundles []semverTemplateBundleEntry , cfg * declcfg.DeclarativeConfig ) (map [string ]semver.Version , error ) {
147
+ func (sv * semverTemplate ) getVersionsFromChannel (semverBundles []semverTemplateBundleEntry , bundleDict map [ string ] string , cfg * declcfg.DeclarativeConfig ) (map [string ]semver.Version , error ) {
151
148
entries := make (map [string ]semver.Version )
152
149
153
150
// we iterate over the channel bundles from the template, to:
@@ -158,7 +155,7 @@ func (sv *semverTemplate) getVersionsFromChannel(semverBundles []semverTemplateB
158
155
// test if the bundle specified in the template is present in the successfully-rendered bundles
159
156
index := 0
160
157
for index < len (cfg .Bundles ) {
161
- if cfg .Bundles [index ].Image == semverBundle .Image {
158
+ if cfg .Bundles [index ].Image == bundleDict [ semverBundle .Image ] {
162
159
break
163
160
}
164
161
index ++
0 commit comments