mirror of
https://github.com/ansible/awx.git
synced 2026-01-11 01:57:35 -03:30
AC-1061 Fix inventory script to return dict with failed flag when there is an error instead of an empty dict so that ansible-playbook will propagate the error message.
This commit is contained in:
parent
a1ec54920f
commit
a18b9e2270
@ -137,10 +137,10 @@ class InventoryScriptTest(BaseScriptTest):
|
||||
def test_without_inventory_id(self):
|
||||
rc, stdout, stderr = self.run_inventory_script(list=True)
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
rc, stdout, stderr = self.run_inventory_script(host=self.hosts[0].name)
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
|
||||
def test_list_with_inventory_id_as_argument(self):
|
||||
inventory = self.inventories[0]
|
||||
@ -293,11 +293,11 @@ class InventoryScriptTest(BaseScriptTest):
|
||||
os.environ['INVENTORY_ID'] = str(inventory.pk)
|
||||
rc, stdout, stderr = self.run_inventory_script(host=host.name)
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
# Invalid hostname not in database.
|
||||
rc, stdout, stderr = self.run_inventory_script(host='blah.example.com')
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
|
||||
def test_with_invalid_inventory_id(self):
|
||||
inventory_pks = set(map(lambda x: x.pk, self.inventories))
|
||||
@ -305,19 +305,19 @@ class InventoryScriptTest(BaseScriptTest):
|
||||
os.environ['INVENTORY_ID'] = str(invalid_id)
|
||||
rc, stdout, stderr = self.run_inventory_script(list=True)
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
os.environ['INVENTORY_ID'] = 'not_an_int'
|
||||
rc, stdout, stderr = self.run_inventory_script(list=True)
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
os.environ['INVENTORY_ID'] = str(invalid_id)
|
||||
rc, stdout, stderr = self.run_inventory_script(host=self.hosts[1].name)
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
os.environ['INVENTORY_ID'] = 'not_an_int'
|
||||
rc, stdout, stderr = self.run_inventory_script(host=self.hosts[2].name)
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
|
||||
def test_with_deleted_inventory(self):
|
||||
inventory = self.inventories[0]
|
||||
@ -326,7 +326,7 @@ class InventoryScriptTest(BaseScriptTest):
|
||||
os.environ['INVENTORY_ID'] = str(inventory.pk)
|
||||
rc, stdout, stderr = self.run_inventory_script(list=True)
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
|
||||
def test_without_list_or_host_argument(self):
|
||||
inventory = self.inventories[0]
|
||||
@ -334,7 +334,7 @@ class InventoryScriptTest(BaseScriptTest):
|
||||
os.environ['INVENTORY_ID'] = str(inventory.pk)
|
||||
rc, stdout, stderr = self.run_inventory_script()
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
|
||||
def test_with_both_list_and_host_arguments(self):
|
||||
inventory = self.inventories[0]
|
||||
@ -342,7 +342,7 @@ class InventoryScriptTest(BaseScriptTest):
|
||||
os.environ['INVENTORY_ID'] = str(inventory.pk)
|
||||
rc, stdout, stderr = self.run_inventory_script(list=True, host='blah')
|
||||
self.assertNotEqual(rc, 0, stderr)
|
||||
self.assertEqual(json.loads(stdout), {})
|
||||
self.assertEqual(json.loads(stdout), {'failed': True})
|
||||
|
||||
def test_with_disabled_hosts(self):
|
||||
inventory = self.inventories[1]
|
||||
|
||||
@ -36,6 +36,7 @@ import json
|
||||
import optparse
|
||||
import os
|
||||
import sys
|
||||
import traceback
|
||||
import urllib
|
||||
import urlparse
|
||||
|
||||
@ -106,6 +107,7 @@ class InventoryScript(object):
|
||||
try:
|
||||
# Command line argument takes precedence over environment
|
||||
# variable.
|
||||
raise ValueError('foo')
|
||||
self.inventory_id = int(self.options.get('inventory_id', 0) or \
|
||||
os.getenv('INVENTORY_ID', 0))
|
||||
except ValueError:
|
||||
@ -126,13 +128,13 @@ class InventoryScript(object):
|
||||
else:
|
||||
raise RuntimeError('Either --list or --host must be specified')
|
||||
except Exception, e:
|
||||
# Always return an empty hash on stdout, even when an error occurs.
|
||||
sys.stdout.write(json.dumps({}))
|
||||
sys.stdout.write('%s\n' % json.dumps(dict(failed=True)))
|
||||
if self.options.get('traceback', False):
|
||||
raise
|
||||
sys.stderr.write(str(e) + '\n')
|
||||
sys.stderr.write(traceback.format_exc())
|
||||
else:
|
||||
sys.stderr.write('%s\n' % str(e))
|
||||
if hasattr(e, 'response'):
|
||||
sys.stderr.write(e.response.content + '\n')
|
||||
sys.stderr.write('%s\n' % e.response.content)
|
||||
sys.exit(1)
|
||||
|
||||
def main():
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user