Skip to content
This repository was archived by the owner on Mar 13, 2022. It is now read-only.

Commit 95858d5

Browse files
authored
Merge pull request #141 from rogerhmar/fix_issue_84
Fix issue 84: Update _load_azure_token to hande str and int
2 parents 8b748a7 + 6edea7b commit 95858d5

File tree

2 files changed

+171
-1
lines changed

2 files changed

+171
-1
lines changed

Diff for: config/kube_config.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,21 @@ def _load_auth_provider_token(self):
221221
if provider['name'] == 'oidc':
222222
return self._load_oid_token(provider)
223223

224+
def _azure_is_expired(self, provider):
225+
expires_on = provider['config']['expires-on']
226+
if expires_on.isdigit():
227+
return int(expires_on) < time.time()
228+
else:
229+
exp_time = time.strptime(expires_on, '%Y-%m-%d %H:%M:%S.%f')
230+
return exp_time < time.gmtime()
231+
224232
def _load_azure_token(self, provider):
225233
if 'config' not in provider:
226234
return
227235
if 'access-token' not in provider['config']:
228236
return
229237
if 'expires-on' in provider['config']:
230-
if int(provider['config']['expires-on']) < time.gmtime():
238+
if self._azure_is_expired(provider):
231239
self._refresh_azure_token(provider['config'])
232240
self.token = 'Bearer %s' % provider['config']['access-token']
233241
return self.token

Diff for: config/kube_config_test.py

+162
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ def _raise_exception(st):
130130

131131
TEST_OIDC_CA = _base64(TEST_CERTIFICATE_AUTH)
132132

133+
TEST_AZURE_LOGIN = TEST_OIDC_LOGIN
134+
TEST_AZURE_TOKEN = "test-azure-token"
135+
TEST_AZURE_TOKEN_FULL = "Bearer " + TEST_AZURE_TOKEN
136+
133137

134138
class BaseTestCase(unittest.TestCase):
135139

