@@ -3,6 +3,7 @@ package olm
3
3
import (
4
4
"encoding/json"
5
5
"fmt"
6
+ "strconv"
6
7
7
8
"github.com/sirupsen/logrus"
8
9
@@ -11,11 +12,13 @@ import (
11
12
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install"
12
13
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
13
14
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
+ "github.com/coreos/go-semver/semver"
14
16
)
15
17
16
18
func (a * Operator ) requirementStatus (strategyDetailsDeployment * install.StrategyDetailsDeployment , crdDescs []v1alpha1.CRDDescription ,
17
19
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 ) {
19
22
met = true
20
23
21
24
// Check for CRDs
@@ -177,6 +180,49 @@ func (a *Operator) requirementStatus(strategyDetailsDeployment *install.Strategy
177
180
}
178
181
}
179
182
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
+
180
226
return
181
227
}
182
228
@@ -292,7 +338,7 @@ func (a *Operator) requirementAndPermissionStatus(csv *v1alpha1.ClusterServiceVe
292
338
return false , nil , fmt .Errorf ("could not cast install strategy as type %T" , strategyDetailsDeployment )
293
339
}
294
340
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 )
296
342
297
343
rbacLister := a .lister .RbacV1 ()
298
344
roleLister := rbacLister .RoleLister ()
0 commit comments