From bfb3222603c28a643bf2f9d525801e6a968ad662 Mon Sep 17 00:00:00 2001 From: Priyanka Saggu Date: Mon, 31 May 2021 12:11:49 +0530 Subject: [PATCH 01/11] add documentation for the server & client side timeout Signed-off-by: Priyanka Saggu --- examples/{ => watch}/pod_namespace_watch.py | 6 ++ examples/watch/timeout-settings.md | 71 +++++++++++++++++++++ 2 files changed, 77 insertions(+) rename examples/{ => watch}/pod_namespace_watch.py (88%) create mode 100644 examples/watch/timeout-settings.md diff --git a/examples/pod_namespace_watch.py b/examples/watch/pod_namespace_watch.py similarity index 88% rename from examples/pod_namespace_watch.py rename to examples/watch/pod_namespace_watch.py index f09768cf7d..7c197917f5 100644 --- a/examples/pod_namespace_watch.py +++ b/examples/watch/pod_namespace_watch.py @@ -17,6 +17,12 @@ The script will wait for 10 events related to namespaces to occur within the `timeout_seconds` threshold and then move on to wait for another 10 events related to pods to occur within the `timeout_seconds` threshold. + + +Refer to the document below to understand the server-side & client-side +timeout settings for the watch request handler: ~ + +https://github.com/github.com/kubernetes-client/python/blob/master/examples/watch/timeout-settings.md """ from kubernetes import client, config, watch diff --git a/examples/watch/timeout-settings.md b/examples/watch/timeout-settings.md new file mode 100644 index 0000000000..fe8e8d9ebc --- /dev/null +++ b/examples/watch/timeout-settings.md @@ -0,0 +1,71 @@ + +**This documentation briefly provides information about the `server side` & `client side` connection timeout settings, in the watch request handler.** + +--- + +There are two inputs available in the client, that could be used to set connection timeouts: + +- `timeout_seconds` +- `_request_timeout` + +--- + +#### Sever-side timeout (`kwargs['timeout_seconds'] = n`) + +- The value of the argument `timeout_seconds`, **n**, (which is time duration in seconds) is consumed at the server side. It is included in the request URL to the server. + + *For eg.* ~ `https://localhost:6443/api/v1/namespaces/default/pods?labelSelector=app%3Ddemo&timeoutSeconds=100&watch=True` + +- In case, if the `timeout_seconds` value is set, the value `n` would determine the server-side connection timeout duration. + + *For eg.* ~ if `kwargs['timeout_seconds'] = 3600`, then the server-side connection timeout will be equal to 1 hour. + + This timeout duration is determined by the expression ~ `timeout = time.Duration(3600) * time.seconds`, *i.e.* `timeout = 1 hour` + + ***Refer:*** + - *[https://github.com/kubernetes/apiserver/blob/release-1.20/pkg/endpoints/handlers/get.go#L254](https://github.com/kubernetes/apiserver/blob/release-1.20/pkg/endpoints/handlers/get.go#L254)* + +- In case, if the `timeout_seconds` value is not set, then the connection timeout will be a randomized value (in seconds) between `minRequestTimeout` and 2*`minRequestTimeout`, to spread out the load. + + It is determined using the expression ~ `timeout = time.Duration(float64(minRequestTimeout) * (rand.Float64() + 1.0))` + + Where `minRequestTimeout` indicates the minimum number of seconds a handler must keep a request open before timing it out. + + The default value of `minRequestTimeout` is 1800 seconds. + + ***Refer:*** + - *[https://github.com/kubernetes/apiserver/blob/release-1.20/pkg/endpoints/handlers/get.go#L257](https://github.com/kubernetes/apiserver/blob/release-1.20/pkg/endpoints/handlers/get.go#L257)* + - *[https://github.com/kubernetes/kubernetes/blob/release-1.20/staging/src/k8s.io/apiserver/pkg/server/config.go#L320](https://github.com/kubernetes/kubernetes/blob/release-1.20/staging/src/k8s.io/apiserver/pkg/server/config.go#L320)* + +- In case of a network outage, the server side timeout value will have no effect & the client will hang indefinitely without raising any exception. Note, that this is the case provided when there is no other client-side timeout (i.e., `_request_timeout`) value specified. + + (*See the section below for information on `client side timeout`*) + +- It is recommended to set this timeout value to a higher number such as 3600 seconds (1 hour). + +--- + +#### Client-side timeout (`kwargs['_request_timeout'] = n`) + +- The value of the argument `_request_timeout`, **n** (which is time duration in seconds) is set to the socket used for the connection. + +- In case, if the `_request_timeout` value is set, this argument can accept 2 types of input values ~ + - float, + - a tuple (with a length of 2) + + ***Refer*** + - *[https://github.com/kubernetes-client/python/blob/v17.17.0/kubernetes/client/api_client.py#L336-L339](https://github.com/kubernetes-client/python/blob/v17.17.0/kubernetes/client/api_client.py#L336-L339)* + +- In case of network outage, leading to dropping all packets with no RST/FIN, the timeout value (in seconds) determined by the `request_timeout` argument, would be the time duration for how long the client will wait before dropping the connection. + +- When the timeout happens, an exception will be raised, for eg. ~ + + `urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='localhost', port=6443): Read timed out.` + +- In case, if the `_request_timeout` value is not set, then the default value is **`None`** & socket will have no timeout. + + ***Refer:*** + - *[https://docs.python.org/3/library/socket.html#socket.getdefaulttimeout](https://docs.python.org/3/library/socket.html#socket.getdefaulttimeout)* + +- It is recommended to set this timeout value to a lower number (for eg. ~ maybe 60 seconds). + From ee0e332776d9002bea07d328d49e90ed8c221795 Mon Sep 17 00:00:00 2001 From: Jason Price Date: Mon, 21 Jun 2021 13:21:20 -0400 Subject: [PATCH 02/11] tolerate null sources on projected volumes See issue 1494 Removes the false requirement that sources be a populated list --- kubernetes/client/models/v1_projected_volume_source.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/kubernetes/client/models/v1_projected_volume_source.py b/kubernetes/client/models/v1_projected_volume_source.py index a2f41d730f..ab8c66a261 100644 --- a/kubernetes/client/models/v1_projected_volume_source.py +++ b/kubernetes/client/models/v1_projected_volume_source.py @@ -99,9 +99,6 @@ def sources(self, sources): :param sources: The sources of this V1ProjectedVolumeSource. # noqa: E501 :type: list[V1VolumeProjection] """ - if self.local_vars_configuration.client_side_validation and sources is None: # noqa: E501 - raise ValueError("Invalid value for `sources`, must not be `None`") # noqa: E501 - self._sources = sources def to_dict(self): From 9a2fbde41b6a1ecde2ec8c0795fee278c0b1f294 Mon Sep 17 00:00:00 2001 From: Jason Price Date: Mon, 21 Jun 2021 13:57:24 -0400 Subject: [PATCH 03/11] update the hotfix script for tolerating null sources on projected volumes --- scripts/apply-hotfixes.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scripts/apply-hotfixes.sh b/scripts/apply-hotfixes.sh index 4d84203c44..773efb40ac 100755 --- a/scripts/apply-hotfixes.sh +++ b/scripts/apply-hotfixes.sh @@ -74,4 +74,17 @@ else exit 1 fi; +# Patching commits for Tolerating Null Sources on Projected Volumes +# UPDATE: OpenAPI generator v4.3.0 has the context manager as a functionality. Cherry-picking just the tests for completeness. +# Ref: https://github.com/kubernetes-client/python/pull/1497 +git cherry-pick -n f3dbc8cbf1ab2aaf5e3bd8c0f0fc068e67823971 +if [ $? -eq 0 ] +then + echo Succesfully patched changes for Tolerating Null Sources on Projected Volumes +else + echo Failed to patch changes for Tolerating Null Sources on Projected Volumes + git restore --staged . + exit 1 +fi; + git commit -m "Apply hotfixes" From 4685a3651d02202156fc800d22967a911136a00b Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Sun, 20 Jun 2021 19:20:13 -0700 Subject: [PATCH 04/11] update readme and changelog --- CHANGELOG.md | 8 ++++++++ README.md | 9 +++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffe9cd0189..0597d9868c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# v18.20.0b1 + +Kubernetes API Version: 1.18.20 + +**Important Information:** + +- Python 2 had reached [End of Life](https://www.python.org/doc/sunset-python-2/) on January 1, 2020. The Kubernetes Python Client has dropped support for Python 2 from this release (v18.20.0b1) and will no longer provide support to older clients as per the [Kubernetes support policy](https://kubernetes.io/docs/setup/release/version-skew-policy/#supported-versions). + # v18.17.0a1 Kubernetes API Version: 1.18.17 diff --git a/README.md b/README.md index f91edc0a23..7b34d555ab 100644 --- a/README.md +++ b/README.md @@ -86,8 +86,8 @@ supported versions of Kubernetes clusters. - [client 10.y.z](https://pypi.org/project/kubernetes/10.1.0/): Kubernetes 1.13 or below (+-), Kubernetes 1.14 (✓), Kubernetes 1.14 or above (+-) - [client 11.y.z](https://pypi.org/project/kubernetes/11.0.0/): Kubernetes 1.14 or below (+-), Kubernetes 1.15 (✓), Kubernetes 1.16 or above (+-) - [client 12.y.z](https://pypi.org/project/kubernetes/12.0.1/): Kubernetes 1.15 or below (+-), Kubernetes 1.16 (✓), Kubernetes 1.17 or above (+-) -- [client 17.y.z](https://pypi.org/project/kubernetes/17.14.0a1/): Kubernetes 1.16 or below (+-), Kubernetes 1.17 (✓), Kubernetes 1.18 or above (+-) -- [client 18.y.z](https://pypi.org/project/kubernetes/18.17.0a1/): Kubernetes 1.17 or below (+-), Kubernetes 1.18 (✓), Kubernetes 1.19 or above (+-) +- [client 17.y.z](https://pypi.org/project/kubernetes/17.17.0/): Kubernetes 1.16 or below (+-), Kubernetes 1.17 (✓), Kubernetes 1.18 or above (+-) +- [client 18.y.z](https://pypi.org/project/kubernetes/18.20.0b1/): Kubernetes 1.17 or below (+-), Kubernetes 1.18 (✓), Kubernetes 1.19 or above (+-) > See [here](#homogenizing-the-kubernetes-python-client-versions) for an explaination of why there is no v13-v16 release. @@ -119,12 +119,13 @@ between client-python versions. | 9.0 Alpha/Beta | Kubernetes main repo, 1.13 branch | ✗ | | 9.0 | Kubernetes main repo, 1.13 branch | ✗ | | 10.0 Alpha/Beta | Kubernetes main repo, 1.14 branch | ✗ | -| 10.0 | Kubernetes main repo, 1.14 branch | ✓ | +| 10.0 | Kubernetes main repo, 1.14 branch | ✗ | | 11.0 Alpha/Beta | Kubernetes main repo, 1.15 branch | ✗ | | 11.0 | Kubernetes main repo, 1.15 branch | ✓ | | 12.0 Alpha/Beta | Kubernetes main repo, 1.16 branch | ✗ | | 12.0 | Kubernetes main repo, 1.16 branch | ✓ | -| 17.0 Alpha/Beta | Kubernetes main repo, 1.17 branch | ✓ | +| 17.0 Alpha/Beta | Kubernetes main repo, 1.17 branch | ✗ | +| 17.0 | Kubernetes main repo, 1.17 branch | ✓ | | 18.0 Alpha/Beta | Kubernetes main repo, 1.18 branch | ✓ | > See [here](#homogenizing-the-kubernetes-python-client-versions) for an explaination of why there is no v13-v16 release. From 29729af6a0b8f1aa25d6c366ea074f075af63622 Mon Sep 17 00:00:00 2001 From: Jason Price Date: Wed, 23 Jun 2021 18:10:01 -0400 Subject: [PATCH 05/11] address PR comment around removing hotfix when v20 clients are released --- scripts/apply-hotfixes.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/apply-hotfixes.sh b/scripts/apply-hotfixes.sh index 773efb40ac..2013315a3a 100755 --- a/scripts/apply-hotfixes.sh +++ b/scripts/apply-hotfixes.sh @@ -75,7 +75,7 @@ else fi; # Patching commits for Tolerating Null Sources on Projected Volumes -# UPDATE: OpenAPI generator v4.3.0 has the context manager as a functionality. Cherry-picking just the tests for completeness. +# TODO: remove this patch when we release v20 clients # Ref: https://github.com/kubernetes-client/python/pull/1497 git cherry-pick -n f3dbc8cbf1ab2aaf5e3bd8c0f0fc068e67823971 if [ $? -eq 0 ] From e0f093d6bab4eb85b4604f488d373074035303d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Jul 2021 03:03:29 +0000 Subject: [PATCH 06/11] Bump helm/kind-action from 1.1.0 to 1.2.0 Bumps [helm/kind-action](https://github.com/helm/kind-action) from 1.1.0 to 1.2.0. - [Release notes](https://github.com/helm/kind-action/releases) - [Commits](https://github.com/helm/kind-action/compare/v1.1.0...v1.2.0) --- updated-dependencies: - dependency-name: helm/kind-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-master.yaml | 2 +- .github/workflows/e2e-release-11.0.yaml | 2 +- .github/workflows/e2e-release-12.0.yaml | 2 +- .github/workflows/e2e-release-17.0.yaml | 2 +- .github/workflows/e2e-release-18.0.yaml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/e2e-master.yaml b/.github/workflows/e2e-master.yaml index 66c5dc4a43..51c38e6978 100644 --- a/.github/workflows/e2e-master.yaml +++ b/.github/workflows/e2e-master.yaml @@ -19,7 +19,7 @@ jobs: with: submodules: true - name: Create Kind Cluster - uses: helm/kind-action@v1.1.0 + uses: helm/kind-action@v1.2.0 with: cluster_name: kubernetes-python-e2e-master-${{ matrix.python-version }} # The kind version to be used to spin the cluster up diff --git a/.github/workflows/e2e-release-11.0.yaml b/.github/workflows/e2e-release-11.0.yaml index 1cdac39d59..e3b07848dd 100644 --- a/.github/workflows/e2e-release-11.0.yaml +++ b/.github/workflows/e2e-release-11.0.yaml @@ -19,7 +19,7 @@ jobs: with: submodules: true - name: Create Kind Cluster - uses: helm/kind-action@v1.1.0 + uses: helm/kind-action@v1.2.0 with: cluster_name: kubernetes-python-e2e-release-11.0-${{ matrix.python-version }} # The kind version to be used to spin the cluster up diff --git a/.github/workflows/e2e-release-12.0.yaml b/.github/workflows/e2e-release-12.0.yaml index 213d4a1af7..c17fae82e1 100644 --- a/.github/workflows/e2e-release-12.0.yaml +++ b/.github/workflows/e2e-release-12.0.yaml @@ -19,7 +19,7 @@ jobs: with: submodules: true - name: Create Kind Cluster - uses: helm/kind-action@v1.1.0 + uses: helm/kind-action@v1.2.0 with: cluster_name: kubernetes-python-e2e-release-12.0-${{ matrix.python-version }} # The kind version to be used to spin the cluster up diff --git a/.github/workflows/e2e-release-17.0.yaml b/.github/workflows/e2e-release-17.0.yaml index 1cf636aa27..e063de8eb8 100644 --- a/.github/workflows/e2e-release-17.0.yaml +++ b/.github/workflows/e2e-release-17.0.yaml @@ -19,7 +19,7 @@ jobs: with: submodules: true - name: Create Kind Cluster - uses: helm/kind-action@v1.1.0 + uses: helm/kind-action@v1.2.0 with: cluster_name: kubernetes-python-e2e-release-17.0-${{ matrix.python-version }} # The kind version to be used to spin the cluster up diff --git a/.github/workflows/e2e-release-18.0.yaml b/.github/workflows/e2e-release-18.0.yaml index a1c594c2e4..c45039620a 100644 --- a/.github/workflows/e2e-release-18.0.yaml +++ b/.github/workflows/e2e-release-18.0.yaml @@ -19,7 +19,7 @@ jobs: with: submodules: true - name: Create Kind Cluster - uses: helm/kind-action@v1.1.0 + uses: helm/kind-action@v1.2.0 with: cluster_name: kubernetes-python-e2e-release-18.0-${{ matrix.python-version }} # The kind version to be used to spin the cluster up From 65a0ffc84436fd3000ce146d9d13cf4e73811d2f Mon Sep 17 00:00:00 2001 From: "Huan-Ting,Chen" Date: Sat, 17 Jul 2021 16:41:16 +0800 Subject: [PATCH 07/11] Fix empty yaml document error --- kubernetes/utils/create_from_yaml.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kubernetes/utils/create_from_yaml.py b/kubernetes/utils/create_from_yaml.py index 35111387df..0fb265a1df 100644 --- a/kubernetes/utils/create_from_yaml.py +++ b/kubernetes/utils/create_from_yaml.py @@ -68,6 +68,8 @@ def create_from_yaml( failures = [] k8s_objects = [] for yml_document in yml_document_all: + if yml_document is None: + continue try: created = create_from_dict(k8s_client, yml_document, verbose, namespace=namespace, From 13814c0f7e0e587c46512386da3d08c64fc83e04 Mon Sep 17 00:00:00 2001 From: Matt Campbell Date: Fri, 26 Mar 2021 15:32:29 -0400 Subject: [PATCH 08/11] Allow optional list of YAML objects as param to create_from_yaml util --- kubernetes/e2e_test/test_utils.py | 28 ++++++++++++++++++++++++++++ kubernetes/utils/create_from_yaml.py | 22 +++++++++++++++++----- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/kubernetes/e2e_test/test_utils.py b/kubernetes/e2e_test/test_utils.py index ab752dff79..05a056c5f0 100644 --- a/kubernetes/e2e_test/test_utils.py +++ b/kubernetes/e2e_test/test_utils.py @@ -13,8 +13,10 @@ # under the License. import unittest +from os import path import yaml + from kubernetes import utils, client from kubernetes.client.rest import ApiException from kubernetes.e2e_test import base @@ -37,6 +39,7 @@ def tearDownClass(cls): k8s_client = client.api_client.ApiClient(configuration=cls.config) core_v1 = client.CoreV1Api(api_client=k8s_client) core_v1.delete_namespace(name=cls.test_namespace) + # Tests for creating individual API objects def test_create_apps_deployment_from_yaml(self): @@ -59,6 +62,31 @@ def test_create_apps_deployment_from_yaml(self): except ApiException: continue + def test_create_apps_deployment_from_yaml_object(self): + """ + Should be able to pass YAM objects directly to helper function. + """ + k8s_client = client.api_client.ApiClient(configuration=self.config) + _path = self.path_prefix + "apps-deployment.yaml" + with open(path.abspath(_path)) as f: + yaml_objects = yaml.safe_load_all(f) + utils.create_from_yaml( + k8s_client, + yaml_objects=yaml_objects, + ) + app_api = client.AppsV1Api(k8s_client) + dep = app_api.read_namespaced_deployment(name="nginx-app", + namespace="default") + self.assertIsNotNone(dep) + while True: + try: + app_api.delete_namespaced_deployment( + name="nginx-app", namespace="default", + body={}) + break + except ApiException: + continue + def test_create_apps_deployment_from_yaml_obj(self): k8s_client = client.api_client.ApiClient(configuration=self.config) with open(self.path_prefix + "apps-deployment.yaml") as f: diff --git a/kubernetes/utils/create_from_yaml.py b/kubernetes/utils/create_from_yaml.py index 0fb265a1df..3a996a13d4 100644 --- a/kubernetes/utils/create_from_yaml.py +++ b/kubernetes/utils/create_from_yaml.py @@ -26,7 +26,8 @@ def create_from_yaml( k8s_client, - yaml_file, + yaml_file=None, + yaml_objects=None, verbose=False, namespace="default", **kwargs): @@ -36,6 +37,8 @@ def create_from_yaml( Input: yaml_file: string. Contains the path to yaml file. k8s_client: an ApiClient object, initialized with the client args. + yaml_objects: List[dict]. Optional list of YAML objects; used instead + of reading the `yaml_file`. Default is None. verbose: If True, print confirmation from the create action. Default is False. namespace: string. Contains the namespace to create all @@ -62,12 +65,11 @@ def create_from_yaml( FailToCreateError which holds list of `client.rest.ApiException` instances for each object that failed to create. """ - with open(path.abspath(yaml_file)) as f: - yml_document_all = yaml.safe_load_all(f) + def create_with(objects): failures = [] k8s_objects = [] - for yml_document in yml_document_all: + for yml_document in objects: if yml_document is None: continue try: @@ -79,9 +81,19 @@ def create_from_yaml( failures.extend(failure.api_exceptions) if failures: raise FailToCreateError(failures) - return k8s_objects + if yaml_objects: + yml_document_all = yaml_objects + return create_with(yml_document_all) + elif yaml_file: + with open(path.abspath(yaml_file)) as f: + yml_document_all = yaml.safe_load_all(f) + return create_with(yml_document_all) + else: + raise ValueError( + 'One of `yaml_file` or `yaml_objects` arguments must be provided') + def create_from_dict(k8s_client, data, verbose=False, namespace='default', **kwargs): From 4dec14919aa6b709fea5f8f4505640582c4be6d7 Mon Sep 17 00:00:00 2001 From: Scott Lee Date: Thu, 5 Aug 2021 15:09:45 -0600 Subject: [PATCH 09/11] Update release-18.0 submodule --- CHANGELOG.md | 9 +++++++++ kubernetes/base | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0597d9868c..b6b5e73da6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# v18.0.0-snapshot + +Kubernetes API Version: To Be Updated + +### Feature +- Support for the dryRun parameter has been added to the dynamic client. ([kubernetes-client/python-base#247](https://github.com/kubernetes-client/python-base/pull/247), [@gravesm](https://github.com/gravesm)) +- The `python2` support will be removed in 18.0.0 beta release. All the tests will use `python3` versions. ([kubernetes-client/python-base#238](https://github.com/kubernetes-client/python-base/pull/238), [@Priyankasaggu11929](https://github.com/Priyankasaggu11929)) +- The dynamic client now supports customizing http "Accept" header through the `header_params` parameter, which can be used to customizing API server response, e.g. retrieving object metadata only. ([kubernetes-client/python-base#236](https://github.com/kubernetes-client/python-base/pull/236), [@Yashks1994](https://github.com/Yashks1994)) + # v18.20.0b1 Kubernetes API Version: 1.18.20 diff --git a/kubernetes/base b/kubernetes/base index b4d3aad42d..6b0104ffb9 160000 --- a/kubernetes/base +++ b/kubernetes/base @@ -1 +1 @@ -Subproject commit b4d3aad42dc23e7a6c0e5c032691f8dc385a786c +Subproject commit 6b0104ffb9dd2f96d47d075ea3d30f69ea124ce4 From 7d89f0254ed0a86847e48be936a57ce7121cc4ad Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Thu, 5 Aug 2021 16:39:18 -0700 Subject: [PATCH 10/11] update submodule --- kubernetes/base | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubernetes/base b/kubernetes/base index db50d0292e..6b0104ffb9 160000 --- a/kubernetes/base +++ b/kubernetes/base @@ -1 +1 @@ -Subproject commit db50d0292eb52ac1162d9eb324662c600c5ea6e3 +Subproject commit 6b0104ffb9dd2f96d47d075ea3d30f69ea124ce4 From 8bd7651ec4b6a662d502b97e2700c234b03bb5ae Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Thu, 5 Aug 2021 16:58:19 -0700 Subject: [PATCH 11/11] update release notes --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6b5e73da6..558c05970f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ Kubernetes API Version: To Be Updated - Support for the dryRun parameter has been added to the dynamic client. ([kubernetes-client/python-base#247](https://github.com/kubernetes-client/python-base/pull/247), [@gravesm](https://github.com/gravesm)) - The `python2` support will be removed in 18.0.0 beta release. All the tests will use `python3` versions. ([kubernetes-client/python-base#238](https://github.com/kubernetes-client/python-base/pull/238), [@Priyankasaggu11929](https://github.com/Priyankasaggu11929)) - The dynamic client now supports customizing http "Accept" header through the `header_params` parameter, which can be used to customizing API server response, e.g. retrieving object metadata only. ([kubernetes-client/python-base#236](https://github.com/kubernetes-client/python-base/pull/236), [@Yashks1994](https://github.com/Yashks1994)) +- Allow optional list of YAML objects as param to `create_from_yaml` util [kubernetes-client/python#1403](https://github.com/kubernetes-client/python/pull/1403) + +**Bug Fix:** +- Fix empty yaml document in `create_from_yaml` [kubernetes-client/python#1506](https://github.com/kubernetes-client/python/pull/1506) # v18.20.0b1