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