Skip to content

Commit 1bb79c7

Browse files
Merge pull request #1387 from dinhxuanvu/pkgm-csv
Add more CSV information to the PackageManifest
2 parents b3280b3 + f186bb4 commit 1bb79c7

File tree

11 files changed

+267
-30
lines changed

11 files changed

+267
-30
lines changed

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

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
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+
"github.com/operator-framework/operator-registry/pkg/registry"
8+
)
9+
10+
const (
11+
// The yaml attribute that specifies the related images of the ClusterServiceVersion
12+
relatedImages = "relatedImages"
13+
)
414

515
// CreateCSVDescription creates a CSVDescription from a given CSV
6-
func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescription {
16+
func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion, csvJSON string) CSVDescription {
717
desc := CSVDescription{
818
DisplayName: csv.Spec.DisplayName,
919
Version: csv.Spec.Version,
@@ -22,6 +32,9 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
2232
Owned: descriptionsForAPIServices(csv.Spec.APIServiceDefinitions.Owned),
2333
Required: descriptionsForAPIServices(csv.Spec.APIServiceDefinitions.Required),
2434
},
35+
NativeAPIs: csv.Spec.NativeAPIs,
36+
MinKubeVersion: csv.Spec.MinKubeVersion,
37+
RelatedImages: GetImages(csvJSON),
2538
}
2639

2740
icons := make([]Icon, len(csv.Spec.Icon))
@@ -69,3 +82,34 @@ func descriptionsForAPIServices(apis []operatorsv1alpha1.APIServiceDescription)
6982
}
7083
return descriptions
7184
}
85+
86+
// GetImages returns a list of images listed in CSV (spec and deployments)
87+
func GetImages(csvJSON string) []string {
88+
var images []string
89+
90+
csv := &registry.ClusterServiceVersion{}
91+
err := json.Unmarshal([]byte(csvJSON), &csv)
92+
if err != nil {
93+
return images
94+
}
95+
96+
imageSet, err := csv.GetOperatorImages()
97+
if err != nil {
98+
return images
99+
}
100+
101+
relatedImgSet, err := csv.GetRelatedImages()
102+
if err != nil {
103+
return images
104+
}
105+
106+
for k := range relatedImgSet {
107+
imageSet[k] = struct{}{}
108+
}
109+
110+
for k := range imageSet {
111+
images = append(images, k)
112+
}
113+
114+
return images
115+
}

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: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
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+
"github.com/operator-framework/operator-registry/pkg/registry"
8+
)
9+
10+
const (
11+
// The yaml attribute that specifies the related images of the ClusterServiceVersion
12+
relatedImages = "relatedImages"
13+
)
414

515
// CreateCSVDescription creates a CSVDescription from a given CSV
6-
func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescription {
16+
func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion, csvJSON string) CSVDescription {
717
desc := CSVDescription{
818
DisplayName: csv.Spec.DisplayName,
919
Version: csv.Spec.Version,
@@ -16,6 +26,9 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
1626
InstallModes: csv.Spec.InstallModes,
1727
CustomResourceDefinitions: csv.Spec.CustomResourceDefinitions,
1828
APIServiceDefinitions: csv.Spec.APIServiceDefinitions,
29+
NativeAPIs: csv.Spec.NativeAPIs,
30+
MinKubeVersion: csv.Spec.MinKubeVersion,
31+
RelatedImages: GetImages(csvJSON),
1932
}
2033

2134
icons := make([]Icon, len(csv.Spec.Icon))
@@ -32,3 +45,34 @@ func CreateCSVDescription(csv *operatorsv1alpha1.ClusterServiceVersion) CSVDescr
3245

3346
return desc
3447
}
48+
49+
// GetImages returns a list of images listed in CSV (spec and deployments)
50+
func GetImages(csvJSON string) []string {
51+
var images []string
52+
53+
csv := &registry.ClusterServiceVersion{}
54+
err := json.Unmarshal([]byte(csvJSON), &csv)
55+
if err != nil {
56+
return images
57+
}
58+
59+
imageSet, err := csv.GetOperatorImages()
60+
if err != nil {
61+
return images
62+
}
63+
64+
relatedImgSet, err := csv.GetRelatedImages()
65+
if err != nil {
66+
return images
67+
}
68+
69+
for k := range relatedImgSet {
70+
imageSet[k] = struct{}{}
71+
}
72+
73+
for k := range imageSet {
74+
images = append(images, k)
75+
}
76+
77+
return images
78+
}

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

pkg/package-server/apis/operators/v1/zz_generated.conversion.go

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

pkg/package-server/apis/operators/v1/zz_generated.deepcopy.go

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

pkg/package-server/apis/operators/zz_generated.deepcopy.go

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

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

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

pkg/package-server/provider/registry.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ func newPackageManifest(ctx context.Context, logger *logrus.Entry, pkg *api.Pack
495495
manifest.Status.Channels = append(manifest.Status.Channels, operators.PackageChannel{
496496
Name: pkgChannel.GetName(),
497497
CurrentCSV: csv.GetName(),
498-
CurrentCSVDesc: operators.CreateCSVDescription(&csv),
498+
CurrentCSVDesc: operators.CreateCSVDescription(&csv, bundle.GetCsvJson()),
499499
})
500500

501501
if manifest.Status.DefaultChannel != "" && pkgChannel.GetName() == manifest.Status.DefaultChannel || !providerSet {

0 commit comments

Comments
 (0)