Skip to content

Commit 6a0df45

Browse files
committed
populate cluster config from client.authentication.k8s.io/exec extension
1 parent 83f460a commit 6a0df45

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

kubernetes/base/config/exec_provider.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def __init__(self, exec_config, cwd, cluster=None):
5858
else:
5959
self.cluster = None
6060
self.cwd = cwd or None
61-
61+
6262
@property
6363
def shell(self):
6464
# for windows systems `shell` should be `True`
@@ -81,6 +81,10 @@ def run(self, previous_response=None):
8181
kubernetes_exec_info['spec']['response'] = previous_response
8282
if self.cluster:
8383
kubernetes_exec_info['spec']['cluster'] = self.cluster.value
84+
for extension in self.cluster.value["extensions"]:
85+
if extension["name"] == "client.authentication.k8s.io/exec":
86+
kubernetes_exec_info["spec"]["cluster"]["config"] = extension["extension"]
87+
break
8488

8589
self.env['KUBERNETES_EXEC_INFO'] = json.dumps(kubernetes_exec_info)
8690
process = subprocess.Popen(

kubernetes/base/config/exec_provider_test.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,39 @@ def test_with_cluster_info(self, mock):
183183
obj = json.loads(mock.call_args.kwargs['env']['KUBERNETES_EXEC_INFO'])
184184
self.assertEqual(obj['spec']['cluster']['server'], 'name.company.com')
185185

186+
@mock.patch("subprocess.Popen")
187+
def test_with_cluster_info_from_exec_extension(self, mock):
188+
instance = mock.return_value
189+
instance.wait.return_value = 0
190+
instance.communicate.return_value = (self.output_ok, "")
191+
ep = ExecProvider(
192+
self.input_with_cluster,
193+
None,
194+
ConfigNode(
195+
"cluster",
196+
{
197+
"server": "name.company.com",
198+
"extensions": [
199+
{
200+
"name": "client.authentication.k8s.io/exec",
201+
"extension": {
202+
"namespace": "myproject",
203+
"name": "mycluster",
204+
},
205+
},
206+
],
207+
},
208+
),
209+
)
210+
result = ep.run()
211+
self.assertTrue(isinstance(result, dict))
212+
self.assertTrue("token" in result)
213+
214+
obj = json.loads(mock.call_args.kwargs["env"]["KUBERNETES_EXEC_INFO"])
215+
self.assertEqual(obj["spec"]["cluster"]["server"], "name.company.com")
216+
self.assertEqual(obj["spec"]["cluster"]["config"]["namespace"], "myproject")
217+
self.assertEqual(obj["spec"]["cluster"]["config"]["name"], "mycluster")
218+
186219

187220
if __name__ == '__main__':
188221
unittest.main()

0 commit comments

Comments
 (0)