Hello,
I have started development of an Ansible module to insert a document into a MongoDB database. It’s over at https://github.com/ansible-collections/community.mongodb/
When a MongoDB document is inserted, without providing a value for _id, an Object ID is created automatically and returned. When this happens I get the following error…
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: TypeError: Value of unknown type: <class ‘bson.objectid.ObjectId’>, 5ec14572cce378f1d3df48eb
665
fatal: [testhost]: FAILED! => {“changed”: false, “module_stderr”: “Traceback (most recent call last):\n File "/root/.ansible/tmp/ansible-tmp-1589724530.3062885-3682-27933782860899/AnsiballZ_mongodb_document.py", line 143, in \n _ansiballz_main()\n File "/root/.ansible/tmp/ansible-tmp-1589724530.3062885-3682-27933782860899/AnsiballZ_mongodb_document.py", line 135, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File "/root/.ansible/tmp/ansible-tmp-1589724530.3062885-3682-27933782860899/AnsiballZ_mongodb_document.py", line 81, in invoke_module\n runpy.run_module(mod_name=‘ansible_collections.community.mongodb.plugins.modules.mongodb_document’, init_globals=None, run_name=‘main’, alter_sys=True)\n File "/usr/lib/python3.6/runpy.py", line 205, in run_module\n return _run_module_code(code, init_globals, run_name, mod_spec)\n File "/usr/lib/python3.6/runpy.py", line 96, in _run_module_code\n mod_name, mod_spec, pkg_name, script_name)\n File "/usr/lib/python3.6/runpy.py", line 85, in _run_code\n exec(code, run_globals)\n File "/tmp/ansible_mongodb_document_payload_oe81u9jo/ansible_mongodb_document_payload.zip/ansible_collections/community/mongodb/plugins/modules/mongodb_document.py", line 483, in \n File "/tmp/ansible_mongodb_document_payload_oe81u9jo/ansible_mongodb_document_payload.zip/ansible_collections/community/mongodb/plugins/modules/mongodb_document.py", line 479, in main\n File "/tmp/ansible_mongodb_document_payload_oe81u9jo/ansible_mongodb_document_payload.zip/ansible/module_utils/basic.py", line 2045, in exit_json\n File "/tmp/ansible_mongodb_document_payload_oe81u9jo/ansible_mongodb_document_payload.zip/ansible/module_utils/basic.py", line 2038, in _return_formatted\n File "/tmp/ansible_mongodb_document_payload_oe81u9jo/ansible_mongodb_document_payload.zip/ansible/module_utils/basic.py", line 413, in remove_values\n File "/tmp/ansible_mongodb_document_payload_oe81u9jo/ansible_mongodb_document_payload.zip/ansible/module_utils/basic.py", line 396, in _remove_values_conditions\nTypeError: Value of unknown type: <class ‘bson.objectid.ObjectId’>, 5ec14572cce378f1d3df48eb\n”, “module_stdout”: “”, “msg”: “MODULE FAILURE\nSee stdout/stderr for the exact error”, “rc”: 1}
If I specify an integer value for the _id field Ansible doesn’t complain. The problem line of code is the following…
inserted_id = deepcopy(str(client[database][collection].insert_one(document).inserted_id))
The deepcopy and str cast were attempts to prevent the problem but Ansible still complains. I think this is a problem specific to something in Ansible. There’s probably not much point in a mongodb_document module if I can’t support using a BSON ObjectId. Would anyone have a clue what this might be and if I can get around it?
Cheers,
Rhys