Search code examples
ansibleglusterfs

How to run Glusterfs-cli command "peer probe" using Ansible host group with condition "when"


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?


Solution

  • 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"