Reputation: 936
I trying create ansible role for creating glusterfs volume replica in AWS Centos instances.I successes to create volume and install glusterfs. I tried to use this topic suggestion running "gluster peer probe " on each machine from host group. I have playbook that running "glusterfs" role on hostgroup:
[Server]
devserver1.net ansible_user=ec2-user ansible_ssh_private_key_file=/some.pem
devserver2.net ansible_user=ec2-user ansible_ssh_private_key_file=/some.pem
What I'm trying now is in role to run "gluster peer probe...", when this task run inside spesific host of this hostgroup. Like that:
- name: gluster peer probe in server1
shell: gluster peer probe {{ stackName }}server2.net
when: "'{{ stackName }}server1.net' == {{ inventory_hostname }}"
- name: gluster peer probe in server2
shell: gluster peer probe {{ stackName }}server1.net
when: "'{{ stackName }}server2.net' == {{ inventory_hostname }}"
StackName is predefined inventory "dev" variable for playbook.
And it fails with error:
FAILED! => {"failed": true, "msg": "The conditional check '{{ stackName }} server1.net in inventory_hostname' failed. The error was: error while evaluating conditional ({{ stackName }}server1.net in inventory_hostname): 'server1' is undefined\n\nThe error appears to have been in 'ansible/roles/glusterfs/tasks/main.yml': line 69, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: gluster peer probe from server1\n ^ here\n"}
Any suggesting how I can do that? Or what I'm doing wrong here?
Upvotes: 0
Views: 806
Reputation: 26
Our way of doing that (and works for us)
- name: Form a cluster.
command: "gluster peer probe {{ peernode }}"
loop: "{{ ansible_play_hosts | flatten(levels=1) }}"
loop_control:
loop_var: peernode
pause: 2
register: glusterpeerprobe
become: true
run_once: true
any_errors_fatal: true
changed_when: "'peer probe: success.' in glusterpeerprobe.stdout_lines"
Upvotes: 0
Reputation: 68549
You shouldn't add a Jinja2 template (with expressions) to when
conditions in Ansible. The whole parameter is supposed to be a single Jinja2 expression itself:
when: "stackName + 'server1.net' == inventory_hostname"
Upvotes: 1