Skip to content

Commit 24bcac4

Browse files
committed
Update related images func and test case
Signed-off-by: Vu Dinh <[email protected]>
1 parent 4c2dc66 commit 24bcac4

File tree

6 files changed

+142
-19
lines changed

6 files changed

+142
-19
lines changed

pkg/package-server/apis/operators/packagemanifest.go

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
package operators
22

3-
import operatorsv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
3+
import (
4+
"encoding/json"
5+
6+
operatorsv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
7+
)
8+
9+
const (
10+
// The yaml attribute that specifies the related images of the ClusterServiceVersion
11+
relatedImages = "relatedImages"
12+
)
413

514
// CreateCSVDescription creates a CSVDescription from a given CSV
615
func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescription {
@@ -24,7 +33,7 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
2433
},
2534
NativeAPIs: csv.Spec.NativeAPIs,
2635
MinKubeVersion: csv.Spec.MinKubeVersion,
27-
RelatedImages: GetRelatedImages(csv),
36+
RelatedImages: GetImages(csv),
2837
}
2938

3039
icons := make([]Icon, len(csv.Spec.Icon))
@@ -73,15 +82,66 @@ func descriptionsForAPIServices(apis []operatorsv1alpha1.APIServiceDescription)
7382
return descriptions
7483
}
7584

