@@ -4,90 +4,11 @@ import (
4
4
"encoding/json"
5
5
"fmt"
6
6
"sort"
7
- "strings"
8
7
9
- "github.com/operator-framework/operator-registry/alpha/model"
10
8
"github.com/operator-framework/operator-registry/alpha/property"
11
9
)
12
10
13
- func ConvertRegistryBundleToModelBundles (b * Bundle ) ([]model.Bundle , error ) {
14
- var bundles []model.Bundle
15
- desc , err := b .csv .GetDescription ()
16
- if err != nil {
17
- return nil , fmt .Errorf ("Could not get description from bundle CSV:%s" , err )
18
- }
19
-
20
- i , err := b .csv .GetIcons ()
21
- if err != nil {
22
- return nil , fmt .Errorf ("Could not get icon from bundle CSV:%s" , err )
23
- }
24
- mIcon := & model.Icon {
25
- MediaType : "" ,
26
- Data : []byte {},
27
- }
28
- if len (i ) > 0 {
29
- mIcon .MediaType = i [0 ].MediaType
30
- mIcon .Data = []byte (i [0 ].Base64data )
31
- }
32
-
33
- pkg := & model.Package {
34
- Name : b .Annotations .PackageName ,
35
- Description : desc ,
36
- Icon : mIcon ,
37
- Channels : make (map [string ]* model.Channel ),
38
- }
39
-
40
- mb , err := registryBundleToModelBundle (b )
41
- mb .Package = pkg
42
- if err != nil {
43
- return nil , err
44
- }
45
-
46
- for _ , ch := range extractChannels (b .Annotations .Channels ) {
47
- newCh := & model.Channel {
48
- Name : ch ,
49
- }
50
- chBundle := mb
51
- chBundle .Channel = newCh
52
- bundles = append (bundles , * chBundle )
53
- }
54
- return bundles , nil
55
- }
56
-
57
- func registryBundleToModelBundle (b * Bundle ) (* model.Bundle , error ) {
58
- bundleProps , err := PropertiesFromBundle (b )
59
- if err != nil {
60
- return nil , fmt .Errorf ("error converting properties for internal model: %v" , err )
61
- }
62
-
63
- csv , err := b .ClusterServiceVersion ()
64
- if err != nil {
65
- return nil , fmt .Errorf ("Could not get CVS for bundle: %s" , err )
66
- }
67
- replaces , err := csv .GetReplaces ()
68
- if err != nil {
69
- return nil , fmt .Errorf ("Could not get Replaces from CSV for bundle: %s" , err )
70
- }
71
- skips , err := csv .GetSkips ()
72
- if err != nil {
73
- return nil , fmt .Errorf ("Could not get Skips from CSV for bundle: %s" , err )
74
- }
75
- relatedImages , err := convertToModelRelatedImages (csv )
76
- if err != nil {
77
- return nil , fmt .Errorf ("Could not get Related images from bundle: %v" , err )
78
- }
79
-
80
- return & model.Bundle {
81
- Name : csv .Name ,
82
- Image : b .BundleImage ,
83
- Replaces : replaces ,
84
- Skips : skips ,
85
- Properties : bundleProps ,
86
- RelatedImages : relatedImages ,
87
- }, nil
88
- }
89
-
90
- func PropertiesFromBundle (b * Bundle ) ([]property.Property , error ) {
11
+ func ObjectsAndPropertiesFromBundle (b * Bundle ) ([]string , []property.Property , error ) {
91
12
providedGVKs := map [property.GVK ]struct {}{}
92
13
requiredGVKs := map [property.GVKRequired ]struct {}{}
93
14
@@ -99,14 +20,14 @@ func PropertiesFromBundle(b *Bundle) ([]property.Property, error) {
99
20
case property .TypeGVK :
100
21
var v property.GVK
101
22
if err := json .Unmarshal (p .Value , & v ); err != nil {
102
- return nil , property.ParseError {Idx : i , Typ : p .Type , Err : err }
23
+ return nil , nil , property.ParseError {Idx : i , Typ : p .Type , Err : err }
103
24
}
104
25
k := property.GVK {Group : v .Group , Kind : v .Kind , Version : v .Version }
105
26
providedGVKs [k ] = struct {}{}
106
27
case property .TypePackage :
107
28
var v property.Package
108
29
if err := json .Unmarshal (p .Value , & v ); err != nil {
109
- return nil , property.ParseError {Idx : i , Typ : p .Type , Err : err }
30
+ return nil , nil , property.ParseError {Idx : i , Typ : p .Type , Err : err }
110
31
}
111
32
p := property .MustBuildPackage (v .PackageName , v .Version )
112
33
packageProvidedProperty = & p
@@ -124,27 +45,27 @@ func PropertiesFromBundle(b *Bundle) ([]property.Property, error) {
124
45
case property .TypeGVK :
125
46
var v property.GVK
126
47
if err := json .Unmarshal (p .Value , & v ); err != nil {
127
- return nil , property.ParseError {Idx : i , Typ : p .Type , Err : err }
48
+ return nil , nil , property.ParseError {Idx : i , Typ : p .Type , Err : err }
128
49
}
129
50
k := property.GVKRequired {Group : v .Group , Kind : v .Kind , Version : v .Version }
130
51
requiredGVKs [k ] = struct {}{}
131
52
case property .TypePackage :
132
53
var v property.Package
133
54
if err := json .Unmarshal (p .Value , & v ); err != nil {
134
- return nil , property.ParseError {Idx : i , Typ : p .Type , Err : err }
55
+ return nil , nil , property.ParseError {Idx : i , Typ : p .Type , Err : err }
135
56
}
136
57
packageRequiredProps = append (packageRequiredProps , property .MustBuildPackageRequired (v .PackageName , v .Version ))
137
58
}
138
59
}
139
60
140
61
version , err := b .Version ()
141
62
if err != nil {
142
- return nil , fmt .Errorf ("get version: %v" , err )
63
+ return nil , nil , fmt .Errorf ("get version: %v" , err )
143
64
}
144
65
145
66
providedApis , err := b .ProvidedAPIs ()
146
67
if err != nil {
147
- return nil , fmt .Errorf ("get provided apis: %v" , err )
68
+ return nil , nil , fmt .Errorf ("get provided apis: %v" , err )
148
69
}
149
70
150
71
for p := range providedApis {
@@ -155,7 +76,7 @@ func PropertiesFromBundle(b *Bundle) ([]property.Property, error) {
155
76
}
156
77
requiredApis , err := b .RequiredAPIs ()
157
78
if err != nil {
158
- return nil , fmt .Errorf ("get required apis: %v" , err )
79
+ return nil , nil , fmt .Errorf ("get required apis: %v" , err )
159
80
}
160
81
for p := range requiredApis {
161
82
k := property.GVKRequired {Group : p .Group , Kind : p .Kind , Version : p .Version }
@@ -164,67 +85,42 @@ func PropertiesFromBundle(b *Bundle) ([]property.Property, error) {
164
85
}
165
86
}
166
87
167
- var out []property.Property
88
+ var (
89
+ props []property.Property
90
+ objects []string
91
+ )
92
+ for _ , obj := range b .Objects {
93
+ objData , err := json .Marshal (obj )
94
+ if err != nil {
95
+ return nil , nil , fmt .Errorf ("marshal object %s/%s (%s) to json: %v" , obj .GetName (), obj .GetNamespace (), obj .GroupVersionKind (), err )
96
+ }
97
+ props = append (props , property .MustBuildBundleObjectData (objData ))
98
+ objects = append (objects , string (objData ))
99
+ }
100
+
168
101
if packageProvidedProperty == nil {
169
102
p := property .MustBuildPackage (b .Package , version )
170
103
packageProvidedProperty = & p
171
104
}
172
- out = append (out , * packageProvidedProperty )
105
+ props = append (props , * packageProvidedProperty )
173
106
174
107
for p := range providedGVKs {
175
- out = append (out , property .MustBuildGVK (p .Group , p .Version , p .Kind ))
108
+ props = append (props , property .MustBuildGVK (p .Group , p .Version , p .Kind ))
176
109
}
177
110
178
111
for p := range requiredGVKs {
179
- out = append (out , property .MustBuildGVKRequired (p .Group , p .Version , p .Kind ))
112
+ props = append (props , property .MustBuildGVKRequired (p .Group , p .Version , p .Kind ))
180
113
}
181
114
182
- out = append (out , packageRequiredProps ... )
183
- out = append (out , otherProps ... )
115
+ props = append (props , packageRequiredProps ... )
116
+ props = append (props , otherProps ... )
184
117
185
- sort .Slice (out , func (i , j int ) bool {
186
- if out [i ].Type != out [j ].Type {
187
- return out [i ].Type < out [j ].Type
118
+ sort .Slice (props , func (i , j int ) bool {
119
+ if props [i ].Type != props [j ].Type {
120
+ return props [i ].Type < props [j ].Type
188
121
}
189
- return string (out [i ].Value ) < string (out [j ].Value )
122
+ return string (props [i ].Value ) < string (props [j ].Value )
190
123
})
191
124
192
- return out , nil
193
- }
194
-
195
- func convertToModelRelatedImages (csv * ClusterServiceVersion ) ([]model.RelatedImage , error ) {
196
- var objmap map [string ]* json.RawMessage
197
- if err := json .Unmarshal (csv .Spec , & objmap ); err != nil {
198
- return nil , err
199
- }
200
-
201
- rawValue , ok := objmap [relatedImages ]
202
- if ! ok || rawValue == nil {
203
- return nil , nil
204
- }
205
-
206
- type relatedImage struct {
207
- Name string `json:"name"`
208
- Ref string `json:"image"`
209
- }
210
- var relatedImages []relatedImage
211
- if err := json .Unmarshal (* rawValue , & relatedImages ); err != nil {
212
- return nil , err
213
- }
214
- mrelatedImages := []model.RelatedImage {}
215
- for _ , img := range relatedImages {
216
- mrelatedImages = append (mrelatedImages , model.RelatedImage {Name : img .Name , Image : img .Ref })
217
- }
218
- return mrelatedImages , nil
219
- }
220
-
221
- func extractChannels (annotationChannels string ) []string {
222
- var channels []string
223
- for _ , ch := range strings .Split (annotationChannels , "," ) {
224
- c := strings .TrimSpace (ch )
225
- if c != "" {
226
- channels = append (channels , ch )
227
- }
228
- }
229
- return channels
125
+ return objects , props , nil
230
126
}
0 commit comments