@@ -65,6 +65,10 @@ def get_tag(tag: str | None = None) -> str:
6565 return tag or f"v{ ci_util .get_mz_version ()} --pr.g{ git .rev_parse ('HEAD' )} "
6666
6767
68+ def get_version (tag : str | None = None ) -> MzVersion :
69+ return MzVersion .parse_mz (get_tag (tag ))
70+
71+
6872def get_image (image : str , tag : str | None ) -> str :
6973 return f'{ image .rsplit (":" , 1 )[0 ]} :{ get_tag (tag )} '
7074
@@ -136,7 +140,9 @@ class Modification:
136140 pick_by_default : bool = True
137141
138142 def __init__ (self , value : Any ):
139- assert value in self .values (), f"Expected { value } to be in { self .values ()} "
143+ assert value in self .values (
144+ get_version ()
145+ ), f"Expected { value } to be in { self .values (get_version ())} "
140146 self .value = value
141147
142148 def to_dict (self ) -> dict [str , Any ]:
@@ -167,16 +173,16 @@ def from_dict(cls, data: dict[str, Any]) -> "Modification":
167173 return subclass (data ["value" ])
168174
169175 @classmethod
170- def values (cls ) -> list [Any ]:
176+ def values (cls , version : MzVersion ) -> list [Any ]:
171177 raise NotImplementedError
172178
173179 @classmethod
174180 def bad_values (cls ) -> list [Any ]:
175181 return cls .failed_reconciliation_values ()
176182
177183 @classmethod
178- def good_values (cls ) -> list [Any ]:
179- return [value for value in cls .values () if value not in cls .bad_values ()]
184+ def good_values (cls , version : MzVersion ) -> list [Any ]:
185+ return [value for value in cls .values (version ) if value not in cls .bad_values ()]
180186
181187 @classmethod
182188 def failed_reconciliation_values (cls ) -> list [Any ]:
@@ -199,7 +205,7 @@ def all_modifications() -> list[type[Modification]]:
199205
200206class LicenseKey (Modification ):
201207 @classmethod
202- def values (cls ) -> list [Any ]:
208+ def values (cls , version : MzVersion ) -> list [Any ]:
203209 return ["valid" , "invalid" , "del" ]
204210
205211 @classmethod
@@ -220,7 +226,9 @@ def modify(self, definition: dict[str, Any]) -> None:
220226 elif self .value == "del" :
221227 del definition ["secret" ]["stringData" ]["license_key" ]
222228 else :
223- raise ValueError (f"Unknown value { self .value } , only know { self .values ()} " )
229+ raise ValueError (
230+ f"Unknown value { self .value } , only know { self .values (get_version ())} "
231+ )
224232
225233 def validate (self , mods : dict [type [Modification ], Any ]) -> None :
226234 if MzVersion .parse_mz (mods [EnvironmentdImageRef ]) < MzVersion .parse_mz (
@@ -251,7 +259,7 @@ def check() -> None:
251259
252260class LicenseKeyCheck (Modification ):
253261 @classmethod
254- def values (cls ) -> list [Any ]:
262+ def values (cls , version : MzVersion ) -> list [Any ]:
255263 # TODO: Reenable False when fixed
256264 return [None , True ]
257265
@@ -281,7 +289,7 @@ def validate(self, mods: dict[type[Modification], Any]) -> None:
281289
282290class BalancerdEnabled (Modification ):
283291 @classmethod
284- def values (cls ) -> list [Any ]:
292+ def values (cls , version : MzVersion ) -> list [Any ]:
285293 return [True , False ]
286294
287295 @classmethod
@@ -322,7 +330,7 @@ def check() -> None:
322330
323331class BalancerdNodeSelector (Modification ):
324332 @classmethod
325- def values (cls ) -> list [Any ]:
333+ def values (cls , version : MzVersion ) -> list [Any ]:
326334 return [
327335 {},
328336 # TODO: Reenable when we create nodes with these labels
@@ -362,7 +370,7 @@ def check() -> None:
362370
363371class ConsoleEnabled (Modification ):
364372 @classmethod
365- def values (cls ) -> list [Any ]:
373+ def values (cls , version : MzVersion ) -> list [Any ]:
366374 return [True , False ]
367375
368376 @classmethod
@@ -404,7 +412,7 @@ def check() -> None:
404412
405413class EnableRBAC (Modification ):
406414 @classmethod
407- def values (cls ) -> list [Any ]:
415+ def values (cls , version : MzVersion ) -> list [Any ]:
408416 return [True , False ]
409417
410418 @classmethod
@@ -433,7 +441,7 @@ class EnvironmentdImageRef(Modification):
433441 pick_by_default = False
434442
435443 @classmethod
436- def values (cls ) -> list [Any ]:
444+ def values (cls , version : MzVersion ) -> list [Any ]:
437445 return [str (version ) for version in get_all_self_managed_versions ()] + [
438446 get_tag ()
439447 ]
@@ -472,7 +480,7 @@ class NumMaterializeEnvironments(Modification):
472480 pick_by_default = False
473481
474482 @classmethod
475- def values (cls ) -> list [Any ]:
483+ def values (cls , version : MzVersion ) -> list [Any ]:
476484 return [1 , 2 ]
477485
478486 @classmethod
@@ -539,7 +547,7 @@ def check() -> None:
539547
540548class TelemetryEnabled (Modification ):
541549 @classmethod
542- def values (cls ) -> list [Any ]:
550+ def values (cls , version : MzVersion ) -> list [Any ]:
543551 return [True , False ]
544552
545553 @classmethod
@@ -565,7 +573,7 @@ def validate(self, mods: dict[type[Modification], Any]) -> None:
565573
566574class TelemetrySegmentClientSide (Modification ):
567575 @classmethod
568- def values (cls ) -> list [Any ]:
576+ def values (cls , version : MzVersion ) -> list [Any ]:
569577 return [True , False ]
570578
571579 @classmethod
@@ -591,7 +599,7 @@ def validate(self, mods: dict[type[Modification], Any]) -> None:
591599
592600class ObservabilityEnabled (Modification ):
593601 @classmethod
594- def values (cls ) -> list [Any ]:
602+ def values (cls , version : MzVersion ) -> list [Any ]:
595603 return [True , False ]
596604
597605 @classmethod
@@ -607,7 +615,7 @@ def validate(self, mods: dict[type[Modification], Any]) -> None:
607615
608616class ObservabilityPodMetricsEnabled (Modification ):
609617 @classmethod
610- def values (cls ) -> list [Any ]:
618+ def values (cls , version : MzVersion ) -> list [Any ]:
611619 return [True , False ]
612620
613621 @classmethod
@@ -635,7 +643,7 @@ def validate(self, mods: dict[type[Modification], Any]) -> None:
635643
636644class ObservabilityPrometheusScrapeAnnotationsEnabled (Modification ):
637645 @classmethod
638- def values (cls ) -> list [Any ]:
646+ def values (cls , version : MzVersion ) -> list [Any ]:
639647 return [True , False ]
640648
641649 @classmethod
@@ -664,7 +672,7 @@ def validate(self, mods: dict[type[Modification], Any]) -> None:
664672# TODO: Fix in upgrade tests
665673# class BalancerdReplicas(Modification):
666674# @classmethod
667- # def values(cls) -> list[Any]:
675+ # def values(cls, version: MzVersion ) -> list[Any]:
668676# return [None, 1, 2]
669677#
670678# @classmethod
@@ -692,7 +700,7 @@ def validate(self, mods: dict[type[Modification], Any]) -> None:
692700
693701class ConsoleReplicas (Modification ):
694702 @classmethod
695- def values (cls ) -> list [Any ]:
703+ def values (cls , version : MzVersion ) -> list [Any ]:
696704 return [None , 1 , 2 ]
697705
698706 @classmethod
@@ -764,7 +772,7 @@ def validate_container_resources(
764772
765773class SwapEnabledGlobal (Modification ):
766774 @classmethod
767- def values (cls ) -> list [Any ]:
775+ def values (cls , version : MzVersion ) -> list [Any ]:
768776 return [True , False ]
769777
770778 @classmethod
@@ -817,7 +825,7 @@ def check_pods() -> None:
817825
818826class StorageClass (Modification ):
819827 @classmethod
820- def values (cls ) -> list [Any ]:
828+ def values (cls , version : MzVersion ) -> list [Any ]:
821829 return [True , False ]
822830
823831 @classmethod
@@ -870,7 +878,7 @@ def check_pods() -> None:
870878
871879class EnvironmentdResources (Modification ):
872880 @classmethod
873- def values (cls ) -> list [Any ]:
881+ def values (cls , version : MzVersion ) -> list [Any ]:
874882 return [
875883 None ,
876884 {
@@ -920,7 +928,7 @@ def check_pods() -> None:
920928
921929class BalancerdResources (Modification ):
922930 @classmethod
923- def values (cls ) -> list [Any ]:
931+ def values (cls , version : MzVersion ) -> list [Any ]:
924932 return [
925933 None ,
926934 {
@@ -975,7 +983,7 @@ def check_pods() -> None:
975983
976984class ConsoleResources (Modification ):
977985 @classmethod
978- def values (cls ) -> list [Any ]:
986+ def values (cls , version : MzVersion ) -> list [Any ]:
979987 return [
980988 None ,
981989 {
@@ -1025,11 +1033,14 @@ def check_pods() -> None:
10251033
10261034class AuthenticatorKind (Modification ):
10271035 @classmethod
1028- def values (cls ) -> list [Any ]:
1036+ def values (cls , version : MzVersion ) -> list [Any ]:
10291037 # Test None, Password (v0.147.7+), and Sasl (v0.147.16+)
1030- return ["None" ]
1031- # TODO: Reenable when database-issues#9899 is fixed
1032- # return ["None", "Password", "Sasl"]
1038+ result = ["None" ]
1039+ if version >= MzVersion .parse_mz ("v0.147.7" ):
1040+ result .append ("Password" )
1041+ if version >= MzVersion .parse_mz ("v0.147.16" ):
1042+ result .append ("Sasl" )
1043+ return result
10331044
10341045 @classmethod
10351046 def default (cls ) -> Any :
@@ -1526,6 +1537,7 @@ def workflow_default(c: Composition, parser: WorkflowArgumentParser) -> None:
15261537 definition ["secret" ] = materialize_setup [1 ]
15271538 definition ["materialize" ] = materialize_setup [2 ]
15281539
1540+ current_version = get_version (args .tag )
15291541 if args .orchestratord_override :
15301542 definition ["operator" ]["operator" ]["image" ]["tag" ] = get_tag (args .tag )
15311543 # TODO: database-issues#9696, makes environmentd -> clusterd connections fail
@@ -1584,13 +1596,14 @@ def get_mods() -> Iterator[list[Modification]]:
15841596 yield [NumMaterializeEnvironments (2 )]
15851597 elif properties == Properties .Individual :
15861598 for mod_class in mod_classes :
1587- for value in mod_class .values ():
1588- yield [mod_class (value )]
1599+ for value in mod_class .values (current_version ):
1600+ if value in mod_class .values (current_version ):
1601+ yield [mod_class (value )]
15891602 elif properties == Properties .Combine :
15901603 assert args .runtime
15911604 while time .time () < end_time :
15921605 yield [
1593- mod_class (rng .choice (mod_class .good_values ()))
1606+ mod_class (rng .choice (mod_class .good_values (current_version )))
15941607 for mod_class in mod_classes
15951608 ]
15961609 else :
@@ -1615,6 +1628,7 @@ def get_mods() -> Iterator[list[Modification]]:
16151628 versions = get_all_self_managed_versions ()
16161629 while time .time () < end_time :
16171630 selected_versions = sorted (list (rng .sample (versions , 2 )))
1631+ current_version = selected_versions [0 ]
16181632 try :
16191633 mod = next (mods_it )
16201634 except StopIteration :
@@ -1637,6 +1651,7 @@ def get_mods() -> Iterator[list[Modification]]:
16371651 while time .time () < end_time :
16381652 random .randint (2 , len (versions ))
16391653 selected_versions = sorted (list (rng .sample (versions , 2 )))
1654+ current_version = selected_versions [0 ]
16401655 try :
16411656 mod = next (mods_it )
16421657 except StopIteration :
0 commit comments