Abhijit Menon-Sen
8aaa06dd50
Introduce _split_pattern to parse an "x:y:z" pattern
...
This function takes a string like 'foo:bar[1:2]:baz[x:y]-quux' and
returns a list of patterns ['foo', 'bar[1:2]', 'baz[x:y]-quux'], i.e.
splits the string on colons that are not part of a range specification.
2015-08-13 14:51:08 -04:00
Abhijit Menon-Sen
baf637b9ae
Remove dead code: Inventory.also_restrict_to/lift_also_restriction
...
This was used earlier to implement serial, but that's now done using
restrict_to_hosts() (whose docstring is also suitably adjusted here)
and there are no more callers.
2015-08-13 14:51:08 -04:00
Brian Coca
b905f51341
fixed typo
2015-08-13 11:05:20 -04:00
Brian Coca
49d88cef9c
meta: refresh_inventory and several inventory fixes
2015-08-12 10:35:12 -04:00
James Cammarata
26d5a17b59
Make sure inventory loads files with non-relative paths
...
This is a slightly different fix than we originally committed, but fixes
the problem in a less invasive way (and I believe it's generally better
that we don't deal with relative paths internally past this point)
Fixes #11789
2015-08-06 10:18:58 -04:00
Brian Coca
b9433650d1
Revert "Path of group_vars and host_vars were getting the basedir added twice."
...
in view of simpler solution incomming from james
This reverts commit bae7a02be5
.
2015-08-06 10:09:43 -04:00
Toshio Kuratomi
bae7a02be5
Path of group_vars and host_vars were getting the basedir added twice.
...
Fix inventory so this won't happen and fix DataLoader so that it will
test relative paths relative to self._basedir
Fixes #11789
2015-08-05 17:41:17 -07:00
Toshio Kuratomi
f0431eaea9
Make ansible_python_interpreter work with synchronize
...
Fixes #11836
2015-08-03 13:32:24 -07:00
Abhijit Menon-Sen
845784b572
Remove outdated FIXMEs; all use combine_vars already
2015-07-30 23:47:41 +05:30
Brian Coca
77fc3ce759
removed unused import
2015-07-28 08:28:52 -04:00
James Cammarata
65ae9780fa
Merge pull request #11079 from amegianeg/fix_broad_except_in_inventory
...
Avoid too broad except in Inventory
2015-07-23 13:36:02 -04:00
James Cammarata
4e94bb64d8
Fix group/host var loading relative to playbook basedir
2015-07-14 09:26:24 -04:00
James Cammarata
87ca475704
Exclude the all/ungrouped groups from pattern matching results
...
Fixes #5375
2015-06-17 16:25:58 -04:00
James Cammarata
90445ee67d
Add ::1 where we see 127.0.0.1, for better ipv6 support
...
Fixes #5764
2015-06-17 16:03:19 -04:00
Marc Abramowitz
a385744426
Add inventory file to "Unable to find" error msg
...
E.g.:
$ ansible gabriel -m ping -i ssh_config.py
ERROR! Unable to find an inventory file (ssh_config.py), specify one with -i ?
2015-06-17 11:00:13 -07:00
James Cammarata
30c1a2d861
Have group/host var file loading check for YAML extensions too
...
Fixes #11132
2015-06-16 11:55:56 -04:00
Toshio Kuratomi
f9b56a5d7c
Fix raising AnsibleError
2015-06-05 11:41:23 -07:00
James Cammarata
620fad9f8d
Fixing an oops in inventory/__init__.py where the slots are incorrect
2015-06-01 20:02:15 -05:00
James Cammarata
2bad888f28
Merge branch 'v2_final' into devel_switch_v2
...
Conflicts:
lib/ansible/inventory/__init__.py
lib/ansible/modules/core
lib/ansible/utils/__init__.py
lib/ansible/utils/module_docs.py
2015-05-28 15:26:03 -05:00
alberto
37ae5aab31
Capture only IOError when reading shebang from inventory file, to avoid ignoring other possible exceptions like timeouts from a task
2015-05-28 12:19:32 +02:00
Brian Coca
0913b8263c
made special treatment of certain filesystem for selinux configurable
2015-05-15 13:52:27 -04:00
Brian Coca
e2de336a23
made special treatment of certain filesystem for selinux configurable
2015-05-15 13:19:15 -04:00
James Cammarata
ce3ef7f4c1
Making the switch to v2
2015-05-03 21:47:26 -05:00
Brian Coca
61a30e5f49
better exception handling with delegated hosts
2014-12-03 07:26:42 -05:00
James Cammarata
d19fe8d95d
Fetch vars for host directly when calculating the delegated user
...
This fixes the case in which the delegated to host may not be in the
specified hosts list, in which cases facts/vars for the host were
not available in the injected hostvars.
This also fixes the inventory variable fetching function, so that an
unknown host raises a proper error as opposed to a NoneType exception.
Fixes #8224
2014-10-10 01:18:18 -05:00
Serge van Ginderachter
0ab721d51e
better logic for all-group variables for implicit localhost
2014-08-19 16:41:51 +02:00
Serge van Ginderachter
a2cfe8770b
Inventory: fix logic mistake in loading/retrieving variables for groups
2014-08-19 16:34:26 +02:00
James Cammarata
e3895840d1
Make sure group_vars/all is loaded for ungrouped hosts
...
Fixes #6563
2014-08-18 12:29:46 -05:00
James Cammarata
b4476c238f
Use match() instead of search() for pattern matching
...
Also related to f48fa3, fix for #8614
2014-08-14 12:26:52 -05:00
James Cammarata
f48fa3759a
Fix host pattern matching and enhance error detection
...
Fixes #8614
2014-08-14 12:13:40 -05:00
James Cammarata
bea0845322
Fix vault_password positional args error
2014-08-14 10:28:08 -05:00
Michael DeHaan
8c4161d4a1
Merge branch 'retf_py' of git://github.com/berendt/ansible into devel
...
Conflicts:
lib/ansible/inventory/vars_plugins/group_vars.py
plugins/callbacks/mail.py
2014-08-08 12:17:37 -04:00
Serge van Ginderachter
e8b45a9ef7
Invalidate host/group variables cache when loading
...
extra varsiables based on playbook basedir.
2014-07-14 15:21:33 +02:00
Serge van Ginderachter
d39ff55688
Fix logic bug when loading vars for a new playbook basedir.
2014-07-14 15:12:53 +02:00
James Cammarata
4e5eb7559e
Merge branch 'svg_and_inventory_refactor' into devel
2014-07-10 14:43:07 -05:00
Dan Slimmon
307a3e8a9c
Fixed regex square-bracket bug.
...
Regexes were being parsed like ordinary ansible host patterns, so
square-bracket groups were getting interpolated wrongly.
2014-07-10 00:08:12 +00:00
James Cammarata
aa261bdd14
Optimizing groups_for_host() lookup in inventory
2014-07-07 21:08:39 -05:00
James Cammarata
fe892fccb1
Merge remote-tracking branch 'svg/varsplugins_refactor' into svg_and_inventory_refactor
2014-07-07 14:16:37 -05:00
James Cammarata
11a5fc85f4
Merge branch 'inventory_refactoring' into svg_and_inventory_refactor
2014-07-07 13:11:58 -05:00
Serge van Ginderachter
ff4119adc0
Performance optimization in resolving host patterns
...
Avoid resolving a pattern that is a plain host. When matching a hostname in the
hosts_cache, just use the host object from there.
When running a task on say 750 hosts, this yields a huge improvement.
2014-07-07 12:50:50 -05:00
James Cammarata
539426f612
Performance tuning inventory functions for large inventories
2014-06-26 23:15:39 -05:00
James Cammarata
d8a7b49b59
Merge branch 'inventorytree' of https://github.com/sergevanginderachter/ansible into sergevanginderachter-inventorytree
2014-06-24 15:21:08 -05:00
Christian Berendt
6676720ce5
fixed typos found by RETF rules in PY files
...
rules are avaialble at https://en.wikipedia.org/wiki/Wikipedia:AutoWikiBrowser/Typos
2014-05-03 18:40:05 +02:00
Cristian Ciupitu
96ff1444f0
Micro-optimization: replace s.find(x)==0 with s.startswith(x)
...
timeit shows a speedup of ~1.4x on Python 2.7.5 x86_64.
It also makes the code a bit shorter.
2014-03-27 20:35:20 +02:00
Serge van Ginderachter
d4634983f0
Move group/host_vars parsing into core inventory
...
modified: lib/ansible/inventory/__init__.py
deleted: lib/ansible/inventory/vars_plugins/group_vars.py
modified: lib/ansible/utils/__init__.py
2014-03-26 11:37:26 +01:00
Serge van Ginderachter
f8ea93c732
Move inventory.set_playbook_basedir from ansible-playbook to playbook constructor
2014-03-25 22:12:01 +01:00
Serge van Ginderachter
f6a55a3552
Refactor vars_plugins (host/group_vars)
...
Split out parsing of vars files to per host and per group
parsing, instead of reparsing all groups for each host. This enhances
performance.
Extend vars_plugins' API with two new methods:
* get host variables: only parses host_vars
* get group variables: only parses group_vars for specific group
The initial run method is still used for backward compatibility.
Parse all vars_plugins at inventory initialisation, instead of
per host when touched first by runner. Here we can also loop through
all groups once easily, then parse them.
This also centralizes all parsing in the inventory constructor.
modified: bin/ansible
modified: bin/ansible-playbook
modified: lib/ansible/inventory/__init__.py
modified: lib/ansible/inventory/vars_plugins/group_vars.py
2014-03-25 22:12:01 +01:00
James Cammarata
846933dd53
Make inventory parsing error detection smarter
...
If something is executable but doesn't look like it should be, or if
something is NOT executable and DOES looks like it should, show a
more apropos error with a hint on correcting the problem
Fixes #5113
2014-03-25 11:41:00 -05:00
Serge van Ginderachter
188375171e
Inventory: raise error when adding a group that already exists.
...
The parsers check if a group already exists.
2014-03-25 12:45:00 +01:00
Michael DeHaan
b41541c62a
Merge conflict.
2014-03-16 16:48:03 -04:00
James Cammarata
e3b887f770
Fix range issue in inventory and add additional error checking
...
Fixes #6331
2014-03-07 16:34:04 -06:00
Jesse Keating
0c2c37a47a
Avoid range selection on empty groups
...
This prevents a traceback when the group is empty.
Fixes #6258
2014-03-03 13:23:27 -08:00
James Cammarata
f23ccebbdc
Merge branch 'issue_4620' of https://github.com/jimi-c/ansible into jimi-c-issue_4620
2014-02-24 20:30:25 -06:00
James Tanner
427b8dc78d
Ansible vault: a framework for encrypting any playbook or var file.
2014-02-18 15:35:12 -05:00
James Cammarata
ca0ec800d8
Revising method for parsing ranges from --limit subsets
...
Also added a new test (test_subset_range) for future validation.
Fixes #4620
2014-02-05 13:58:03 -06:00
James Cammarata
f955d9db6a
Handle implicit localhost when using '-i host,' syntax
...
Fixes #5820
2014-01-30 12:46:02 -06:00
Rob Smith
761fe8cc04
Fix an issue where git-pull fails with AttributeError
...
As part of 94f3b9bfab
the code was changed to support dynamically adding localhost to the inventory. This change introduced an crash when run via ansible-pull
```
Starting ansible-pull at 2014-01-20 23:09:57
Traceback (most recent call last):
File "/tmp/ansible/bin/ansible", line 157, in <module>
(runner, results) = cli.run(options, args)
File "/tmp/ansible/bin/ansible", line 82, in run
hosts = inventory_manager.list_hosts(pattern)
File "/tmp/ansible/lib/ansible/inventory/__init__.py", line 372, in list_hosts
result = [ h.name for h in self.get_hosts(pattern) ]
File "/tmp/ansible/lib/ansible/inventory/__init__.py", line 136, in get_hosts
subset = self._get_hosts(self._subset)
File "/tmp/ansible/lib/ansible/inventory/__init__.py", line 177, in _get_hosts
that = self.__get_hosts(p)
File "/tmp/ansible/lib/ansible/inventory/__init__.py", line 198, in __get_hosts
hpat = self._hosts_in_unenumerated_pattern(name)
File "/tmp/ansible/lib/ansible/inventory/__init__.py", line 275, in _hosts_in_unenumerated_pattern
ungrouped.add_host(new_host)
AttributeError: 'NoneType' object has no attribute 'add_host'
```
The root cause is there is no group for the host to be added to. I fixed this case by creating the ungrouped group when it doesn't exist and then adding the host to the newly added group. This fixes the regression for me.
2014-01-20 20:10:47 -08:00
James Tanner
94f3b9bfab
Fixes #3129 Do not require localhost to be in inventory
2014-01-20 18:26:14 -05:00
James Tanner
559e89036b
Fixes #5631 Return a unique list of hosts when joining groups
2014-01-16 14:24:11 -05:00
jctanner
a6bc63512e
Merge pull request #5308 from zecrazytux/fix/hash_merge_dynamic_inventory
...
Let merge hash_bahaviour work with dynamic inventory
2014-01-14 07:58:25 -08:00
jctanner
21b4212ff5
Merge pull request #5517 from lichesser/fix_set_depreciation_warning
...
Fixes #5513 . set is built-in since 2.4 and deprecated since 2.6
2014-01-07 15:48:27 -05:00
James Tanner
ab51bd23a2
Fixes #5196 return a unique list of hostnames for a single host pattern
2014-01-06 14:19:20 -05:00
Michael DeHaan
227e8e31c9
Merge branch 'use_comps' of git://github.com/j2sol/ansible into devel
2014-01-04 13:36:40 -05:00
Michael DeHaan
10350d1639
Update various copyrights. Not complete, but sufficient.
2014-01-04 13:32:04 -05:00
Jesse Keating
23720ff19d
Use list comprehensions for efficiency
...
For loops can be inefficient, particularly when doing a dot command with
them. https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Loops and
https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Avoiding_dots ...
This patch makes use of list comprehensions to be as efficient as
possible while still retaining order. Efficiency was lost a bit when
switching away from sets() but this gains some of it back.
2014-01-03 18:07:00 -08:00
Sébastien Bocahu
c8d5846ab9
Let merge hash_bahaviour work with dynamic inventory
2013-12-16 19:55:20 +01:00
Michael DeHaan
b5c9d5a59b
Inventory directory should always be absolute. Fixes #4535 .
2013-10-30 20:48:53 -04:00
Michael DeHaan
1b2d4c328c
Cache patterns a bit higher up to make things a little more efficient. See #4469 .
2013-10-11 22:24:37 -04:00
Michael DeHaan
41aaad69aa
Make add_host clear the inventory pattern cache, add some more aliases. Fixes #4442 .
2013-10-11 16:37:10 -04:00
Serge van Ginderachter
c2e5f783da
Add caching to pattern enumeration
...
Inventory._hosts_in_unenumerated_pattern()
Was TODO: cache this logic so if called a second time the result is not
recalculated
2013-10-10 15:41:48 +02:00
Michael DeHaan
8fc46a3a5a
Return inventory objects in the order they are presented. Additionally, fix host slicing such that it works on Python terms with
...
zero indexed lists and a non-inclusive final element.
2013-10-07 15:06:15 -04:00
Jasper Capel
d4dec5f577
Allow creating empty inventory
...
Instantiating the Inventory class with host_list=None now results in an
empty inventory instead of an error.
2013-09-25 15:00:35 +02:00
James Cammarata
39628d012d
Minor fix to ipv6 detection for inventory with -i
...
For link-local addresses, it is sometimes necessary to append the
interface to use for the ipv6 address. This patch extends the ipv6
regex to allow for '%ifnameX' at the end.
See https://bugzilla.redhat.com/show_bug.cgi?id=136852 for more info
2013-08-19 15:27:21 -05:00
Michael Scherer
c9d28e10ad
add support for using a ipv6 in -i
...
testing with a ipv6 :
ansible -u misc -i '[2002::c23e]:22,' '*' -m ping
fail due to parsing of ':' as a separator of port/ip with ipv4.
This commit add support for properly parsing 2002::c23 and the
bracket notation [2002::ce]:2222
2013-08-19 15:27:20 -05:00
ftao
51a180b150
fix inventory.basedir is not absolute path when hostfile is startswith "./"
2013-08-11 10:50:47 +08:00
René Moser
e8272e365d
implemented 'inventory_file' variable. Closes GH-3789.
2013-08-10 13:04:56 +02:00
Serge van Ginderachter
40e60c947d
Host specifiers should be sorted
...
to ensure consistent behavior, hosts should look like this:
hosts: webservers:&boston:!rack42
So when applying the host selectors, run those without the "&" first,
then the &s, then the !s.
Closes #3500
2013-08-08 18:32:24 +02:00
martin f. krafft
fd02443d42
Enable negated patterns
...
A host pattern of the form '!foo' by itself does not work, but
'all:!foo' does. If the first pattern is a negation, this commit
automatically prepends 'all'.
Signed-off-by: martin f. krafft <madduck@madduck.net>
2013-06-20 07:55:35 +02:00
Rike-Benjamin Schuppner
deaf499ba1
Remove duplicate host file reads by removing a legacy check.
...
This allows using a form such as
ansible -i <( arbitrary command ) all -m ping
2013-06-10 17:15:12 +02:00
Michael DeHaan
1f7c197a9d
os.path.dirname returns '' not None in some cases, handle this so inventory can be specified with ./
2013-06-02 16:01:09 -04:00
Michael DeHaan
6cd3ba5b06
Allow the group_vars and host_vars directories to be stored alongside the playbook as well as inventory.
2013-06-01 10:38:16 -04:00
Serge van Ginderachter
0c0d6c0b4e
performance optimization in inventory.groups_list()
...
don't calculate all hosts for every parent group of every group
when that parent group was already in the cache
2013-05-28 12:53:51 +02:00
Nicolas Grilly
7aee588918
Idiomatic Python: use in operator instead of method find
2013-05-23 20:12:43 +02:00
Nicolas Grilly
7babd30cf7
Idiomatic Python: use isinstance instead of type
2013-05-23 20:12:43 +02:00
Timothy Appnel
20bf5f130d
Adds fuzzy matching of localhost to 127.0.0.1 host entries and vice versa.
2013-05-08 14:11:40 -04:00
Michael DeHaan
5a8dff5bce
Instantiate inventory plugins only once for efficiency reasons.
2013-04-20 09:59:40 -04:00
Michael DeHaan
29209c4913
Style fixes so "make pep8" is clean.
2013-04-10 16:37:49 -04:00
Michael DeHaan
0d530f3bf0
Change the retry logic to write a limit file, able to source limit from files by indicating with @filename
2013-04-08 12:36:01 -04:00
Rob Parrott
149f1f9f3c
invalidate group cache so that a group added by the add_host module will be relfected in the groups variable in later plays.
2013-03-19 13:57:45 -04:00
Daniel Hokka Zakrisson
1784fd80cc
When a host list is used, no parser is present
2013-03-04 12:37:15 +01:00
Daniel Hokka Zakrisson
f1eb195ff5
vars_loader should get the path to the inventory + vars_plugins
2013-03-01 23:22:52 +01:00
Daniel Hokka Zakrisson
ad08995989
Make inventory basedir for directory based inventory be the directory
...
This puts host_vars and group_vars inside of the directory, allowing you
to target a single inventory but still have access to the variables.
2013-03-01 23:22:52 +01:00
Daniel Hokka Zakrisson
d9c6b60b24
Allow inventory to be a directory containing other inventories
2013-03-01 23:22:52 +01:00
Daniel Hokka Zakrisson
647cd0141c
Move all inventory script code into the script parser
2013-03-01 23:22:52 +01:00
Michael DeHaan
a894791767
Slightly friendlier error on missing hosts file, slightly friendlier error on inventory script returning invalid syntax
...
(or if inventory is non-script and accidentally executable).
2013-02-09 11:37:55 -05:00
Brian Coca
ca5f52b825
now missing hosts file gives nice message and no traceback
...
Signed-off-by: Brian Coca <briancoca+dev@gmail.com>
2013-02-09 11:32:18 -05:00
Silviu Dicu
f7694ac433
lambda fails on attribute access - g.name is a string not the group object
2013-01-23 11:44:23 -05:00
Daniel Hokka Zakrisson
c23eda82c2
Allow pattern[0] to address a single node
...
Replaces erroring out on it and requiring the abysmal pattern[0-0]
instead.
2013-01-07 18:20:09 +01:00
Michael DeHaan
70bb7d1e54
Merge pull request #1696 from gregorg/enhance_limit
...
Allow regex to be used to select hosts in addition to fnmatch pattern
2012-12-12 14:51:44 -08:00
Daniel Hokka Zakrisson
54b45e9bd4
Allow intersecting host patterns by using &
...
This allows patterns such as webservers:!debian:&datacenter1 to target
hosts in the webservers group, that are not in the debian group, but are
in the datacenter1 group. It also parses patterns left to right.
2012-12-12 11:36:12 +01:00