@@ -385,22 +385,31 @@ class TestKubeutil(unittest.TestCase):
385
385
def setUp (self , _locate_kubelet ):
386
386
self .kubeutil = KubeUtil ()
387
387
388
- def test_init_ssl_settings (self ):
388
+ @mock .patch ('os.path.exists' , return_value = True )
389
+ @mock .patch ('utils.kubernetes.kubeutil.KubeUtil.get_auth_token' , return_value = 'tkn' )
390
+ def test_init_tls_settings (self , * args ):
391
+ # kubelet
389
392
instances = [
390
393
# (instance, expected_result)
391
- ({}, {'verify ' : True }),
392
- ({'kubelet_ssl_verify ' : False }, {'verify ' : False }),
393
- ({'kubelet_ssl_verify ' : True }, {'verify ' : True }),
394
- ({'kubelet_ssl_verify ' : 'foo.pem' }, {'verify ' : 'foo.pem' }),
395
- ({'kubelet_cert' : 'foo.pem' }, {'verify ' : 'foo.pem' }),
394
+ ({}, {'kubelet_verify ' : True , 'bearer_token' : 'tkn' }),
395
+ ({'kubelet_tls_verify ' : False }, {'kubelet_verify ' : False , 'bearer_token' : 'tkn' }),
396
+ ({'kubelet_tls_verify ' : True }, {'kubelet_verify ' : True , 'bearer_token' : 'tkn' }),
397
+ ({'kubelet_tls_verify ' : 'foo.pem' }, {'kubelet_verify ' : 'foo.pem' , 'bearer_token' : 'tkn ' }),
398
+ ({'kubelet_cert' : 'foo.pem' }, {'kubelet_verify ' : 'foo.pem' , 'bearer_token' : 'tkn ' }),
396
399
({'kubelet_client_crt' : 'client.crt' , 'kubelet_client_key' : 'client.key' },
397
- {'verify ' : True , 'kubelet_client_cert' : ('client.crt' , 'client.key' )}),
398
- ({'kubelet_ssl_verify ' : True , 'kubelet_client_crt' : 'client.crt' }, {'verify ' : True }),
399
- ({'kubelet_client_crt' : 'client.crt' }, {'verify ' : True })
400
+ {'kubelet_verify ' : True , 'kubelet_client_cert' : ('client.crt' , 'client.key' ), 'bearer_token' : 'tkn' }),
401
+ ({'kubelet_tls_verify ' : True , 'kubelet_client_crt' : 'client.crt' }, {'kubelet_verify ' : True , 'bearer_token' : 'tkn' }),
402
+ ({'kubelet_client_crt' : 'client.crt' }, {'kubelet_verify ' : True , 'bearer_token' : 'tkn' })
400
403
]
401
404
for instance , result in instances :
402
- self .assertEqual (self .kubeutil ._init_ssl_settings (instance ), result )
405
+ self .assertEqual (self .kubeutil ._init_tls_settings (instance ), result )
403
406
407
+ # apiserver
408
+ instance = {'apiserver_client_crt' : 'foo.crt' , 'apiserver_client_key' : 'foo.key' }
409
+ expected_res = {'apiserver_client_cert' : ('foo.crt' , 'foo.key' ), 'kubelet_verify' : True , 'bearer_token' : 'tkn' }
410
+ self .assertEqual (self .kubeutil ._init_tls_settings (instance ), expected_res )
411
+ with mock .patch ('utils.kubernetes.kubeutil.os.path.exists' , return_value = False ):
412
+ self .assertEqual (self .kubeutil ._init_tls_settings (instance ), {'kubelet_verify' : True , 'bearer_token' : 'tkn' })
404
413
405
414
##### Test _locate_kubelet #####
406
415
@@ -419,7 +428,7 @@ def test_locate_kubelet_no_auth_no_ssl(self, _get_hostname):
419
428
({'kubelet_port' : '1337' }, 'http://test_docker_host:1337' ),
420
429
({'host' : 'test_explicit_host' , 'kubelet_port' : '1337' }, 'http://test_explicit_host:1337' )
421
430
]
422
- with mock .patch ('utils.kubernetes.kubeutil.KubeUtil.retrieve_kubelet_url ' , return_value = True ):
431
+ with mock .patch ('utils.kubernetes.kubeutil.KubeUtil.perform_kubelet_query ' , return_value = True ):
423
432
for instance , result in no_auth_no_ssl_instances :
424
433
self .assertEqual (self .kubeutil ._locate_kubelet (instance ), result )
425
434
@@ -434,13 +443,13 @@ def test_locate_kubelet_no_auth_no_verify(self, _get_hostname):
434
443
]
435
444
436
445
def side_effect (url ):
437
- """Mock KubeUtil.retrieve_kubelet_url """
446
+ """Mock KubeUtil.perform_kubelet_query """
438
447
if url .startswith ('https://' ):
439
448
return True
440
449
else :
441
450
raise Exception ()
442
451
443
- with mock .patch ('utils.kubernetes.kubeutil.KubeUtil.retrieve_kubelet_url ' , side_effect = side_effect ):
452
+ with mock .patch ('utils.kubernetes.kubeutil.KubeUtil.perform_kubelet_query ' , side_effect = side_effect ):
444
453
for instance , result in no_auth_no_verify_instances :
445
454
self .assertEqual (self .kubeutil ._locate_kubelet (instance ), result )
446
455
@@ -449,65 +458,58 @@ def side_effect(url):
449
458
@mock .patch ('utils.kubernetes.kubeutil.KubeUtil.get_auth_token' , return_value = 'foo' )
450
459
def test_locate_kubelet_verify_and_auth (self , * args ):
451
460
"""
452
- Test kubelet connection with SSL . Also look for auth token.
461
+ Test kubelet connection with TLS . Also look for auth token.
453
462
"""
454
463
no_auth_instances = [
455
- # instance, ssl_settings , expected_result
456
- ({}, {'verify ' : True }, 'https://test_k8s_host:10250' ),
457
- ({'kubelet_port' : '1337' }, {'verify ' : 'test.pem' }, 'https://test_k8s_host:1337' ),
464
+ # instance, tls_settings , expected_result
465
+ ({}, {'kubelet_verify ' : True }, 'https://test_k8s_host:10250' ),
466
+ ({'kubelet_port' : '1337' }, {'kubelet_verify ' : 'test.pem' }, 'https://test_k8s_host:1337' ),
458
467
(
459
468
{'host' : 'test_explicit_host' },
460
- {'verify ' : True , 'kubelet_client_cert' : ('client.crt' , 'client.key' )},
469
+ {'kubelet_verify ' : True , 'kubelet_client_cert' : ('client.crt' , 'client.key' )},
461
470
'https://test_explicit_host:10250'
462
471
),
463
472
(
464
473
{'host' : 'test_explicit_host' , 'kubelet_port' : '1337' },
465
- {'verify ' : True },
474
+ {'kubelet_verify ' : True },
466
475
'https://test_explicit_host:1337'
467
476
),
468
477
]
469
478
470
479
def side_effect (url , ** kwargs ):
471
- """Mock KubeUtil.retrieve_kubelet_url """
480
+ """Mock KubeUtil.perform_kubelet_query """
472
481
if url .startswith ('https://' ) and '10255' not in url :
473
482
return True
474
483
else :
475
484
raise Exception ()
476
485
477
- # no auth / SSL with verify
478
- for instance , ssl_settings , result in no_auth_instances :
486
+ # no auth / TLS with verify
487
+ for instance , tls_settings , result in no_auth_instances :
479
488
with mock .patch ('utils.kubernetes.kubeutil.requests' ) as req :
480
489
req .get = mock .MagicMock (side_effect = side_effect )
481
- self .kubeutil .ssl_settings = ssl_settings
490
+ self .kubeutil .tls_settings = tls_settings
482
491
self .assertEqual (self .kubeutil ._locate_kubelet (instance ), result )
483
492
req .get .assert_called_with (result + '/healthz' , # test endpoint
484
493
timeout = 10 ,
485
- verify = ssl_settings .get ('verify ' , False ),
486
- cert = ssl_settings . get ( ' kubelet_client_cert') ,
487
- headers = { 'Authorization' : 'Bearer foo' }, # auth
494
+ verify = tls_settings .get ('kubelet_verify ' , True ),
495
+ headers = { 'Authorization' : 'Bearer foo' } if ' kubelet_client_cert' not in tls_settings else None ,
496
+ cert = tls_settings . get ( 'kubelet_client_cert' ),
488
497
params = {'verbose' : True }
489
498
)
490
499
491
500
@mock .patch ('utils.kubernetes.kubeutil.KubeUtil.get_auth_token' , return_value = 'foo' )
492
501
def test_get_node_hostname (self , _get_auth_tkn ):
493
502
node_lists = [
494
503
(json .loads (Fixtures .read_file ('filtered_node_list_1_4.json' , string_escape = False )), 'ip-10-0-0-179' ),
495
- ({'items' : [{'foo' : 'bar' }]}, None )
496
- ]
497
-
498
- exception_node_lists = [
499
- {'items' : []},
500
- {'items' : [{'foo' : 'bar' }, {'bar' : 'foo' }]}
504
+ ({'items' : [{'foo' : 'bar' }]}, None ),
505
+ ({'items' : []}, None ),
506
+ ({'items' : [{'foo' : 'bar' }, {'bar' : 'foo' }]}, None )
501
507
]
502
508
503
509
for node_list , expected_result in node_lists :
504
510
with mock .patch ('utils.kubernetes.kubeutil.KubeUtil.retrieve_json_auth' , return_value = node_list ):
505
511
self .assertEqual (self .kubeutil .get_node_hostname ('ip-10-0-0-179' ), expected_result )
506
512
507
- for node_list in exception_node_lists :
508
- with mock .patch ('utils.kubernetes.kubeutil.KubeUtil.retrieve_json_auth' , return_value = node_list ):
509
- self .assertRaises (Exception , self .kubeutil .get_node_hostname , 'ip-10-0-0-179' )
510
-
511
513
@mock .patch ('utils.kubernetes.KubeUtil.retrieve_pods_list' , side_effect = ['foo' ])
512
514
@mock .patch ('utils.kubernetes.KubeUtil.extract_kube_labels' )
513
515
def test_get_kube_labels (self , extract_kube_labels , retrieve_pods_list ):
@@ -551,7 +553,7 @@ def test_extract_kube_labels(self):
551
553
labels = set (inn for out in res .values () for inn in out )
552
554
self .assertEqual (len (labels ), 3 )
553
555
554
- @mock .patch ('utils.kubernetes.kubeutil.KubeUtil.retrieve_kubelet_url ' )
556
+ @mock .patch ('utils.kubernetes.kubeutil.KubeUtil.perform_kubelet_query ' )
555
557
def test_retrieve_pods_list (self , retrieve_url ):
556
558
self .kubeutil .retrieve_pods_list ()
557
559
retrieve_url .assert_called_twice_with (self .kubeutil .pods_list_url , verbose = True , timeout = 10 )
@@ -568,7 +570,7 @@ def test_retrieve_metrics(self, retrieve_json):
568
570
569
571
@mock .patch ('utils.kubernetes.kubeutil.KubeUtil.get_auth_token' , return_value = 'foo' )
570
572
@mock .patch ('utils.kubernetes.kubeutil.requests' )
571
- def test_retrieve_kubelet_url (self , req , _get_auth_tkn ):
573
+ def test_perform_kubelet_query (self , req , _get_auth_tkn ):
572
574
base_params = {'timeout' : 10 , 'verify' : False ,
573
575
'params' : {'verbose' : True }, 'cert' : None , 'headers' : None }
574
576
@@ -580,15 +582,15 @@ def test_retrieve_kubelet_url(self, req, _get_auth_tkn):
580
582
instances = [
581
583
('http://test.com' , {}, dict (base_params .items () + verify_true .items ())),
582
584
('https://test.com' , {}, dict (base_params .items () + verify_true .items () + auth_token_header .items ())),
583
- ('https://test.com' , {'verify ' : True }, dict (base_params .items () + verify_true .items () + auth_token_header .items ())),
584
- ('https://test.com' , {'verify ' : 'kubelet.pem' }, dict (base_params .items () + verify_cert .items () + auth_token_header .items ())),
585
+ ('https://test.com' , {'kubelet_verify ' : True }, dict (base_params .items () + verify_true .items () + auth_token_header .items ())),
586
+ ('https://test.com' , {'kubelet_verify ' : 'kubelet.pem' }, dict (base_params .items () + verify_cert .items () + auth_token_header .items ())),
585
587
('https://test.com' , {'kubelet_client_cert' : ('client.crt' , 'client.key' )},
586
- dict (base_params .items () + verify_true .items () + client_cert .items () + auth_token_header . items () )),
588
+ dict (base_params .items () + verify_true .items () + client_cert .items ())),
587
589
]
588
590
for url , ssl_context , expected_params in instances :
589
591
req .get .reset_mock ()
590
- self .kubeutil .ssl_settings = ssl_context
591
- self .kubeutil .retrieve_kubelet_url (url )
592
+ self .kubeutil .tls_settings = ssl_context
593
+ self .kubeutil .perform_kubelet_query (url )
592
594
req .get .assert_called_with (url , ** expected_params )
593
595
594
596
@mock .patch ('utils.kubernetes.kubeutil.requests' )
0 commit comments