useranon
useranon

Reputation: 29514

Run Ansible task only on one server - AWS

I have my ansible task running in all my api_servers which i would restrict it to run only on one IP (one of the api_server) I have added run_once: true but it didnt helps.

Kindly advise. EDIT :

Will the below work? I have 10 instances of app_servers running, I want the task to run only on one app_server

run_once: true
when:
    - inventory_hostname == groups['app_servers'][0]

Where my inventory file is like

[app_servers]
prod_app_[1:4]

Upvotes: 1

Views: 474

Answers (2)

CLNRMN
CLNRMN

Reputation: 1457

I would write my playbook like that:

 ---
 # Run on all api_servers
 - hosts: api_servers
   tasks:
   - name: do something on all api_servers
     #...

 # Run only on one api_server e.q. api_server_01
 - hosts: api_server_01
   tasks:
   - name: Gather data from api_server_01 
     #...

The other option would be to work with when: or to run the playbook with the --limit option

---
- hosts: all
  tasks:
  - name: do something only when on api_server_01
    #...
    when: inventory_hostname == "api_server_01"

EDIT: Here you will see all the option in one example:

---
- hosts: all
  tasks:
  - debug: msg="run_once"
    run_once: true
  - debug: msg=all
  - debug: msg="run on the first of the group"
    when: inventory_hostname == groups['app_servers'][0]

# Option with separated hosts, this one will be faster if gather_facts is not tuned.
- hosts: app_servers[0]
  tasks:
  - debug: msg="run on the first of the group"

Upvotes: 2

user1098490
user1098490

Reputation: 488

(Since I can not comment, I have to answer.)

What about delegate_to? Where you delegate the task to a specific host.

  hosts: all
  tasks:
    - name: Install vim on specific host 
      package:
        name: vim
        state: present
      delegate_to: staging_machine

Or

As @user2599522 mentioned: --limit is also an option to use:

You can also limit the hosts you target on a particular run with the --limit flag. (Patterns and ansible-playbook flags)

Upvotes: 0

Related Questions