Skip to content

Commit 36bd3ff

Browse files
authored
Merge pull request #1827 from yliaog/automated-release-of-24.1.0b1-upstream-release-24.0-1655138958
Automated release of 24.1.0b1 upstream release 24.0 1655138958
2 parents 26267a9 + b1deb14 commit 36bd3ff

File tree

11 files changed

+138
-126
lines changed

11 files changed

+138
-126
lines changed

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# v24.1.0b1
2+
3+
Kubernetes API Version: v1.24.1
4+
5+
### Uncategorized
6+
- The dynamic client now support the `_request_timeout` parameter to configure connection and request timeouts. (#1732, @philipp-sontag-by)
7+
18
# v24.1.0a1
29

310
Kubernetes API Version: v1.24.1

kubernetes/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ No description provided (generated by Openapi Generator https://github.com/opena
44
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
55

66
- API version: release-1.24
7-
- Package version: 24.1.0a1
7+
- Package version: 24.1.0b1
88
- Build package: org.openapitools.codegen.languages.PythonClientCodegen
99

1010
## Requirements.

kubernetes/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
__project__ = 'kubernetes'
1616
# The version is auto-updated. Please do not edit.
17-
__version__ = "24.1.0a1"
17+
__version__ = "24.1.0b1"
1818

1919
import kubernetes.client
2020
import kubernetes.config

kubernetes/base/stream/ws_client.py

+50-43
Original file line numberDiff line numberDiff line change
@@ -353,69 +353,76 @@ def _proxy(self):
353353
local_all_closed = True
354354
for port in self.local_ports.values():
355355
if port.python.fileno() != -1:
356-
if port.error or not self.websocket.connected:
356+
if self.websocket.connected:
357+
rlist.append(port.python)
357358
if port.data:
358359
wlist.append(port.python)
359-
local_all_closed = False
360-
else:
361-
port.python.close()
360+
local_all_closed = False
362361
else:
363-
rlist.append(port.python)
364362
if port.data:
365363
wlist.append(port.python)
366-
local_all_closed = False
364+
local_all_closed = False
365+
else:
366+
port.python.close()
367367
if local_all_closed and not (self.websocket.connected and kubernetes_data):
368368
self.websocket.close()
369369
return
370370
r, w, _ = select.select(rlist, wlist, [])
371371
for sock in r:
372372
if sock == self.websocket:
373-
opcode, frame = self.websocket.recv_data_frame(True)
374-
if opcode == ABNF.OPCODE_BINARY:
375-
if not frame.data:
376-
raise RuntimeError("Unexpected frame data size")
377-
channel = six.byte2int(frame.data)
378-
if channel >= len(channel_ports):
379-
raise RuntimeError("Unexpected channel number: %s" % channel)
380-
port = channel_ports[channel]
381-
if channel_initialized[channel]:
382-
if channel % 2:
383-
if port.error is None:
384-
port.error = ''
385-
port.error += frame.data[1:].decode()
373+
pending = True
374+
while pending:
375+
opcode, frame = self.websocket.recv_data_frame(True)
376+
if opcode == ABNF.OPCODE_BINARY:
377+
if not frame.data:
378+
raise RuntimeError("Unexpected frame data size")
379+
channel = six.byte2int(frame.data)
380+
if channel >= len(channel_ports):
381+
raise RuntimeError("Unexpected channel number: %s" % channel)
382+
port = channel_ports[channel]
383+
if channel_initialized[channel]:
384+
if channel % 2:
385+
if port.error is None:
386+
port.error = ''
387+
port.error += frame.data[1:].decode()
388+
port.python.close()
389+
else:
390+
port.data += frame.data[1:]
386391
else:
387-
port.data += frame.data[1:]
388-
else:
389-
if len(frame.data) != 3:
390-
raise RuntimeError(
391-
"Unexpected initial channel frame data size"
392-
)
393-
port_number = six.byte2int(frame.data[1:2]) + (six.byte2int(frame.data[2:3]) * 256)
394-
if port_number != port.port_number:
395-
raise RuntimeError(
396-
"Unexpected port number in initial channel frame: %s" % port_number
397-
)
398-
channel_initialized[channel] = True
399-
elif opcode not in (ABNF.OPCODE_PING, ABNF.OPCODE_PONG, ABNF.OPCODE_CLOSE):
400-
raise RuntimeError("Unexpected websocket opcode: %s" % opcode)
392+
if len(frame.data) != 3:
393+
raise RuntimeError(
394+
"Unexpected initial channel frame data size"
395+
)
396+
port_number = six.byte2int(frame.data[1:2]) + (six.byte2int(frame.data[2:3]) * 256)
397+
if port_number != port.port_number:
398+
raise RuntimeError(
399+
"Unexpected port number in initial channel frame: %s" % port_number
400+
)
401+
channel_initialized[channel] = True
402+
elif opcode not in (ABNF.OPCODE_PING, ABNF.OPCODE_PONG, ABNF.OPCODE_CLOSE):
403+
raise RuntimeError("Unexpected websocket opcode: %s" % opcode)
404+
if not (isinstance(self.websocket.sock, ssl.SSLSocket) and self.websocket.sock.pending()):
405+
pending = False
401406
else:
402407
port = local_ports[sock]
403-
data = port.python.recv(1024 * 1024)
404-
if data:
405-
kubernetes_data += ABNF.create_frame(
406-
port.channel + data,
407-
ABNF.OPCODE_BINARY,
408-
).format()
409-
else:
410-
port.python.close()
408+
if port.python.fileno() != -1:
409+
data = port.python.recv(1024 * 1024)
410+
if data:
411+
kubernetes_data += ABNF.create_frame(
412+
port.channel + data,
413+
ABNF.OPCODE_BINARY,
414+
).format()
415+
else:
416+
port.python.close()
411417
for sock in w:
412418
if sock == self.websocket:
413419
sent = self.websocket.sock.send(kubernetes_data)
414420
kubernetes_data = kubernetes_data[sent:]
415421
else:
416422
port = local_ports[sock]
417-
sent = port.python.send(port.data)
418-
port.data = port.data[sent:]
423+
if port.python.fileno() != -1:
424+
sent = port.python.send(port.data)
425+
port.data = port.data[sent:]
419426

420427

421428
def get_websocket_url(url, query_params=None):

kubernetes/client/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from __future__ import absolute_import
1616

17-
__version__ = "24.1.0a1"
17+
__version__ = "24.1.0b1"
1818

1919
# import apis into sdk package
2020
from kubernetes.client.api.well_known_api import WellKnownApi

kubernetes/client/api_client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def __init__(self, configuration=None, header_name=None, header_value=None,
7878
self.default_headers[header_name] = header_value
7979
self.cookie = cookie
8080
# Set default User-Agent.
81-
self.user_agent = 'OpenAPI-Generator/24.1.0a1/python'
81+
self.user_agent = 'OpenAPI-Generator/24.1.0b1/python'
8282
self.client_side_validation = configuration.client_side_validation
8383

8484
def __enter__(self):

kubernetes/client/configuration.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ def to_debug_report(self):
350350
"OS: {env}\n"\
351351
"Python Version: {pyversion}\n"\
352352
"Version of the API: release-1.24\n"\
353-
"SDK Package Version: 24.1.0a1".\
353+
"SDK Package Version: 24.1.0b1".\
354354
format(env=sys.platform, pyversion=sys.version)
355355

356356
def get_host_settings(self):

kubernetes/e2e_test/port_server.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#!/usr/bin/env python
2-
31
import select
42
import socketserver
53
import sys
@@ -28,6 +26,7 @@ def handler(self, request, address, server):
2826
data = request.recv(1024)
2927
if not data:
3028
break
29+
print(f"{self.port}: {data}\n", end='', flush=True)
3130
echo += data
3231
if w:
3332
echo = echo[request.send(echo):]
@@ -38,4 +37,3 @@ def handler(self, request, address, server):
3837
for port in sys.argv[1:]:
3938
ports.append(PortServer(int(port)))
4039
time.sleep(10 * 60)
41-

kubernetes/e2e_test/test_client.py

+71-71
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,6 @@ def test_exit_code(self):
230230
resp = api.delete_namespaced_pod(name=name, body={},
231231
namespace='default')
232232

233-
# Skipping this test as this flakes a lot
234-
# See: https://github.com/kubernetes-client/python/issues/1300
235-
# Re-enable the test once the flakiness is investigated
236-
@unittest.skip("skipping due to extreme flakiness")
237233
def test_portforward_raw(self):
238234
client = api_client.ApiClient(configuration=self.config)
239235
api = core_v1_api.CoreV1Api(client)
@@ -267,7 +263,7 @@ def test_portforward_raw(self):
267263
'name': 'port-server',
268264
'image': 'python',
269265
'command': [
270-
'/opt/port-server.py', '1234', '1235',
266+
'python', '-u', '/opt/port-server.py', '1234', '1235',
271267
],
272268
'volumeMounts': [
273269
{
@@ -278,17 +274,19 @@ def test_portforward_raw(self):
278274
],
279275
'startupProbe': {
280276
'tcpSocket': {
281-
'port': 1234,
277+
'port': 1235,
282278
},
279+
'periodSeconds': 1,
280+
'failureThreshold': 30,
283281
},
284282
},
285283
],
284+
'restartPolicy': 'Never',
286285
'volumes': [
287286
{
288287
'name': 'port-server',
289288
'configMap': {
290289
'name': name,
291-
'defaultMode': 0o777,
292290
},
293291
},
294292
],
@@ -299,77 +297,79 @@ def test_portforward_raw(self):
299297
self.assertEqual(name, resp.metadata.name)
300298
self.assertTrue(resp.status.phase)
301299

300+
timeout = time.time() + 60
302301
while True:
303302
resp = api.read_namespaced_pod(name=name,
304303
namespace='default')
305304
self.assertEqual(name, resp.metadata.name)
306-
self.assertTrue(resp.status.phase)
307-
if resp.status.phase != 'Pending':
308-
break
305+
if resp.status.phase == 'Running':
306+
if resp.status.container_statuses[0].ready:
307+
break
308+
else:
309+
self.assertEqual(resp.status.phase, 'Pending')
310+
self.assertTrue(time.time() < timeout)
309311
time.sleep(1)
310-
self.assertEqual(resp.status.phase, 'Running')
311-
312-
pf = portforward(api.connect_get_namespaced_pod_portforward,
313-
name, 'default',
314-
ports='1234,1235,1236')
315-
self.assertTrue(pf.connected)
316-
sock1234 = pf.socket(1234)
317-
sock1235 = pf.socket(1235)
318-
sock1234.setblocking(True)
319-
sock1235.setblocking(True)
320-
sent1234 = b'Test port 1234 forwarding...'
321-
sent1235 = b'Test port 1235 forwarding...'
322-
sock1234.sendall(sent1234)
323-
sock1235.sendall(sent1235)
324-
reply1234 = b''
325-
reply1235 = b''
326-
while True:
327-
rlist = []
328-
if sock1234.fileno() != -1:
329-
rlist.append(sock1234)
330-
if sock1235.fileno() != -1:
331-
rlist.append(sock1235)
332-
if not rlist:
333-
break
334-
r, _w, _x = select.select(rlist, [], [], 1)
335-
if not r:
336-
break
337-
if sock1234 in r:
338-
data = sock1234.recv(1024)
339-
self.assertNotEqual(data, b'', "Unexpected socket close")
340-
reply1234 += data
341-
if sock1235 in r:
342-
data = sock1235.recv(1024)
343-
self.assertNotEqual(data, b'', "Unexpected socket close")
344-
reply1235 += data
345-
self.assertEqual(reply1234, sent1234)
346-
self.assertEqual(reply1235, sent1235)
347-
self.assertTrue(pf.connected)
348-
349-
sock = pf.socket(1236)
350-
self.assertRaises(socket.error, sock.sendall, b'This should fail...')
351-
self.assertIsNotNone(pf.error(1236))
352-
sock.close()
353-
354-
for sock in (sock1234, sock1235):
312+
313+
for ix in range(10):
314+
ix = str(ix + 1).encode()
315+
pf = portforward(api.connect_get_namespaced_pod_portforward,
316+
name, 'default',
317+
ports='1234,1235,1236')
355318
self.assertTrue(pf.connected)
356-
sent = b'Another test using fileno %s' % str(
357-
sock.fileno()).encode()
358-
sock.sendall(sent)
359-
reply = b''
360-
while True:
361-
r, _w, _x = select.select([sock], [], [], 1)
362-
if not r:
363-
break
364-
data = sock.recv(1024)
365-
self.assertNotEqual(data, b'', "Unexpected socket close")
366-
reply += data
367-
self.assertEqual(reply, sent)
319+
sock1234 = pf.socket(1234)
320+
sock1235 = pf.socket(1235)
321+
sock1234.setblocking(True)
322+
sock1235.setblocking(True)
323+
sent1234 = b'Test ' + ix + b' port 1234 forwarding'
324+
sent1235 = b'Test ' + ix + b' port 1235 forwarding'
325+
sock1234.sendall(sent1234)
326+
sock1235.sendall(sent1235)
327+
reply1234 = b''
328+
reply1235 = b''
329+
timeout = time.time() + 60
330+
while reply1234 != sent1234 or reply1235 != sent1235:
331+
self.assertNotEqual(sock1234.fileno(), -1)
332+
self.assertNotEqual(sock1235.fileno(), -1)
333+
self.assertTrue(time.time() < timeout)
334+
r, _w, _x = select.select([sock1234, sock1235], [], [], 1)
335+
if sock1234 in r:
336+
data = sock1234.recv(1024)
337+
self.assertNotEqual(data, b'', 'Unexpected socket close')
338+
reply1234 += data
339+
self.assertTrue(sent1234.startswith(reply1234))
340+
if sock1235 in r:
341+
data = sock1235.recv(1024)
342+
self.assertNotEqual(data, b'', 'Unexpected socket close')
343+
reply1235 += data
344+
self.assertTrue(sent1235.startswith(reply1235))
345+
self.assertTrue(pf.connected)
346+
347+
sock = pf.socket(1236)
348+
sock.setblocking(True)
349+
self.assertEqual(sock.recv(1024), b'')
350+
self.assertIsNotNone(pf.error(1236))
368351
sock.close()
369-
time.sleep(1)
370-
self.assertFalse(pf.connected)
371-
self.assertIsNone(pf.error(1234))
372-
self.assertIsNone(pf.error(1235))
352+
353+
for sock in (sock1234, sock1235):
354+
self.assertTrue(pf.connected)
355+
sent = b'Another test ' + ix + b' using fileno ' + str(sock.fileno()).encode()
356+
sock.sendall(sent)
357+
reply = b''
358+
timeout = time.time() + 60
359+
while reply != sent:
360+
self.assertNotEqual(sock.fileno(), -1)
361+
self.assertTrue(time.time() < timeout)
362+
r, _w, _x = select.select([sock], [], [], 1)
363+
if r:
364+
data = sock.recv(1024)
365+
self.assertNotEqual(data, b'', 'Unexpected socket close')
366+
reply += data
367+
self.assertTrue(sent.startswith(reply))
368+
sock.close()
369+
time.sleep(1)
370+
self.assertFalse(pf.connected)
371+
self.assertIsNone(pf.error(1234))
372+
self.assertIsNone(pf.error(1235))
373373

374374
resp = api.delete_namespaced_pod(name=name, namespace='default')
375375
resp = api.delete_namespaced_config_map(name=name, namespace='default')

scripts/constants.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
KUBERNETES_BRANCH = "release-1.24"
1919

2020
# client version for packaging and releasing.
21-
CLIENT_VERSION = "24.1.0a1"
21+
CLIENT_VERSION = "24.1.0b1"
2222

2323
# Name of the release package
2424
PACKAGE_NAME = "kubernetes"
2525

2626
# Stage of development, mainly used in setup.py's classifiers.
27-
DEVELOPMENT_STATUS = "3 - Alpha"
27+
DEVELOPMENT_STATUS = "4 - Beta"
2828

2929

3030
# If called directly, return the constant value given

0 commit comments

Comments
 (0)