Skip to content
Open
Show file tree
Hide file tree
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
10 changes: 10 additions & 0 deletions src/aap_eda/core/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,16 @@ class ActivationStatus(DjangoStrEnum):
WORKERS_OFFLINE = "workers offline"


ACTIVATION_TERMINAL_STATUSES = frozenset(
{
ActivationStatus.STOPPED,
ActivationStatus.COMPLETED,
ActivationStatus.FAILED,
ActivationStatus.ERROR,
}
)


# TODO: Deprecated, will be removed in future version, use
# DefaultCredentialType instead
class CredentialType(DjangoStrEnum):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
from django.conf import settings
from django.db import migrations, models

SA_NAMESPACE_FILE = "/var/run/secrets/kubernetes.io/serviceaccount/namespace"


def legacy_activation_namespace() -> str:
"""Return the namespace used by Kubernetes Jobs before this feature.

Before this feature, Kubernetes activation Jobs ran in the EDA
control-plane namespace. The configured default namespace is intentionally
ignored because it applies only to new Jobs.
"""
try:
with open(SA_NAMESPACE_FILE, encoding="utf-8") as namespace_file:
namespace = namespace_file.read().strip()
except FileNotFoundError as exc:
raise RuntimeError(
"Cannot backfill legacy activation Job namespaces because "
f"{SA_NAMESPACE_FILE} does not exist."
) from exc

if not namespace:
raise RuntimeError(
"Cannot backfill legacy activation Job namespaces because "
f"{SA_NAMESPACE_FILE} is empty."
)

return namespace


def backfill_rulebook_process_activation_job_namespace(apps, schema_editor):
"""Record the legacy Kubernetes namespace for existing processes."""
if settings.DEPLOYMENT_TYPE != "k8s":
return

RulebookProcess = apps.get_model("core", "RulebookProcess") # noqa: N806
db_alias = schema_editor.connection.alias
processes = RulebookProcess.objects.using(db_alias).filter(
activation_job_namespace__isnull=True
)
if not processes.exists():
return

processes.update(activation_job_namespace=legacy_activation_namespace())


class Migration(migrations.Migration):
dependencies = [
("core", "0074_awxtoken_ck_awx_token_name_not_empty_and_more"),
]

operations = [
migrations.AddField(
model_name="rulebookprocess",
name="activation_job_namespace",
field=models.TextField(null=True),
),
migrations.RunPython(
backfill_rulebook_process_activation_job_namespace,
migrations.RunPython.noop,
),
]
1 change: 1 addition & 0 deletions src/aap_eda/core/models/rulebook_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class RulebookProcess(BaseOrgModel):
ended_at = models.DateTimeField(null=True)
# TODO: rename field to pod_id
activation_pod_id = models.TextField(null=True)
activation_job_namespace = models.TextField(null=True)
status_message = models.TextField(null=True, default=None)
log_read_at = models.DateTimeField(null=True)

Expand Down
Loading
Loading