I think you might have been skimming this one a bit fast, James :) I don't believe it's true that filters always return strings.
A simple example other than this is "fileglob" which returns a list. I also don't understand why a when statement, when executed inside the loop, would have anything to do with the "with_items expects a list error". It shouldn't. I think we should dig into this one a little bit more. It may be something else still in the above example vs a code problem, though those explanations don't seem to be it to me. On Wed, May 28, 2014 at 8:05 AM, James Cammarata <[email protected]>wrote: > Jinja2 filters return strings, not arrays, so use a "when" statement to > skip lines you do not want to hit: > > > tasks: > - name: dump data into csv > sudo: yes > sudo_user: postgres > command: psql -d cmdbuild -c "COPY \"{{ item }}\" to '/tmp/{{ item > }}.csv' $ > when: item not in supertables > with_items: almatables.stdout_lines > > This should do what you want. > > > > On Wed, May 28, 2014 at 2:41 AM, <[email protected]> wrote: > >> Trying to figure out theory filters, but no luck yet. I'm pulling a list >> of available tables from postgres and exclude the tables contained in the >> list supertables. >> Am i using this functionality in the correct way? Or do i need to put it >> in a variable first? If so, how do i do that? >> I'm using ansible 1.4.4+dfsg-1~ubuntu12.04.1 >> >> My playbook: >> --- >> - hosts: pdetest2 >> vars: >> supertables: >> - ALMA_asset >> - ALMA_computer >> tasks: >> - name: get list of ALMA tables >> sudo: yes >> sudo_user: postgres >> command: psql cmdbuild -t -c "select tablename from >> pg_catalog.pg_tables where tablename like '%ALMA_%' ORDER BY tablename;" >> register: almatables >> >> - name: debug >> debug: var=supertables >> >> - name: debug >> debug: var=almatables.stdout_lines >> >> - name: dump data into csv >> sudo: yes >> sudo_user: postgres >> command: psql -d cmdbuild -c "COPY \"{{ item }}\" to '/tmp/{{ item >> }}.csv' CSV;" >> with_items: almatables.stdout_lines | difference(supertables) >> >> Ansible fails with: >> TASK: [debug] >> ***************************************************************** >> ok: [pdetest2] => { >> "supertables": [ >> "ALMA_asset", >> "ALMA_computer" >> ] >> } >> >> TASK: [debug] >> ***************************************************************** >> ok: [pdetest2] => { >> "almatables.stdout_lines": [ >> " ALMA_Asset", >> " ALMA_Building", >> " ALMA_Building_history", >> " ALMA_Cabinet", >> " ALMA_Cabinet_history", >> " ALMA_Certificate", >> <snip> >> " Map_ALMA_Software_InstalledSoftware_history" >> ] >> } >> >> TASK: [dump data into csv] >> **************************************************** >> fatal: [pdetest2] => with_items expects a list >> >> FATAL: all hosts have already failed -- aborting >> >> So i tried to dumb it down: >> - hosts: pdetest2 >> vars: >> almatables: >> - ALMA_asset >> - ALMA_VirtualComputer >> supertables: >> - ALMA_asset >> - ALMA_computer >> tasks: >> - name: dump data into csv >> sudo: yes >> sudo_user: postgres >> command: psql -d cmdbuild -c "COPY \"{{ item }}\" to '/tmp/{{ item >> }}.csv' $ >> with_items: almatables | difference(supertables) >> >> Fails with the same error: >> TASK: [dump data into csv] >> **************************************************** >> fatal: [pdetest2] => with_items expects a list >> >> -- >> 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 [email protected]. >> To post to this group, send email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/ansible-project/62d0e894-4f00-4900-8cf1-c47fbd0bdbe2%40googlegroups.com<https://groups.google.com/d/msgid/ansible-project/62d0e894-4f00-4900-8cf1-c47fbd0bdbe2%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > -- > 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 [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ansible-project/CAMFyvFgTmpTwpHr7mFrENAWKBXkbqLbNVOFA1qDGQMh%2BG%2BV0mQ%40mail.gmail.com<https://groups.google.com/d/msgid/ansible-project/CAMFyvFgTmpTwpHr7mFrENAWKBXkbqLbNVOFA1qDGQMh%2BG%2BV0mQ%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- 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 [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgwDmpc_m7k6n3hr15YN0_x5BBHjQrVqRfMLoEFQL1Z-jQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
