From 0c98160251992159f721d590f4d6541f5a22e964 Mon Sep 17 00:00:00 2001 From: Phillip Wirth Date: Tue, 14 Jan 2025 11:02:23 +0100 Subject: [PATCH] doing it the manual way --- .../dof_rabbitmq/enable-feature-flags.sh | 60 +++++++++++++++ ansible/roles/dof_rabbitmq/tasks/main.yml | 27 ------- ...enable-feature-flags-job-configmap.yaml.j2 | 74 ------------------- .../enable-feature-flags-job.yaml.j2 | 33 --------- 4 files changed, 60 insertions(+), 134 deletions(-) create mode 100755 ansible/roles/dof_rabbitmq/enable-feature-flags.sh delete mode 100644 ansible/roles/dof_rabbitmq/templates/enable-feature-flags-job-configmap.yaml.j2 delete mode 100644 ansible/roles/dof_rabbitmq/templates/enable-feature-flags-job.yaml.j2 diff --git a/ansible/roles/dof_rabbitmq/enable-feature-flags.sh b/ansible/roles/dof_rabbitmq/enable-feature-flags.sh new file mode 100755 index 000000000..d2095205d --- /dev/null +++ b/ansible/roles/dof_rabbitmq/enable-feature-flags.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +set -euo pipefail + +KUBECONFIG_OPTION="" +NAMESPACE="" +COMPONENT_NAME="rabbitmq" +CONTAINER_NAME="rabbitmq" +COMMAND="cat /etc/issue" + +while [[ $# -gt 0 ]]; do + case $1 in + --kubeconfig) + KUBECONFIG_OPTION="--kubeconfig=$2" + shift 2 + ;; + --namespace) + NAMESPACE=$2 + shift 2 + ;; + --component-name) + COMPONENT_NAME=$2 + shift 2 + ;; + --container-name) + CONTAINER_NAME=$2 + shift 2 + ;; + --command) + COMMAND=$2 + shift 2 + ;; + *) + echo "Unknown argument: $1" + echo "Usage: $0 --namespace [--kubeconfig ] [--component-name ] [--container-name ] [--command ]" + exit 1 + ;; + esac +done + +if [[ -z "$NAMESPACE" ]]; then + echo "Error: --namespace is required" + echo "Usage: $0 --namespace [--kubeconfig ] [--component-name ] [--container-name ] [--command ]" + exit 1 +fi + +PODS=$(kubectl $KUBECONFIG_OPTION get pods -n "$NAMESPACE" -l "app.kubernetes.io/component=$COMPONENT_NAME" -o jsonpath='{.items[*].metadata.name}') + +if [[ -z "$PODS" ]]; then + echo "No pods found matching app.kubernetes.io/component=$COMPONENT_NAME in namespace $NAMESPACE" + exit 1 +fi + +for POD in $PODS; do + echo "Executing command in pod: $POD" + kubectl $KUBECONFIG_OPTION exec -n "$NAMESPACE" -c "$CONTAINER_NAME" "$POD" -- $COMMAND || { + echo "Failed to execute command in pod: $POD" >&2 + exit 1 + } +done diff --git a/ansible/roles/dof_rabbitmq/tasks/main.yml b/ansible/roles/dof_rabbitmq/tasks/main.yml index c484e0753..2a5d24a37 100644 --- a/ansible/roles/dof_rabbitmq/tasks/main.yml +++ b/ansible/roles/dof_rabbitmq/tasks/main.yml @@ -35,30 +35,3 @@ tags: - prometheus - - - name: Enable Feature Flags ConfigMap - kubernetes.core.k8s: - kubeconfig: ~/.kube/config - namespace: "{{ NAMESPACE }}" - template: enable-feature-flags-job-configmap.yaml.j2 - tags: - - configmap - - - name: Delete existing feature flags job if it exists - kubernetes.core.k8s: - kubeconfig: ~/.kube/config - namespace: "{{ NAMESPACE }}" - api_version: batch/v1 - kind: Job - name: enable-feature-flags-job - state: absent - tags: - - job - - - name: Create the Enable Feature Flags Job - kubernetes.core.k8s: - kubeconfig: ~/.kube/config - namespace: "{{ NAMESPACE }}" - template: enable-feature-flags-job.yaml.j2 - tags: - - job diff --git a/ansible/roles/dof_rabbitmq/templates/enable-feature-flags-job-configmap.yaml.j2 b/ansible/roles/dof_rabbitmq/templates/enable-feature-flags-job-configmap.yaml.j2 deleted file mode 100644 index db86b0a70..000000000 --- a/ansible/roles/dof_rabbitmq/templates/enable-feature-flags-job-configmap.yaml.j2 +++ /dev/null @@ -1,74 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: enable-feature-flags-script - namespace: {{ NAMESPACE }} - labels: - app: rabbitmq -data: - enable_feature_flags.sh: | - #!/bin/bash - set -euo pipefail - - if [ -z "${RABBITMQ_MGMT_USERNAME:-}" ] || [ -z "${RABBITMQ_MGMT_PASSWORD:-}" ]; then - echo "ERROR: RABBITMQ_MGMT_USERNAME and RABBITMQ_MGMT_PASSWORD must be set." >&2 - exit 1 - fi - - RABBITMQ_API="${RABBITMQ_API:-http://rabbitmq-svc}" - RABBITMQ_PORT="${RABBITMQ_PORT:-15672}" - - get_nodes() { - curl -sf -u "$RABBITMQ_MGMT_USERNAME:$RABBITMQ_MGMT_PASSWORD" "$RABBITMQ_API:$RABBITMQ_PORT/api/nodes" | jq -r '.[].name | sub("^.*@"; "")' || { - echo "ERROR: Failed to fetch nodes." >&2 - exit 1 - } - } - - get_feature_flags() { - local node=$1 - curl -sf -u "$RABBITMQ_MGMT_USERNAME:$RABBITMQ_MGMT_PASSWORD" "http://$node:$RABBITMQ_PORT/api/feature-flags" | jq -r '.[] | "\(.name) \(.state)"' || { - echo "ERROR: Failed to fetch feature flags for node $node." >&2 - exit 1 - } - } - - enable_feature_flag() { - local flag_name=$1 - local node=$2 - curl -sf -u "$RABBITMQ_MGMT_USERNAME:$RABBITMQ_MGMT_PASSWORD" -X PUT \ - -H "Content-Type: application/json" \ - "http://$node:$RABBITMQ_PORT/api/feature-flags/$flag_name/enable" || { - echo "ERROR: Failed to enable feature flag $flag_name on node $node." >&2 - exit 1 - } - } - - main() { - nodes=$(get_nodes) - if [ -z "$nodes" ]; then - echo "ERROR: No nodes found. Exiting." >&2 - exit 1 - fi - echo "$nodes" - - for node in $nodes; do - feature_flags=$(get_feature_flags "$node") - if [ -z "$feature_flags" ]; then - echo "ERROR: No feature flags found for node $node. Exiting." >&2 - exit 1 - fi - echo "$feature_flags" - - echo "$feature_flags" | while read -r flag state; do - if [ "$state" != "enabled" ]; then - enable_feature_flag "$flag" "$node" - echo "Enabled feature flag $flag on node $node" - else - echo "Feature flag $flag is already enabled on node $node." - fi - done - done - } - - main \ No newline at end of file diff --git a/ansible/roles/dof_rabbitmq/templates/enable-feature-flags-job.yaml.j2 b/ansible/roles/dof_rabbitmq/templates/enable-feature-flags-job.yaml.j2 deleted file mode 100644 index 5c5be7407..000000000 --- a/ansible/roles/dof_rabbitmq/templates/enable-feature-flags-job.yaml.j2 +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: enable-feature-flags-job - labels: - app: rabbitmq -spec: - template: - metadata: - labels: - app: rabbitmq - spec: - containers: - - name: rabbitmq-enable-feature-flags-job - image: quay.io/schulcloudverbund/infra-tools:latest - envFrom: - - secretRef: - name: rabbitmq-secret - volumeMounts: - - name: script - mountPath: /enable_feature_flags.sh - subPath: enable_feature_flags.sh - command: ['/bin/bash','-c'] - args: ['cp /enable_feature_flags.sh /enable_feature_flags.run.sh && chmod +x /enable_feature_flags.run.sh && ./enable_feature_flags.run.sh'] - volumes: - - name: script - configMap: - name: enable-feature-flags-script - items: - - key: enable_feature_flags.sh - path: enable_feature_flags.sh - restartPolicy: Never - backoffLimit: 4