Skip to content

Commit 938aa8d

Browse files
committed
Add more CSV information to the PackageManifest
Transfer `spec.relatedImages`, `spec.minKubeVersion`, and `spec.nativeAPIs` information from the CSV onto the packagemanifest response. CSVs are transformed from the in-bundle representation to the packagemanifest by selecting fields to display. Those additional fields will support the UI. Signed-off-by: Vu Dinh <[email protected]>
1 parent 915c118 commit 938aa8d

File tree

4 files changed

+56
-0
lines changed

4 files changed

+56
-0
lines changed

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
2222
Owned: descriptionsForAPIServices(csv.Spec.APIServiceDefinitions.Owned),
2323
Required: descriptionsForAPIServices(csv.Spec.APIServiceDefinitions.Required),
2424
},
25+
NativeAPIs: csv.Spec.NativeAPIs,
26+
MinKubeVersion: csv.Spec.MinKubeVersion,
27+
RelatedImages: GetRelatedImages(csv),
2528
}
2629

2730
icons := make([]Icon, len(csv.Spec.Icon))
@@ -69,3 +72,21 @@ func descriptionsForAPIServices(apis []operatorsv1alpha1.APIServiceDescription)
6972
}
7073
return descriptions
7174
}
75+
76+
// GetRelatedImages returns a list of images listed in Deployments
77+
func GetRelatedImages(csv *operatorsv1alpha1.ClusterServiceVersion) []string {
78+
var images []string
79+
imageSet := make(map[string]struct{})
80+
81+
for _, deployment := range csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs {
82+
for _, container := range deployment.Spec.Template.Spec.Containers {
83+
imageSet[container.Image] = struct{}{}
84+
}
85+
}
86+
87+
for k := range imageSet {
88+
images = append(images, k)
89+
}
90+
91+
return images
92+
}

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

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

108108
CustomResourceDefinitions operatorv1alpha1.CustomResourceDefinitions
109109
APIServiceDefinitions operatorv1alpha1.APIServiceDefinitions
110+
NativeAPIs []metav1.GroupVersionKind `json:"nativeapis,omitempty"`
111+
112+
// Minimum Kubernetes version for operator installation
113+
MinKubeVersion string `json:"minkubeversion,omitempty"`
114+
115+
// List of related images
116+
RelatedImages []string `json:"relatedimages,omitempty"`
110117
}
111118

112119
// AppLink defines a link to an application

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
1616
InstallModes: csv.Spec.InstallModes,
1717
CustomResourceDefinitions: csv.Spec.CustomResourceDefinitions,
1818
APIServiceDefinitions: csv.Spec.APIServiceDefinitions,
19+
NativeAPIs: csv.Spec.NativeAPIs,
20+
MinKubeVersion: csv.Spec.MinKubeVersion,
21+
RelatedImages: GetRelatedImages(csv),
1922
}
2023

2124
icons := make([]Icon, len(csv.Spec.Icon))
@@ -32,3 +35,21 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
3235

3336
return desc
3437
}
38+
39+
// GetRelatedImages returns a list of images listed in Deployments
40+
func GetRelatedImages(csv *operatorsv1alpha1.ClusterServiceVersion) []string {
41+
var images []string
42+
imageSet := make(map[string]struct{})
43+
44+
for _, deployment := range csv.Spec.InstallStrategy.StrategySpec.DeploymentSpecs {
45+
for _, container := range deployment.Spec.Template.Spec.Containers {
46+
imageSet[container.Image] = struct{}{}
47+
}
48+
}
49+
50+
for k := range imageSet {
51+
images = append(images, k)
52+
}
53+
54+
return images
55+
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +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"`
113+
114+
// Minimum Kubernetes version for operator installation
115+
MinKubeVersion string `json:"minkubeversion,omitempty"`
116+
117+
// List of related images
118+
RelatedImages []string `json:"relatedimages,omitempty"`
112119
}
113120

114121
// AppLink defines a link to an application

0 commit comments

Comments
 (0)