add no_proxy support to configuration and REST client.
This commit is contained in:
parent
068a541d88
commit
a66bb80f53
@ -156,6 +156,9 @@ class Configuration(object):
|
||||
self.proxy = None
|
||||
"""Proxy URL
|
||||
"""
|
||||
self.no_proxy = None
|
||||
"""bypass proxy for host in the no_proxy list.
|
||||
"""
|
||||
self.proxy_headers = None
|
||||
"""Proxy headers
|
||||
"""
|
||||
|
||||
@ -25,6 +25,7 @@ from six.moves.urllib.parse import urlencode
|
||||
import urllib3
|
||||
|
||||
from kubernetes.client.exceptions import ApiException, ApiValueError
|
||||
from requests.utils import should_bypass_proxies
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@ -83,7 +84,7 @@ class RESTClientObject(object):
|
||||
maxsize = 4
|
||||
|
||||
# https pool manager
|
||||
if configuration.proxy:
|
||||
if configuration.proxy and not should_bypass_proxies(configuration.host, no_proxy=configuration.no_proxy or ''):
|
||||
self.pool_manager = urllib3.ProxyManager(
|
||||
num_pools=pools_size,
|
||||
maxsize=maxsize,
|
||||
|
||||
@ -6,7 +6,8 @@ import weakref
|
||||
import unittest
|
||||
|
||||
import kubernetes
|
||||
|
||||
from kubernetes.client.configuration import Configuration
|
||||
import urllib3
|
||||
|
||||
class TestApiClient(unittest.TestCase):
|
||||
|
||||
@ -23,3 +24,28 @@ class TestApiClient(unittest.TestCase):
|
||||
self.assertIsNotNone(client._pool)
|
||||
atexit._run_exitfuncs()
|
||||
self.assertIsNone(client._pool)
|
||||
|
||||
def test_rest_proxycare(self):
|
||||
|
||||
pool = { 'proxy': urllib3.ProxyManager, 'direct': urllib3.PoolManager }
|
||||
|
||||
for dst, proxy, no_proxy, expected_pool in [
|
||||
( 'http://kube.local/', None, None, pool['direct']),
|
||||
( 'http://kube.local/', 'http://proxy.local:8080/', None, pool['proxy']),
|
||||
( 'http://127.0.0.1:8080/', 'http://proxy.local:8080/', 'localhost,127.0.0.0/8,.local', pool['direct']),
|
||||
( 'http://kube.local/', 'http://proxy.local:8080/', 'localhost,127.0.0.0/8,.local', pool['direct']),
|
||||
( 'http://kube.others.com:1234/','http://proxy.local:8080/', 'localhost,127.0.0.0/8,.local', pool['proxy']),
|
||||
( 'http://kube.others.com:1234/','http://proxy.local:8080/', '*', pool['direct']),
|
||||
]:
|
||||
# setup input
|
||||
config = Configuration()
|
||||
setattr(config, 'host', dst)
|
||||
if proxy is not None:
|
||||
setattr(config, 'proxy', proxy)
|
||||
if no_proxy is not None:
|
||||
setattr(config, 'no_proxy', no_proxy)
|
||||
# setup done
|
||||
|
||||
# test
|
||||
client = kubernetes.client.ApiClient(configuration=config)
|
||||
self.assertEqual( expected_pool, type(client.rest_client.pool_manager) )
|
||||
|
||||
Loading…
Reference in New Issue
Block a user