I have some tasks that should only be processed if the host 
(inventory_hostname) is the first in the group of servers it's defined in.

For example, here is my hosts file. Note that the group names are not fixed 
- the Role I want to use them in cannot rely on the name of the groups - it 
needs to be a bit more dynamic than that:

*Hosts*
server1
server2
server3

[dev_cluster]
server1
server2
server3


[frontend_nodes]
server1
server2


[frontend_nodes:vars]
node_type_prefix=
node_port=19043
node_protocol=https


[backend_nodes]
server3


[backend_nodes:vars]
node_type_prefix=backend/
node_port=19043
node_protocol=https

I have a playbook which I call like so, by passing in the name of the two 
groups - again - the name of these groups could vary, or I could add a 3rd 
or 4th group in.

Playbook
---
- hosts: frontend_nodes,backend_nodes
  connection: local
  gather_facts: no
  vars:
    ohp_auth_user: "username"
    ohp_auth_password: "password"
  roles:
    - { role: ansible-ohp-config-backup, node_name: "{{ inventory_hostname 
}}" }



Within my role, I have a bunch of tasks that I only want to run if the 
hostname is the first in the the group it is defined in that has been 
passed by the playbook.
So given the example above, only run on server1 (the first in 
frontend_nodes), and server 3 (the first in backend_nodes)

I was thinking the syntax would be something like:

  - name: Get OHP list of problems
      uri:
        url: "{{ node_protocol }}://{{ node_name }}:{{ node_port }}/{{ 
node_type_prefix }}monitoring/problems"
        method: GET
        user: "{{ ohp_auth_user }}"
        password: "{{ ohp_auth_password }}"
        force_basic_auth: yes
        validate_certs: no
        status_code: 200
        timeout: 10
        return_content: yes
        dest: "{{ backup_folder }}/{{ node_name }}-problems.xml"
      when inventory_hostname = current_group[0]
      delegate_to: localhost




Is there any way to achieve this?

Worst case scenario I might need to pass a list of the "first" hosts into 
the role as a parameter and evaluate there.

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/0aafd66c-825b-4ab9-b157-6024abbc28f7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to