I want a variable on Ansible to be active or passive depending on the condition.
I am using the role "davidwittman.redis". I'm setting up a redis cluster. I need to run a single yml file by deploying it to 3 servers at the same time. I can't distribute "yml" files separately.
I have a simple setup configuration below. Here, I want to activate the "redis_slaveof" value on all other servers, except the master server, depending on the condition.
In other words, I want the "redis_slaveof" value I selected to not be active on the master server, but to have this value active on the other 2 servers.
How can I do this, do you have any suggestions ?
my main ansible configuration;
> - name: Redis Replication Slave Installations hosts: localhost
>
> pre_tasks:
> - name: check redis server1
> shell: "cat /etc/hosts |grep redis |awk '{print $2}' |sed -n 1p"
> register: server01
>
> - name: check redis server2
> shell: "cat /etc/hosts |grep redis |awk '{print $2}' |sed -n 2p"
> register: server02
>
> - name: check redis server3
> shell: "cat /etc/hosts |grep redis |awk '{print $2}' |sed -n 3p"
> register: server03
>
> roles:
> - role: davidwittman.redis
>
> vars:
> - redis_version: 6.2.6
> - redis_bind: 0.0.0.0
> - redis_port: 6379
> - redis_service_name: redis-service
> - redis_protected_mode: "no"
> - redis_config_file_name: "redis.conf"
>
> # - redis_slaveof: "{{ server01.stdout }} 6379"
I tried the following;
tasks: - name: test import_role: name: davidwittman.redis vars: redis_slaveof: "{{ server01.stdout }} 6379" when: '"{{ (server01.stdout) }}" != "{{ ansible_hostname }}"'
- role: davidwittman.redis when: '"{{ (server01.stdout) }}" != "{{ ansible_hostname }}"'
- redis_slaveof: "{%if '{{ (server01.stdout) }} != {{ ansible_hostname }}' %} {{ '{{ (server01.stdout) }} 6379' }} {% else %} {{ '' }} {% endif %}"
So you want to run a role differently, based on variables.
In your playbook do not use
roles:
- role: davidwittman.redis
but rather do
tasks:
- name: Pass variables to role
include_role:
name: myrole
vars:
rolevar1: value from task
This is executed after roles but now you can add when
expressions:
tasks:
- name: Pass variables to role
include_role:
name: myrole
vars:
rolevar1: value from task
when: ansible_hostname = "server1"
- name: Pass variables to role
include_role:
name: myrole
vars:
rolevar1: value from task
additionalrolevar: whatever
when: ansible_hostname != "server1"