snippetMinor
How to skip play in ansible-playbook?
Viewed 0 times
skipplaybookplayhowansible
Problem
I have 2 plays in my sites.yml file:
The reason behind this is that, the first play will create ansible user with sudo access. Here, I have used root user to run the play. Then I have to run another play as ansible user.
My question is how to run these play one after another? I first want to run first one then after that second one.
If I run the playbook then it will get stuck because it will first run first play and tries to run second play where it gets stuck.
I am running playbook with the following command:
This is for 1st part.
- name: First play
hosts: all
remote_user: root
roles:
- role1
- name: Second Play
hosts: all
remote_user: ansible
become: yes
become_method: sudo
connection: ssh
gather_facts: yes
roles:
- role2
- role3The reason behind this is that, the first play will create ansible user with sudo access. Here, I have used root user to run the play. Then I have to run another play as ansible user.
My question is how to run these play one after another? I first want to run first one then after that second one.
If I run the playbook then it will get stuck because it will first run first play and tries to run second play where it gets stuck.
I am running playbook with the following command:
ansible-playbook -i inventory.ini -l web sites.yml --ask-pass -c paramikoThis is for 1st part.
Solution
Although the comments have highlighted the fact that this playbook is fine, as long as it is designed to do what it needs to do:
The reason behind this is that, the first play will create ansible user with sudo access. Here, I have used root user to run the play. Then I have to run another play as ansible user.
In the first play, you have only one role:
This will ensure that the user is added, and included in the right groups, with sudo rights -- it is just an example of how you could achieve this, there are other strategies of course.
My question is how to run these play one after another? I first want to run first one then after that second one.
That's exactly how playbooks work.
If I run the playbook then it will get stuck because it will first run first play and tries to run second play where it gets stuck.
If you do not have a task to configure the user required in the next play, then yes, it will fail (not get stuck).
The point is that since Ansible is idempotent, you don't have to worry about skipping the play because if the user is properly configured, the first play will simply have no effect.
However, to answer the actual question
How do I skip a play in an Ansible playbook ?
This is done using the conditional execution using
The reason behind this is that, the first play will create ansible user with sudo access. Here, I have used root user to run the play. Then I have to run another play as ansible user.
In the first play, you have only one role:
role1. If in role1 you have a task that creates the ansible user, then you can use that user to connect the next time. This is actually something many people do, including myself, to put a known baseline on a service:- name: Ensure Ansible user is present (RedHat)
user:
name: ansible
comment: "ansible user created by bootstrap playbook"
generate_ssh_key: yes
groups: wheel
tags:
- bootstrap
when: ansible_os_family=="RedHat"
- name: Ensure Ansible user is present (Debian)
user:
name: ansible
comment: "ansible user created by bootstrap playbook"
generate_ssh_key: yes
groups: sudo
tags:
- bootstrap
when: ansible_os_family=="Debian"
- name: update sudoers to ensure ansible user can sudo
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^ansible'
line: 'ansible ALL=(ALL) NOPASSWD: ALL'
tags:
- bootstrapThis will ensure that the user is added, and included in the right groups, with sudo rights -- it is just an example of how you could achieve this, there are other strategies of course.
My question is how to run these play one after another? I first want to run first one then after that second one.
That's exactly how playbooks work.
If I run the playbook then it will get stuck because it will first run first play and tries to run second play where it gets stuck.
If you do not have a task to configure the user required in the next play, then yes, it will fail (not get stuck).
The point is that since Ansible is idempotent, you don't have to worry about skipping the play because if the user is properly configured, the first play will simply have no effect.
However, to answer the actual question
How do I skip a play in an Ansible playbook ?
This is done using the conditional execution using
whenCode Snippets
- name: Ensure Ansible user is present (RedHat)
user:
name: ansible
comment: "ansible user created by bootstrap playbook"
generate_ssh_key: yes
groups: wheel
tags:
- bootstrap
when: ansible_os_family=="RedHat"
- name: Ensure Ansible user is present (Debian)
user:
name: ansible
comment: "ansible user created by bootstrap playbook"
generate_ssh_key: yes
groups: sudo
tags:
- bootstrap
when: ansible_os_family=="Debian"
- name: update sudoers to ensure ansible user can sudo
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^ansible'
line: 'ansible ALL=(ALL) NOPASSWD: ALL'
tags:
- bootstrapContext
StackExchange DevOps Q#4823, answer score: 1
Revisions (0)
No revisions yet.