# Iterate over inventory group

**URL:** <https://forum.ansible.com/t/iterate-over-inventory-group/17246>\
**Category:** Ansible Project\
**Created:** [January 13, 2015, 8:41am UTC](https://forum.ansible.com/t/iterate-over-inventory-group/17246 "2015-01-13T08:41:07Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Laurent\_Goussard](https://avatars.discourse-cdn.com/v4/letter/l/eb8c5e/32.png) [@Laurent\_Goussard](https://forum.ansible.com/u/Laurent_Goussard)\
**Post date:** [January 13, 2015, 8:41am UTC](https://forum.ansible.com/t/iterate-over-inventory-group/17246/1 "2015-01-13T08:41:07Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![vaida.dan](https://avatars.discourse-cdn.com/v4/letter/v/5daacb/32.png) [@vaida.dan](https://forum.ansible.com/u/vaida.dan)\
**Post date:** [January 13, 2015, 7:47pm UTC](https://forum.ansible.com/t/iterate-over-inventory-group/17246/2 "2015-01-13T19:47:21Z")

</div>

to iterate over a hosts group you need with\_items: groups[‘mysql’] instead of with\_dict

---

<div class="post-metadata">

**Author:** ![Laurent\_Goussard](https://avatars.discourse-cdn.com/v4/letter/l/eb8c5e/32.png) [@Laurent\_Goussard](https://forum.ansible.com/u/Laurent_Goussard)\
**Post date:** [January 14, 2015, 8:37am UTC](https://forum.ansible.com/t/iterate-over-inventory-group/17246/3 "2015-01-14T08:37:02Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![vaida.dan](https://avatars.discourse-cdn.com/v4/letter/v/5daacb/32.png) [@vaida.dan](https://forum.ansible.com/u/vaida.dan)\
**Post date:** [January 14, 2015, 11:23am UTC](https://forum.ansible.com/t/iterate-over-inventory-group/17246/4 "2015-01-14T11:23:06Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![sivel](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/sivel/32/1198_2.png) [@sivel](https://forum.ansible.com/u/sivel)\
**Post date:** [January 14, 2015, 12:31pm UTC](https://forum.ansible.com/t/iterate-over-inventory-group/17246/5 "2015-01-14T12:31:51Z")

</div>

Take a look at with\_indexed\_items:  
[http://docs.ansible.com/playbooks\_loops.html#looping-over-a-list-with-an-index](http://docs.ansible.com/playbooks_loops.html#looping-over-a-list-with-an-index)

---

<div class="post-metadata">

**Author:** ![Laurent\_Goussard](https://avatars.discourse-cdn.com/v4/letter/l/eb8c5e/32.png) [@Laurent\_Goussard](https://forum.ansible.com/u/Laurent_Goussard)\
**Post date:** [January 14, 2015, 5:22pm UTC](https://forum.ansible.com/t/iterate-over-inventory-group/17246/6 "2015-01-14T17:22:03Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![Laurent\_Goussard](https://avatars.discourse-cdn.com/v4/letter/l/eb8c5e/32.png) [@Laurent\_Goussard](https://forum.ansible.com/u/Laurent_Goussard)\
**Post date:** [January 14, 2015, 5:23pm UTC](https://forum.ansible.com/t/iterate-over-inventory-group/17246/7 "2015-01-14T17:23:22Z")

</div>

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 !