@@ -420,6 +424,41 @@ class TestKubeConfigLoader(BaseTestCase):
420424
"user": "oidc"
421425
}
422426
},
427+
{
428+
"name": "azure",
429+
"context": {
430+
"cluster": "default",
431+
"user": "azure"
432+
}
433+
},
434+
{
435+
"name": "azure_num",
436+
"context": {
437+
"cluster": "default",
438+
"user": "azure_num"
439+
}
440+
},
441+
{
442+
"name": "azure_str",
443+
"context": {
444+
"cluster": "default",
445+
"user": "azure_str"
446+
}
447+
},
448+
{
449+
"name": "azure_num_error",
450+
"context": {
451+
"cluster": "default",
452+
"user": "azure_str_error"
453+
}
454+
},
455+
{
456+
"name": "azure_str_error",
457+
"context": {
458+
"cluster": "default",
459+
"user": "azure_str_error"
460+
}
461+
},
423462
{
424463
"name": "expired_oidc",
425464
"context": {
@@ -603,6 +642,89 @@ class TestKubeConfigLoader(BaseTestCase):
603642
}
604643
}
605644
},
645+
{
646+
"name": "azure",
647+
"user": {
648+
"auth-provider": {
649+
"config": {
650+
"access-token": TEST_AZURE_TOKEN,
651+
"apiserver-id": "ApiserverId",
652+
"environment": "AzurePublicCloud",
653+
"refresh-token": "refreshToken",
654+
"tenant-id": "9d2ac018-e843-4e14-9e2b-4e0ddac75433"
655+
},
656+
"name": "azure"
657+
}
658+
}
659+
},
660+
{
661+
"name": "azure_num",
662+
"user": {
663+
"auth-provider": {
664+
"config": {
665+
"access-token": TEST_AZURE_TOKEN,
666+
"apiserver-id": "ApiserverId",
667+
"environment": "AzurePublicCloud",
668+
"expires-in": "0",
669+
"expires-on": "156207275",
670+
"refresh-token": "refreshToken",
671+
"tenant-id": "9d2ac018-e843-4e14-9e2b-4e0ddac75433"
672+
},
673+
"name": "azure"
674+
}
675+
}
676+
},
677+
{
678+
"name": "azure_str",
679+
"user": {
680+
"auth-provider": {
681+
"config": {
682+
"access-token": TEST_AZURE_TOKEN,
683+
"apiserver-id": "ApiserverId",
684+
"environment": "AzurePublicCloud",
685+
"expires-in": "0",
686+
"expires-on": "2018-10-18 00:52:29.044727",
687+
"refresh-token": "refreshToken",
688+
"tenant-id": "9d2ac018-e843-4e14-9e2b-4e0ddac75433"
689+
},
690+
"name": "azure"
691+
}
692+
}
693+
},
694+
{
695+
"name": "azure_str_error",
696+
"user": {
697+
"auth-provider": {
698+
"config": {
699+
"access-token": TEST_AZURE_TOKEN,
700+
"apiserver-id": "ApiserverId",
701+
"environment": "AzurePublicCloud",
702+
"expires-in": "0",
703+
"expires-on": "2018-10-18 00:52",
704+
"refresh-token": "refreshToken",
705+
"tenant-id": "9d2ac018-e843-4e14-9e2b-4e0ddac75433"
706+
},
707+
"name": "azure"
708+
}
709+
}
710+
},
711+
{
712+
"name": "azure_num_error",
713+
"user": {
714+
"auth-provider": {
715+
"config": {
716+
"access-token": TEST_AZURE_TOKEN,
717+
"apiserver-id": "ApiserverId",
718+
"environment": "AzurePublicCloud",
719+
"expires-in": "0",
720+
"expires-on": "-1",
721+
"refresh-token": "refreshToken",
722+
"tenant-id": "9d2ac018-e843-4e14-9e2b-4e0ddac75433"
723+
},
724+
"name": "azure"
725+
}
726+
}
727+
},
606728
{
607729
"name": "expired_oidc",
608730
"user": {
@@ -886,6 +1008,46 @@ def test_oidc_fails_if_invalid_padding_length(self):
8861008
None,
8871009
)
8881010

1011+
def test_azure_no_refresh(self):
1012+
loader = KubeConfigLoader(
1013+
config_dict=self.TEST_KUBE_CONFIG,
1014+
active_context="azure",
1015+
)
1016+
self.assertTrue(loader._load_auth_provider_token())
1017+
self.assertEqual(TEST_AZURE_TOKEN_FULL, loader.token)
1018+
1019+
def test_azure_with_expired_num(self):
1020+
loader = KubeConfigLoader(
1021+
config_dict=self.TEST_KUBE_CONFIG,
1022+
active_context="azure_num",
1023+
)
1024+
provider = loader._user['auth-provider']
1025+
self.assertTrue(loader._azure_is_expired(provider))
1026+
1027+
def test_azure_with_expired_str(self):
1028+
loader = KubeConfigLoader(
1029+
config_dict=self.TEST_KUBE_CONFIG,
1030+
active_context="azure_str",
1031+
)
1032+
provider = loader._user['auth-provider']
1033+
self.assertTrue(loader._azure_is_expired(provider))
1034+
1035+
def test_azure_with_expired_str_error(self):
1036+
loader = KubeConfigLoader(
1037+
config_dict=self.TEST_KUBE_CONFIG,
1038+
active_context="azure_str_error",
1039+
)
1040+
provider = loader._user['auth-provider']
1041+
self.assertRaises(ValueError, loader._azure_is_expired, provider)
1042+
1043+
def test_azure_with_expired_int_error(self):
1044+
loader = KubeConfigLoader(
1045+
config_dict=self.TEST_KUBE_CONFIG,
1046+
active_context="azure_num_error",
1047+
)
1048+
provider = loader._user['auth-provider']
1049+
self.assertRaises(ValueError, loader._azure_is_expired, provider)
1050+
8891051
def test_user_pass(self):
8901052
expected = FakeConfig(host=TEST_HOST, token=TEST_BASIC_TOKEN)
8911053
actual = FakeConfig()

0 commit comments

Comments
 (0)