lookup csvfile with_items issue

533 views
Skip to first unread message

Bart Pit

unread,
Jul 7, 2015, 2:30:16 PM7/7/15
to ansible...@googlegroups.com
Hi! I'm struggling to get 'lookup' with 'csvfile' in combination with 'with_items' to work.

I have this csv file (shortened snippet):

"col1","col2"
1,"Mike"
2,"Sally"

Than I also have this var:

test_ids:
 
- 1
 
- 2

Now I want to lookup (docs: https://docs.ansible.com/playbooks_lookups.html#the-csv-file-lookup) the values in the second column of the csv file:

- name: read from csv file
  debug
: msg="{{ lookup('csvfile', 'item file=/path/to/file.csv delimiter=, col=1') }}"
  with_items
: test_ids

Where 'item' before file=/... should output 1 and 2 right??

This doesn't work, output is:

TASK: [client-setup | read from csv file] ********
ok
: [localhost] => (item=1) => {
   
"item": 1,
   
"msg": "[]"
}
ok
: [localhost] => (item=2) => {
   
"item": 2,
   
"msg": "[]"
}

As you can see it recognizes 1 and 2, but I don't get the values of the second column in the csv.

If I hardcode the number in like so:

- name: read from csv file
  debug
: msg="{{ lookup('csvfile', '1 file=test.csv delimiter=, col=1') }}"
  with_items
: test_ids


It does give me the correct result:

TASK: [client-setup | read from csv file] ********
ok
: [localhost] => (item=1) => {
   
"item": 1,
   
"msg": "Mike"
}
ok
: [localhost] => (item=2) => {
   
"item": 2,
   
"msg": "Mike"
}

I tried quoting the var with '1' and '2', but that doesn't work either.

Is this a bug or am I doing something wrong?

Brian Coca

unread,
Jul 7, 2015, 4:23:18 PM7/7/15
to ansible...@googlegroups.com
you are forcing item to be a static string, it needs to be like this:

- name: read from csv file
debug: msg="{{ lookup('csvfile', item + ' file=/path/to/file.csv
delimiter=, col=1') }}"
with_items: test_ids

--
Brian Coca

Bart Pit

unread,
Jul 7, 2015, 4:57:47 PM7/7/15
to ansible...@googlegroups.com
Thanks Brian! It doing something more now, that's good :)

However, I now get this error:

fatal: [localhost] => Failed to template msg="{{ lookup('csvfile', item + ' file=test.csv delimiter="," col=2') }}": csvfile: "delimiter" must be string, not unicode

I tried quoting the comma, double and single. And tried the approach in this thread, both single and double: https://groups.google.com/forum/#!topic/ansible-project/r2L3UONwaN0 like so:

debug: msg="{{ lookup('csvfile', item + ' file=test.csv delimiter='","' col=2') }}"

But also doesn't work.

Any ideas?



Op dinsdag 7 juli 2015 22:23:18 UTC+2 schreef Brian Coca:

Bart Pit

unread,
Jul 7, 2015, 5:55:34 PM7/7/15
to ansible...@googlegroups.com
For extra clarification: I started getting this error without the quotes around the comma. So like this, produces the same error:

debug: msg="{{ lookup('csvfile', item + ' file=test.csv delimiter=, col=2') }}"


Op dinsdag 7 juli 2015 22:57:47 UTC+2 schreef Bart Pit:

Bart Pit

unread,
Jul 8, 2015, 3:02:46 PM7/8/15
to ansible...@googlegroups.com
Any ideas on the 

"delimiter" must be string, not unicode

error?


Op dinsdag 7 juli 2015 23:55:34 UTC+2 schreef Bart Pit:
Reply all
Reply to author
Forward
0 new messages