Skip to content

Commit 0c56ef1

Browse files
authored
Merge pull request #2399 from ma-ts/master
feat: populate cluster config from client.authentication.k8s.io/exec …
2 parents ab318a5 + ec65195 commit 0c56ef1

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

kubernetes/base/config/exec_provider.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ 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+
if self.cluster.value.get("extensions"):
85+
for extension in self.cluster.value["extensions"]:
86+
if extension["name"] == "client.authentication.k8s.io/exec":
87+
kubernetes_exec_info["spec"]["cluster"]["config"] = extension["extension"]
88+
break
8489

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

kubernetes/base/config/exec_provider_test.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,38 @@ 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")
186218

187219
if __name__ == '__main__':
188220
unittest.main()

0 commit comments

Comments
 (0)