Iterate over inventory group

Hello,

I try to setup a cron task using ansible (indeed) on my db slave pool.
This cron task is supposed to stop the replication process, dump the database and restart replication.
Because the backup takes a little time, I don’t want to init the cron task at the same time on all the db slaves and I don’t want to stop all the slaves at the same times either.

My first idea was to set a different time while looping on the group.
But it’s definitely not as trivial as it seems :

`

  • name: database backup cron task
    cron: name=“database backup” hour={{ item.key }} user=“root” job=“backup_db.sh” cron_file=database_backup
    with_dict: groups.mysql
    `

The point is an inventory group is a list, not a dictionnary and I cannot find any simple way to convert a list to a dict (whereas it’s easy to convert a dict as a list)
I also tried to use the group list instead, but I cannot figure out how I can get an iterator key.

Did I miss something ? Do you have any clue regarding my (not so complex imho) problem ?

to iterate over a hosts group you need with_items: groups[‘mysql’] instead of with_dict

Thanks, but as I said, I tried to loop over the group list, but I cannot get any iteration key.

I try to loop over a hosts group and getting an index of the current iteration in order to set a cron task at midnight for the first host, 01am for the second, 02am for the third, etc…

Isn’t it feasible for you to simply do

`

  • hosts: mysql
    sudo: yes
    tasks:
  • cron: name=“database backup” hour={{ hour }} user=“root” job=“backup_db.sh” cron_file=database_backup
    `

and then in your host_vars/member_of_mysql_group, you would have

hour: "01"
and so on?

Take a look at with_indexed_items:
http://docs.ansible.com/playbooks_loops.html#looping-over-a-list-with-an-index

That would be a fallback solution, but I’d prefer not to use group nor host vars for defining such iterator. That would lead on errors and that not very elegant, in my opinion…

Thank you Matt !
That’s definitely what I needed.

There is a lot of useful gems hidden in the footer or subnotes of the documentation !