1
votes

I have an Ansible Playbook myPlayBook.yml. It has two plays and each plays has one or more tasks.

I use the command as follows to run my playbook:

ansible-playbook myPlayBook.yml

So every thing is OK and my tasks are executed successfully. Now, after the first running I want to run my playbook again from the first play (similar to the first running but automatically). Is there a way to do that?

(I saw that it can be done for a specific task or play with include or include_tasks, but what about for a playbook?)

1

1 Answers

2
votes

Now, after the first running I want to run my playbook again from the first play (similar to the first running but automatically).

You can form your tasks as role and execute it via include_role from playbook multiple times:

- name: 'Include role'
  include_role:
    name: '{{ app_role}}'

- debug:
    msg: "{{ inventory_hostname }}"

Create role by the following path roles/inventory_role that consist of one task. From playbook you can execute role just call it multiple times:

- name: 'Include role inventory_role'
  include_role:
    name: 'inventory_role'

- name: 'Include role inventory_role'
  include_role:
    name: 'inventory_role'

Or you can use something like this:

- { role: 'inventory_role' }
- { role: 'inventory_role' }

NOTE:

Ansible will only allow a role to execute once, even if defined multiple times, if the parameters defined on the role are not different for each definition.

See for more details: Role Duplication and Execution.


Execute an Ansible Playbook periodically

Ansible Tower have job with scheduled launch type.