with_items/iterations over dictionary for a sysctl task.

Hi,

I have defined under group_vars, something like the following :

The pattern for iterating over a hash is the same regardless of module and would look like:

vars:
my_pairs:

  • key: foo
    value: bar
  • key: foo2
    value: bar2

tasks:

  • shell: echo “{{ item.key }} and {{ item.value }}”
    with_items: my_pairs

So, generally applicable to sysctl or anything else.

You could also define the list right under “with_items” without the intermediate variable.

Hi Michael,

but in this case the key name is not a static, they key is the sysctl parameter, would it be possible to use a similar construct to the one in the template? my vars for this use case and also some others are 6-10+ items, each item could be defined easily as follow

vars:
pana_sys_ctl:

net.ipv4.ip_local_port_range: 32768 610

net.ipv4.tcp_fin_timeout: 30

net.ipv4.tcp_keepalive_time: 1800

pana_mounts:
mnt1:
red: filer001:/disk1/vol1
blue:filer002:/disk1/vol3

Hi Walid,

Can you try :

  • sysctl: name={{ item[0] }} value= {{ item[1] }}

with_items: pana_sys_ctl|dictsort

Regards,

Benno

The dictsort just sorts them and doesn’t really change much.

It sounds like you have a list of sysctl names and each sysctl name has a lot of settings under it.

You could consider flattening everything to one list, and also maybe using the “when” operator to filter which to apply.

If you had a hash of lists and wanted to apply the sysctls in multiple hashes, that might require a filter plugin.

Sorry, I meant “lookup” plugin.

I mean if you had something like:

my_sysctls:
one:

  • { key: x, value: y }
  • { key: x2, value: y2 }
    two:

and wanted to apply all sysctls in one or two.

I would probably just keep seperate lists and iterate over them, and keep those configurations with the roles that need them instead.

Hi Michael, and Benno,

Sorry for not replying early, i had a bad flu. at the end i choose to go with dictionary the way Michael described, and not the array/list, as dictionaries are more clear in the playbook tasks. e.g item.key vs item.0
I am currently using Ansible 1.4.5 and i hit a problem with dictionaries if i format the with_items differently see below what worked for me and what did not work

does not work , complains about ""undefined variables: ‘str object’ has no attribute ‘name’ “”

  • my_pairs

works fine

  • " {{ my_pairs }}"
or this also works fine
  • debug: var= {{ item.name }}
    with_items: my_pairs

Is that a YAML convention issue, or an ansible parsing bug ?

kind regards

Walid

with_items: