task action over multiple files using fileglob query

Hi,
I would like to run the module lineinfile against several files that exist on the remote managed host. I saw in the changelog for 1.4 that i can use the following lookup plugin feature:
" added a fileglob filter that will return files matching a glob pattern. with_items: “/foo/pattern/*.txt | fileglob”

however i did not seem to get it right, see below, could you please let me know what other possible ways to do this, or what i might be doing wrong below
I tried it with a simple debug task as follows:

  • action: shell echo “{{ item }}”
    with_items:
  • " /etc/* | fileglob"
    register: task
    tags:
  • globtest
  • debug: msg=“{{item.item}}”
    with_items: task.results
    when: item.changed == True
    tags:
  • globtest

however it did not work for me as i expected it, it returned the following :

TASK: [common | shell echo “”] ************************************************
changed: [tlcav117] => (item= /etc/* | fileglob)

TASK: [common | debug msg=“{{item.item}}”] ************************************
ok: [tlcav117] => (item={‘item’: ’ /etc/* | fileglob’, u’delta’: u’0:00:00.002148’, u’cmd’: u’echo " /etc/* | fileglob" ‘, u’end’: u’2013-11-22 23:44:54.216654’, u’stderr’: u’‘, u’stdout’: u’ /etc/* | fileglob’, ‘invocation’: {‘module_name’: ‘shell’, ‘module_args’: u’echo " /etc/* | fileglob"‘}, u’changed’: True, u’rc’: 0, u’start’: u’2013-11-22 23:44:54.214506’}) => {
“item”: {
“changed”: true,
“cmd”: “echo " /etc/* | fileglob" “,
“delta”: “0:00:00.002148”,
“end”: “2013-11-22 23:44:54.216654”,
“invocation”: {
“module_args”: “echo " /etc/* | fileglob"”,
“module_name”: “shell”
},
“item”: " /etc/* | fileglob”,
“rc”: 0,
“start”: “2013-11-22 23:44:54.214506”,
“stderr”: “”,
“stdout”: " /etc/* | fileglob”
},
“msg”: " /etc/* | fileglob"
}

regards

Walid

http://ansibleworks.com/docs/playbooks_loops.html#looping-over-fileglobs

Hi Michael,

i tried with_fileglob first, however it references or resolves files from the local machine running ansible-playbook, not the remote managed machine. what i am trying to do is to change remote configuration files using lineinfile module.

kind regards

Walid

Fileglob always runs locally, this is true.

You should probably run a command like “ls” remotely and register the result, and then iterate over the result.stdout_lines variable.

Thanks Michael, will do that. what was the new lookup plugin :
with_items: “/foo/pattern/*.txt | fileglob”?

Nope, simpler, as in docs:

with_fileglob:

  • /splat/*.txt

– Michael