Skip to content

Commit 8098519

Browse files
authored
Merge pull request #1265 from dimaqq/fix-creating-offer-when-connecting-to-existing-model
#1265 #### Description #1044 fixed proxy object reuse some time ago I accidentally undid that change in #1186 as I didn't realise that multiple connect/close calls were expected on a given instance. This PR re-applies the change, and cleans up init. (I've rearranged the initialisation order, because `__del__()` is run on a partially-initialised instance if `__init__()` fails half-way through. That's something that happens in unit tests, although unlikely to affect legitimate use.) Fixes: #1264 creating offer fails when connecting to existing model #### QA Steps - No regression in unit or integration tests - Eyeball the code change All CI tests need to pass. Fixes #1264
2 parents 36c7913 + 0bdbb9d commit 8098519

1 file changed

Lines changed: 12 additions & 15 deletions

File tree

juju/client/proxy/kubernetes/proxy.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright 2023 Canonical Ltd.
22
# Licensed under the Apache V2, see LICENCE file for details.
33
import logging
4+
import os
45
import tempfile
56

67
from kubernetes import client
@@ -29,21 +30,19 @@ def __init__(
2930
self.namespace = namespace
3031
self.remote_port = remote_port
3132
self.service = service
33+
self.temp_ca_path = None
34+
self.port_forwarder = None
3235

3336
try:
3437
self.remote_port = int(remote_port)
3538
except ValueError:
3639
raise ValueError(f"Invalid port number: {remote_port}")
3740

38-
self.port_forwarder = None
39-
4041
if ca_cert:
41-
self.temp_ca_file = tempfile.NamedTemporaryFile() # noqa: SIM115
42-
self.temp_ca_file.write(bytes(ca_cert, "utf-8"))
43-
self.temp_ca_file.flush()
44-
config.ssl_ca_cert = self.temp_ca_file.name
45-
else:
46-
self.temp_ca_file = None
42+
with tempfile.NamedTemporaryFile(delete=False) as f:
43+
f.write(bytes(ca_cert, "utf-8"))
44+
self.temp_ca_path = f.name
45+
config.ssl_ca_cert = f.name
4746

4847
self.api_client = client.ApiClient(config)
4948

@@ -67,15 +66,13 @@ def connect(self):
6766

6867
def __del__(self):
6968
self.close()
69+
if self.temp_ca_path:
70+
os.unlink(self.temp_ca_path)
7071

7172
def close(self):
72-
try:
73-
if self.port_forwarder:
74-
self.port_forwarder.close()
75-
if self.temp_ca_file:
76-
self.temp_ca_file.close()
77-
except AttributeError:
78-
pass
73+
if self.port_forwarder:
74+
self.port_forwarder.close()
75+
self.port_forwarder = None
7976

8077
def socket(self):
8178
if self.port_forwarder is not None:

0 commit comments

Comments
 (0)