Merge pull request #2126 from yliaog/automated-release-of-28.1.0-upstream-release-28.0-1694967840
Some checks failed
Kubernetes Python Client - Validation / build (3.10) (push) Has been cancelled
Kubernetes Python Client - Validation / build (3.11) (push) Has been cancelled
Kubernetes Python Client - Validation / build (3.7) (push) Has been cancelled
Kubernetes Python Client - Validation / build (3.8) (push) Has been cancelled
Kubernetes Python Client - Validation / build (3.9, coverage) (push) Has been cancelled

Automated release of 28.1.0 upstream release 28.0 1694967840
This commit is contained in:
Kubernetes Prow Robot 2023-09-18 10:26:32 -07:00 committed by GitHub
commit 4df2bf398e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 74 additions and 81 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 }}

View File

@ -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

View File

@ -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.

View File

@ -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__":

View File

@ -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__':

View File

@ -1,4 +1,4 @@
from kubernetes import client,config,utils
from kubernetes import client, config, utils
def main():
config.load_kube_config()

View File

@ -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__":

View File

@ -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(

View File

@ -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__':

View File

@ -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__':

View File

@ -27,7 +27,7 @@ JOB_NAME = "pi"
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():

View File

@ -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__':

View File

@ -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__':

View File

@ -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__':

View File

@ -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:")

View File

@ -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:")

View File

@ -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()

View File

@ -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 portforward_commands(api_instance):
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 portforward_commands(api_instance):
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 portforward_commands(api_instance):
# Access the nginx http server using the
# "<pod-name>.pod.<namespace>.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)

View File

@ -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__':

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -78,7 +78,7 @@ class ApiClient(object):
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):

View File

@ -354,7 +354,7 @@ class Configuration(object):
"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):

View File

@ -18,13 +18,13 @@ import sys
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

View File

@ -16,9 +16,9 @@ from setuptools import setup
# 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
#