76-
// GetRelatedImages returns a list of images listed in Deployments
77-
func GetRelatedImages(csv *operatorsv1alpha1.ClusterServiceVersion) []string {
78-
var images []string
85+
// GetOperatorImages returns a list of images listed in Deployments
86+
func GetOperatorImages(csv *operatorsv1alpha1.ClusterServiceVersion) map[string]struct{} {
7987
imageSet := make(map[string]struct{})
8088

8189
for _, deployment := range csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs {
8290
for _, container := range deployment.Spec.Template.Spec.Containers {
8391
imageSet[container.Image] = struct{}{}
8492
}
93+
for _, initcont := range deployment.Spec.Template.Spec.InitContainers {
94+
imageSet[initcont.Image] = struct{}{}
95+
}
96+
}
97+
98+
return imageSet
99+
}
100+
101+
// GetRelatedImages returns a list of related images listed in CSV spec
102+
func GetRelatedImages(csv *operatorsv1alpha1.ClusterServiceVersion) map[string]struct{} {
103+
var objMap map[string]*json.RawMessage
104+
imageSet := make(map[string]struct{})
105+
106+
csvJSON, err := json.Marshal(csv)
107+
if err != nil {
108+
return imageSet
109+
}
110+
111+
if err := json.Unmarshal(csvJSON, &objMap); err != nil {
112+
return imageSet
113+
}
114+
115+
rawValue, ok := objMap[relatedImages]
116+
if !ok || rawValue == nil {
117+
return imageSet
118+
}
119+
120+
type relatedImage struct {
121+
Name string `json:"name"`
122+
Ref string `json:"image"`
123+
}
124+
125+
var relatedImages []relatedImage
126+
if err = json.Unmarshal(*rawValue, &relatedImages); err != nil {
127+
return imageSet
128+
}
129+
130+
for _, img := range relatedImages {
131+
imageSet[img.Ref] = struct{}{}
132+
}
133+
134+
return imageSet
135+
}
136+
137+
// GetImages returns a list of images listed in CSV (spec and deployments)
138+
func GetImages(csv *operatorsv1alpha1.ClusterServiceVersion) []string {
139+
var images []string
140+
141+
imageSet := GetOperatorImages(csv)
142+
143+
for k := range GetRelatedImages(csv) {
144+
imageSet[k] = struct{}{}
85145
}
86146

87147
for k := range imageSet {

pkg/package-server/apis/operators/packagemanifest_types.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ type CSVDescription struct {
107107

108108
CustomResourceDefinitions operatorv1alpha1.CustomResourceDefinitions
109109
APIServiceDefinitions operatorv1alpha1.APIServiceDefinitions
110-
NativeAPIs []metav1.GroupVersionKind `json:"nativeapis,omitempty"`
110+
NativeAPIs []metav1.GroupVersionKind `json:"nativeApis,omitempty"`
111111

112112
// Minimum Kubernetes version for operator installation
113-
MinKubeVersion string `json:"minkubeversion,omitempty"`
113+
MinKubeVersion string `json:"minKubeVersion,omitempty"`
114114

115115
// List of related images
116-
RelatedImages []string `json:"relatedimages,omitempty"`
116+
RelatedImages []string `json:"relatedImages,omitempty"`
117117
}
118118

119119
// AppLink defines a link to an application

pkg/package-server/apis/operators/v1/packagemanifest.go

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
package v1
22

3-
import operatorsv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
3+
import (
4+
"encoding/json"
5+
6+
operatorsv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
7+
)
8+
9+
const (
10+
// The yaml attribute that specifies the related images of the ClusterServiceVersion
11+
relatedImages = "relatedImages"
12+
)
413

514
// CreateCSVDescription creates a CSVDescription from a given CSV
615
func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescription {
@@ -18,7 +27,7 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
1827
APIServiceDefinitions: csv.Spec.APIServiceDefinitions,
1928
NativeAPIs: csv.Spec.NativeAPIs,
2029
MinKubeVersion: csv.Spec.MinKubeVersion,
21-
RelatedImages: GetRelatedImages(csv),
30+
RelatedImages: GetImages(csv),
2231
}
2332

2433
icons := make([]Icon, len(csv.Spec.Icon))
@@ -36,15 +45,66 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
3645
return desc
3746
}
3847

39-
// GetRelatedImages returns a list of images listed in Deployments
40-
func GetRelatedImages(csv *operatorsv1alpha1.ClusterServiceVersion) []string {
41-
var images []string
48+
// GetOperatorImages returns a list of images listed in Deployments
49+
func GetOperatorImages(csv *operatorsv1alpha1.ClusterServiceVersion) map[string]struct{} {
4250
imageSet := make(map[string]struct{})
4351

4452
for _, deployment := range csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs {
4553
for _, container := range deployment.Spec.Template.Spec.Containers {
4654
imageSet[container.Image] = struct{}{}
4755
}
56+
for _, initcont := range deployment.Spec.Template.Spec.InitContainers {
57+
imageSet[initcont.Image] = struct{}{}
58+
}
59+
}
60+
61+
return imageSet
62+
}
63+
64+
// GetRelatedImages returns a list of related images listed in CSV spec
65+
func GetRelatedImages(csv *operatorsv1alpha1.ClusterServiceVersion) map[string]struct{} {
66+
var objMap map[string]*json.RawMessage
67+
imageSet := make(map[string]struct{})
68+
69+
csvJSON, err := json.Marshal(csv)
70+
if err != nil {
71+
return imageSet
72+
}
73+
74+
if err := json.Unmarshal(csvJSON, &objMap); err != nil {
75+
return imageSet
76+
}
77+
78+
rawValue, ok := objMap[relatedImages]
79+
if !ok || rawValue == nil {
80+
return imageSet
81+
}
82+
83+
type relatedImage struct {
84+
Name string `json:"name"`
85+
Ref string `json:"image"`
86+
}
87+
88+
var relatedImages []relatedImage
89+
if err = json.Unmarshal(*rawValue, &relatedImages); err != nil {
90+
return imageSet
91+
}
92+
93+
for _, img := range relatedImages {
94+
imageSet[img.Ref] = struct{}{}
95+
}
96+
97+
return imageSet
98+
}
99+
100+
// GetImages returns a list of images listed in CSV (spec and deployments)
101+
func GetImages(csv *operatorsv1alpha1.ClusterServiceVersion) []string {
102+
var images []string
103+
104+
imageSet := GetOperatorImages(csv)
105+
106+
for k := range GetRelatedImages(csv) {
107+
imageSet[k] = struct{}{}
48108
}
49109

50110
for k := range imageSet {

pkg/package-server/apis/operators/v1/packagemanifest_types.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,13 @@ type CSVDescription struct {
109109

110110
CustomResourceDefinitions operatorv1alpha1.CustomResourceDefinitions `json:"customresourcedefinitions,omitempty"`
111111
APIServiceDefinitions operatorv1alpha1.APIServiceDefinitions `json:"apiservicedefinitions,omitempty"`
112-
NativeAPIs []metav1.GroupVersionKind `json:"nativeapis,omitempty"`
112+
NativeAPIs []metav1.GroupVersionKind `json:"nativeApis,omitempty"`
113113

114114
// Minimum Kubernetes version for operator installation
115-
MinKubeVersion string `json:"minkubeversion,omitempty"`
115+
MinKubeVersion string `json:"minKubeVersion,omitempty"`
116116

117117
// List of related images
118-
RelatedImages []string `json:"relatedimages,omitempty"`
118+
RelatedImages []string `json:"relatedImages,omitempty"`
119119
}
120120

121121
// AppLink defines a link to an application

pkg/package-server/client/openapi/zz_generated.openapi.go

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/e2e/packagemanifest_e2e_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ var _ = Describe("Package Manifest", func() {
8585
require.NotNil(GinkgoT(), pm)
8686
require.Equal(GinkgoT(), packageName, pm.GetName())
8787
require.Equal(GinkgoT(), expectedStatus, pm.Status)
88+
require.Equal(GinkgoT(), "0.0.0", pm.Status.Channels[0].CurrentCSVDesc.MinKubeVersion)
89+
require.Equal(GinkgoT(), *dummyImage, pm.Status.Channels[0].CurrentCSVDesc.RelatedImages[0])
90+
require.Equal(GinkgoT(), csv.Spec.NativeAPIs, pm.Status.Channels[0].CurrentCSVDesc.NativeAPIs)
8891
require.Equal(GinkgoT(), "label", pm.GetLabels()["projected"])
8992
require.Equal(GinkgoT(), "supported", pm.GetLabels()["operatorframework.io/arch.amd64"])
9093
require.Equal(GinkgoT(), "supported", pm.GetLabels()["operatorframework.io/os.linux"])

0 commit comments

Comments
 (0)