# include\_role question regarding variables

**URL:** <https://forum.ansible.com/t/include-role-question-regarding-variables/33766>\
**Category:** Ansible Project\
**Created:** [September 8, 2020, 7:49pm UTC](https://forum.ansible.com/t/include-role-question-regarding-variables/33766 "2020-09-08T19:49:07Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sven1](https://avatars.discourse-cdn.com/v4/letter/s/46a35a/32.png) [@Sven1](https://forum.ansible.com/u/Sven1)\
**Post date:** [September 8, 2020, 7:49pm UTC](https://forum.ansible.com/t/include-role-question-regarding-variables/33766/1 "2020-09-08T19:49:07Z")

</div>

Hello Everyone,

i have a role “x” that uses two default vars:  
(roles/x/defaults/main.yml)  
server1var: server1  
server2var: server2

based on these vars, tasks are executed on server1 or server2

now I have a playbook that executes some tasks and then includes role “x”:

tasks:

- name: fetch file from remote server  
fetch:  
src: …  
dest: …

- name: copy file to remote server  
copy:  
src: …  
dest: …

- include\_role:  
name: x

In this playbook the two vars from /roles/x/defaults/main.yml are also present with different values.  
vars:  
server1var: server3  
server2var: server4

Is it possible that the tasks executed by “include\_role” take the vars from the current playbook?

All tasks that gets executed by the include\_role should be executed with the vars  
server1var: server3  
server2var: server4

instead of the default vars:

server1var: server1  
server2var: server2

Can anyone tell me how i can do that?  
is it just like this maybe?

- include\_role:  
name: x

vars:

server1var: server3  
server2var: server4

What is the best way to this?

Thank you for your time and help in advance.

---

<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:** [September 9, 2020, 9:01am UTC](https://forum.ansible.com/t/include-role-question-regarding-variables/33766/2 "2020-09-09T09:01:07Z")

</div>

> ... role "x" that uses two default vars:  
> (roles/x/defaults/main.yml)  
> server1var: server1  
> server2var: server2
> 
> ... playbook ...  
> vars:  
> &nbsp;&nbsp;&nbsp;server1var: server3  
> &nbsp;&nbsp;&nbsp;server2var: server4  
> tasks:  
> &nbsp;&nbsp;&nbsp;&nbsp;- include\_role:  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: x  
> Is it possible that the tasks executed by "include\_role" take the vars from  
> the current playbook?

Yes. It's possible. For example

> cat roles/role\_x/defaults/main.yml

server1var: server1  
server2var: server2

> cat roles/role\_x/tasks/main.yml

- debug:  
&nbsp;&nbsp;&nbsp;&nbsp;var: server1var

> cat playbook.yml

- hosts: localhost  
&nbsp;&nbsp;tasks:  
&nbsp;&nbsp;&nbsp;&nbsp;- include\_role:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: role\_x  
&nbsp;&nbsp;&nbsp;&nbsp;- include\_role:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: role\_x  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vars:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server1var: server3

> ansible-playbook playbook.yml

TASK [include\_role : role\_x] \*\*\*\*

TASK [role\_x : debug] \*\*\*\*  
ok: [localhost] =\> { "server1var": "server1" }

TASK [include\_role : role\_x] \*\*\*\*

TASK [role\_x : debug] \*\*\*\*  
ok: [localhost] =\> { "server1var": "server3" }

> Can anyone tell me how i can do that?  
> is it just like this maybe?
> 
> &nbsp;&nbsp;&nbsp;&nbsp;- include\_role:  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: x  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vars:  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server1var: server3  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server2var: server4

Yes. This is the best way. FWIW, there are issues. See:  
Modified "vars:" not visible inside include\_role. #69799  
[https://github.com/ansible/ansible/issues/69799](https://github.com/ansible/ansible/issues/69799)

---

<div class="post-metadata">

**Author:** ![Sven1](https://avatars.discourse-cdn.com/v4/letter/s/46a35a/32.png) [@Sven1](https://forum.ansible.com/u/Sven1)\
**Post date:** [September 9, 2020, 11:29am UTC](https://forum.ansible.com/t/include-role-question-regarding-variables/33766/3 "2020-09-09T11:29:39Z")

</div>

Thank you very much for the help.

I have found out that the problem is caused by a random generator. Its not the include\_role task itself (thats why I opened the question in first place)

I have two lists and building a new list excluding the items from list1 (which is something like “server1”, “server2”…)

vars:

list1:

- “{{file\_content.server1var}}”

- “{{file\_content.server2var}}”  
list2:

- server1

- server2

- server3

- server4

- server5

- server6  
tasks:

- name: generate newlist based on difference between list1 and list2  
set\_fact:  
newlist: “{{ list2 | difference(list1) }}”

- name: set fact random2  
set\_fact:  
randomserver: “{{ newlist | random }}”

##This for example shows me server2 when i run the play one time###

- name: show randomnode  
debug:  
msg: “{{randomnode}}”  
…  
##Now im using that randomnode variable for the include\_role##

- include\_role:  
name: x

vars:

server1var: server3  
server2var: “{{randomserver}}”

This is the task in role “x”:

- name: ping the servers  
ping:  
when: inventory\_hostname == server1var or inventory\_hostname == server2var

###Now im expecting that “server2var” will be “server2”, but its kinda random what happens there###  
###For example: sometimes its get executed on 4 servers, 3 servers, 2 servers, 1 server. The only Server that is consistent is server1var (whhich is “server1”)###

Maybe you have an idea what might cause that problem?

I saw in your github examples, that you already used random filter.

---

<div class="post-metadata">

**Author:** ![Sven1](https://avatars.discourse-cdn.com/v4/letter/s/46a35a/32.png) [@Sven1](https://forum.ansible.com/u/Sven1)\
**Post date:** [September 9, 2020, 12:41pm UTC](https://forum.ansible.com/t/include-role-question-regarding-variables/33766/4 "2020-09-09T12:41:45Z")

</div>

Well I actually found the problem.  
I had to set run\_once:yes in the following part:

- name: set fact random2  
set\_fact:  
randomserver: “{{ newlist | random}}”  
run\_once: yes

Now I get the correct Servers

Anyway, Thank you for your help Mr. Botka.
