1111import logging
1212import yaml
1313
14+ import re
15+
1416from os import path , listdir
17+ from packaging .version import Version
1518
1619from jinja2 import Environment
1720from kubernetes import client as k8s_client
@@ -86,6 +89,29 @@ def _should_apply_preinstall_mas_rbac_file(fileName: str, adminMode: str) -> boo
8689 return False
8790
8891
92+ def _resolve_rbac_version (rbacDir : str , masVersion : str ) -> str | None :
93+ """Return the highest x.y version directory under rbacDir that is <= masVersion.
94+
95+ Only directories whose names match the 'x.y' pattern are considered.
96+ Returns None if no usable directory exists.
97+ """
98+ if not path .isdir (rbacDir ):
99+ return None
100+
101+ target = Version (masVersion )
102+ best : Version | None = None
103+
104+ for entry in listdir (rbacDir ):
105+ if not re .fullmatch (r"\d+\.\d+" , entry ):
106+ continue
107+ candidate = Version (entry )
108+ if candidate <= target :
109+ if best is None or candidate > best :
110+ best = candidate
111+
112+ return str (best ) if best is not None else None
113+
114+
89115def _collect_preinstall_mas_rbac_files_from_source (
90116 sourceOperatorsRoot : str ,
91117 masVersion : str ,
@@ -106,11 +132,16 @@ def _collect_preinstall_mas_rbac_files_from_source(
106132 logger .debug (f"Skipping missing operator root { operatorRoot } " )
107133 continue
108134
109- versionDir = path .join (operatorRoot , "rbac" , masVersion )
110- if not path .isdir (versionDir ):
111- logger .debug (f"Skipping missing RBAC version directory { versionDir } " )
135+ rbacDir = path .join (operatorRoot , "rbac" )
136+ resolvedVersion = _resolve_rbac_version (rbacDir , masVersion )
137+ if resolvedVersion is None :
138+ logger .debug (f"No usable RBAC version directory for { operatorName } at { masVersion } under { rbacDir } " )
112139 continue
113140
141+ if resolvedVersion != masVersion :
142+ logger .debug (f"RBAC version resolved: { operatorName } requested={ masVersion } resolved={ resolvedVersion } " )
143+
144+ versionDir = path .join (rbacDir , resolvedVersion )
114145 for manifestName in sorted (listdir (versionDir )):
115146 manifestFile = path .join (versionDir , manifestName )
116147 if not path .isfile (manifestFile ):
0 commit comments