On 04/29/14 15:35, Michael DeHaan wrote: > " So, I am considering to teach "with_nested" lookup to understand > expressions with "item[0]" in the second term as expressions that > should be reevaluated to a list for each item in the first term" > > Ansible is not meant to be a programming language, when syntax gets so > complicated that it appears to become one, I feel a playbook is > strongly going in the wrong direction. > > It is usually useful to step back and think about the underlying use > case, and there's a clean way to model it without trying to "program > in YAML" > > I find this problem mostly comes from users coming from Chef, but not > always. > > So, as such, I feel this is a bit of a slippery slope. Rather than > initially discussing the patch, let's understand what's the real world > thing you are trying to configure, at a high level, and we can likely > offer up some suggestions. >
My use case: I want a task to run for all network interfaces for each host in a specific group. Each host has a "network_interfaces" list variable. I cannot be convinced that this is something that one should not be able to describe in a playbook. Nevertheless, I have just patched the "with_nested" lookup to support item[0] in the nested loop list. I am doing some tests and I will soon send a pull request for it. > > On Tue, Apr 29, 2014 at 4:09 AM, 'Petros Moisiadis' via Ansible > Project <[email protected] > <mailto:[email protected]>> wrote: > > On 04/29/2014 02:57 AM, Michael DeHaan wrote: >> "In a task, I am trying to figure out how I can loop over the >> items of a >> list that is defined as a host variable for each host in a specific >> group." >> >> If the variable is "listvar" >> >> with_items: listvar >> >> > > What you suggest is the simplest form of a loop. It does not > handle the "for each host in a specific group" part. What I want > is that the task must run for all the items in each list for each > host in a specific group. Particularly, I would need a mechanism, > so that the outer loop loops over hosts and the inner loop uses > the host in the current step in the outer loop to get the needed > host variable. > > In general, this is a common case of a nested loop with the inner > loop using the value of the current step in the outer loop. > Unfortunately, it seems that Ansible does not support this. The > current implementation of "with_nested" loop expects its terms to > be static lists all evaluated before the execution of the loop. It > does not support the second list to be created dynamically for > each step in the outer loop. So, I am considering to teach > "with_nested" lookup to understand expressions with "item[0]" in > the second term as expressions that should be reevaluated to a > list for each item in the first term. For example, the loop I need > could be simply written like this: > > with_nested: > - groups["somegroup"] > - hostvars[item[0]].listvar > > Would you accept a patch for that? > >> >> >> On Mon, Apr 28, 2014 at 3:37 PM, 'Petros Moisiadis' via Ansible >> Project <[email protected] >> <mailto:[email protected]>> wrote: >> >> On 04/28/2014 09:56 PM, Adam Morris wrote: >>> >>> >>> On Monday, April 28, 2014 10:35:15 AM UTC-7, Ernest0x wrote: >>> >>> In a task, I am trying to figure out how I can loop over >>> the items of a >>> list that is defined as a host variable for each host in >>> a specific >>> group. >>> >>> >>> I'm not sure what you are trying to do here so I can't offer >>> too much advice. It also depends on what you are planning >>> on doing with those variables I suspect. >>> >> >> Given the example I wrote in my previous post, what I want is >> simply to have the task run for each item in "mylist" for >> each host in "somegroup". Thus, have the task run for 5 >> times: for item1, item2, item3, item4 and item5. >> >> >>> You might want to look at this >>> >>> http://docs.ansible.com/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts >>> >>> Normally I only need to iterate over a list of variables for >>> the current host. But there are examples of accessing >>> variables for groups of hosts on that page. >>> >> >> I already know about these 'magic' vars. The difficulty is >> not on how to get the data, but on how to construct the loop >> so that I get the iteration I want. >> >> >>> Adam >>> -- >>> 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] >>> <mailto:[email protected]>. >>> To post to this group, send email to >>> [email protected] >>> <mailto:[email protected]>. >>> To view this discussion on the web visit >>> >>> https://groups.google.com/d/msgid/ansible-project/26c8f5ac-db7c-4171-8c7c-0f9605a212d4%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/ansible-project/26c8f5ac-db7c-4171-8c7c-0f9605a212d4%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] >> <mailto:[email protected]>. >> To post to this group, send email to >> [email protected] >> <mailto:[email protected]>. >> To view this discussion on the web visit >> >> https://groups.google.com/d/msgid/ansible-project/535EADE1.40309%40yahoo.gr >> >> <https://groups.google.com/d/msgid/ansible-project/535EADE1.40309%40yahoo.gr?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] >> <mailto:[email protected]>. >> To post to this group, send email to >> [email protected] >> <mailto:[email protected]>. >> To view this discussion on the web visit >> >> https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgwx9Ne97ckJOmvJQb4rgCPQX3agQjC2AuQXdeJQAdwJ%2BQ%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgwx9Ne97ckJOmvJQb4rgCPQX3agQjC2AuQXdeJQAdwJ%2BQ%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] > <mailto:[email protected]>. > To post to this group, send email to > [email protected] > <mailto:[email protected]>. > To view this discussion on the web visit > > https://groups.google.com/d/msgid/ansible-project/535F5E36.4020200%40yahoo.gr > > <https://groups.google.com/d/msgid/ansible-project/535F5E36.4020200%40yahoo.gr?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] > <mailto:[email protected]>. > To post to this group, send email to [email protected] > <mailto:[email protected]>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgxb6f8UPCD1tFf7wDHN_yCDfLWGOwsLfZ%2BsJ2btTVFjSA%40mail.gmail.com > <https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgxb6f8UPCD1tFf7wDHN_yCDfLWGOwsLfZ%2BsJ2btTVFjSA%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/535FB12B.1070906%40yahoo.gr. For more options, visit https://groups.google.com/d/optout.
