From 8fa4dc39206e2727189ec56ccc2b355b38a112ee Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Tue, 24 Jul 2012 20:10:05 -0400 Subject: [PATCH] Small change to previous patch, make ranges of hosts inclusive. --- CHANGELOG.md | 1 + docs/man/man1/ansible-playbook.1 | 4 +-- docs/man/man1/ansible.1 | 20 ++++---------- docs/man/man1/ansible.1.asciidoc.in | 7 +++-- examples/hosts | 39 +++++++++++++-------------- lib/ansible/inventory/expand_hosts.py | 7 ++--- test/simple_hosts | 6 ++--- 7 files changed, 39 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee4145e132d..0159110856a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ Ansible Changes By Release * minor caching logic added to inventory to reduce hammering of inventory scripts. * ./hacking/test-module now supports options like ansible takes and has a debugger mode * playbook is now colorized, set ANSIBLE_NOCOLOR=1 if you do not like this, does not colorize if not a TTY +* support ranges of hosts in the host file 0.5 "Amsterdam" ------- July 04, 2012 diff --git a/docs/man/man1/ansible-playbook.1 b/docs/man/man1/ansible-playbook.1 index 157ba08cb8f..3a585b25bc7 100644 --- a/docs/man/man1/ansible-playbook.1 +++ b/docs/man/man1/ansible-playbook.1 @@ -2,12 +2,12 @@ .\" Title: ansible-playbook .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 07/04/2012 +.\" Date: 07/24/2012 .\" Manual: System administration commands .\" Source: Ansible 0.6 .\" Language: English .\" -.TH "ANSIBLE\-PLAYBOOK" "1" "07/04/2012" "Ansible 0\&.6" "System administration commands" +.TH "ANSIBLE\-PLAYBOOK" "1" "07/24/2012" "Ansible 0\&.6" "System administration commands" .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- diff --git a/docs/man/man1/ansible.1 b/docs/man/man1/ansible.1 index d785f7c242c..013322a1bd7 100644 --- a/docs/man/man1/ansible.1 +++ b/docs/man/man1/ansible.1 @@ -2,12 +2,12 @@ .\" Title: ansible .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 07/04/2012 +.\" Date: 07/24/2012 .\" Manual: System administration commands .\" Source: Ansible 0.6 .\" Language: English .\" -.TH "ANSIBLE" "1" "07/04/2012" "Ansible 0\&.6" "System administration commands" +.TH "ANSIBLE" "1" "07/24/2012" "Ansible 0\&.6" "System administration commands" .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- @@ -140,19 +140,9 @@ Connection type to use\&. Possible options are .RE .SH "INVENTORY" .sp -Ansible stores the hosts it can potentially operate on in an inventory -file\&. The syntax is one host per line\&. Optionally, ansible can use a -line of the form base[beg:end]tail to define a set of hosts, where -[beg:end] defines a numerical range. If 'beg' is left out, it -defaults to 0\&. An example: mail[1:6].example.com, where 'head' -is 'mail', 'beg' is 1, 'end' is 6, and 'tail' is '.example.com'\&. In -addition, 'beg' can be a a string padded with zero(s) to the left. If so -provided, it acts as a formatting hint during hostname expansion. The usage -must be confirmed by having an 'end' that has the same length as 'beg', -else an exception is raised. An example: mail[001:003].example.com is to be -expanded to mail001.example.com, mail002.example.com, and -mail003.example.com\&. Groups headers are allowed and are included on their -own line, enclosed in square brackets\&. +Ansible stores the hosts it can potentially operate on in an inventory file\&. The syntax is one host per line\&. Groups headers are allowed and are included on their own line, enclosed in square brackets that start the line\&. +.sp +Ranges of hosts are also supported\&. For more information and additional options, see the documentation on http://ansible\&.github\&.com/\&. .SH "FILES" .sp /etc/ansible/hosts \(em Default inventory file diff --git a/docs/man/man1/ansible.1.asciidoc.in b/docs/man/man1/ansible.1.asciidoc.in index 794844fcebe..2e6f8bbb451 100644 --- a/docs/man/man1/ansible.1.asciidoc.in +++ b/docs/man/man1/ansible.1.asciidoc.in @@ -31,7 +31,6 @@ A name of a group in the inventory file, a shell-like glob selecting hosts in inventory file, or any combination of the two separated by semicolons. - OPTIONS ------- @@ -112,7 +111,11 @@ INVENTORY Ansible stores the hosts it can potentially operate on in an inventory file. The syntax is one host per line. Groups headers are allowed and -are included on their own line, enclosed in square brackets. +are included on their own line, enclosed in square brackets that +start the line. + +Ranges of hosts are also supported. For more information and +additional options, see the documentation on http://ansible.github.com/. FILES ----- diff --git a/examples/hosts b/examples/hosts index a351674ac90..ce4cbb7caa4 100644 --- a/examples/hosts +++ b/examples/hosts @@ -7,39 +7,38 @@ # - Groups of hosts are delimited by [header] elements # - You can enter hostnames or ip addresses # - A hostname/ip can be a member of multiple groups -# + # Ex 1: Ungrouped hosts, specify before any group headers. -green.bikeshed.org -blue.bikeshed.org -red.bikeshed.org -bikeshed.org -bastion.secure.bikeshed.org + +green.example.com +blue.example.com 192.168.100.1 192.168.100.10 -# An example for host expansion that uses the default 'beg' and an 'end' -mail[:5].example.com # Ex 2: A collection of hosts belonging to the 'webservers' group + [webservers] -www01.bikeshed.org -www02.bikeshed.org -wheel.colors.com +alpha.example.org +beta.example.org 192.168.1.100 192.168.1.110 -# Your personal website also runs a webserver: -myserver.com -# An example for host expansion that uses both a 'beg' and an 'end', with -# the 'beg' acting as a formatting hint during host name expansion + +# If you have multiple hosts following a pattern you can specify +# them like this: + www[001:006].example.com # Ex 3: A collection of database servers in the 'dbservers' group + [dbservers] + db01.intranet.mydomain.net -10.25.1.56 db02.intranet.mydomain.net +10.25.1.56 10.25.1.57 -# Perhaps you serve a db off your personal server too: -myserver.com -# An example for host expansion that uses a regular 'beg' and a regular -# 'end' + +# Here's another example of host ranges, this time there are no +# leading 0s: + db-[99:101]-node.example.com + diff --git a/lib/ansible/inventory/expand_hosts.py b/lib/ansible/inventory/expand_hosts.py index e7a5ff37f61..ecccc1985ff 100644 --- a/lib/ansible/inventory/expand_hosts.py +++ b/lib/ansible/inventory/expand_hosts.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with this software. If not, see . # + ''' This module is for enhancing ansible's inventory parsing capability such that it can deal with hostnames specified using a simple pattern in the @@ -69,13 +70,13 @@ def expand_hostname_range(line = None): (head, nrange, tail) = line.replace('[','|').replace(']','|').split('|') bounds = nrange.split(":") if len(bounds) != 2: - raise ValueError("host range incorrectly specified!") + raise ValueError("host range incorrectly specified") beg = bounds[0] end = bounds[1] if not beg: beg = "0" if not end: - raise ValueError("host range end value missing!") + raise ValueError("host range end value missing") if beg[0] == '0' and len(beg) > 1: rlen = len(beg) # range length formatting hint else: @@ -83,7 +84,7 @@ def expand_hostname_range(line = None): if rlen > 1 and rlen != len(end): raise ValueError("host range format incorrectly specified!") - for _ in range(int(beg), int(end)): + for _ in range(int(beg), int(end)+1): if rlen: rseq = str(_).zfill(rlen) # range sequence else: diff --git a/test/simple_hosts b/test/simple_hosts index 8f1bd55a5f4..c774afd4b40 100644 --- a/test/simple_hosts +++ b/test/simple_hosts @@ -1,13 +1,13 @@ jupiter saturn -thrudgelmir[:6] +thrudgelmir[:5] [greek] zeus hera:3000 poseidon -cerberus[001:004] -cottus[99:101] +cerberus[001:003] +cottus[99:100] [norse] thor