How to Play with particular group using Ansible Playbook

13,524

Solution 1

Original question was: --limit option is not working

By calling ansible-playbook --limit 'PM' akana-installation.yml you tell ansible to limit servers to the hosts that are in PM group.
In your case it will be xyz.example.com.
Keep in mind that if you have this server in several groups, as you do, it will still be a member of that groups.
Your limited inventory will become:

[PM]
xyz.example.com ansible_connection=ssh

[ND]

[CM]
xyz.example.com ansible_connection=ssh

And ansible-playbook will execute every play in your playbook that is applicable for asma.example.com.
In your case:

Play 'PM:ND:CM'
[xyz.example.com]
Play 'PM'
[xyz.example.com]
Play 'ND'
skipping: no hosts matched
Play 'CM'
[xyz.example.com]

Solution 2

Create dir for playbook files:

mkdir playbooks

Split your playbooks into separate files, eg. playbooks/pm.yml:

- hosts: PM
  remote_user: root
  tasks:
  {some thing}

Create file all.yml

- hosts: PM:ND:CM
  remote_user: root
  tasks:
  {some thing}

- include: playbooks/pm.yml
- include: playbooks/nd.yml
- include: playbooks/cm.yml    

Now You have separate logic and You can play all with command:

ansible-playbook all.yml

or run separate command:

ansible-playbook playbooks/pm.yml

or

ansible-playbook playbooks/nd.yml
Share:
13,524
KishoreReddy
Author by

KishoreReddy

By Day: Lazy code writer, Active Quora Reader :), StackOverflow follower By Night: Chatter, Movie lover By weekend: Searching for fun But occasionally learning new technologies and concepts.

Updated on August 04, 2022

Comments

  • KishoreReddy
    KishoreReddy over 1 year

    Ansible version: 2.1.0

    My ansible hosts file is:

    [PM]
    xyz.example.com ansible_connection=ssh
    
    [ND]
    pqr.example.com ansible_connection=ssh
    
    [CM]
    xyz.example.com ansible_connection=ssh
    pqr.example.com ansible_connection=ssh
    

    And playbook is:

    - hosts: PM:ND:CM
       remote_user: root
       tasks:
        {some thing}
    
    - hosts: PM
       remote_user: root
       tasks:
        {some thing}
    
     - hosts: ND
       remote_user: root
       tasks:
        {some thing}
    
    - hosts: CM
       remote_user: root
       tasks:
        {some thing}
    

    And I am running playbook with the following command:

    ansible-playbook --limit 'PM' akana-installation.yml
    

    But still the playbook is playing with all hosts, it means

    Play 'PM:ND:CM'
    Play 'PM'
    Play 'ND'
    Play 'CM'
    

    those all plays are playing. Please help me to resolve this.

    What I need is: While executing playbook I will give group name, that only group should play, so please let me know is there any other way.

  • Kishore Reddy
    Kishore Reddy almost 8 years
    Yes, you are right that's what happening to me. But I want to play with particular group hosts, how can I achieve this?
  • Konstantin Suvorov
    Konstantin Suvorov almost 8 years
    @KishoreReddy, this is not how thing works in ansible. You can limit hosts (as you do with --limit switch), but it will not limit plays. If you want to limit plays, consider separating them to different playbooks and include them into the main playbook (see example: site.yml and webservers.yml). Or use tags.