From 6e4b4c63e59e7031b8a0cfbc0463fe338ef39763 Mon Sep 17 00:00:00 2001 From: Weii Wang Date: Wed, 4 Jun 2025 23:32:43 +0800 Subject: [PATCH 1/5] Accept juju-*-proxy model configuration --- src/charm.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/charm.py b/src/charm.py index a032080..994acc8 100755 --- a/src/charm.py +++ b/src/charm.py @@ -8,6 +8,7 @@ """Cloudflared charm service.""" import logging +import os import pathlib import re import subprocess # nosec @@ -130,6 +131,15 @@ def _reconcile(self, _: ops.EventBase) -> None: "tunnel-token": tunnel_spec.tunnel_token, "metrics-port": metrics_ports[instance], } + http_proxy = os.environ.get("JUJU_CHARM_HTTP_PROXY") + https_proxy = os.environ.get("JUJU_CHARM_HTTPS_PROXY") + no_proxy = os.environ.get("JUJU_CHARM_NO_PROXY") + if http_proxy: + config["http-proxy"] = http_proxy + if https_proxy: + config["https-proxy"] = https_proxy + if no_proxy: + config["no-proxy"] = no_proxy if all(charmed_cloudflared.get(key) == str(value) for key, value in config.items()): continue logger.info("configuring charmed-cloudflared instance: %s", instance) From d309f0da77f9fa97ea04f98774d89838c54921ba Mon Sep 17 00:00:00 2001 From: Weii Wang Date: Wed, 4 Jun 2025 23:36:27 +0800 Subject: [PATCH 2/5] Fix linting issues --- src/charm.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/charm.py b/src/charm.py index 994acc8..c688673 100755 --- a/src/charm.py +++ b/src/charm.py @@ -130,16 +130,8 @@ def _reconcile(self, _: ops.EventBase) -> None: config = { "tunnel-token": tunnel_spec.tunnel_token, "metrics-port": metrics_ports[instance], + **self._proxy_config(), } - http_proxy = os.environ.get("JUJU_CHARM_HTTP_PROXY") - https_proxy = os.environ.get("JUJU_CHARM_HTTPS_PROXY") - no_proxy = os.environ.get("JUJU_CHARM_NO_PROXY") - if http_proxy: - config["http-proxy"] = http_proxy - if https_proxy: - config["https-proxy"] = https_proxy - if no_proxy: - config["no-proxy"] = no_proxy if all(charmed_cloudflared.get(key) == str(value) for key, value in config.items()): continue logger.info("configuring charmed-cloudflared instance: %s", instance) @@ -149,6 +141,24 @@ def _reconcile(self, _: ops.EventBase) -> None: charmed_cloudflared.start(enable=True) self.unit.status = ops.ActiveStatus() + def _proxy_config(self) -> dict[str, str]: + """Get HTTP proxy related configurations from the juju model configuration. + + Returns: + A dictionary of HTTP proxy related configurations. + """ + config = {} + http_proxy = os.environ.get("JUJU_CHARM_HTTP_PROXY") + https_proxy = os.environ.get("JUJU_CHARM_HTTPS_PROXY") + no_proxy = os.environ.get("JUJU_CHARM_NO_PROXY") + if http_proxy: + config["http-proxy"] = http_proxy + if https_proxy: + config["https-proxy"] = https_proxy + if no_proxy: + config["no-proxy"] = no_proxy + return config + def _subprocess_run(self, cmd: list[str]) -> None: """Run a subprocess command. From 291e2fe4ae3dfbe566ecd1cd4d0bb878708df56b Mon Sep 17 00:00:00 2001 From: Weii Wang Date: Wed, 2 Jul 2025 23:06:30 +0800 Subject: [PATCH 3/5] Set default value for *-proxy snap config --- src/charm.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/charm.py b/src/charm.py index c688673..c345427 100755 --- a/src/charm.py +++ b/src/charm.py @@ -151,12 +151,9 @@ def _proxy_config(self) -> dict[str, str]: http_proxy = os.environ.get("JUJU_CHARM_HTTP_PROXY") https_proxy = os.environ.get("JUJU_CHARM_HTTPS_PROXY") no_proxy = os.environ.get("JUJU_CHARM_NO_PROXY") - if http_proxy: - config["http-proxy"] = http_proxy - if https_proxy: - config["https-proxy"] = https_proxy - if no_proxy: - config["no-proxy"] = no_proxy + config["http-proxy"] = http_proxy or "" + config["https-proxy"] = https_proxy or "" + config["no-proxy"] = no_proxy or "" return config def _subprocess_run(self, cmd: list[str]) -> None: From 1e92303ddf6cc21fe19e552218f585c94585ff53 Mon Sep 17 00:00:00 2001 From: Weii Wang Date: Thu, 3 Jul 2025 19:02:22 +0800 Subject: [PATCH 4/5] Simplify _proxy_config function --- src/charm.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/charm.py b/src/charm.py index c345427..bca9d10 100755 --- a/src/charm.py +++ b/src/charm.py @@ -147,13 +147,11 @@ def _proxy_config(self) -> dict[str, str]: Returns: A dictionary of HTTP proxy related configurations. """ - config = {} - http_proxy = os.environ.get("JUJU_CHARM_HTTP_PROXY") - https_proxy = os.environ.get("JUJU_CHARM_HTTPS_PROXY") - no_proxy = os.environ.get("JUJU_CHARM_NO_PROXY") - config["http-proxy"] = http_proxy or "" - config["https-proxy"] = https_proxy or "" - config["no-proxy"] = no_proxy or "" + config = { + "http-proxy": os.environ.get("JUJU_CHARM_HTTP_PROXY", ""), + "https-proxy": os.environ.get("JUJU_CHARM_HTTPS_PROXY", ""), + "no-proxy": os.environ.get("JUJU_CHARM_NO_PROXY", ""), + } return config def _subprocess_run(self, cmd: list[str]) -> None: From f877cd31e5cd32866f73c2109290d0248b553c2a Mon Sep 17 00:00:00 2001 From: Weii Wang Date: Thu, 3 Jul 2025 19:02:53 +0800 Subject: [PATCH 5/5] Simplify _proxy_config function --- src/charm.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/charm.py b/src/charm.py index bca9d10..ec49fe0 100755 --- a/src/charm.py +++ b/src/charm.py @@ -147,12 +147,11 @@ def _proxy_config(self) -> dict[str, str]: Returns: A dictionary of HTTP proxy related configurations. """ - config = { + return { "http-proxy": os.environ.get("JUJU_CHARM_HTTP_PROXY", ""), "https-proxy": os.environ.get("JUJU_CHARM_HTTPS_PROXY", ""), "no-proxy": os.environ.get("JUJU_CHARM_NO_PROXY", ""), } - return config def _subprocess_run(self, cmd: list[str]) -> None: """Run a subprocess command.