mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-02-03 23:41:51 +00:00
fix return value exception (#11149)
* fix return value `exception` * add changelog frag * adjustments after review * typo * adjust changelog frag * vmadm: send rc, stdout, and stderr to fail_json() * rundeck: pass tracebacks * Update changelogs/fragments/11149-rv-exception.yml Co-authored-by: Felix Fontein <felix@fontein.de> * Update changelogs/fragments/11149-rv-exception.yml Co-authored-by: Felix Fontein <felix@fontein.de> --------- Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
a986d81c3d
commit
79b16d9ca5
3 changed files with 15 additions and 8 deletions
3
changelogs/fragments/11149-rv-exception.yml
Normal file
3
changelogs/fragments/11149-rv-exception.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
minor_changes:
|
||||||
|
- rundeck module utils - improve handling the return value ``exception``. It now contains the full stack trace of the exception, while the message is included in ``msg`` (https://github.com/ansible-collections/community.general/pull/11149).
|
||||||
|
- vmadm - in case of failure, the module no longer returns the stderr output as ``exception``, but instead as ``stderr``. Other information (``stdout``, ``rc``) is now also returned (https://github.com/ansible-collections/community.general/pull/11149).
|
||||||
|
|
@ -5,9 +5,9 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
import traceback
|
||||||
|
|
||||||
from ansible.module_utils.urls import fetch_url, url_argument_spec
|
from ansible.module_utils.urls import fetch_url, url_argument_spec
|
||||||
from ansible.module_utils.common.text.converters import to_native
|
|
||||||
|
|
||||||
|
|
||||||
def api_argument_spec():
|
def api_argument_spec():
|
||||||
|
|
@ -82,6 +82,10 @@ def api_request(module, endpoint, data=None, method="GET", content_type="applica
|
||||||
json_response = json.loads(content)
|
json_response = json.loads(content)
|
||||||
return json_response, info
|
return json_response, info
|
||||||
except AttributeError as error:
|
except AttributeError as error:
|
||||||
module.fail_json(msg="Rundeck API request error", exception=to_native(error), execution_info=info)
|
module.fail_json(
|
||||||
|
msg=f"Rundeck API request error: {error}", exception=traceback.format_exc(), execution_info=info
|
||||||
|
)
|
||||||
except ValueError as error:
|
except ValueError as error:
|
||||||
module.fail_json(msg="No valid JSON response", exception=to_native(error), execution_info=content)
|
module.fail_json(
|
||||||
|
msg=f"No valid JSON response: {error}", exception=traceback.format_exc(), execution_info=content
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -361,7 +361,7 @@ def get_vm_prop(module, uuid, prop):
|
||||||
(rc, stdout, stderr) = module.run_command(cmd)
|
(rc, stdout, stderr) = module.run_command(cmd)
|
||||||
|
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
module.fail_json(msg=f"Could not perform lookup of {prop} on {uuid}", exception=stderr)
|
module.fail_json(msg=f"Could not perform lookup of {prop} on {uuid}", rc=rc, stdout=stdout, stderr=stderr)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
stdout_json = json.loads(stdout)
|
stdout_json = json.loads(stdout)
|
||||||
|
|
@ -384,7 +384,7 @@ def get_vm_uuid(module, alias):
|
||||||
(rc, stdout, stderr) = module.run_command(cmd)
|
(rc, stdout, stderr) = module.run_command(cmd)
|
||||||
|
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
module.fail_json(msg=f"Could not retrieve UUID of {alias}", exception=stderr)
|
module.fail_json(msg=f"Could not retrieve UUID of {alias}", rc=rc, stdout=stdout, stderr=stderr)
|
||||||
|
|
||||||
# If no VM was found matching the given alias, we get back an empty array.
|
# If no VM was found matching the given alias, we get back an empty array.
|
||||||
# That is not an error condition as we might be explicitly checking for its
|
# That is not an error condition as we might be explicitly checking for its
|
||||||
|
|
@ -409,7 +409,7 @@ def get_all_vm_uuids(module):
|
||||||
(rc, stdout, stderr) = module.run_command(cmd)
|
(rc, stdout, stderr) = module.run_command(cmd)
|
||||||
|
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
module.fail_json(msg="Failed to get VMs list", exception=stderr)
|
module.fail_json(msg="Failed to get VMs list", rc=rc, stdout=stdout, stderr=stderr)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
stdout_json = json.loads(stdout)
|
stdout_json = json.loads(stdout)
|
||||||
|
|
@ -421,11 +421,11 @@ def get_all_vm_uuids(module):
|
||||||
def new_vm(module, uuid, vm_state):
|
def new_vm(module, uuid, vm_state):
|
||||||
payload_file = create_payload(module, uuid)
|
payload_file = create_payload(module, uuid)
|
||||||
|
|
||||||
(rc, dummy, stderr) = vmadm_create_vm(module, payload_file)
|
(rc, stdout, stderr) = vmadm_create_vm(module, payload_file)
|
||||||
|
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
changed = False
|
changed = False
|
||||||
module.fail_json(msg="Could not create VM", exception=stderr)
|
module.fail_json(msg="Could not create VM", rc=rc, stdout=stdout, stderr=stderr)
|
||||||
else:
|
else:
|
||||||
changed = True
|
changed = True
|
||||||
# 'vmadm create' returns all output to stderr...
|
# 'vmadm create' returns all output to stderr...
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue