1
+ import collections
1
2
import logging
2
3
import json
3
4
import semver
@@ -238,7 +239,7 @@ def _csv_validation(self, bundle):
238
239
239
240
def _csv_spec_validation (self , spec , bundleData ):
240
241
valid = True
241
-
242
+ validCrdVersions = collections . defaultdict ( list )
242
243
warnSpecList = ["displayName" , "description" , "icon" ,
243
244
"version" , "provider" , "maturity" ]
244
245
@@ -322,10 +323,9 @@ def _csv_spec_validation(self, spec, bundleData):
322
323
'not in CRD.spec.versions list' )
323
324
valid = False
324
325
if 'version' in crd ['spec' ]:
325
- if csvOwnedCrd ['version' ] != crd ['spec' ]['version' ]:
326
- self ._log_error ('CRD.spec.version does not match '
327
- 'CSV.spec.crd.owned.version' )
328
- valid = False
326
+ validCrdVersions [csvOwnedCrd ['name' ]].append (
327
+ csvOwnedCrd ['version' ] == crd ['spec' ]['version' ]
328
+ )
329
329
330
330
if 'name' in csvOwnedCrd :
331
331
if 'spec' in crd :
@@ -339,6 +339,15 @@ def _csv_spec_validation(self, spec, bundleData):
339
339
"match "
340
340
"CSV.spec.crd.owned.name" )
341
341
valid = False
342
+
343
+ for name , validVersions in validCrdVersions .items ():
344
+ # most likely we will have just one version per CRD; should we
345
+ # have more than one single version, it is sufficient that just
346
+ # one, usually the latest, matches.
347
+ if not any (validVersions ):
348
+ self ._log_error ('CRD.spec.version does not match '
349
+ 'CSV.spec.crd.owned.version' )
350
+ valid = False
342
351
return valid
343
352
344
353
def _csv_spec_install_validation (self , install ):
0 commit comments