You mentioned multiple environments. The suggestion I made before is only sufficient for one environment. In our shop, we use "fully articulated group names" that consist of the problem /"domain", /the "/environment/", plus host classes as required to specify the hosts without relying on special hostname patterns or other tricks.

In your case, suppose your app is called "xkcd", and you have environments named "dev", "tst", "spt", and "prd", each of which contains a db host and a few app hosts. Using our shop's inventory conventions for the "xkcd" problem domain would result in the inventory below. Though not required, by convention we always use a host's FQDN as the inventory name (i.e. ansible_fqdn==inventory_hostname). We may also set up an "all" pseudo environment that encompasses all the hosts in the problem domain. It's occasionally useful in playbooks, and it also helps ensure we've created our group hierarchy the way we expect. In particular, if we find we're having to specify a hostname more than once in a problem domain, we probably have not created the correct hierarchy of sub_groups.

[xkcd_all:children]
xkcd_dev
xkcd_tst
xkcd_spt
xkcd_prd

[xkcd_all_db:children]
xkcd_dev_db
xkcd_tst_db
xkcd_spt_db
xkcd_prd_db

[xkcd_all_app:children]
xkcd_dev_app
xkcd_tst_app
xkcd_spt_app
xkcd_prd_app

[xkcd_dev:children]
xkcd_dev_db
xkcd_dev_app

[xkcd_dev_db]
dbhost0d.our.org

[xkcd_dev_app]
apphost0d.our.org

[xkcd_tst:children]
xkcd_tst_db
xkcd_tst_app

[xkcd_tst_db]
dbhost0t.our.org

[xkcd_tst_app]
apphost0t.our.org
apphost1t.our.org

[xkcd_spt:children]
xkcd_spt_db
xkcd_spt_app

[xkcd_spt_db]
dbhost0s.our.org
dbhost1s.our.org

[xkcd_spt_app]
apphost0s.our.org
apphost1s.our.org

[xkcd_prd:children]
xkcd_prd_db
xkcd_prd_app

[xkcd_prd_db]
dbhost0p.our.org
dbhost1p.our.org

[xkcd_prd_app]
apphost0p.our.org
apphost1p.our.org
apphost2p.our.org
apphost3p.our.org


On 1/9/23 7:13 AM, Todd Lewis wrote:
This looks like an inventory issue to me. You could have more fine-grained control with hierarchical groups:
[a:children]
a_db
a_app

[a_db]
dbhost1

[a_app]
apphost2
apphost3
Then run your "stop application" task like so:

   - name: Stop application
     …
     when: 'inventory_hostname in group["a_app"]'
     run_once: true

On 1/9/23 6:48 AM, Redmansas wrote:
I'm running task on group called A
[A]
dbhost1
apphost2
apphost3

task "stop application" should run only on apphost2 or 3 and need to run only once(script stop whole environment ) so I would like to eliminate from "stop application" dbhost1 and then run stop part only on one of apphosts(no different which one)
before stop part there some task running on all of nodes
I have multiple environments so and in each of them also is db and app servers and only app servers can stop
I tried to use
- block
   - block:
        <stop app>
     run_once: yes
 when: ansible_hostname[0] == "a"

but if it will catch DB host it will skip it and then skip block part
I hope is more clear now :/


poniedziałek, 9 stycznia 2023 o 12:26:02 UTC+1 [email protected] napisał(a):

    I can't make any sense of what you're trying to achieve. Can you
    rephrase and be more clear?

    On Mon, 9 Jan 2023 at 12:00, Redmansas <[email protected]> wrote:

        Hi
        Maybe idiotic problem but I don't have clue how to bite it :/
        I have example list of 3 hosts all are needed in inventory. I
        need to run one task to stop application
        Host 1
        Host 2
        Host 3
        app can be stopped only on host 2 and 3 and it need to run
        once because it will stop for whole landscape. I know that I
        can create a static var with host name but then any landscape
        i need to change it.

        so I though to eliminate host1 from list and then run only
        once on one of rest hosts (host2/host3)
        I tried to do double block but in first iteration skip host 1
        but in second block don't do anything



-- 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 [email protected].
        To view this discussion on the web visit
        
https://groups.google.com/d/msgid/ansible-project/f296b591-c146-4271-a86d-f1101140921cn%40googlegroups.com
        
<https://groups.google.com/d/msgid/ansible-project/f296b591-c146-4271-a86d-f1101140921cn%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- Sent from Gmail Mobile

--
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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/987210e7-ffdb-4d28-b3d4-588088c9e081n%40googlegroups.com <https://groups.google.com/d/msgid/ansible-project/987210e7-ffdb-4d28-b3d4-588088c9e081n%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
Todd

--
Todd

--
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/bf6e9a69-f5de-71ca-a0c8-6452c038e9f9%40gmail.com.

Reply via email to