set_fact array in loop

4,474 views
Skip to first unread message

Michaël Bitard

unread,
Mar 30, 2015, 7:28:17 AM3/30/15
to ansible...@googlegroups.com
Hi,


So I tested:

  tasks:
    - set_fact: foo="[ 'one', 'two', 'three' ]"
    - debug: var=foo
    - set_fact: foo="{{foo}} + [ 'four' ]"
    - debug: var=foo

and it worked very well.

But when I try to add a 'with_items':

  tasks:
    - set_fact: foo="[ 'one' ]"
    - debug: var=foo
    - set_fact: foo="{{foo}} + [ '{{item}}' ]"
      with_items: [ "two", "three" ]
    - debug: var=foo
It doesn't work, I get: 

"foo": [
        "one", 
        "three"
    ]

instead of: 
"foo": [
        "one", 
        "two",
        "three"
    ]

Whereas this works: 

  tasks:
    - name: set foo fact to an array
      set_fact: foo="[ 'one' ]"
    - debug: var=foo
    - set_fact: foo="{{foo}} + [ 'two' ]"
    - set_fact: foo="{{foo}} + [ 'three' ]"
    - debug: var=foo
But is not suitable for my needs (It just proves that a fact can be overriden multiple times).

The behaviour of with_items is not what I expected, is something wrong with my approach? 

I'm using ansible 1.8.2 on ubuntu 14.04

Regards,
Michaël

James Cammarata

unread,
Mar 30, 2015, 10:32:29 AM3/30/15
to ansible...@googlegroups.com
Hi Michaël, I've fixed this in the v2 code base, which also suffered from the same problem. We will look at potentially fixing this in any future 1.9.x releases as well.

Thanks!

James Cammarata
Director, Ansible Core Engineering
github: jimi-c

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/ca8f953f-6935-48da-9e4f-e02a6a0f95df%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

atrebla

unread,
Dec 6, 2016, 4:19:28 PM12/6/16
to Ansible Project

Hi James,
in Ansible version 1.9.2 the problem is still alive

[root@]# ansible --version
ansible
1.9.2
[root@]# date
Tue Dec  6 22:14:59 CET 2016
[root@]# ansible-playbook play03.yml


PLAY
[localhost] **************************************************************


TASK
: [set_fact foo="[ 'one' ]"] **********************************************
ok
: [localhost]


TASK
: [debug var=foo] *********************************************************
ok
: [localhost] => {
   
"var": {
       
"foo": [
           
"one"
       
]
   
}
}


TASK
: [set_fact foo="{{foo}} + [ '{{item}}' ]"] *******************************
ok
: [localhost] => (item=two)
ok
: [localhost] => (item=three)


TASK
: [debug var=foo] *********************************************************
ok
: [localhost] => {
   
"var": {
       
"foo": [
           
"one",
           
"three"
       
]
   
}
}


PLAY RECAP
********************************************************************


Playbook run UUID: 0edf4886-bbf9-11e6-9392-005056a3151a




News?

Thanks

Ferdinand

Alexander H. Laughlin

unread,
Dec 6, 2016, 6:07:42 PM12/6/16
to Ansible Project
Given that this works just fine in the v2 release of Ansible:

(vagrant) [vagrant@atrebla:vagrant] ansible --version

ansible 2.2.0.0

 config file =

  configured module search path = Default w/o overrides

(vagrant) [vagrant@atrebla:vagrant] ansible-playbook loop.yml

PLAY [Test set_facts for loop.] ************************************************

TASK [setup] *******************************************************************
ok
: [localhost]

TASK [set_fact] ****************************************************************

ok: [localhost]

TASK [debug] *******************************************************************

ok: [localhost] => {
    "foo": [

      "one"

   ]

}

TASK [set_fact] ****************************************************************

ok: [localhost] => (item=two)

ok: [localhost] => (item=three)

TASK [debug] *******************************************************************

ok: [localhost] => {

   "foo": [

       "one",

        "two",

        "three"

   ]

}

PLAY RECAP *********************************************************************

localhost                  : ok=5    changed=0    unreachable=0    failed=0



I'm curious to know: why not just upgrade?

Luigi Crozzoli

unread,
Dec 6, 2016, 6:27:55 PM12/6/16
to ansible...@googlegroups.com
Hi Alexander,

Unfortunately it's not my choice. The upgrade policy are decided by company.  

A common situation . That's all 

Thanks
Ferdinand

 

--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/S2YPj-HJOlM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.

To post to this group, send email to ansible...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages