Skip to content

Commit f05c143

Browse files
Jeff Peelerdinhxuanvu
authored andcommitted
WIP: add new minimum version field for kube
Check new CSV field against server version reported from discovery and fail requirement check if version is earlier than necessary.
1 parent 23f22b8 commit f05c143

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

pkg/api/apis/operators/v1alpha1/clusterserviceversion_types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ type ClusterServiceVersionSpec struct {
133133
CustomResourceDefinitions CustomResourceDefinitions `json:"customresourcedefinitions,omitempty"`
134134
APIServiceDefinitions APIServiceDefinitions `json:"apiservicedefinitions,omitempty"`
135135
NativeAPIs []metav1.GroupVersionKind `json:"nativeAPIs,omitempty"`
136+
MinKubeVersion string `json:"minKubeVersion,omitempty"`
136137
DisplayName string `json:"displayName"`
137138
Description string `json:"description,omitempty"`
138139
Keywords []string `json:"keywords,omitempty"`
@@ -478,3 +479,4 @@ func (csv ClusterServiceVersion) GetOwnedAPIServiceDescriptions() []APIServiceDe
478479

479480
return descs
480481
}
482+

pkg/controller/operators/olm/requirements.go

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package olm
33
import (
44
"encoding/json"
55
"fmt"
6+
"strconv"
67

78
"github.com/sirupsen/logrus"
89

@@ -11,11 +12,13 @@ import (
1112
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install"
1213
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
1314
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15+
"github.com/coreos/go-semver/semver"
1416
)
1517

1618
func (a *Operator) requirementStatus(strategyDetailsDeployment *install.StrategyDetailsDeployment, crdDescs []v1alpha1.CRDDescription,
1719
ownedAPIServiceDescs []v1alpha1.APIServiceDescription, requiredAPIServiceDescs []v1alpha1.APIServiceDescription,
18-
requiredNativeAPIs []metav1.GroupVersionKind) (met bool, statuses []v1alpha1.RequirementStatus) {
20+
requiredNativeAPIs []metav1.GroupVersionKind,
21+
minKubeVersion string) (met bool, statuses []v1alpha1.RequirementStatus) {
1922
met = true
2023

2124
// Check for CRDs
@@ -177,6 +180,49 @@ func (a *Operator) requirementStatus(strategyDetailsDeployment *install.Strategy
177180
}
178181
}
179182

183+
status := v1alpha1.RequirementStatus{
184+
Group: "apiextensions.k8s.io",
185+
Version: "v1beta1",
186+
Kind: "CustomResourceDefinition",
187+
// TODO: refactor?
188+
Name: "TODO: csv name, needs refactoring to get name",
189+
}
190+
191+
serverVersionInfo, err := a.client.Discovery().ServerVersion()
192+
if err != nil {
193+
// TODO: this status may be wrong
194+
status.Status = v1alpha1.RequirementStatusReasonPresentNotSatisfied
195+
status.Message = "Server version discovery error"
196+
met = false
197+
statuses = append(statuses, status)
198+
}
199+
200+
// copy necessary fields into comparable for semver
201+
majorInt, err := strconv.ParseInt(serverVersionInfo.Major, 10, 64)
202+
minorInt, err := strconv.ParseInt(serverVersionInfo.Minor, 10, 64)
203+
204+
serverVersionComparable := semver.Version{
205+
Major: majorInt,
206+
Minor: minorInt,
207+
}
208+
209+
csvVersionInfo, err := semver.NewVersion(minKubeVersion)
210+
if err != nil {
211+
// TODO: this status may be wrong
212+
status.Status = v1alpha1.RequirementStatusReasonPresentNotSatisfied
213+
status.Message = "CSV version parsing error"
214+
met = false
215+
statuses = append(statuses, status)
216+
}
217+
218+
if csvVersionInfo.Compare(serverVersionComparable) < 0 {
219+
// TODO: this status may be wrong
220+
status.Status = v1alpha1.RequirementStatusReasonPresentNotSatisfied
221+
status.Message = "CSV version requirement not met"
222+
met = false
223+
statuses = append(statuses, status)
224+
}
225+
180226
return
181227
}
182228

@@ -292,7 +338,7 @@ func (a *Operator) requirementAndPermissionStatus(csv *v1alpha1.ClusterServiceVe
292338
return false, nil, fmt.Errorf("could not cast install strategy as type %T", strategyDetailsDeployment)
293339
}
294340

295-
reqMet, reqStatuses := a.requirementStatus(strategyDetailsDeployment, csv.GetAllCRDDescriptions(), csv.GetOwnedAPIServiceDescriptions(), csv.GetRequiredAPIServiceDescriptions(), csv.Spec.NativeAPIs)
341+
reqMet, reqStatuses := a.requirementStatus(strategyDetailsDeployment, csv.GetAllCRDDescriptions(), csv.GetOwnedAPIServiceDescriptions(), csv.GetRequiredAPIServiceDescriptions(), csv.Spec.NativeAPIs, csv.Spec.MinKubeVersion)
296342

297343
rbacLister := a.lister.RbacV1()
298344
roleLister := rbacLister.RoleLister()

0 commit comments

Comments
 (0)