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.
A playbook is composed of one or more ‘plays’ in an ordered list. The terms ‘playbook’ and ‘play’ are sports analogies. Each play executes part of the overall goal of the playbook, running one or more tasks. Each task calls an Ansible module. A playbook runs in order from top to bottom. Within each play, tasks also run in order from top to bottom.
Ansible completes the play on the specified number or percentage of hosts before starting the next batch of hosts. You can restrict the number of workers allotted to a block or task with throttle. You can control how Ansible selects the next host in a group to execute against with order. You can run a task on a single host with run_once.
In Ansible the user and group module helps us accomplish user management tasks. This playbook highlights various tasks. password – user’s encrypted password. Please note that the password should already been encrypted or use Ansible playbook encryption but hide the password in Ansible vault
These keywords are not strategies. They are directives or options applied to a play, block, or task. By default, Ansible runs in parallel against all the hosts in the pattern you set in the hosts: field of each play.
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 xyz.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]
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With