- name: Set Up Redis Cluster hosts: init become: true tasks: - name: Create Redis Config Map kubernetes.core.k8s: state: present src: /tmp/k8s/redis/01-config-map.yml kubeconfig: /etc/rancher/k3s/k3s.yaml - name: Create Redis Nodes kubernetes.core.k8s: state: present src: /tmp/k8s/redis/02-redis.yml kubeconfig: /etc/rancher/k3s/k3s.yaml - name: Wait for Redis Nodes ansible.builtin.command: kubectl -n=redis rollout status --timeout=10m sts/redis-cluster changed_when: false - name: Create ClusterIP Service kubernetes.core.k8s: state: present src: /tmp/k8s/redis/03-cluster-ip.yml kubeconfig: /etc/rancher/k3s/k3s.yaml - name: Grab Node IPs ansible.builtin.shell: echo $(kubectl get pods -l app=redis-cluster -n redis -o json | jq -r '.items | map(.status.podIP) | join(":6379 ")'):6379 args: executable: /bin/bash register: redis_node_ips changed_when: false tags: - skip_ansible_lint - name: Display Node IPs ansible.builtin.debug: msg: "{{ redis_node_ips.stdout }}" - name: Check if Redis cluster is already active ansible.builtin.shell: > set -o pipefail kubectl exec redis-cluster-0 -n redis -- redis-cli -p 6379 cluster info | grep cluster_state args: executable: /bin/bash register: redis_cluster_state changed_when: false failed_when: false - name: Activate Redis Cluster ansible.builtin.shell: > kubectl exec redis-cluster-0 -n redis -- redis-cli --cluster create --cluster-replicas 1 {{ redis_node_ips.stdout }} --cluster-yes when: "'cluster_state:ok' not in redis_cluster_state.stdout" changed_when: false