I have 3 applications hosted on three separate hosts and mentioned in the hosts file like below:
cat my.hosts
[app1_webapp]
host3.mybank.com[app2_webapp]
host5.mybank.com[app3_webapp]
host8.mybank.comMy requirement is to run two types of raw module commands.
The first raw task which should run on all three hosts for all three applications i.e uptime
The second raw task is ps command that should run only on the respective host i.e ps -ef | grep app1 should only run on
host3.mybank.comBelow is how I call my main.yml
ansible-playbook -i my.hosts main.yml -e appname=app1,app2,app3
cat main.yml
- hosts: "{{ product(appname.split(',')) | product(['webapp'])|map('flatten')|map('join', '_') }}"
user: user1
gather_facts: no
tasks:
- name: Check Running Process
raw: "ps -ef | grep {{ item }}"
register: psout
with_items: "{{ appname.split(',') }}"
- name: DUMP Running Process
debug:
msg: "{{ psout.stdout }}"
The above raw fails as it tried ps for each app on each hosts which is what I wish to skip (correct).
How do I put a when condition so that the ps command for the respective app should run on the respective host only and not on all three hosts?
Summary: my problem is regarding standard practice in infrastructure management. Each app runs on its own host as specified in the my.hosts file. I wish to find if the app process ps -ef | grep <app-name> is running on its own host(desired) and not on all inventory-hosts