Fix Caddy ACME email race condition by templating YAML
Previously, install_ingress_for_kind() applied the YAML (which starts the Caddy pod with email: ""), then patched the ConfigMap afterward. The pod had already read the empty email and Caddy doesn't hot-reload. Now template the email into the YAML before applying, so the pod starts with the correct email from the beginning. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>fix-down-cleanup-by-label
parent
cb6fdb77a6
commit
7cecf2caa6
|
|
@ -20,6 +20,7 @@ from pathlib import Path
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
from typing import Set, Mapping, List, Optional, cast
|
from typing import Set, Mapping, List, Optional, cast
|
||||||
|
import yaml
|
||||||
|
|
||||||
from stack_orchestrator.util import get_k8s_dir, error_exit
|
from stack_orchestrator.util import get_k8s_dir, error_exit
|
||||||
from stack_orchestrator.opts import opts
|
from stack_orchestrator.opts import opts
|
||||||
|
|
@ -353,22 +354,19 @@ def install_ingress_for_kind(acme_email: str = ""):
|
||||||
)
|
)
|
||||||
if opts.o.debug:
|
if opts.o.debug:
|
||||||
print("Installing Caddy ingress controller in kind cluster")
|
print("Installing Caddy ingress controller in kind cluster")
|
||||||
utils.create_from_yaml(api_client, yaml_file=ingress_install)
|
|
||||||
|
|
||||||
# Patch ConfigMap with acme email if provided
|
# Template the YAML with email before applying
|
||||||
|
with open(ingress_install) as f:
|
||||||
|
yaml_content = f.read()
|
||||||
|
|
||||||
if acme_email:
|
if acme_email:
|
||||||
core_v1 = client.CoreV1Api()
|
yaml_content = yaml_content.replace('email: ""', f'email: "{acme_email}"')
|
||||||
configmap = core_v1.read_namespaced_config_map(
|
|
||||||
name="caddy-ingress-controller-configmap", namespace="caddy-system"
|
|
||||||
)
|
|
||||||
configmap.data["email"] = acme_email
|
|
||||||
core_v1.patch_namespaced_config_map(
|
|
||||||
name="caddy-ingress-controller-configmap",
|
|
||||||
namespace="caddy-system",
|
|
||||||
body=configmap,
|
|
||||||
)
|
|
||||||
if opts.o.debug:
|
if opts.o.debug:
|
||||||
print(f"Patched Caddy ConfigMap with email: {acme_email}")
|
print(f"Configured Caddy with ACME email: {acme_email}")
|
||||||
|
|
||||||
|
# Apply templated YAML
|
||||||
|
yaml_objects = list(yaml.safe_load_all(yaml_content))
|
||||||
|
utils.create_from_yaml(api_client, yaml_objects=yaml_objects)
|
||||||
|
|
||||||
|
|
||||||
def load_images_into_kind(kind_cluster_name: str, image_set: Set[str]):
|
def load_images_into_kind(kind_cluster_name: str, image_set: Set[str]):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue