From 46fd0c10f8bb68ebec5a3557a578b57f10750663 Mon Sep 17 00:00:00 2001 From: Luis Toledo Date: Thu, 1 Mar 2018 17:01:01 -0300 Subject: [PATCH 1/3] mocks deps --- requirements.txt | 2 ++ test-requirements.txt | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 79801e1cf6..1e61154c13 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,5 @@ ipaddress>=1.0.17 # PSF websocket-client>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.* # LGPLv2+ requests # Apache-2.0 requests-oauthlib # ISC +requests_mock +mock diff --git a/test-requirements.txt b/test-requirements.txt index e18c5c27d4..610fd4c7ea 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -10,4 +10,6 @@ recommonmark codecov>=1.4.0 pep8 autopep8 -isort \ No newline at end of file +isort +requests_mock +mock \ No newline at end of file From 8e02f8c65f5d0d217605b1fcc7e90b2800356294 Mon Sep 17 00:00:00 2001 From: Luis Toledo Date: Thu, 1 Mar 2018 18:37:33 -0300 Subject: [PATCH 2/3] Using https://github.com/ltamaster/python-base.git as base --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index ef1933934f..033de6155b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "kubernetes/base"] path = kubernetes/base - url = https://github.com/kubernetes-client/python-base + url = https://github.com/ltamaster/python-base.git From 5cb61bba23671704a8b7562a5b59c9f2eba1c30f Mon Sep 17 00:00:00 2001 From: Alessandro -oggei- Ogier Date: Sat, 24 Mar 2018 09:09:59 +0100 Subject: [PATCH 3/3] binary websocket support, plus examples --- examples/exec.py | 65 +++++++++++++++++++++++++++ kubernetes/base | 2 +- kubernetes/client/apis/core_v1_api.py | 3 +- 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/examples/exec.py b/examples/exec.py index 0fe7d5b780..2522462a74 100644 --- a/examples/exec.py +++ b/examples/exec.py @@ -1,4 +1,6 @@ +import tarfile import time +from tempfile import TemporaryFile from kubernetes import config from kubernetes.client import Configuration @@ -74,6 +76,7 @@ commands = [ "echo test1", "echo \"This message goes to stderr\" >&2", + "ls -l /etc", ] while resp.is_open(): resp.update(timeout=1) @@ -95,3 +98,65 @@ user = resp.readline_stdout(timeout=3) print("Server user is: %s" % user) resp.close() + +# Copying file client -> pod +print('copying client -> pod') +exec_command = ['tar', 'xvf', '-', '-C', '/'] +resp = stream(api.connect_get_namespaced_pod_exec, name, 'default', + command=exec_command, + stderr=True, stdin=True, + stdout=True, tty=False, + binary=True, + _preload_content=False) + +source_file = '/tmp/dash' + +with TemporaryFile() as tar_buffer: + with tarfile.open(fileobj=tar_buffer, mode='w') as tar: + tar.add(source_file) + + tar_buffer.seek(0) + commands = [] + commands.append(tar_buffer.read()) + + while resp.is_open(): + resp.update(timeout=1) + if resp.peek_stdout(): + print("STDOUT: %s" % resp.read_stdout()) + if resp.peek_stderr(): + print("STDERR: %s" % resp.read_stderr()) + if commands: + c = commands.pop(0) + resp.write_stdin(c) + else: + break + resp.close() + +# Copying file pod -> client +print('copying pod -> client') +exec_command = ['tar', 'cf', '-', '/bin/sh'] + +with TemporaryFile() as tar_buffer: + + resp = stream(api.connect_get_namespaced_pod_exec, name, 'default', + command=exec_command, + stderr=True, stdin=True, + stdout=True, tty=False, + binary=True, + _preload_content=False) + + while resp.is_open(): + resp.update(timeout=1) + if resp.peek_stdout(): + out = resp.read_stdout() + print("bytes received: %s" % len(out)) + tar_buffer.write(out) + if resp.peek_stderr(): + print("STDERR: %s" % resp.read_stderr()) + resp.close() + + tar_buffer.flush() + tar_buffer.seek(0) + + with tarfile.open(fileobj=tar_buffer, mode='r:') as tar: + print('members', tar.getmembers()) diff --git a/kubernetes/base b/kubernetes/base index 11da619c9e..afe9336a7d 160000 --- a/kubernetes/base +++ b/kubernetes/base @@ -1 +1 @@ -Subproject commit 11da619c9ef7b2e26fe162e5feeb72d5bedcc5c9 +Subproject commit afe9336a7dba4f48f08eddf6e6506122d4ae8f4a diff --git a/kubernetes/client/apis/core_v1_api.py b/kubernetes/client/apis/core_v1_api.py index cae4f63134..10f160268b 100644 --- a/kubernetes/client/apis/core_v1_api.py +++ b/kubernetes/client/apis/core_v1_api.py @@ -21,6 +21,7 @@ from six import iteritems from ..api_client import ApiClient +import six class CoreV1Api(object): @@ -926,7 +927,7 @@ def connect_get_namespaced_pod_exec_with_http_info(self, name, namespace, **kwar body=body_params, post_params=form_params, files=local_var_files, - response_type='str', + response_type=six.binary_type, auth_settings=auth_settings, async=params.get('async'), _return_http_data_only=params.get('_return_http_data_only'),