From 265c4427340aae3c4ce430a311ed3d7bb3ce0939 Mon Sep 17 00:00:00 2001 From: aknochow Date: Mon, 3 Feb 2025 16:08:25 -0500 Subject: [PATCH] idle_deployment - Scale down deployments to put EDA into an idle state: adding idle_deployment to scale down deployments --- config/crd/bases/eda.ansible.com_edas.yaml | 6 ++ ...server-operator.clusterserviceversion.yaml | 7 ++ roles/eda/defaults/main.yml | 3 + roles/eda/tasks/idle_deployment.yml | 93 +++++++++++++++++++ roles/eda/tasks/main.yml | 4 + .../templates/postgres.statefulset.yaml.j2 | 1 + 6 files changed, 114 insertions(+) create mode 100644 roles/eda/tasks/idle_deployment.yml diff --git a/config/crd/bases/eda.ansible.com_edas.yaml b/config/crd/bases/eda.ansible.com_edas.yaml index eddd53cb..6d184a0a 100644 --- a/config/crd/bases/eda.ansible.com_edas.yaml +++ b/config/crd/bases/eda.ansible.com_edas.yaml @@ -2428,6 +2428,9 @@ spec: description: 'Defines Redis Deployment replicas' format: int32 type: integer + default: 1 + minimum: 0 + maximum: 1 node_selector: additionalProperties: type: string @@ -2823,6 +2826,9 @@ spec: force_drop_db: description: Force drop the database before restoring. USE WITH CAUTION! type: boolean + idle_deployment: + description: Scale down deployments to put EDA into an idle state + type: boolean status: description: Status defines the observed state of EDA properties: diff --git a/config/manifests/bases/eda-server-operator.clusterserviceversion.yaml b/config/manifests/bases/eda-server-operator.clusterserviceversion.yaml index a2d67952..2c2c80c3 100644 --- a/config/manifests/bases/eda-server-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/eda-server-operator.clusterserviceversion.yaml @@ -59,6 +59,13 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:advanced - urn:alm:descriptor:com.tectonic.ui:hidden + - description: Scale down deployments to put EDA into an idle state + displayName: Idle EDA + path: idle_deployment + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - urn:alm:descriptor:com.tectonic.ui:hidden - displayName: No Log Configuration path: no_log x-descriptors: diff --git a/roles/eda/defaults/main.yml b/roles/eda/defaults/main.yml index 1bb46836..dd027c6d 100644 --- a/roles/eda/defaults/main.yml +++ b/roles/eda/defaults/main.yml @@ -168,3 +168,6 @@ admin_password_secret: '' # Disable UI container's nginx ipv6 listener ipv6_disabled: false + +# idle_deployment - Scale down deployments to put EDA into an idle state +idle_deployment: false diff --git a/roles/eda/tasks/idle_deployment.yml b/roles/eda/tasks/idle_deployment.yml new file mode 100644 index 00000000..af3c7ce3 --- /dev/null +++ b/roles/eda/tasks/idle_deployment.yml @@ -0,0 +1,93 @@ +--- +- name: Scale down EDA Deployments + kubernetes.core.k8s: + state: present + definition: + apiVersion: apps/v1 + kind: Deployment + metadata: + name: "{{ item }}" + namespace: "{{ ansible_operator_meta.namespace }}" + spec: + replicas: 0 + loop: + - '{{ ansible_operator_meta.name }}-activation-worker' + - '{{ api_server_name }}' + - '{{ ansible_operator_meta.name }}-default-worker' + - '{{ event_stream_server_name }}' + - '{{ ansible_operator_meta.name }}-scheduler' + +- name: Scale down EDA ui if enabled + kubernetes.core.k8s: + state: present + definition: + apiVersion: apps/v1 + kind: Deployment + metadata: + name: "{{ ansible_operator_meta.name }}-ui" + namespace: "{{ ansible_operator_meta.namespace }}" + spec: + replicas: 0 + when: not ui_disabled + +- name: Check for an external Redis cache + ansible.builtin.import_role: + name: redis + tasks_from: check_external_config + when: redis_type | length == 0 or redis_type == 'unmanaged' + +- name: Check for the default Redis configuration + ansible.builtin.import_role: + name: redis + tasks_from: check_default_config + when: redis_type | length == 0 or redis_type == 'managed' + +- name: Create a default Redis configuration + ansible.builtin.import_role: + name: redis + tasks_from: create_default_config + when: redis_type | length == 0 + +- name: Scale down Redis Deployment + kubernetes.core.k8s: + state: present + definition: + apiVersion: apps/v1 + kind: Deployment + metadata: + name: "{{ ansible_operator_meta.name }}-redis" + namespace: "{{ ansible_operator_meta.namespace }}" + spec: + replicas: 0 + when: redis_type == "managed" + +- name: Combine postgres default and custom vars for each component + ansible.builtin.import_role: + name: postgres + tasks_from: combine_defaults + +- name: Determine and set postgres configuration secret and variables + ansible.builtin.import_role: + name: postgres + tasks_from: set_configuration_secret + +- name: Set variables to be used in Postgres templates + ansible.builtin.import_role: + name: postgres + tasks_from: set_variables + +- name: Scale down PostgreSQL Statefulset + kubernetes.core.k8s: + state: present + definition: + apiVersion: apps/v1 + kind: StatefulSet + metadata: + name: "{{ ansible_operator_meta.name }}-postgres-{{ supported_pg_version }}" + namespace: "{{ ansible_operator_meta.namespace }}" + spec: + replicas: 0 + when: managed_database + +- name: End Playbook + ansible.builtin.meta: end_play diff --git a/roles/eda/tasks/main.yml b/roles/eda/tasks/main.yml index 092b1a1d..ebb06129 100644 --- a/roles/eda/tasks/main.yml +++ b/roles/eda/tasks/main.yml @@ -8,6 +8,10 @@ include_role: name: common +- name: Idle EDA + include_tasks: idle_deployment.yml + when: idle_deployment | bool + - name: Setup Redis include_role: name: redis diff --git a/roles/postgres/templates/postgres.statefulset.yaml.j2 b/roles/postgres/templates/postgres.statefulset.yaml.j2 index da70a034..1d911bb2 100644 --- a/roles/postgres/templates/postgres.statefulset.yaml.j2 +++ b/roles/postgres/templates/postgres.statefulset.yaml.j2 @@ -12,6 +12,7 @@ metadata: app.kubernetes.io/part-of: '{{ ansible_operator_meta.name }}' app.kubernetes.io/managed-by: 'eda-operator' spec: + replicas: 1 selector: matchLabels: app.kubernetes.io/name: 'postgres-{{ supported_pg_version }}'