It looks like with_subelements is what I wanted:
- name: run deployment tasks
shell: >
cd ~/www/projects/{{ item.0.name }} && {{ item.1.cmd }}
with_subelements:
- big_var_collection
- deployment_tasks
I added a 'name' property to the hash (which was the same as the key) to
make this work:
big_var_collection:
application_1:
name: application_1
deployment_tasks:
- { cmd: 'bundle exec rake thing:1', metadata: 'yay' }
- { cmd: 'bundle exec rake thing:2', metadata: 'boo' }
application_2:
name: application_2
deployment_tasks:
- { cmd: 'bundle exec rake thing:3', metadata: 'yay' }
- { cmd: 'bundle exec rake thing:4', metadata: 'boo' }
On Wednesday, January 28, 2015 at 10:43:27 AM UTC-8, Evan Tahler wrote:
>
> The data structure is defined elsewhere, and it would easiest not to
> change it.
>
> I'm currently migrating from Chef to Ansible, and the only pain point I've
> had has been the lack of data manipulation tools. In chef you have an
> (almost) full ruby VM to work with, so hash manipulation, loops, etc are
> all available to you.
>
> What is the best practice in Ansible-land? Should I write a python plugin
> to manipulate the data structure? I assume that I'm just doing something
> wrong with my loop syntax...
>
> On Wednesday, January 28, 2015 at 10:28:05 AM UTC-8, [email protected]
> wrote:
>>
>> Hello.
>>
>> I'm wondering if this data stucture is something you're getting back from
>> another application or external source? If not, are you able to define the
>> structure in anyway you desire? If not, why not?
>>
>> Here is the code I managed to come up with, which has a much, much
>> simpler data structure and does the same job.
>>
>> ---
>> - hosts: all
>> sudo: no
>> vars:
>> applications:
>> # - { cmd: 'bundle exec rake thing:1', path: 'application_1' }
>> - { cmd: 'uptime', path: 'application_1' }
>> - { cmd: 'uptime', path: 'application_2' }
>> - { cmd: 'uptime', path: 'application_3' }
>> - { cmd: 'uptime', path: 'application_4' }
>> tasks:
>> - name: Run dev tasks
>> shell: >
>> cd {{item.path}} && {{item.cmd}}
>> with_items: applications
>>
>>
>>
>> I hope this helps.
>>
>> On Wednesday, 28 January 2015 02:11:01 UTC, Evan Tahler wrote:
>>>
>>> Hi All! I cannot sort out how to itterate though this loop properly:
>>>
>>> I have 2 data dictionaries:
>>>
>>> applications:
>>> - application_1
>>> - application_2
>>>
>>> and
>>>
>>> big_var_collection:
>>> application_1:
>>> deployment_tasks:
>>> - { cmd: 'bundle exec rake thing:1', metadata: 'yay' }
>>> - { cmd: 'bundle exec rake thing:2', metadata: 'boo' }
>>> application_2:
>>> deployment_tasks:
>>> - { cmd: 'bundle exec rake thing:3', metadata: 'yay' }
>>> - { cmd: 'bundle exec rake thing:4', metadata: 'boo' }
>>>
>>> In this example, I want to run 4 commands: cd into the directory and run
>>> the `cmd`, IE:
>>>
>>> cd ~/www/projects/application_1 && bundle exec rake thing:1
>>> cd ~/www/projects/application_1 && bundle exec rake thing:2
>>> cd ~/www/projects/application_2 && bundle exec rake thing:3
>>> cd ~/www/projects/application_2 && bundle exec rake thing:4
>>>
>>> I would have assumed that the following loop would work, but I always
>>> end up with an access error of some sort
>>>
>>> - name: run deployment tasks
>>> shell: >
>>> cd ~/www/projects/{{ item.0 }} && {{ item.1.cmd }}
>>> with_nested:
>>> - applications
>>> - big_var_collection[item.0].deployment_tasks
>>>
>>> Help?
>>>
>>
--
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/7ca71e6d-60c3-4011-8900-46fa7cfa2ad9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.