ansible-collection
ansible-collection copied to clipboard
tag creation is optimistic and can fail without bubbling up exception
Summary
I was trying to create a tag called "infra.domain.tld" and it didn't work with this exception excerpt:
File "/home/dmsimard/.ansible/tmp/ansible-tmp-1716092997.965093-220630-15469053834849/AnsiballZ_tag.py", line 47, in invoke_module
runpy.run_module(mod_name='ansible_collections.digitalocean.cloud.plugins.modules.tag', init_globals=dict(_module_fqn='ansible_collections.digitalocean.cloud.plugins.modules.tag', _modlib_path=modlib_path),
File "<frozen runpy>", line 226, in run_module
File "<frozen runpy>", line 98, in _run_module_code
File "<frozen runpy>", line 88, in _run_code
File "/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py", line 246, in <module>
File "/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py", line 242, in main
File "/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py", line 116, in __init__
File "/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py", line 194, in present
File "/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py", line 146, in create_tag
KeyError: 'tag'
fatal: [localhost]: FAILED! => {
"changed": false,
"module_stderr": "Traceback (most recent call last):\n File \"/home/dmsimard/.ansible/tmp/ansible-tmp-1716092997.965093-220630-15469053834849/AnsiballZ_tag.py\", line 107, in <module>\n _ansiballz_main()\n File \"/home/dmsimard/.ansible/tmp/ansible-tmp-1716092997.965093-220630-15469053834849/AnsiballZ_tag.py\", line 99, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File \"/home/dmsimard/.ansible/tmp/ansible-tmp-1716092997.965093-220630-15469053834849/AnsiballZ_tag.py\", line 47, in invoke_module\n runpy.run_module(mod_name='ansible_collections.digitalocean.cloud.plugins.modules.tag', init_globals=dict(_module_fqn='ansible_collections.digitalocean.cloud.plugins.modules.tag', _modlib_path=modlib_path),\n File \"<frozen runpy>\", line 226, in run_module\n File \"<frozen runpy>\", line 98, in _run_module_code\n File \"<frozen runpy>\", line 88, in _run_code\n File \"/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py\", line 246, in <module>\n File \"/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py\", line 242, in main\n File \"/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py\", line 116, in __init__\n File \"/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py\", line 194, in present\n File \"/tmp/ansible_digitalocean.cloud.tag_payload_k2tn93x1/ansible_digitalocean.cloud.tag_payload.zip/ansible_collections/digitalocean/cloud/plugins/modules/tag.py\", line 146, in create_tag\nKeyError: 'tag'\n",
"module_stdout": "",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}
Editing the module locally, I found that there was an API exception the likes of the following:
fatal: [localhost]: FAILED! => {
"changed": false,
"module_stderr": "",
"module_stdout": "{'name': 'infra.domain.tld'}\n{'error': 'Error validating resource tag: \"tag-name \\\\\"infra.domain.tld\\\\\" contains invalid characters\"', 'root_causes': ['rpc error: code = InvalidArgument desc = Error validating resource tag: \"tag-name \\\\\"infra.domain.tld\\\\\" contains invalid characters\"'], 'messages': None}\n\n{\"changed\": true, \"msg\": \"Created tag infra.domain.tld\", \"tag\": {\"error\": \"Error validating resource tag: \\\"tag-name \\\\\\\"infra.domain.tld\\\\\\\" contains invalid characters\\\"\", \"root_causes\": [\"rpc error: code = InvalidArgument desc = Error validating resource tag: \\\"tag-name \\\\\\\"infra.domain.tld\\\\\\\" contains invalid characters\\\"\"], \"messages\": null}, \"invocation\": {\"module_args\": {\"token\": \"VALUE_SPECIFIED_IN_NO_LOG_PARAMETER\", \"name\": \"infra.domain.tld\", \"state\": \"present\", \"timeout\": 300, \"client_override_options\": null, \"module_override_options\": null}}}\n",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 0
}
The module should probably have something like a try/except here: https://github.com/digitalocean/ansible-collection/blob/5abaa3caf85ed33ce34bc519d135de5f07da69f7/plugins/modules/tag.py#L146
Where on a KeyError it would bubble up the exception instead.
Issue Type
Bug Report
Component Name
tag
Ansible Version
n/a
Configuration
n/a
OS / Environment
n/a
Steps to Reproduce
- name: Create a tag to associate our resources with
digitalocean.cloud.tag:
name: "domain.extension.tld"
state: present
Expected Results
It works or bubbles up an exception if there is one.
Actual Results
See summary.
Code of Conduct
- [X] I agree to follow the Ansible Code of Conduct