)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"03de4f03d4feaa6c44b745b9e0da4eecb25ab28b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d08c5a5f_fc570833","updated":"2022-06-06 15:21:10.000000000","message":"Awesome! Can we have a test for that?","commit_id":"0f3a86130ceb08d4da41630969081993a3f3ee97"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"071d2ee7b039fa1a0122f886302e538cb2456c7c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b90d88d4_d79d9fcb","updated":"2022-06-23 12:50:02.000000000","message":"recheck","commit_id":"e249979154a9a601b1771a600bcdc5721549659c"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"597685b959e436cc01293168eca7a353a51a0d90","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"edccede6_bf311bd6","in_reply_to":"b90d88d4_d79d9fcb","updated":"2022-06-23 14:57:03.000000000","message":"Our jobs are failing due to a bug in Ansible. sshnaidm has submitted a patch but it has not merged yet into 2.13.x https://github.com/ansible/ansible/pull/78054","commit_id":"e249979154a9a601b1771a600bcdc5721549659c"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"eb7bf76a387d832af733e57af063f29db962dfb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d2e66f77_6407ecb3","in_reply_to":"cec5ee83_ebbfb123","updated":"2022-06-29 07:29:56.000000000","message":"CI is working again 😊","commit_id":"e249979154a9a601b1771a600bcdc5721549659c"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"a75b3c22016340d896b1a163262d4d391063925d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cec5ee83_ebbfb123","in_reply_to":"edccede6_bf311bd6","updated":"2022-06-23 14:59:47.000000000","message":"thks for heads up","commit_id":"e249979154a9a601b1771a600bcdc5721549659c"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"f847202c0e9928b27d3b37e075802c2454100f44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7d711065_47a5bec7","updated":"2022-06-27 07:09:29.000000000","message":"Thanks for your proposal, Vladimir 😊 Have some design questions for discussion below.","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"be5f9c16577152044b770066280107d81a6fec91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e9747bcf_3055c7ef","updated":"2022-06-27 12:05:32.000000000","message":"Yes, this is possible, but:\nWe need to re-parse SDK log file to re emit entrie","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"c83f159ae95d87d532ea33c4fafbec4faacead74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0c24783e_c7160077","updated":"2022-07-03 12:04:38.000000000","message":"thanks!","commit_id":"6e78da48e654f3fe0283c27a669d6deb864736e4"}],"plugins/module_utils/openstack.py":[{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"f847202c0e9928b27d3b37e075802c2454100f44","unresolved":true,"context_lines":[{"line_number":306,"context_line":"        if log_path is not None:"},{"line_number":307,"context_line":"            log_level \u003d self.params.get(\u0027sdk_log_level\u0027)"},{"line_number":308,"context_line":"            self.sdk.enable_logging("},{"line_number":309,"context_line":"                debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":310,"context_line":"                http_debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":311,"context_line":"                path\u003dlog_path"},{"line_number":312,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":5,"id":"f59e1517_cb1257de","line":309,"updated":"2022-06-27 07:09:29.000000000","message":"Why providing a log_level with four different options if only \u0027DEBUG\u0027 is ever used?","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"c74151680789d48e0b78d29cb2092b4fac674f6f","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        if log_path is not None:"},{"line_number":307,"context_line":"            log_level \u003d self.params.get(\u0027sdk_log_level\u0027)"},{"line_number":308,"context_line":"            self.sdk.enable_logging("},{"line_number":309,"context_line":"                debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":310,"context_line":"                http_debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":311,"context_line":"                path\u003dlog_path"},{"line_number":312,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":5,"id":"94da3218_3e2a9b36","line":309,"in_reply_to":"f59e1517_cb1257de","updated":"2022-07-04 14:16:51.000000000","message":"Thanks for fixing this, Artem 😊","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"f847202c0e9928b27d3b37e075802c2454100f44","unresolved":true,"context_lines":[{"line_number":308,"context_line":"            self.sdk.enable_logging("},{"line_number":309,"context_line":"                debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":310,"context_line":"                http_debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":311,"context_line":"                path\u003dlog_path"},{"line_number":312,"context_line":"            )"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def check_deprecated_names(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7d1afa64_6b3fd5d5","line":311,"updated":"2022-06-27 07:09:29.000000000","message":"Ansible provides functions self.ansible.log() and self.ansible.debug() for writing log/debug output. Why not using those instead of writing to a log file directly? (really curious!) openstacksdk\u0027s enable_logging() provides a \u0027handlers\u0027 parameter which could be used for implementing this kind of redirect from openstacksdk to self.ansible.log/debug.","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"be5f9c16577152044b770066280107d81a6fec91","unresolved":true,"context_lines":[{"line_number":308,"context_line":"            self.sdk.enable_logging("},{"line_number":309,"context_line":"                debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":310,"context_line":"                http_debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":311,"context_line":"                path\u003dlog_path"},{"line_number":312,"context_line":"            )"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def check_deprecated_names(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"6488d2aa_4d11d83c","line":311,"in_reply_to":"54d2aafa_e0968660","updated":"2022-06-27 12:05:32.000000000","message":"Well, we would need to read/parse log to re-emit entries with proper level (imagine running playbook in non verbose mode and still willing to access debug SDK log). We can also simply return log content as return parameter. But we always need to think about sensitive data in the log and eventual need for sanitizing. \nAnyway here we first wanted to start gathering log at all so that from that we can move towards one or another way of returning this to user.","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"eb7bf76a387d832af733e57af063f29db962dfb8","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            self.sdk.enable_logging("},{"line_number":309,"context_line":"                debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":310,"context_line":"                http_debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":311,"context_line":"                path\u003dlog_path"},{"line_number":312,"context_line":"            )"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def check_deprecated_names(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"63197dcf_bc5e6ff8","line":311,"in_reply_to":"6488d2aa_4d11d83c","updated":"2022-06-29 07:29:56.000000000","message":"ack, lets add option sdk_log_path. We can add other options for logging later.","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"9361637b816500bd2634e3fe8d2993d09e63fb34","unresolved":true,"context_lines":[{"line_number":308,"context_line":"            self.sdk.enable_logging("},{"line_number":309,"context_line":"                debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":310,"context_line":"                http_debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":311,"context_line":"                path\u003dlog_path"},{"line_number":312,"context_line":"            )"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def check_deprecated_names(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"c283e3de_89d927cd","line":311,"in_reply_to":"7d1afa64_6b3fd5d5","updated":"2022-06-27 07:13:54.000000000","message":"Because of Ansible design (for modules) those calls go to syslog on the target host and not to the playbook output (this is different for plugins). And even that is not always working properly (i.e. not in Mac). Ideallly we want to give this info back to invoker, but that has few conceptual and security issues as well.","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"d402324d53dcf8ab1dbb348accf805f6b99ac1f4","unresolved":true,"context_lines":[{"line_number":308,"context_line":"            self.sdk.enable_logging("},{"line_number":309,"context_line":"                debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":310,"context_line":"                http_debug\u003dTrue if log_level \u003d\u003d \u0027DEBUG\u0027 else False,"},{"line_number":311,"context_line":"                path\u003dlog_path"},{"line_number":312,"context_line":"            )"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def check_deprecated_names(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"54d2aafa_e0968660","line":311,"in_reply_to":"c283e3de_89d927cd","updated":"2022-06-27 11:50:08.000000000","message":"We could return sdk log to invoker in a \u0027sdk_log\u0027 field?\n\nFor example, we would pass a custom handler to enable_logging() which simply appends all records to a list or something. We extend/implement exit{,_json}/fail{,_json} functions to automatically add this list to what is returned to the Ansible controller.","commit_id":"38f6fa72e98dbe916944220f5d1ef29f73cd44de"}]}
