diff --git a/.github/workflows/deploy-wiki.yaml b/.github/workflows/deploy-wiki.yaml index 52914b959d..05014f16ba 100644 --- a/.github/workflows/deploy-wiki.yaml +++ b/.github/workflows/deploy-wiki.yaml @@ -11,7 +11,7 @@ jobs: deploy-wiki: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Install rsync diff --git a/.github/workflows/e2e-master.yaml b/.github/workflows/e2e-master.yaml index 8ea3453703..e40e4e5426 100644 --- a/.github/workflows/e2e-master.yaml +++ b/.github/workflows/e2e-master.yaml @@ -15,7 +15,7 @@ jobs: matrix: python-version: [3.7, 3.8, 3.9] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Create Kind Cluster diff --git a/.github/workflows/e2e-release-11.0.yaml b/.github/workflows/e2e-release-11.0.yaml index 651c8014bf..0166031ca3 100644 --- a/.github/workflows/e2e-release-11.0.yaml +++ b/.github/workflows/e2e-release-11.0.yaml @@ -15,7 +15,7 @@ jobs: matrix: python-version: [2.7, 3.5, 3.6, 3.7, 3.8] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Create Kind Cluster diff --git a/.github/workflows/e2e-release-12.0.yaml b/.github/workflows/e2e-release-12.0.yaml index 50ffb1e1fc..2feb83b29f 100644 --- a/.github/workflows/e2e-release-12.0.yaml +++ b/.github/workflows/e2e-release-12.0.yaml @@ -15,7 +15,7 @@ jobs: matrix: python-version: [2.7, 3.5, 3.6, 3.7, 3.8] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Create Kind Cluster diff --git a/.github/workflows/e2e-release-17.0.yaml b/.github/workflows/e2e-release-17.0.yaml index 26548419e1..0939399fb1 100644 --- a/.github/workflows/e2e-release-17.0.yaml +++ b/.github/workflows/e2e-release-17.0.yaml @@ -15,7 +15,7 @@ jobs: matrix: python-version: [2.7, 3.5, 3.6, 3.7, 3.8] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Create Kind Cluster diff --git a/.github/workflows/e2e-release-18.0.yaml b/.github/workflows/e2e-release-18.0.yaml index 77687dc1af..5297063d91 100644 --- a/.github/workflows/e2e-release-18.0.yaml +++ b/.github/workflows/e2e-release-18.0.yaml @@ -15,7 +15,7 @@ jobs: matrix: python-version: [3.6, 3.7, 3.8, 3.9] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Create Kind Cluster diff --git a/.github/workflows/e2e-release-26.0.yaml b/.github/workflows/e2e-release-26.0.yaml index b926c4b223..517d67590b 100644 --- a/.github/workflows/e2e-release-26.0.yaml +++ b/.github/workflows/e2e-release-26.0.yaml @@ -15,7 +15,7 @@ jobs: matrix: python-version: [3.7, 3.8, 3.9] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Create Kind Cluster diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index f54829b66c..ab6e499328 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -13,7 +13,7 @@ jobs: use_coverage: 'coverage' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Set up Python ${{ matrix.python-version }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ddf0c70f8..1e482c0631 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# v28.1.0 + +Kubernetes API Version: v1.28.2 + +### API Change +- Fixed a bug where CEL expressions in CRD validation rules would incorrectly compute a high estimated cost for functions that return strings, lists or maps. + The incorrect cost was evident when the result of a function was used in subsequent operations. ([kubernetes/kubernetes#119807](https://github.com/kubernetes/kubernetes/pull/119807), [@jpbetz](https://github.com/jpbetz)) [SIG API Machinery, Auth and Cloud Provider] +- Mark Job onPodConditions as optional in pod failure policy ([kubernetes/kubernetes#120208](https://github.com/kubernetes/kubernetes/pull/120208), [@mimowo](https://github.com/mimowo)) [SIG API Machinery and Apps] + + # v28.1.0b1 Kubernetes API Version: v1.28.1 diff --git a/README.md b/README.md index 379bba6d97..dbd3206f54 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ supported versions of Kubernetes clusters. - [client 25.y.z](https://pypi.org/project/kubernetes/25.3.0/): Kubernetes 1.24 or below (+-), Kubernetes 1.25 (✓), Kubernetes 1.26 or above (+-) - [client 26.y.z](https://pypi.org/project/kubernetes/26.1.0/): Kubernetes 1.25 or below (+-), Kubernetes 1.26 (✓), Kubernetes 1.27 or above (+-) - [client 27.y.z](https://pypi.org/project/kubernetes/27.2.0/): Kubernetes 1.26 or below (+-), Kubernetes 1.27 (✓), Kubernetes 1.28 or above (+-) -- [client 28.y.z](https://pypi.org/project/kubernetes/28.1.0b1/): Kubernetes 1.27 or below (+-), Kubernetes 1.28 (✓), Kubernetes 1.29 or above (+-) +- [client 28.y.z](https://pypi.org/project/kubernetes/28.1.0/): Kubernetes 1.27 or below (+-), Kubernetes 1.28 (✓), Kubernetes 1.29 or above (+-) > See [here](#homogenizing-the-kubernetes-python-client-versions) for an explanation of why there is no v13-v16 release. @@ -151,12 +151,13 @@ between client-python versions. | 24.0 Alpha/Beta | Kubernetes main repo, 1.24 branch | ✗ | | 24.0 | Kubernetes main repo, 1.24 branch | ✗ | | 25.0 Alpha/Beta | Kubernetes main repo, 1.25 branch | ✗ | -| 25.0 | Kubernetes main repo, 1.25 branch | ✓ | +| 25.0 | Kubernetes main repo, 1.25 branch | ✗ | | 26.0 Alpha/Beta | Kubernetes main repo, 1.26 branch | ✗ | | 26.0 | Kubernetes main repo, 1.26 branch | ✓ | | 27.0 Alpha/Beta | Kubernetes main repo, 1.27 branch | ✗ | | 27.0 | Kubernetes main repo, 1.27 branch | ✓ | -| 28.0 Alpha/Beta | Kubernetes main repo, 1.28 branch | ✓ | +| 28.0 Alpha/Beta | Kubernetes main repo, 1.28 branch | ✗ | +| 28.0 | Kubernetes main repo, 1.28 branch | ✓ | > See [here](#homogenizing-the-kubernetes-python-client-versions) for an explanation of why there is no v13-v16 release. diff --git a/examples/annotate_deployment.py b/examples/annotate_deployment.py index 2cc811e93d..a18a66f11f 100644 --- a/examples/annotate_deployment.py +++ b/examples/annotate_deployment.py @@ -62,8 +62,7 @@ def main(): time.sleep(1) before_annotating = apps_v1_api.read_namespaced_deployment( 'deploy-nginx', 'default') - print('Before annotating, annotations: %s' % - before_annotating.metadata.annotations) + print(f"Before annotating, annotations: {before_annotating.metadata.annotations}") annotations = [ { @@ -80,8 +79,7 @@ def main(): time.sleep(1) after_annotating = apps_v1_api.read_namespaced_deployment( name='deploy-nginx', namespace='default') - print('After annotating, annotations: %s' % - after_annotating.metadata.annotations) + print(f"After annotating, annotations: {after_annotating.metadata.annotations}") if __name__ == "__main__": diff --git a/examples/api_discovery.py b/examples/api_discovery.py index 9c91fe429c..9ae86ea43f 100644 --- a/examples/api_discovery.py +++ b/examples/api_discovery.py @@ -27,8 +27,7 @@ def main(): config.load_kube_config() print("Supported APIs (* is preferred version):") - print("%-40s %s" % - ("core", ",".join(client.CoreApi().get_api_versions().versions))) + print(f"{'core':<40} {','.join(client.CoreApi().get_api_versions().versions)}") for api in client.ApisApi().get_api_versions().groups: versions = [] for v in api.versions: @@ -38,7 +37,7 @@ def main(): name += "*" name += v.version versions.append(name) - print("%-40s %s" % (api.name, ",".join(versions))) + print(f"{api.name:<40} {','.join(versions)}") if __name__ == '__main__': diff --git a/examples/apply_from_directory.py b/examples/apply_from_directory.py index 4af02e6826..8a8113fbc4 100644 --- a/examples/apply_from_directory.py +++ b/examples/apply_from_directory.py @@ -1,4 +1,4 @@ -from kubernetes import client,config,utils +from kubernetes import client, config, utils def main(): config.load_kube_config() diff --git a/examples/apply_from_single_file.py b/examples/apply_from_single_file.py index 41346a3790..b9e03de66f 100644 --- a/examples/apply_from_single_file.py +++ b/examples/apply_from_single_file.py @@ -1,9 +1,9 @@ -from kubernetes import client,config,utils +from kubernetes import client, config, utils def main(): config.load_kube_config() k8s_client = client.ApiClient() - yaml_file = 'examples/configmap-demo-pod.yml' + yaml_file = 'examples/yaml_dir/configmap-demo-pod.yml' utils.create_from_yaml(k8s_client,yaml_file,verbose=True) if __name__ == "__main__": diff --git a/examples/cluster_scoped_custom_object.py b/examples/cluster_scoped_custom_object.py index d9a5c139dd..0902df94ef 100644 --- a/examples/cluster_scoped_custom_object.py +++ b/examples/cluster_scoped_custom_object.py @@ -100,10 +100,7 @@ def main(): plural="crontabs", ) print("%s\t\t%s" % ("NAME", "CRON-SPEC")) - print( - "%s\t%s\n" % - (resource["metadata"]["name"], - resource["spec"]["cronSpec"])) + print(f"{resource['metadata']['name']}\t{resource['spec']['cronSpec']}\n") # patch the `spec.cronSpec` field of the custom resource patched_resource = api.patch_cluster_custom_object( @@ -115,10 +112,7 @@ def main(): ) print("[INFO] Custom resource `test-crontab` patched to update the cronSpec schedule!\n") print("%s\t\t%s" % ("NAME", "PATCHED-CRON-SPEC")) - print( - "%s\t%s\n" % - (patched_resource["metadata"]["name"], - patched_resource["spec"]["cronSpec"])) + print(f"{patched_resource['metadata']['name']}\t{patched_resource['spec']['cronSpec']}\n") # patch the `metadata.labels` field of the custom resource patched_resource = api.patch_cluster_custom_object( @@ -130,10 +124,7 @@ def main(): ) print("[INFO] Custom resource `test-crontab` patched to apply new metadata labels!\n") print("%s\t\t%s" % ("NAME", "PATCHED_LABELS")) - print( - "%s\t%s\n" % - (patched_resource["metadata"]["name"], - patched_resource["metadata"]["labels"])) + print(f"{patched_resource['metadata']['name']}\t{patched_resource['metadata']['labels']}\n") # delete the custom resource "test-crontab" api.delete_cluster_custom_object( diff --git a/examples/deployment_create.py b/examples/deployment_create.py index e17af3b5c9..193c7aeeda 100644 --- a/examples/deployment_create.py +++ b/examples/deployment_create.py @@ -29,12 +29,12 @@ def main(): # default location. config.load_kube_config() - with open(path.join(path.dirname(__file__), "nginx-deployment.yaml")) as f: + with open(path.join(path.dirname(__file__), "yaml_dir/nginx-deployment.yaml")) as f: dep = yaml.safe_load(f) k8s_apps_v1 = client.AppsV1Api() resp = k8s_apps_v1.create_namespaced_deployment( body=dep, namespace="default") - print("Deployment created. status='%s'" % resp.metadata.name) + print(f"Deployment created. Status='{resp.metadata.name}'") if __name__ == '__main__': diff --git a/examples/in_cluster_config.py b/examples/in_cluster_config.py index 55f9eb792e..43095e4bc0 100644 --- a/examples/in_cluster_config.py +++ b/examples/in_cluster_config.py @@ -58,8 +58,7 @@ def main(): print("Listing pods with their IPs:") ret = v1.list_pod_for_all_namespaces(watch=False) for i in ret.items: - print("%s\t%s\t%s" % - (i.status.pod_ip, i.metadata.namespace, i.metadata.name)) + print(f"{i.status.pod_ip}\t{i.metadata.namespace}\t{i.metadata.name}") if __name__ == '__main__': diff --git a/examples/job_crud.py b/examples/job_crud.py index c8d3e27709..fe103eb140 100644 --- a/examples/job_crud.py +++ b/examples/job_crud.py @@ -27,7 +27,7 @@ def create_job_object(): - # Configureate Pod template container + # Configure Pod template container container = client.V1Container( name="pi", image="perl", @@ -54,7 +54,7 @@ def create_job(api_instance, job): api_response = api_instance.create_namespaced_job( body=job, namespace="default") - print("Job created. status='%s'" % str(api_response.status)) + print(f"Job created. status='{str(api_response.status)}'") get_job_status(api_instance) @@ -68,7 +68,7 @@ def get_job_status(api_instance): api_response.status.failed is not None: job_completed = True sleep(1) - print("Job status='%s'" % str(api_response.status)) + print(f"Job status='{str(api_response.status)}'") def update_job(api_instance, job): @@ -78,7 +78,7 @@ def update_job(api_instance, job): name=JOB_NAME, namespace="default", body=job) - print("Job updated. status='%s'" % str(api_response.status)) + print(f"Job updated. status='{str(api_response.status)}'") def delete_job(api_instance): @@ -88,7 +88,7 @@ def delete_job(api_instance): body=client.V1DeleteOptions( propagation_policy='Foreground', grace_period_seconds=5)) - print("Job deleted. status='%s'" % str(api_response.status)) + print(f"Job deleted. status='{str(api_response.status)}'") def main(): diff --git a/examples/multiple_clusters.py b/examples/multiple_clusters.py index 9108596478..b1a907e221 100644 --- a/examples/multiple_clusters.py +++ b/examples/multiple_clusters.py @@ -43,13 +43,11 @@ def main(): print("\nList of pods on %s:" % cluster1) for i in client1.list_pod_for_all_namespaces().items: - print("%s\t%s\t%s" % - (i.status.pod_ip, i.metadata.namespace, i.metadata.name)) + print(f"{i.status.pod_ip}\t{i.metadata.namespace}\t{i.metadata.name}") - print("\n\nList of pods on %s:" % cluster2) + print(f"\n\nList of pods on {cluster2}:") for i in client2.list_pod_for_all_namespaces().items: - print("%s\t%s\t%s" % - (i.status.pod_ip, i.metadata.namespace, i.metadata.name)) + print(f"{i.status.pod_ip}\t{i.metadata.namespace}\t{i.metadata.name}") if __name__ == '__main__': diff --git a/examples/node_labels.py b/examples/node_labels.py index cdde822b3a..e42966466a 100644 --- a/examples/node_labels.py +++ b/examples/node_labels.py @@ -44,7 +44,7 @@ def main(): # Patching the node labels for node in node_list.items: api_response = api_instance.patch_node(node.metadata.name, body) - print("%s\t%s" % (node.metadata.name, node.metadata.labels)) + print(f"{node.metadata.name}\t{node.metadata.labels}") if __name__ == '__main__': diff --git a/examples/out_of_cluster_config.py b/examples/out_of_cluster_config.py index f391be236d..4ceadafd65 100644 --- a/examples/out_of_cluster_config.py +++ b/examples/out_of_cluster_config.py @@ -13,7 +13,7 @@ # limitations under the License. """ -Shows how to load a Kubernetes config from outside of the cluster. +Shows how to load a Kubernetes config from outside the cluster. """ from kubernetes import client, config @@ -29,8 +29,7 @@ def main(): print("Listing pods with their IPs:") ret = v1.list_pod_for_all_namespaces(watch=False) for i in ret.items: - print("%s\t%s\t%s" % - (i.status.pod_ip, i.metadata.namespace, i.metadata.name)) + print(f"{i.status.pod_ip}\t{i.metadata.namespace}\t{i.metadata.name}") if __name__ == '__main__': diff --git a/examples/pick_kube_config_context.py b/examples/pick_kube_config_context.py index d0e26d62e4..5dd1e3bc3a 100644 --- a/examples/pick_kube_config_context.py +++ b/examples/pick_kube_config_context.py @@ -37,7 +37,7 @@ def main(): # utility config.load_kube_config(context=option) - print("Active host is %s" % configuration.Configuration().host) + print(f"Active host is {configuration.Configuration().host}") v1 = client.CoreV1Api() print("Listing pods with their IPs:") diff --git a/examples/pod_config_list.py b/examples/pod_config_list.py index 882b13c592..683445cc9e 100644 --- a/examples/pod_config_list.py +++ b/examples/pod_config_list.py @@ -38,7 +38,7 @@ def main(): # utility config.load_kube_config(context=option) - print("Active host is %s" % configuration.Configuration().host) + print(f"Active host is {configuration.Configuration().host}") v1 = client.CoreV1Api() print("Listing pods with their IPs:") diff --git a/examples/pod_exec.py b/examples/pod_exec.py index ecfbe6c28b..4439e11f8b 100644 --- a/examples/pod_exec.py +++ b/examples/pod_exec.py @@ -33,11 +33,11 @@ def exec_commands(api_instance): namespace='default') except ApiException as e: if e.status != 404: - print("Unknown error: %s" % e) + print(f"Unknown error: {e}") exit(1) if not resp: - print("Pod %s does not exist. Creating it..." % name) + print(f"Pod {name} does not exist. Creating it...") pod_manifest = { 'apiVersion': 'v1', 'kind': 'Pod', @@ -98,22 +98,22 @@ def exec_commands(api_instance): while resp.is_open(): resp.update(timeout=1) if resp.peek_stdout(): - print("STDOUT: %s" % resp.read_stdout()) + print(f"STDOUT: {resp.read_stdout()}") if resp.peek_stderr(): - print("STDERR: %s" % resp.read_stderr()) + print(f"STDERR: {resp.read_stderr()}") if commands: c = commands.pop(0) - print("Running command... %s\n" % c) + print(f"Running command... {c}\n") resp.write_stdin(c + "\n") else: break resp.write_stdin("date\n") sdate = resp.readline_stdout(timeout=3) - print("Server date command returns: %s" % sdate) + print(f"Server date command returns: {sdate}") resp.write_stdin("whoami\n") user = resp.readline_stdout(timeout=3) - print("Server user is: %s" % user) + print(f"Server user is: {user}") resp.close() diff --git a/examples/pod_portforward.py b/examples/pod_portforward.py index 9793fd3117..13672f181f 100644 --- a/examples/pod_portforward.py +++ b/examples/pod_portforward.py @@ -66,11 +66,11 @@ def portforward_commands(api_instance): namespace='default') except ApiException as e: if e.status != 404: - print("Unknown error: %s" % e) + print(f"Unknown error: {e}") exit(1) if not resp: - print("Pod %s does not exist. Creating it..." % name) + print(f"Pod {name} does not exist. Creating it...") pod_manifest = { 'apiVersion': 'v1', 'kind': 'Pod', @@ -119,7 +119,7 @@ def portforward_commands(api_instance): if error is None: print("No port forward errors on port 80.") else: - print("Port 80 has the following error: %s" % error) + print(f"Port 80 has the following error: {error}") # Monkey patch socket.create_connection which is used by http.client and # urllib.request. The same can be done with urllib3.util.connection.create_connection @@ -147,10 +147,10 @@ def kubernetes_create_connection(address, *args, **kwargs): break else: raise RuntimeError( - "Unable to find service port: %s" % port) + f"Unable to find service port: {port}") label_selector = [] for key, value in service.spec.selector.items(): - label_selector.append("%s=%s" % (key, value)) + label_selector.append(f"{key}={value}") pods = api_instance.list_namespaced_pod( namespace, label_selector=",".join(label_selector) ) @@ -168,11 +168,10 @@ def kubernetes_create_connection(address, *args, **kwargs): break else: raise RuntimeError( - "Unable to find service port name: %s" % port) + f"Unable to find service port name: {port}") elif dns_name[1] != 'pod': raise RuntimeError( - "Unsupported resource type: %s" % - dns_name[1]) + f"Unsupported resource type: {dns_name[1]}") pf = portforward(api_instance.connect_get_namespaced_pod_portforward, name, namespace, ports=str(port)) return pf.socket(port) @@ -181,10 +180,10 @@ def kubernetes_create_connection(address, *args, **kwargs): # Access the nginx http server using the # ".pod..kubernetes" dns name. response = urllib_request.urlopen( - 'http://%s.pod.default.kubernetes' % name) + f'http://{name}.pod.default.kubernetes') html = response.read().decode('utf-8') response.close() - print('Status Code: %s' % response.code) + print(f'Status Code: {response.code}') print(html) diff --git a/examples/remote_cluster.py b/examples/remote_cluster.py index 84ebeb4f64..916c767129 100644 --- a/examples/remote_cluster.py +++ b/examples/remote_cluster.py @@ -52,8 +52,7 @@ def main(): print("Listing pods with their IPs:") ret = v1.list_pod_for_all_namespaces(watch=False) for i in ret.items: - print("%s\t%s\t%s" % - (i.status.pod_ip, i.metadata.namespace, i.metadata.name)) + print(f"{i.status.pod_ip}\t{i.metadata.namespace}\t{i.metadata.name}") if __name__ == '__main__': diff --git a/examples/configmap-demo-pod.yml b/examples/yaml_dir/configmap-demo-pod.yml similarity index 100% rename from examples/configmap-demo-pod.yml rename to examples/yaml_dir/configmap-demo-pod.yml diff --git a/examples/nginx-deployment.yaml b/examples/yaml_dir/nginx-deployment.yaml similarity index 100% rename from examples/nginx-deployment.yaml rename to examples/yaml_dir/nginx-deployment.yaml diff --git a/examples/pi-job.yaml b/examples/yaml_dir/pi-job.yaml similarity index 100% rename from examples/pi-job.yaml rename to examples/yaml_dir/pi-job.yaml diff --git a/kubernetes/README.md b/kubernetes/README.md index b81ceb93b3..6d87188336 100644 --- a/kubernetes/README.md +++ b/kubernetes/README.md @@ -4,7 +4,7 @@ No description provided (generated by Openapi Generator https://github.com/opena This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: - API version: release-1.28 -- Package version: 28.1.0b1 +- Package version: 28.1.0 - Build package: org.openapitools.codegen.languages.PythonClientCodegen ## Requirements. diff --git a/kubernetes/__init__.py b/kubernetes/__init__.py index 03597b62c2..31a6521c37 100644 --- a/kubernetes/__init__.py +++ b/kubernetes/__init__.py @@ -14,7 +14,7 @@ __project__ = 'kubernetes' # The version is auto-updated. Please do not edit. -__version__ = "28.1.0b1" +__version__ = "28.1.0" from . import client from . import config diff --git a/kubernetes/client/__init__.py b/kubernetes/client/__init__.py index 303bfe02c8..d47fac5322 100644 --- a/kubernetes/client/__init__.py +++ b/kubernetes/client/__init__.py @@ -14,7 +14,7 @@ from __future__ import absolute_import -__version__ = "28.1.0b1" +__version__ = "28.1.0" # import apis into sdk package from kubernetes.client.api.well_known_api import WellKnownApi diff --git a/kubernetes/client/api_client.py b/kubernetes/client/api_client.py index b41c44937e..870d0939e9 100644 --- a/kubernetes/client/api_client.py +++ b/kubernetes/client/api_client.py @@ -78,7 +78,7 @@ def __init__(self, configuration=None, header_name=None, header_value=None, self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = 'OpenAPI-Generator/28.1.0b1/python' + self.user_agent = 'OpenAPI-Generator/28.1.0/python' self.client_side_validation = configuration.client_side_validation def __enter__(self): diff --git a/kubernetes/client/configuration.py b/kubernetes/client/configuration.py index 87692a9280..a7fc5e93c7 100644 --- a/kubernetes/client/configuration.py +++ b/kubernetes/client/configuration.py @@ -354,7 +354,7 @@ def to_debug_report(self): "OS: {env}\n"\ "Python Version: {pyversion}\n"\ "Version of the API: release-1.28\n"\ - "SDK Package Version: 28.1.0b1".\ + "SDK Package Version: 28.1.0".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self): diff --git a/scripts/constants.py b/scripts/constants.py index 88670fd89c..4fd1fafced 100644 --- a/scripts/constants.py +++ b/scripts/constants.py @@ -18,13 +18,13 @@ KUBERNETES_BRANCH = "release-1.28" # client version for packaging and releasing. -CLIENT_VERSION = "28.1.0b1" +CLIENT_VERSION = "28.1.0" # Name of the release package PACKAGE_NAME = "kubernetes" # Stage of development, mainly used in setup.py's classifiers. -DEVELOPMENT_STATUS = "4 - Beta" +DEVELOPMENT_STATUS = "5 - Production/Stable" # If called directly, return the constant value given diff --git a/setup.py b/setup.py index 55e0936ad1..806dcd7748 100644 --- a/setup.py +++ b/setup.py @@ -16,9 +16,9 @@ # Do not edit these constants. They will be updated automatically # by scripts/update-client.sh. -CLIENT_VERSION = "28.1.0b1" +CLIENT_VERSION = "28.1.0" PACKAGE_NAME = "kubernetes" -DEVELOPMENT_STATUS = "4 - Beta" +DEVELOPMENT_STATUS = "5 - Production/Stable" # To install the library, run the following #