k8s: add app.kubernetes.io/stack label to pods and jobs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
test-ci
Prathamesh Musale 2026-03-09 09:22:28 +00:00
parent be8081c62f
commit 86c11ff241
2 changed files with 11 additions and 3 deletions

View File

@ -75,13 +75,14 @@ class ClusterInfo:
parsed_job_yaml_map: Any parsed_job_yaml_map: Any
image_set: Set[str] = set() image_set: Set[str] = set()
app_name: str app_name: str
stack_name: str
environment_variables: DeployEnvVars environment_variables: DeployEnvVars
spec: Spec spec: Spec
def __init__(self) -> None: def __init__(self) -> None:
self.parsed_job_yaml_map = {} self.parsed_job_yaml_map = {}
def int(self, pod_files: List[str], compose_env_file, deployment_name, spec: Spec): def int(self, pod_files: List[str], compose_env_file, deployment_name, spec: Spec, stack_name=""):
self.parsed_pod_yaml_map = parsed_pod_files_map_from_file_names(pod_files) self.parsed_pod_yaml_map = parsed_pod_files_map_from_file_names(pod_files)
# Find the set of images in the pods # Find the set of images in the pods
self.image_set = images_for_deployment(pod_files) self.image_set = images_for_deployment(pod_files)
@ -91,6 +92,7 @@ class ClusterInfo:
} }
self.environment_variables = DeployEnvVars(env_vars) self.environment_variables = DeployEnvVars(env_vars)
self.app_name = deployment_name self.app_name = deployment_name
self.stack_name = stack_name
self.spec = spec self.spec = spec
if opts.o.debug: if opts.o.debug:
print(f"Env vars: {self.environment_variables.map}") print(f"Env vars: {self.environment_variables.map}")
@ -556,6 +558,8 @@ class ClusterInfo:
annotations = None annotations = None
labels = {"app": self.app_name} labels = {"app": self.app_name}
if self.stack_name:
labels["app.kubernetes.io/stack"] = self.stack_name
affinity = None affinity = None
tolerations = None tolerations = None
@ -670,9 +674,10 @@ class ClusterInfo:
elif job_name.endswith(".yaml"): elif job_name.endswith(".yaml"):
job_name = job_name[: -len(".yaml")] job_name = job_name[: -len(".yaml")]
pod_labels = {"app": self.app_name, **({"app.kubernetes.io/stack": self.stack_name} if self.stack_name else {})}
template = client.V1PodTemplateSpec( template = client.V1PodTemplateSpec(
metadata=client.V1ObjectMeta( metadata=client.V1ObjectMeta(
labels={"app": self.app_name} labels=pod_labels
), ),
spec=client.V1PodSpec( spec=client.V1PodSpec(
containers=containers, containers=containers,
@ -685,12 +690,13 @@ class ClusterInfo:
template=template, template=template,
backoff_limit=0, backoff_limit=0,
) )
job_labels = {"app": self.app_name, **({"app.kubernetes.io/stack": self.stack_name} if self.stack_name else {})}
job = client.V1Job( job = client.V1Job(
api_version="batch/v1", api_version="batch/v1",
kind="Job", kind="Job",
metadata=client.V1ObjectMeta( metadata=client.V1ObjectMeta(
name=f"{self.app_name}-job-{job_name}", name=f"{self.app_name}-job-{job_name}",
labels={"app": self.app_name}, labels=job_labels,
), ),
spec=job_spec, spec=job_spec,
) )

View File

@ -126,11 +126,13 @@ class K8sDeployer(Deployer):
# Use deployment-specific namespace for resource isolation and easy cleanup # Use deployment-specific namespace for resource isolation and easy cleanup
self.k8s_namespace = f"laconic-{compose_project_name}" self.k8s_namespace = f"laconic-{compose_project_name}"
self.cluster_info = ClusterInfo() self.cluster_info = ClusterInfo()
stack_name = deployment_context.stack.name if deployment_context else ""
self.cluster_info.int( self.cluster_info.int(
compose_files, compose_files,
compose_env_file, compose_env_file,
compose_project_name, compose_project_name,
deployment_context.spec, deployment_context.spec,
stack_name=stack_name,
) )
# Initialize job compose files if provided # Initialize job compose files if provided
if job_compose_files: if job_compose_files: