Skip to content

Commit 28d25b5

Browse files
committed
Use single _parse_permission_rules for update and revoke.
Remove duplicate _parse_update_rules_legacy and env parity self-check; add a focused test for non-apigroup edge case. Made-with: Cursor
1 parent 32ebc09 commit 28d25b5

File tree

2 files changed

+8
-51
lines changed

2 files changed

+8
-51
lines changed

provider-kubeconfig.py

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -84,34 +84,6 @@ def _parse_permission_rules(self, perms):
8484
rule_list.append(rule_group)
8585
return rule_list, resources
8686

87-
def _parse_update_rules_legacy(self, perms):
88-
"""Legacy update permission parse; runtime source of truth for update."""
89-
rule_list = []
90-
resources = []
91-
for api_group, res_actions in perms.items():
92-
for res in res_actions:
93-
for resource, verbs in res.items():
94-
if resource not in resources:
95-
resources.append(resource.strip())
96-
rule_group = {}
97-
if api_group == "non-apigroup":
98-
if "nonResourceURL" in resource:
99-
parts = resource.split("nonResourceURL::")
100-
non_res = parts[1].strip() if len(parts) > 1 else parts[0].strip()
101-
rule_group["nonResourceURLs"] = [non_res]
102-
rule_group["verbs"] = verbs
103-
else:
104-
rule_group["apiGroups"] = [api_group]
105-
rule_group["verbs"] = verbs
106-
if "resourceName" in resource:
107-
parts = resource.split("/resourceName::")
108-
rule_group["resources"] = [parts[0].strip()]
109-
rule_group["resourceNames"] = [parts[1].strip()]
110-
else:
111-
rule_group["resources"] = [resource]
112-
rule_list.append(rule_group)
113-
return rule_list, resources
114-
11587
def _read_perm_configmap_resources(self, sa, namespace, kubeconfig):
11688
cfg_map_name = sa + "-perms"
11789
cfg_map_filename = sa + "-perms.txt"
@@ -678,11 +650,7 @@ def _apply_provider_rbac(self, sa, namespace, kubeconfig):
678650
def _update_rbac(self, permissionfile, sa, namespace, kubeconfig):
679651
"""Add permissions from JSON/YAML file to provider (update command)."""
680652
perms = self._load_permission_data(permissionfile)
681-
rule_list, new_resources = self._parse_update_rules_legacy(perms)
682-
if os.getenv("KUBEPLUS_UPDATE_EQ_CHECK", "0") == "1":
683-
pq_rules, pq_resources = self._parse_permission_rules(perms)
684-
self._assert_rule_parity("update-parser", rule_list, pq_rules)
685-
self._assert_all_resources_parity("update-parser", new_resources, pq_resources)
653+
rule_list, new_resources = self._parse_permission_rules(perms)
686654

687655
role = {
688656
"apiVersion": "rbac.authorization.k8s.io/v1",

tests/test_provider_kubeconfig.py

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -133,24 +133,13 @@ def test_load_permission_data_accepts_yaml(self):
133133
finally:
134134
os.remove(path)
135135

136-
def test_update_legacy_parser_matches_shared_parser(self):
137-
"""_parse_permission_rules must match legacy update parse (used by revoke vs update)."""
138-
perms = {
139-
"apps": [
140-
{"deployments": ["get", "create"]},
141-
{"deployments/resourceName::sample": ["get"]},
142-
],
143-
"non-apigroup": [
144-
{"nonResourceURL::/metrics": ["get"]},
145-
{"invalid-without-nonResourceURL-marker": ["get"]},
146-
],
147-
}
148-
legacy_rules, legacy_resources = self.generator._parse_update_rules_legacy(perms)
149-
shared_rules, shared_resources = self.generator._parse_permission_rules(perms)
150-
self.generator._assert_rule_parity("update-parser", legacy_rules, shared_rules)
151-
self.generator._assert_all_resources_parity(
152-
"update-parser", legacy_resources, shared_resources
153-
)
136+
def test_parse_permission_rules_non_apigroup_without_marker_appends_empty_rule(self):
137+
"""non-apigroup entries without nonResourceURL still append a rule (legacy behavior)."""
138+
perms = {"non-apigroup": [{"not-a-url": ["get"]}]}
139+
rules, resources = self.generator._parse_permission_rules(perms)
140+
self.assertEqual(len(rules), 1)
141+
self.assertEqual(rules[0], {})
142+
self.assertEqual(resources, ["not-a-url"])
154143

155144

156145
class TestKubeconfigIntegration(unittest.TestCase):

0 commit comments

Comments
 (0)