Imagine you have a lot of servers. You need to reboot them, but not all of them. Defining a group for each of them would be annoying.
What do you do? You do this.
ansible webservers[0-10] -m command -a "/sbin/reboot -t now"
sleep 500
ansible webservers[11-20] -m command -a "/sbin/reboot -t now"
sleep 500
ansible webservers[21-9999] -m command -a "/sbin/reboot -t now"
These new ranged patterns are 0 indexed and the ranges are inclusive.
They can also be used with playbooks, whether in the 'hosts:' line (if you want, though this feels weird to me, because you'd have to repeat yourself) or with the very new feature --limit, which I emailed about earlier today.
Remember, when using limit and your playbooks address multiple types of groups in different plays (like webservers then observers then some other machines), you need to specify limit ranges for each group. Example:
ansible-playbook rolling-upgrade.yml --limit "webservers[0-10];contentservers[0-3]"
It would be completely wrong to say:
ansible-playbook rolling-upgrade.yml --limit "all[0-13]"
because you don't know what that limit will select. So --limit with ranged patterns should be specific.
Obviously if you've got apps that depend on your database partial database upgrades are nonsensical, but as you can see, the ability to address a particular subset of your inventory, without defining a new group, is now present.