Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Update charm libraries #178

Merged
merged 1 commit into from
Jun 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 37 additions & 2 deletions lib/charms/lego_base_k8s/v0/lego_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ def _plugin_config(self):
"""
import abc
import logging
import os
import re
from abc import abstractmethod
from typing import Dict, List, Optional
Expand All @@ -95,7 +96,7 @@ def _plugin_config(self):

# Increment this PATCH version before using `charmcraft publish-lib` or reset
# to 0 if you are raising the major API version
LIBPATCH = 10
LIBPATCH = 11


logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -224,7 +225,10 @@ def _push_csr_to_workload(self, csr: str) -> None:
def _execute_lego_cmd(self) -> bool:
"""Execute lego command in workload container."""
process = self._container.exec(
self._cmd, timeout=300, working_dir="/tmp", environment=self._plugin_config
self._cmd,
timeout=300,
working_dir="/tmp",
environment=self._app_environment | self._plugin_config,
)
try:
stdout, error = process.wait_output()
Expand Down Expand Up @@ -316,6 +320,24 @@ def _cmd(self) -> List[str]:
"run",
]



@property
def _app_environment(self) -> Dict[str, str]:
"""Extract proxy model environment variables."""
env = {}

if (http_proxy := get_env_var(env_var="JUJU_CHARM_HTTP_PROXY")):
env["HTTP_PROXY"] = http_proxy
if (https_proxy := get_env_var(env_var="JUJU_CHARM_HTTPS_PROXY")):
env["HTTPS_PROXY"] = https_proxy
# there's no need for no_proxy if there's no http_proxy or https_proxy
if(
no_proxy := get_env_var(env_var="JUJU_CHARM_NO_PROXY")
) and (http_proxy and https_proxy):
env["NO_PROXY"] = no_proxy
return env

@property
@abstractmethod
def _plugin_config(self) -> Dict[str, str]:
Expand Down Expand Up @@ -358,3 +380,16 @@ def _server(self) -> Optional[str]:
if not isinstance(server, str):
return None
return server

def get_env_var(env_var: str) -> Optional[str]:
"""Get the environment variable value.
Looks for all upper-case and all low-case of the `env_var`.
Args:
env_var: Name of the environment variable.
Returns:
Value of the environment variable. None if not found.
"""
return os.environ.get(env_var.upper(), os.environ.get(env_var.lower(), None))