# passing "var" from one playbook to another playbook

**URL:** <https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020>\
**Category:** Ansible Project\
**Created:** [August 23, 2022, 3:35am UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020 "2022-08-23T03:35:17Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![maulik\_patel](https://avatars.discourse-cdn.com/v4/letter/m/ec9cab/32.png) [@maulik\_patel](https://forum.ansible.com/u/maulik_patel)\
**Post date:** [August 23, 2022, 3:35am UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/1 "2022-08-23T03:35:17Z")

</div>

hi ,

i’m trying to call one playbook1.yaml into master-playbook.yaml and i want to use variable that defined through set\_facts into playbook1 into master playbook. but i dont know what is correct way to do…please help me here with better example…

**_playbook1.yaml:_**

- name: local\_ip\_fact  
set\_fact:  
local\_ip: “{{ sites[site][‘peer\_ip’] | ipaddr(‘address’) }}”  
when: “site in sites.keys()”

**_master-playbook.yaml:_**

---

<div class="post-metadata">

**Author:** ![maulik\_patel](https://avatars.discourse-cdn.com/v4/letter/m/ec9cab/32.png) [@maulik\_patel](https://forum.ansible.com/u/maulik_patel)\
**Post date:** [August 23, 2022, 3:36am UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/2 "2022-08-23T03:36:07Z")

</div>

here i want to use **_local\_ip_** , into master playbook…

---

<div class="post-metadata">

**Author:** ![Walter\_Rowe](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/walter_rowe/32/4506_2.png) [@Walter\_Rowe](https://forum.ansible.com/u/Walter_Rowe)\
**Post date:** [August 23, 2022, 11:13am UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/3 "2022-08-23T11:13:11Z")

</div>

You need to set set\_stats to pass “artifacts” back from a playbook to a workflow. Artifacts from upstream playbooks are add to extra\_vars in downstream playbooks.

set\_stats:  
data:  
local\_ip: “{{ sites[site][‘peer\_ip’] | ipaddr(‘address’) }}”

You can set as many artifacts as you want in a single set\_stats task. The artifacts of set\_stats CANNOT be used within the playbook they originate. You have to use set\_fact for that. So it is conceivable that you would set\_fact AND set\_stats in a single playbook. The set\_fact task would create a var you can use later within the playbook. The set\_stats task would create artifacts for use in downstream playbooks.

Walter

---

<div class="post-metadata">

**Author:** ![maulik\_patel](https://avatars.discourse-cdn.com/v4/letter/m/ec9cab/32.png) [@maulik\_patel](https://forum.ansible.com/u/maulik_patel)\
**Post date:** [August 24, 2022, 6:20am UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/4 "2022-08-24T06:20:15Z")

</div>

seems like not working for me, not sure if i’m missing anything here…

**_cat playbook1.yaml_**

---

<div class="post-metadata">

**Author:** ![Walter\_Rowe](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/walter_rowe/32/4506_2.png) [@Walter\_Rowe](https://forum.ansible.com/u/Walter_Rowe)\
**Post date:** [August 24, 2022, 11:11am UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/5 "2022-08-24T11:11:56Z")

</div>

Are you running this in Ansible Tower? This only works in Ansible Tower. It won’t work from the command line.

Walter

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [August 24, 2022, 11:58am UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/6 "2022-08-24T11:58:18Z")

</div>

What exactly is the functionality provided by Tower only?

---

<div class="post-metadata">

**Author:** ![Walter\_Rowe](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/walter_rowe/32/4506_2.png) [@Walter\_Rowe](https://forum.ansible.com/u/Walter_Rowe)\
**Post date:** [August 24, 2022, 11:59am UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/7 "2022-08-24T11:59:13Z")

</div>

Because Ansible Tower lets your craft "workflows" that chain together playbooks. Command Line ansible does not do that.

Walter

---

<div class="post-metadata">

**Author:** ![maulik\_patel](https://avatars.discourse-cdn.com/v4/letter/m/ec9cab/32.png) [@maulik\_patel](https://forum.ansible.com/u/maulik_patel)\
**Post date:** [August 24, 2022, 1:19pm UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/8 "2022-08-24T13:19:11Z")

</div>

No I’m not using ansible tower. I’m Just making umbrella type of structure that being said I need to call out one play book which has few variable that needs to be also used in master play book… kind of importing one playbook within another playbook and all variable in that playbook needs to also call out too…

Hope this makes clear…!!

---

<div class="post-metadata">

**Author:** ![Walter\_Rowe](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/walter_rowe/32/4506_2.png) [@Walter\_Rowe](https://forum.ansible.com/u/Walter_Rowe)\
**Post date:** [August 24, 2022, 2:10pm UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/9 "2022-08-24T14:10:18Z")

</div>

With one monolithic playbook you can use task files for specific tasks just to break up the “long” file.

- name: task 1 tasks  
include\_tasks: taskfile1.yml

- name: task 2 tasks  
include\_tasks: taskfile2.yml

- name: task 3 tasks  
include\_tasks: taskfile3.yml

- name: task 4 tasks  
include\_tasks: taskfile4.yml

We do this for our server provisioning. The task files can be short or long depending on what they do. In some cases we use roles because they are used also in other playbooks. You main playbook looks cleaner this way and it lets you add items as you mature your service by simply developing the role or task file and adding another stanza like these.

- name: install packages  
include\_tasks: ./common/packages.yml

- name: create local users and groups  
include\_tasks: ./common/users\_groups.yml

- name: join to active directory  
include\_role:  
name: nist-sssd-role

- name: configure volumes and filesystems  
include\_tasks: ./common/volumes.yml

Hope that helps.

Walter

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [August 24, 2022, 2:31pm UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/10 "2022-08-24T14:31:09Z")

</div>

Walter,

what exactly is the functionality provided by Tower only?

Thank you,

Best regards

---

<div class="post-metadata">

**Author:** ![Walter\_Rowe](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/walter_rowe/32/4506_2.png) [@Walter\_Rowe](https://forum.ansible.com/u/Walter_Rowe)\
**Post date:** [August 24, 2022, 2:34pm UTC](https://forum.ansible.com/t/passing-var-from-one-playbook-to-another-playbook/37020/11 "2022-08-24T14:34:39Z")

</div>

Tower lets you manage inventories, create "smart inventories", run chains of playbooks together in workflows, have a centralized "controller" that runs your jobs, centralizes logging, lets you authenticate users against LDAP, AD, etc, lets you create "surveys" that fill in vars used in your jobs, integrates with your version control system, lets you store secrets (credentials) that are passed to your playbooks. Centralizing all this on a single host makes your IT security team feel better too. All the security controls around your playbooks and their privileged execution are maintained in a single place they can more easily audit and assess.

Walter
