After spending several hours trying different combinations of tasks, 
filters, combinations of filters, etc, I decided I spent too much time 
trying to do it all in memory.  Here was my final solution that works:

- name: make sure temp file doesn't exist
  file:
    state: absent
    path: "{{appdataRoot}}/directoriesToBuild.tmp"

- name: get list of directories to build
  shell: "egrep '^archive.directory|^outgoing.directory|^incoming.directory' 
{{conf_dir}}/{{item.1.config}}|cut -d '=' -f2|sort|uniq  >> 
{{appdataRoot}}/directoriesToBuild.tmp"
  with_subelements:
    - "{{loggers}}"
    - configs

- name: put list of directories into a variable
  shell: "cat {{appdataRoot}}/directoriesToBuild.tmp"
  register: directoriesToBuild

- name: build found directories
  file:
    state: directory
    path: "{{item}}"
  with_items:
    - "{{directoriesToBuild.stdout_lines}}"


On Wednesday, May 29, 2019 at 9:27:43 PM UTC-4, Adam wrote:
>
> I was over zealous & too hopeful.. this doesn't actually work for me.  It 
> looks like it treats the whole list of directories as one big directory. 
>  I'm not entirely sure why yet. 
>
> On Wednesday, May 29, 2019 at 9:12:22 PM UTC-4, Adam wrote:
>>
>> Matt - 
>>
>> I don't know how you figured out how to do this (I would love to know), 
>> but it should DEFINITELY be in the documentation.  It's not pretty, but it 
>> works and it solved my issue.      It's definitely easier than breaking it 
>> into multiple tasks or having to populate a list manually.
>>
>> - name: get list of directories
>>   shell: "egrep '^archive.directory|^outgoing.directory|^incoming.directory' 
>> {{conf_dir}}/{{item.1.config}}|cut -d '=' -f2|sort|uniq"
>>   with_subelements:
>>     - "{{loggers}}"
>>     - configs
>>   register: directoriesToBuild
>>
>> - name: debug directory output
>>   debug:
>>     msg: "{{directoriesToBuild.results|map(attribute='stdout_lines')|list}}"
>>
>> - name: build found directories
>>   file:
>>     state: directory
>>     path: "{{item}}"
>>   with_items:
>>     - "{{directoriesToBuild.results|map(attribute='stdout_lines')|list}}"
>>
>>
>> -Adam
>>
>> On Tuesday, February 23, 2016 at 2:04:59 PM UTC-5, Matt Martz wrote:
>>>
>>> The "problem" is in how ansible registers results when using 
>>> with_items.  It nests all of the results inside of a `results` key
>>>
>>> Your second task could have been written to use:
>>>
>>>     - name: use shell to print list of file paths
>>>       shell: "echo {{ item }}"
>>>       with_items: "{{ files.results|map(attribute='stdout_lines')|list 
>>> }}"
>>>
>>> That would do it for you.  That pulls the `stdout_lines` attribute out 
>>> into a list of `stdout_lines`, then with_items natively handles the 
>>> flattening, allowing you to loop over each individual item in the `ls` 
>>> output.
>>>
>>> There is some documentation about using register with a loop, which you 
>>> can find at 
>>> http://docs.ansible.com/ansible/playbooks_loops.html#using-register-with-a-loop
>>>
>>> On Tue, Feb 23, 2016 at 12:51 PM, Jason Gilfoil <[email protected]> 
>>> wrote:
>>>
>>>> So after some testing and reading i'm gonna attempt to answer my own 
>>>> question, and pose another one.
>>>>
>>>> The documentation I cited for iterating the results of a program 
>>>> execution didn't involve the use of with_items in the original program 
>>>> execution. Having multiple results in a register variable doesn't seem to 
>>>> play nice with 'with_items'. 
>>>>
>>>> I decided to work around the issue by having multiple tasks to gather 
>>>> the file names and iterate over each result in the replace module.
>>>>
>>>> As a corollary to that, when using with_items and setting a failed_when 
>>>> condition, you can't seem to use the 'rc' property of the register 
>>>> variable 
>>>> in a task because the rc code only exists if the task fails. I'm thinking 
>>>> there must be a way to say fail_when: the register.rc exists, but haven't 
>>>> figured that part out yet.
>>>>
>>>>
>>>> On Monday, February 22, 2016 at 10:19:47 AM UTC-5, Jason Gilfoil wrote:
>>>>>
>>>>> Hello All,
>>>>>
>>>>> I'm ultimately attempting to pull a list of files with wildcarded 
>>>>> paths and pass the results into the replace module so it can cycle 
>>>>> through 
>>>>> them all. However, starting with a more simple example, i'm having issues 
>>>>> getting the list of files to print properly in even a simple test case.
>>>>>
>>>>>
>>>>> Pastebin code:
>>>>> http://pastebin.com/zFRzucat
>>>>>
>>>>> I'm looking for this:
>>>>>
>>>>> test.yml playbook
>>>>>  
>>>>> - hosts: all
>>>>>   tasks:
>>>>>     - name: gather list of files
>>>>>       shell: ls {{ item }}
>>>>>       register: files
>>>>>       with_items:
>>>>>         - /app/psoft/test/*/list.txt
>>>>>         - /app/psoft/test/*/context.xml
>>>>>  
>>>>>     - name: use shell to print list of file paths
>>>>>       shell: "echo {{ item }}"
>>>>>       with_items: "{{files.stdout_lines}}"
>>>>>
>>>>>
>>>>> to print
>>>>>
>>>>> /app/psoft/test/12.1.2.00/list.txt
>>>>> /app/psoft/test/12.1.3.00/context.xml
>>>>>
>>>>> However currently the result is:
>>>>>
>>>>> TASK [gather list of files] 
>>>>> ****************************************************
>>>>> changed: [net12204] => (item=/app/psoft/test/*/list.txt)
>>>>> changed: [net12204] => (item=/app/psoft/test/*/context.xml)
>>>>>
>>>>> TASK [use shell to print list of file paths] 
>>>>> ***********************************
>>>>> [DEPRECATION WARNING]: Skipping task due to undefined attribute, in 
>>>>> the future this will be a fatal error.. This feature will
>>>>> be removed in a future release. Deprecation warnings can be disabled 
>>>>> by setting deprecation_warnings=False in ansible.cfg.
>>>>>
>>>>>
>>>>> Am I misusing or not understanding 
>>>>> http://docs.ansible.com/ansible/playbooks_loops.html#iterating-over-the-results-of-a-program-execution
>>>>>  
>>>>> properly?
>>>>>
>>>>>
>>>>> Thanks!
>>>>> Jason
>>>>>
>>>>> -- 
>>>> 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/82ae7301-06d6-42e9-a4f3-cf017f09ed22%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/ansible-project/82ae7301-06d6-42e9-a4f3-cf017f09ed22%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> -- 
>>> Matt Martz
>>> @sivel
>>> sivel.net
>>>
>>

-- 
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/a98398c4-ec76-4045-a20c-81bb2123ba6c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to