Need when condition / solution if possible for running task on a specific host

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.com
My 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.com

Below 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 is running on its own host(desired) and not on all inventory-hosts

Suppose your playbook does what you (think) you want. Then what do you intend to do with this output?
What if some apps are running on hosts they’re not intended to run on? Do you take some corrective measures? Or reinstall the host?
And why is it possible at all that apps appear on random inventory hosts?

Rather than using ansible as a glorified shell wrapper to report proces status, I would use it to set up the infra so that only the right apps run on the right hosts.

The output is for logging and auditing purposes only.

The apps may be run by other teams on their intended hosts as mentioned in the inventory file or on other hosts where they should not be running.

The dumps would help identify where the app was actually running at the time of play and then the play may choose to start / stop the app at the intended host.

This is a real-world problem and any solution would be appretiated.

The output is for logging and auditing purposes only.

The apps may be run by other teams on their intended hosts as mentioned in the inventory file or on other hosts where they should not be running.

This confirms my suspicion that this isn’t a technical problem but rather an organisational one.
Since I don’t believe in fixing organisational problems with technological measures, I won’t be able to help you with that.
Somebody else might, though.