Yaml inventory more tolerant (#48883)

* make yaml inv more tolerant to comments
* add tests for bad inventory processing

fixes #47254
This commit is contained in:
Brian Coca 2018-11-30 22:04:39 -05:00 committed by GitHub
parent bd1050dfc7
commit fc71cde7d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 112 additions and 1 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- make YAML inventory more tolerant to comments/empty/None entries

View file

@ -135,7 +135,13 @@ class InventoryModule(BaseFileInventoryPlugin):
for key in group_data: for key in group_data:
if key == 'vars': if not isinstance(group_data[key], (MutableMapping, NoneType)):
self.display.warning('Skipping key (%s) in group (%s) as it is not a mapping, it is a %s' % (key, group, type(group_data[key])))
continue
if isinstance(group_data[key], NoneType):
self.display.vvv('Skipping empty key (%s) in group (%s)' % (key, group))
elif key == 'vars':
for var in group_data[key]: for var in group_data[key]:
self.inventory.set_variable(group, var, group_data[key][var]) self.inventory.set_variable(group, var, group_data[key][var])
elif key == 'children': elif key == 'children':

View file

@ -0,0 +1 @@
shippable/posix/group1

View file

@ -0,0 +1,10 @@
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}

View file

@ -0,0 +1,4 @@
#!/usr/bin/env bash
# handle empty/commented out group keys correctly https://github.com/ansible/ansible/issues/47254
ANSIBLE_VERBOSITY=0 diff -w <(ansible-inventory -i ./test.yml --list) success.json

View file

@ -0,0 +1,61 @@
{
"_meta": {
"hostvars": {
"alice": {
"status": "single"
},
"bobby": {
"in_trouble": true,
"popular": false
},
"cindy": {
"in_trouble": true,
"popular": true
},
"greg": {
"in_trouble": true,
"popular": true
},
"jan": {
"in_trouble": true,
"popular": false
},
"marcia": {
"in_trouble": true,
"popular": true
},
"peter": {
"in_trouble": true,
"popular": false
}
}
},
"all": {
"children": [
"cousins",
"kids",
"the-maid",
"ungrouped"
]
},
"cousins": {
"children": [
"redheads"
]
},
"kids": {
"hosts": [
"bobby",
"cindy",
"greg",
"jan",
"marcia",
"peter"
]
},
"the-maid": {
"hosts": [
"alice"
]
}
}

View file

@ -0,0 +1,27 @@
all:
children:
kids:
hosts:
marcia:
popular: True
jan:
popular: False
cindy:
popular: True
greg:
popular: True
peter:
popular: False
bobby:
popular: False
vars:
in_trouble: True
cousins:
children:
redheads:
hosts:
#oliver: # this used to cause an error and deliver incomplete inventory
the-maid:
hosts:
alice:
status: single