)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"701758eab319666ef3c88f62e264deec2bfbbcf5","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2018-12-04 21:20:18 +0800"},{"line_number":4,"context_line":"Commit:     pandatt \u003cguojy8993@163.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-12-04 21:32:28 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add rfb.VNC support for novncproxy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ib6193bffc2922af1f79842cb2ea01b85c2e2b3c5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_4fb6f58e","line":7,"range":{"start_line":6,"start_character":0,"end_line":7,"end_character":34},"updated":"2018-12-04 14:33:28.000000000","message":"This needs a lot more context.\n\n- What is this\n- Why is this needed\n- Are there alternatives\n- What are the system requirements\n\nYou also need documentation for the thing.\n\nGiven the above, I also think this would probably benefit from a spec, but I\u0027ll let someone else weigh in first.","commit_id":"9d9f7a1525ae45f905afbf5a18b165c9c9f34a83"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0f4b668abc83fbbcb09e619f062a3afee377abb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"server. However, noVNC client provides native support for `vnc.Auth"},{"line_number":20,"context_line":"Type.VNC` with password security handshake handle, and thus, a rfb."},{"line_number":21,"context_line":"VNC auth scheme is implemented with no-ops `security_handshake`"},{"line_number":22,"context_line":"leaving noVNC/websockify to do the stuff."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: Ib6193bffc2922af1f79842cb2ea01b85c2e2b3c5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_aeafd8df","line":22,"updated":"2020-02-17 17:26:39.000000000","message":"Next time you respin, please add\n\n Blueprint: nova-support-webvnc-with-password-anthentication\n\nto the commit message","commit_id":"3301d662d546ba6afe8aa2d46041a963fdeaa6bf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a5e9921112b8a22eb09557848d395cd5677e7a0","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Today one user can simply kick/steal another user session from an"},{"line_number":10,"context_line":"instance just by connecting to it. This patch aims at providing a safer"},{"line_number":11,"context_line":"remote console with password authentication, it would solve above issue"},{"line_number":12,"context_line":"(once it implements spice support)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Brin Zhang \u003czhangbailin@inspur.com\u003e"},{"line_number":15,"context_line":"Co-Authored-By: Wenping Song \u003csongwenping@inspur.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"96bfdbcb_c474db2a","line":12,"range":{"start_line":12,"start_character":1,"end_line":12,"end_character":34},"updated":"2021-02-03 15:30:46.000000000","message":"nit: this seams slightly irrelevnet\n\ne.g. this patch is adding support for novnc the fact that its not implmented in spice yet is not really relevent here but its fine.","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"874dab477d3bac03a02b5919a8a0062604fc1ac9","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Today one user can simply kick/steal another user session from an"},{"line_number":10,"context_line":"instance just by connecting to it. This patch aims at providing a safer"},{"line_number":11,"context_line":"remote console with password authentication, it would solve above issue"},{"line_number":12,"context_line":"(once it implements spice support)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Brin Zhang \u003czhangbailin@inspur.com\u003e"},{"line_number":15,"context_line":"Co-Authored-By: Wenping Song \u003csongwenping@inspur.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"bd9a13b7_d43f4247","line":12,"range":{"start_line":11,"start_character":45,"end_line":12,"end_character":35},"updated":"2021-02-18 10:12:22.000000000","message":"I\u0027ll come back to this but at first reading this doesn\u0027t make any sense.\n\n*later* Yeah I\u0027m still not sure why you are referencing spice here?","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Today one user can simply kick/steal another user session from an"},{"line_number":10,"context_line":"instance just by connecting to it. This patch aims at providing a safer"},{"line_number":11,"context_line":"remote console with password authentication, it would solve above issue"},{"line_number":12,"context_line":"(once it implements spice support)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Brin Zhang \u003czhangbailin@inspur.com\u003e"},{"line_number":15,"context_line":"Co-Authored-By: Wenping Song \u003csongwenping@inspur.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"fc858b76_732ac1ff","line":12,"range":{"start_line":11,"start_character":45,"end_line":12,"end_character":35},"in_reply_to":"bd9a13b7_d43f4247","updated":"2021-02-18 11:14:09.000000000","message":"I think Wenping Song is noting that this patch only tackles VNC and we\u0027ll eventually need to fix the issues with SPICE also in order to provide a safer remote console for all consoles. There are other consoles too though, like RDP for the Hyper-V driver, so I agree that this would be better written as something like:\n\n  This patch aims to provide a safer VNC-based remote console by adding\n  password authentication.","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"72c1de4a98b88414d3016181cff1d851f40f6793","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     songwenping \u003csongwenping@inspur.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-03-02 09:52:00 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova supports password encrypted VNC"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Today one user can simply kick/steal another user session from an"},{"line_number":10,"context_line":"instance just by connecting to it. This patch aims at providing a safer"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"1b2cd59f_d4630bb7","line":7,"range":{"start_line":7,"start_character":23,"end_line":7,"end_character":32},"updated":"2021-03-03 03:04:26.000000000","message":"I keep forgetting to mention this but I don\u0027t think this should say \"encrypted\" because it could cause confusion about traffic being encrypted when it isn\u0027t providing that. Better to use the word \"authenticated\" IMHO.","commit_id":"768347b0b0ecd6fd9f695b57f6132c11d8a7976d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"72c1de4a98b88414d3016181cff1d851f40f6793","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Today one user can simply kick/steal another user session from an"},{"line_number":10,"context_line":"instance just by connecting to it. This patch aims at providing a safer"},{"line_number":11,"context_line":"remote console with password authentication, it would solve above issue"},{"line_number":12,"context_line":"(once it implements spice support)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Brin Zhang \u003czhangbailin@inspur.com\u003e"},{"line_number":15,"context_line":"Co-Authored-By: Wenping Song \u003csongwenping@inspur.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"b085c2b2_dd2163d1","line":12,"range":{"start_line":12,"start_character":1,"end_line":12,"end_character":33},"updated":"2021-03-03 03:04:26.000000000","message":"Why does this say the problem would not be solved until spice support is added? This feature is providing password auth for novnc, so doesn\u0027t that solve the issue for novnc?","commit_id":"768347b0b0ecd6fd9f695b57f6132c11d8a7976d"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"baf5e1bd7333bdcbdfad605bae0f2a63a60f1686","unresolved":true,"context_lines":[{"line_number":5909,"context_line":"  in: body"},{"line_number":5910,"context_line":"  required: true"},{"line_number":5911,"context_line":"  type: string"},{"line_number":5912,"context_line":"remote_console_password:"},{"line_number":5913,"context_line":"  description: |"},{"line_number":5914,"context_line":"    The password to encrypt the console."},{"line_number":5915,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"77bf86f4_268819cb","line":5912,"updated":"2020-11-30 09:13:18.000000000","message":"Move line 5890, abvoe on \"remote_console_protocol\".","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":false,"context_lines":[{"line_number":5909,"context_line":"  in: body"},{"line_number":5910,"context_line":"  required: true"},{"line_number":5911,"context_line":"  type: string"},{"line_number":5912,"context_line":"remote_console_password:"},{"line_number":5913,"context_line":"  description: |"},{"line_number":5914,"context_line":"    The password to encrypt the console."},{"line_number":5915,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"018a7fa2_130d8014","line":5912,"in_reply_to":"77bf86f4_268819cb","updated":"2020-12-02 06:51:13.000000000","message":"Done","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":5893,"context_line":"  in: body"},{"line_number":5894,"context_line":"  required: false"},{"line_number":5895,"context_line":"  type: string"},{"line_number":5896,"context_line":"  min_version: 2.88"},{"line_number":5897,"context_line":"remote_console_protocol:"},{"line_number":5898,"context_line":"  description: |"},{"line_number":5899,"context_line":"    The protocol of remote console. The valid values are ``vnc``, ``spice``,"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"7a4140ce_9126230f","line":5896,"updated":"2020-12-04 13:25:29.000000000","message":"XXX do we need to document the restrictions on the password length and character set","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":5893,"context_line":"  in: body"},{"line_number":5894,"context_line":"  required: false"},{"line_number":5895,"context_line":"  type: string"},{"line_number":5896,"context_line":"  min_version: 2.88"},{"line_number":5897,"context_line":"remote_console_protocol:"},{"line_number":5898,"context_line":"  description: |"},{"line_number":5899,"context_line":"    The protocol of remote console. The valid values are ``vnc``, ``spice``,"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"95ba6a37_4a221e2c","line":5896,"in_reply_to":"7a4140ce_9126230f","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a5e9921112b8a22eb09557848d395cd5677e7a0","unresolved":true,"context_lines":[{"line_number":5923,"context_line":"  in: body"},{"line_number":5924,"context_line":"  required: false"},{"line_number":5925,"context_line":"  type: string"},{"line_number":5926,"context_line":"  min_version: 2.89"},{"line_number":5927,"context_line":"remote_console_protocol:"},{"line_number":5928,"context_line":"  description: |"},{"line_number":5929,"context_line":"    The protocol of remote console. The valid values are ``vnc``, ``spice``,"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"d600a6cb_d084980b","line":5926,"range":{"start_line":5926,"start_character":0,"end_line":5926,"end_character":4},"updated":"2021-02-03 15:30:46.000000000","message":"cool note to self this was \"allocated\" 2.89 and the tenan/project api chagne seams to be a followup os that will get 2.90","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"}],"api-ref/source/servers-remote-consoles.inc":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"**Example Get Encrypted Remote VNC Console(v2.88)**"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":".. literalinclude:: ../../doc/api_samples/os-remote-consoles/v2.88/create-encrypted-vnc-console-resp.json"},{"line_number":62,"context_line":"   :language: javascript"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Show Console Connection Information"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"fffb004f_35197761","line":61,"range":{"start_line":61,"start_character":67,"end_line":61,"end_character":100},"updated":"2020-12-04 13:25:29.000000000","message":"I think we tend to keep the name of the sample file to only encode the request but not the feature we are adding in the given microversion. I.e. this file should be named simply create-vnc-console-resp.json","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"**Example Get Encrypted Remote VNC Console(v2.88)**"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":".. literalinclude:: ../../doc/api_samples/os-remote-consoles/v2.88/create-encrypted-vnc-console-resp.json"},{"line_number":62,"context_line":"   :language: javascript"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Show Console Connection Information"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"cec44978_0f8d11db","line":61,"range":{"start_line":61,"start_character":67,"end_line":61,"end_character":100},"in_reply_to":"fffb004f_35197761","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"}],"doc/api_samples/os-remote-consoles/v2.88/create-encrypted-vnc-console-req.json":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"baf5e1bd7333bdcbdfad605bae0f2a63a60f1686","unresolved":true,"context_lines":[{"line_number":2,"context_line":"    \"remote_console\": {"},{"line_number":3,"context_line":"        \"protocol\": \"vnc\","},{"line_number":4,"context_line":"        \"type\": \"novnc\","},{"line_number":5,"context_line":"        \"password\": \"passwordd\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"1aa3aeba_ddd64354","line":5,"range":{"start_line":5,"start_character":21,"end_line":5,"end_character":30},"updated":"2020-11-30 09:13:18.000000000","message":"password","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"remote_console\": {"},{"line_number":3,"context_line":"        \"protocol\": \"vnc\","},{"line_number":4,"context_line":"        \"type\": \"novnc\","},{"line_number":5,"context_line":"        \"password\": \"passwordd\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"8a4fe8fb_e6b8ff4a","line":5,"range":{"start_line":5,"start_character":21,"end_line":5,"end_character":30},"in_reply_to":"1aa3aeba_ddd64354","updated":"2020-12-02 06:51:13.000000000","message":"Done","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"}],"doc/api_samples/os-remote-consoles/v2.88/create-encrypted-vnc-console-resp.json":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"b88a0431cbc72709f9a04c628e7bc37e69413a58","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"remote_console\": {"},{"line_number":3,"context_line":"        \"protocol\": \"vnc\","},{"line_number":4,"context_line":"        \"type\": \"novnc\","},{"line_number":5,"context_line":"        \"url\": \"http://example.com:6080/vnc_auto.html?path\u003d%3Ftoken%3Db60bcfc3-5fd4-4d21-986c-e83379107819\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"f91dff5f_1036b94d","line":4,"updated":"2020-12-01 07:15:55.000000000","message":"Missing \"password\"","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"remote_console\": {"},{"line_number":3,"context_line":"        \"protocol\": \"vnc\","},{"line_number":4,"context_line":"        \"type\": \"novnc\","},{"line_number":5,"context_line":"        \"url\": \"http://example.com:6080/vnc_auto.html?path\u003d%3Ftoken%3Db60bcfc3-5fd4-4d21-986c-e83379107819\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"6e732f60_668aff7e","line":4,"in_reply_to":"f91dff5f_1036b94d","updated":"2020-12-02 06:51:13.000000000","message":"neednot","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"}],"nova/api/openstack/compute/remote_consoles.py":[{"author":{"_account_id":25946,"name":"Wangliangyu","email":"wangly2097@chinaunicom.cn","username":"wangliangyu"},"change_message_id":"d77da7f1d0d43d90e15e4596675e729d82dd1f23","unresolved":true,"context_lines":[{"line_number":175,"context_line":"        try:"},{"line_number":176,"context_line":"            if password:"},{"line_number":177,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":178,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":179,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":180,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":181,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":15,"id":"6eda1711_af846345","line":178,"range":{"start_line":178,"start_character":16,"end_line":178,"end_character":62},"updated":"2020-11-30 03:15:01.000000000","message":"If the vnc password is stored in metadata, the user can modify it without limit.\nBut the modified password has been stored in metadata, could not take effect and only the started 8 characters will be the actual password in future. This will confuse users if they use  the old console url or vnc client, like vncviewer.\nSo, if it is possible to store the vnc password in system metadata, and then only the nova service could operate it.","commit_id":"ee847b8c333592108626bd6ccd2c0e70e8ba1ce4"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"baf5e1bd7333bdcbdfad605bae0f2a63a60f1686","unresolved":true,"context_lines":[{"line_number":155,"context_line":"        # https://libvirt.org/formatdomain.html, vnc/spice graphics"},{"line_number":156,"context_line":"        # both support `passwd` option, however, the latter is not"},{"line_number":157,"context_line":"        # fully tested for now, we will support it in future."},{"line_number":158,"context_line":"        if protocol not in [\u0027vnc\u0027]:"},{"line_number":159,"context_line":"            raise NotImplementedError"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @wsgi.Controller.api_version(\"2.6\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"8a8ac79f_de39c342","line":158,"range":{"start_line":158,"start_character":27,"end_line":158,"end_character":34},"updated":"2020-11-30 09:13:18.000000000","message":"[\u0027vnc\u0027, \u0027spice\u0027]?\n\nWe also need to support spice protocol, and we can split it to a new patch, this patch is big enough.","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":true,"context_lines":[{"line_number":155,"context_line":"        # https://libvirt.org/formatdomain.html, vnc/spice graphics"},{"line_number":156,"context_line":"        # both support `passwd` option, however, the latter is not"},{"line_number":157,"context_line":"        # fully tested for now, we will support it in future."},{"line_number":158,"context_line":"        if protocol not in [\u0027vnc\u0027]:"},{"line_number":159,"context_line":"            raise NotImplementedError"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @wsgi.Controller.api_version(\"2.6\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"58337540_4513849b","line":158,"range":{"start_line":158,"start_character":27,"end_line":158,"end_character":34},"in_reply_to":"8a8ac79f_de39c342","updated":"2020-12-02 06:51:13.000000000","message":"we only support vnc now as the comment notes.","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"baf5e1bd7333bdcbdfad605bae0f2a63a60f1686","unresolved":true,"context_lines":[{"line_number":156,"context_line":"        # both support `passwd` option, however, the latter is not"},{"line_number":157,"context_line":"        # fully tested for now, we will support it in future."},{"line_number":158,"context_line":"        if protocol not in [\u0027vnc\u0027]:"},{"line_number":159,"context_line":"            raise NotImplementedError"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @wsgi.Controller.api_version(\"2.6\")"},{"line_number":162,"context_line":"    @wsgi.expected_errors((400, 404, 409, 501))"}],"source_content_type":"text/x-python","patch_set":16,"id":"cd05c5dd_a932cf58","line":159,"range":{"start_line":159,"start_character":18,"end_line":159,"end_character":37},"updated":"2020-11-30 09:13:18.000000000","message":"Add Log.warning(\u0027...\u0027)\n\nraise HttpBadRequest 400","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        # both support `passwd` option, however, the latter is not"},{"line_number":157,"context_line":"        # fully tested for now, we will support it in future."},{"line_number":158,"context_line":"        if protocol not in [\u0027vnc\u0027]:"},{"line_number":159,"context_line":"            raise NotImplementedError"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @wsgi.Controller.api_version(\"2.6\")"},{"line_number":162,"context_line":"    @wsgi.expected_errors((400, 404, 409, 501))"}],"source_content_type":"text/x-python","patch_set":16,"id":"444144c6_5e5b2d4f","line":159,"range":{"start_line":159,"start_character":18,"end_line":159,"end_character":37},"in_reply_to":"cd05c5dd_a932cf58","updated":"2020-12-02 06:51:13.000000000","message":"Done","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"baf5e1bd7333bdcbdfad605bae0f2a63a60f1686","unresolved":true,"context_lines":[{"line_number":170,"context_line":"                    target\u003d{\u0027project_id\u0027: instance.project_id})"},{"line_number":171,"context_line":"        protocol \u003d body[\u0027remote_console\u0027][\u0027protocol\u0027]"},{"line_number":172,"context_line":"        console_type \u003d body[\u0027remote_console\u0027][\u0027type\u0027]"},{"line_number":173,"context_line":"        password \u003d body[\u0027remote_console\u0027].get(\u0027password\u0027, None)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        try:"},{"line_number":176,"context_line":"            if password:"}],"source_content_type":"text/x-python","patch_set":16,"id":"aaab7377_da0e4023","line":173,"range":{"start_line":173,"start_character":56,"end_line":173,"end_character":62},"updated":"2020-11-30 09:13:18.000000000","message":"We can remove this, the get() method defaut value is None.","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                    target\u003d{\u0027project_id\u0027: instance.project_id})"},{"line_number":171,"context_line":"        protocol \u003d body[\u0027remote_console\u0027][\u0027protocol\u0027]"},{"line_number":172,"context_line":"        console_type \u003d body[\u0027remote_console\u0027][\u0027type\u0027]"},{"line_number":173,"context_line":"        password \u003d body[\u0027remote_console\u0027].get(\u0027password\u0027, None)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        try:"},{"line_number":176,"context_line":"            if password:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1b81fde5_7bf0fa07","line":173,"range":{"start_line":173,"start_character":56,"end_line":173,"end_character":62},"in_reply_to":"aaab7377_da0e4023","updated":"2020-12-02 06:51:13.000000000","message":"Done","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":159,"context_line":"        # graphics both support `passwd` option, however, the latter is not"},{"line_number":160,"context_line":"        # fully tested for now, we will support it in future."},{"line_number":161,"context_line":"        if protocol not in [\u0027vnc\u0027]:"},{"line_number":162,"context_line":"            LOG.warning(\"Unspported to reset vnc password for the \""},{"line_number":163,"context_line":"                \"protocol:%s\", protocol)"},{"line_number":164,"context_line":"            raise exception.UnsupportedResetVNCPassword("},{"line_number":165,"context_line":"                msg\u003d\u0027Invalid password for the protocol %s\u0027 % protocol)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"de415230_2990d1e8","line":163,"range":{"start_line":162,"start_character":25,"end_line":163,"end_character":28},"updated":"2020-12-04 13:25:29.000000000","message":"Setting or re-setting password is not supported for the %s protocol","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        # graphics both support `passwd` option, however, the latter is not"},{"line_number":160,"context_line":"        # fully tested for now, we will support it in future."},{"line_number":161,"context_line":"        if protocol not in [\u0027vnc\u0027]:"},{"line_number":162,"context_line":"            LOG.warning(\"Unspported to reset vnc password for the \""},{"line_number":163,"context_line":"                \"protocol:%s\", protocol)"},{"line_number":164,"context_line":"            raise exception.UnsupportedResetVNCPassword("},{"line_number":165,"context_line":"                msg\u003d\u0027Invalid password for the protocol %s\u0027 % protocol)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"f52064e1_af712b17","line":163,"range":{"start_line":162,"start_character":25,"end_line":163,"end_character":28},"in_reply_to":"de415230_2990d1e8","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":162,"context_line":"            LOG.warning(\"Unspported to reset vnc password for the \""},{"line_number":163,"context_line":"                \"protocol:%s\", protocol)"},{"line_number":164,"context_line":"            raise exception.UnsupportedResetVNCPassword("},{"line_number":165,"context_line":"                msg\u003d\u0027Invalid password for the protocol %s\u0027 % protocol)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    @wsgi.Controller.api_version(\"2.6\")"},{"line_number":168,"context_line":"    @wsgi.expected_errors((400, 404, 409, 501))"}],"source_content_type":"text/x-python","patch_set":20,"id":"25bbadd3_429df420","line":165,"range":{"start_line":165,"start_character":20,"end_line":165,"end_character":57},"updated":"2020-12-04 13:25:29.000000000","message":"\"Password is not supported for the protocol %s\"","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            LOG.warning(\"Unspported to reset vnc password for the \""},{"line_number":163,"context_line":"                \"protocol:%s\", protocol)"},{"line_number":164,"context_line":"            raise exception.UnsupportedResetVNCPassword("},{"line_number":165,"context_line":"                msg\u003d\u0027Invalid password for the protocol %s\u0027 % protocol)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    @wsgi.Controller.api_version(\"2.6\")"},{"line_number":168,"context_line":"    @wsgi.expected_errors((400, 404, 409, 501))"}],"source_content_type":"text/x-python","patch_set":20,"id":"94828d86_fd67375d","line":165,"range":{"start_line":165,"start_character":20,"end_line":165,"end_character":57},"in_reply_to":"25bbadd3_429df420","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        password \u003d body[\u0027remote_console\u0027].get(\u0027password\u0027)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            if password:"},{"line_number":183,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":184,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":185,"context_line":"            handler \u003d self.handlers.get(protocol)"}],"source_content_type":"text/x-python","patch_set":20,"id":"40830f32_ea1d636d","line":182,"updated":"2020-12-04 13:25:29.000000000","message":"Is there a difference between the cases when the password is provided in the request but the value is any empty string or the password is not provided i.e. it is None here? I can imagine than an empty string is a valid password. In the other hand if no password field is provided then I think the the vnc server side does not ask for a password.\n\n//later//\n\nThe schema restricts the password to be minimum 1 char so you can ignore my comment above","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        password \u003d body[\u0027remote_console\u0027].get(\u0027password\u0027)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            if password:"},{"line_number":183,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":184,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":185,"context_line":"            handler \u003d self.handlers.get(protocol)"}],"source_content_type":"text/x-python","patch_set":20,"id":"10fb34bb_29011036","line":182,"in_reply_to":"40830f32_ea1d636d","updated":"2020-12-10 08:33:37.000000000","message":"yes. if the body has password, it will be not None, and use for vnc server.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            if password:"},{"line_number":183,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":184,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":185,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":186,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":187,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":20,"id":"83d91123_ed0248aa","line":184,"range":{"start_line":184,"start_character":16,"end_line":184,"end_character":62},"updated":"2020-12-04 13:25:29.000000000","message":"Note to self: This instance modification is saved in the ComputeManager after the virt driver successfully changed the password on the hypervisor.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            if password:"},{"line_number":183,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":184,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":185,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":186,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":187,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":20,"id":"03f4ae63_488c2224","line":184,"range":{"start_line":184,"start_character":16,"end_line":184,"end_character":62},"in_reply_to":"83d91123_ed0248aa","updated":"2020-12-10 08:33:37.000000000","message":"Ack","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":183,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":184,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":185,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":186,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":187,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"},{"line_number":188,"context_line":"                                       \u0027type\u0027: console_type,"},{"line_number":189,"context_line":"                                       \u0027url\u0027: output[\u0027url\u0027]}}"}],"source_content_type":"text/x-python","patch_set":20,"id":"86c85fda_942d5a3e","line":186,"updated":"2020-12-04 13:25:29.000000000","message":"I think you missed the service level check discussed in the spec. So in a rolling upgrade case there could be computes that is still on the Victoria level and therefore even if the user providing a password here the libvirt driver on the compute host will not add the password to the domain xml.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":183,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":184,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":185,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":186,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":187,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"},{"line_number":188,"context_line":"                                       \u0027type\u0027: console_type,"},{"line_number":189,"context_line":"                                       \u0027url\u0027: output[\u0027url\u0027]}}"}],"source_content_type":"text/x-python","patch_set":20,"id":"b2579a9c_86663e18","line":186,"in_reply_to":"86c85fda_942d5a3e","updated":"2020-12-10 08:33:37.000000000","message":"you means we should check the service microversion here?","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":183,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":184,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":185,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":186,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":187,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"},{"line_number":188,"context_line":"                                       \u0027type\u0027: console_type,"},{"line_number":189,"context_line":"                                       \u0027url\u0027: output[\u0027url\u0027]}}"}],"source_content_type":"text/x-python","patch_set":20,"id":"4c67c730_9da7e688","line":186,"in_reply_to":"b2579a9c_86663e18","updated":"2021-01-04 13:26:19.000000000","message":"I mean the following statement from the spec[1]:\n\n\n\u003e We should bump service object version and rpc version for the\n\u003e \u0027get_*_console\u0027 rpc call. Then only when the cluster fully upgrade \n\u003e to Wallaby release, the\n\u003e call can be success. otherwise return ``HttpBadRequest 400`` for \n\u003e the request.\n\n\nSo if the service version of the compute the instance is currently running on are older than the one added in this patch then we know here that we need to reject this request as the compute does not have the code that adds the password to the libvirt xml. \n\nFirst you need to bump the service version in nova/objects/service.py \n\nThe you need to check the current service version here and reject the request if the service version is too old. Something like this:\n\n                svc \u003d objects.Service.get_by_host_and_binary(\n                    context, instance.host, \u0027nova-compute\u0027)\n                if svc.version \u003c \u003cthe new service version\u003e:\n                    # reject the request with http 404\n\n\n\n\nBtw the rpc version bump part of the spec is not in sync with the current impl, so please update the spec after this implementation is merged.\n\n[1] https://review.opendev.org/c/openstack/nova-specs/+/759828/6/specs/wallaby/approved/nova-support-webvnc-with-password-anthentication.rst#180","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":162,"context_line":"            LOG.warning(\"Setting or re-setting password is not supported for \""},{"line_number":163,"context_line":"                \"the %s protocol\", protocol)"},{"line_number":164,"context_line":"            raise exception.UnsupportedResetVNCPassword("},{"line_number":165,"context_line":"                msg\u003d\u0027Password is not supported for the protocol %s\u0027 %"},{"line_number":166,"context_line":"                protocol)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.6\")"}],"source_content_type":"text/x-python","patch_set":26,"id":"91002276_bcbbc063","line":165,"range":{"start_line":165,"start_character":21,"end_line":165,"end_character":66},"updated":"2021-01-13 12:17:49.000000000","message":"you can move this message into the definition of UnsupportedResetVNCPassword","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            LOG.warning(\"Setting or re-setting password is not supported for \""},{"line_number":163,"context_line":"                \"the %s protocol\", protocol)"},{"line_number":164,"context_line":"            raise exception.UnsupportedResetVNCPassword("},{"line_number":165,"context_line":"                msg\u003d\u0027Password is not supported for the protocol %s\u0027 %"},{"line_number":166,"context_line":"                protocol)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.6\")"}],"source_content_type":"text/x-python","patch_set":26,"id":"cda60233_1edca156","line":165,"range":{"start_line":165,"start_character":21,"end_line":165,"end_character":66},"in_reply_to":"91002276_bcbbc063","updated":"2021-01-19 05:36:35.000000000","message":"Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":185,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":186,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":187,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":188,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"},{"line_number":189,"context_line":"                                       \u0027type\u0027: console_type,"},{"line_number":190,"context_line":"                                       \u0027url\u0027: output[\u0027url\u0027]}}"}],"source_content_type":"text/x-python","patch_set":26,"id":"7b14fed5_78f267c0","line":187,"updated":"2021-01-13 12:17:49.000000000","message":"I still think that there is a missing service level check. See my comment in PS20: https://review.opendev.org/c/openstack/nova/+/622336/20/nova/api/openstack/compute/remote_consoles.py#186","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":185,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":186,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":187,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":188,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"},{"line_number":189,"context_line":"                                       \u0027type\u0027: console_type,"},{"line_number":190,"context_line":"                                       \u0027url\u0027: output[\u0027url\u0027]}}"}],"source_content_type":"text/x-python","patch_set":26,"id":"bcb46dae_b5b1482e","line":187,"in_reply_to":"7b14fed5_78f267c0","updated":"2021-01-19 05:36:35.000000000","message":"sorry, forget to fix. Done.","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":185,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":186,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":187,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":188,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"},{"line_number":189,"context_line":"                                       \u0027type\u0027: console_type,"},{"line_number":190,"context_line":"                                       \u0027url\u0027: output[\u0027url\u0027]}}"}],"source_content_type":"text/x-python","patch_set":26,"id":"0585c371_aa447e8e","line":187,"in_reply_to":"bcb46dae_b5b1482e","updated":"2021-01-29 15:13:50.000000000","message":"Ack","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a5e9921112b8a22eb09557848d395cd5677e7a0","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if password:"},{"line_number":182,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":183,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":184,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":185,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":186,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f343a90_6e814ff6","line":183,"range":{"start_line":183,"start_character":16,"end_line":183,"end_character":62},"updated":"2021-02-03 15:30:46.000000000","message":"its too bad we need to store this in the db it would be nice if nova did not need to maintain passwords of any kind but i get why this is currently done. \n\ni might have added some why to encrypt this or in teh future enhance this feature so we can store in in barbican via castilan instead of in the instance metadta.\n\nim not going to -1 over this since it was not in the spec to use secure storage but i think this is a definit improvement we could do in the future\n\na side note that if we were not already doing so we now need to treat the instance metadta as contianign private infomation since it has passwoards in plain text i also dont think this should be included in any notifcaiton objects.","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a7a473998b654a56203faad3a13ed7befaed740","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if password:"},{"line_number":182,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":183,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":184,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":185,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":186,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":29,"id":"dfd76e2a_46d11c85","line":183,"range":{"start_line":183,"start_character":16,"end_line":183,"end_character":62},"in_reply_to":"3f343a90_6e814ff6","updated":"2021-02-03 18:26:26.000000000","message":"so talking about this on irc the instace metadata filed is part of the public api for server show\nhttps://docs.openstack.org/api-ref/compute/?expanded\u003dshow-server-details-detail#show-server-details\n\nmeaning if we set the password here it would be visable to anyone in the project in plain text\n\nyou could also set,unset and update it via \n\nopenstack server set --property \"console_password\u003d\u003cnewpassword\u003e\" \u003cserver uuid\u003e\nopenstack server unset --property \"console_password\" \u003cserver uuid\u003e\nopenstack server create --property \"console_password\u003d\u003cnewpassword\u003e\"...\n\nand view it with \nopenstack server show \u003cuuid\u003e\n\n\nitems in teh metadata dict will also be avaiable via the metadata service so it will be included in the config driver\nand retrivable via the guest on a well known adress and the via the rest api.\n\n\nso this really should be stored in teh system_metadta at a minimium.\n\nso that it is not expsoed in multiple places.\n\n\nif we are doing that i would also suggest we think about  add some kind of encyption too.\nideally we would store this in barbican but failng that a fixed key stored in the nova.conf salted with the instances public key might be resonable.\nwe dont have to encrypt it but we proably should.\nit would be best if nova never actully kept it in plain text and we left barbican handel it but using the fixed key key manageer might be an option.\n\nat  a minium we shoudl move this to system metadata even if we do nothing else to harden this.","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"74e7aeb6767a478477479e1ddde4c1c75f86f05a","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if password:"},{"line_number":182,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":183,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":184,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":185,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":186,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":29,"id":"78aaf7b0_d6be0549","line":183,"range":{"start_line":183,"start_character":16,"end_line":183,"end_character":62},"in_reply_to":"44de2cf0_b6a4ebab","updated":"2021-02-04 12:26:50.000000000","message":"Let move this to system_metadata for now. The keystore based solution can be a separate feature","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"061e235bbb5232a35924f863a7a7f4c9e51d61eb","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if password:"},{"line_number":182,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":183,"context_line":"                instance.metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":184,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":185,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":186,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":29,"id":"44de2cf0_b6a4ebab","line":183,"range":{"start_line":183,"start_character":16,"end_line":183,"end_character":62},"in_reply_to":"dfd76e2a_46d11c85","updated":"2021-02-04 09:19:21.000000000","message":"Getting your concern, we can add this in the instance system_metadata that it cannot explose passsword to users.\n\nAgree with you, the best way is using barbican to store the password, the public key and private key are combined to ensure its security. but we can reset the password every time we open noNVC. It may not be good to fix the configuration through nova.conf, IMO. \n\nPerhaps what I said is not accurate, but after the private key is fixed, its scope of use will be limited， right?","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        return {\u0027console\u0027: {\u0027type\u0027: console_type, \u0027url\u0027: output[\u0027url\u0027]}}"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _check_proto_support_passwd(self, protocol):"},{"line_number":156,"context_line":"        # NOTE(pandatt): if `protocol` type graphics do not support"},{"line_number":157,"context_line":"        # setting password, UnsupportedResetVNCPassword will raise. Please see"},{"line_number":158,"context_line":"        # https://libvirt.org/formatdomain.html#elementsGraphics, vnc/spice"}],"source_content_type":"text/x-python","patch_set":30,"id":"60400ea0_bc2a3594","line":155,"range":{"start_line":155,"start_character":29,"end_line":155,"end_character":35},"updated":"2021-02-18 11:14:09.000000000","message":"Can we just call this \u0027console_password\u0027? We\u0027re saving basically nothing by dropping the two characters. I know libvirt uses \u0027passwd\u0027 but there\u0027s no reason we need to repeat their mistakes","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        return {\u0027console\u0027: {\u0027type\u0027: console_type, \u0027url\u0027: output[\u0027url\u0027]}}"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _check_proto_support_passwd(self, protocol):"},{"line_number":156,"context_line":"        # NOTE(pandatt): if `protocol` type graphics do not support"},{"line_number":157,"context_line":"        # setting password, UnsupportedResetVNCPassword will raise. Please see"},{"line_number":158,"context_line":"        # https://libvirt.org/formatdomain.html#elementsGraphics, vnc/spice"}],"source_content_type":"text/x-python","patch_set":30,"id":"8a6bbc0c_5578efce","line":155,"range":{"start_line":155,"start_character":42,"end_line":155,"end_character":50},"updated":"2021-02-18 11:14:09.000000000","message":"nit: type hints would be nice\n\n  def _check_proto_support_password(self, protocol: str) -\u003e None:\n\nshould do the trick","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        return {\u0027console\u0027: {\u0027type\u0027: console_type, \u0027url\u0027: output[\u0027url\u0027]}}"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _check_proto_support_passwd(self, protocol):"},{"line_number":156,"context_line":"        # NOTE(pandatt): if `protocol` type graphics do not support"},{"line_number":157,"context_line":"        # setting password, UnsupportedResetVNCPassword will raise. Please see"},{"line_number":158,"context_line":"        # https://libvirt.org/formatdomain.html#elementsGraphics, vnc/spice"}],"source_content_type":"text/x-python","patch_set":30,"id":"619c1c94_bf142bc1","line":155,"range":{"start_line":155,"start_character":29,"end_line":155,"end_character":35},"in_reply_to":"60400ea0_bc2a3594","updated":"2021-02-19 10:02:57.000000000","message":"Ack","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        return {\u0027console\u0027: {\u0027type\u0027: console_type, \u0027url\u0027: output[\u0027url\u0027]}}"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _check_proto_support_passwd(self, protocol):"},{"line_number":156,"context_line":"        # NOTE(pandatt): if `protocol` type graphics do not support"},{"line_number":157,"context_line":"        # setting password, UnsupportedResetVNCPassword will raise. Please see"},{"line_number":158,"context_line":"        # https://libvirt.org/formatdomain.html#elementsGraphics, vnc/spice"}],"source_content_type":"text/x-python","patch_set":30,"id":"0569693d_b5e3939c","line":155,"range":{"start_line":155,"start_character":42,"end_line":155,"end_character":50},"in_reply_to":"8a6bbc0c_5578efce","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if password:"},{"line_number":182,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":183,"context_line":"                instance.system_metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":184,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":185,"context_line":"            output \u003d handler(context, instance, console_type)"}],"source_content_type":"text/x-python","patch_set":30,"id":"38865dfb_ee356cc4","line":182,"updated":"2021-02-18 11:14:09.000000000","message":"nit: I\u0027d personally rather we did this separately, rather than adding yet another thing to this giant try-except block.\n\n  if password:\n      try:\n          self._check_proto_support_password(protocol)\n      except exception.UnsupportedResetVNCPassword as e:\n          raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())\n\n  try:\n      ...","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if password:"},{"line_number":182,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":183,"context_line":"                instance.system_metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":184,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":185,"context_line":"            output \u003d handler(context, instance, console_type)"}],"source_content_type":"text/x-python","patch_set":30,"id":"a5ce98bf_2d497a95","line":182,"in_reply_to":"38865dfb_ee356cc4","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if password:"},{"line_number":182,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":183,"context_line":"                instance.system_metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":184,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":185,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":186,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fd1a99dc_daa87a87","line":183,"range":{"start_line":183,"start_character":50,"end_line":183,"end_character":56},"updated":"2021-02-18 11:14:09.000000000","message":"ditto","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if password:"},{"line_number":182,"context_line":"                self._check_proto_support_passwd(protocol)"},{"line_number":183,"context_line":"                instance.system_metadata[\u0027console_passwd\u0027] \u003d password"},{"line_number":184,"context_line":"            handler \u003d self.handlers.get(protocol)"},{"line_number":185,"context_line":"            output \u003d handler(context, instance, console_type)"},{"line_number":186,"context_line":"            return {\u0027remote_console\u0027: {\u0027protocol\u0027: protocol,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9bd0630b_25e8b681","line":183,"range":{"start_line":183,"start_character":50,"end_line":183,"end_character":56},"in_reply_to":"fd1a99dc_daa87a87","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c60bd92c76298c60f244db20298c2c9a98e9f839","unresolved":true,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        if password:"},{"line_number":181,"context_line":"            try:"},{"line_number":182,"context_line":"                self._check_proto_support_password(protocol)"},{"line_number":183,"context_line":"                instance.system_metadata[\u0027console_password\u0027] \u003d password"},{"line_number":184,"context_line":"            except exception.UnsupportedResetVNCPassword as e:"},{"line_number":185,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":37,"id":"5c9abfbb_5f761dbe","line":182,"updated":"2021-03-02 18:44:59.000000000","message":"Is this enough? Don\u0027t you also need to check if password auth is supported by the configuration of the virt driver? Currently, I can request a password be set but it won\u0027t be honored if the virt driver isn\u0027t configured. I guess \u0027get_vnc_console\u0027 could do this but it doesn\u0027t currently.\n\nLater: Actually, it\u0027s not \u0027get_vnc_console\u0027 either. We need to check that this is enabled in the nova-novncproxy service, however, that doesn\u0027t expose an RPC API for us to check.","commit_id":"768347b0b0ecd6fd9f695b57f6132c11d8a7976d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"72c1de4a98b88414d3016181cff1d851f40f6793","unresolved":true,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        if password:"},{"line_number":181,"context_line":"            try:"},{"line_number":182,"context_line":"                self._check_proto_support_password(protocol)"},{"line_number":183,"context_line":"                instance.system_metadata[\u0027console_password\u0027] \u003d password"},{"line_number":184,"context_line":"            except exception.UnsupportedResetVNCPassword as e:"},{"line_number":185,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":37,"id":"678dc407_eabe9bc5","line":182,"in_reply_to":"5c9abfbb_5f761dbe","updated":"2021-03-03 03:04:26.000000000","message":"Setting the \u0027passwd\u0027 element in the \u0027graphics\u0027 device in the instance xml is what enables the password on the instance side, so get_vnc_console accomplishes this by calling driver.reset_vnc_password which sets it in the instance xml.\n\nHowever, I find this is not updating the live config of the instance for some reason. I have to hard reboot the instance after calling get_vnc_console in order to make the qemu command line contain the \"password\" requirement. This is a problem because until the instance is hard rebooted, the password isn\u0027t necessary and the console is open to anyone who has the url.","commit_id":"768347b0b0ecd6fd9f695b57f6132c11d8a7976d"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":26,"id":"9417ad0c_d99e249f","updated":"2021-01-13 12:17:49.000000000","message":"please add a new line to the end of the file","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"d2c9f35d_9aa4d5db","in_reply_to":"9417ad0c_d99e249f","updated":"2021-01-19 05:36:35.000000000","message":"Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":true,"context_lines":[{"line_number":1180,"context_line":"Adds the support to encrypt VNC by passing ``password`` in the"},{"line_number":1181,"context_line":"``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":1182,"context_line":"remote console with password authentication."},{"line_number":1183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"e6556989_ca433a3c","line":1183,"updated":"2021-01-29 15:13:50.000000000","message":"nit: now you have two new lines at the end. One is enough","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"b720be4ec0b6a61a0322ead3b91e40a84144325c","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"Adds the support to encrypt VNC by passing ``password`` in the"},{"line_number":1181,"context_line":"``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":1182,"context_line":"remote console with password authentication."},{"line_number":1183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"b69061a2_11dd4b9a","line":1183,"in_reply_to":"e6556989_ca433a3c","updated":"2021-02-02 13:02:32.000000000","message":"Done","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"Adds the support to encrypt VNC by passing ``password`` in the"},{"line_number":1181,"context_line":"``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":1182,"context_line":"remote console with password authentication."},{"line_number":1183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":30,"id":"406d80bb_689d11ab","line":1182,"updated":"2021-02-18 11:14:09.000000000","message":"This reads oddly. How about:\n\n  Add support for encrypting VNC remove consoles by adding a ``password``\n  parameter to the ``POST /servers/\u003cuuid\u003e/remote-consoles`` API. This can\n  improve remote console security and prevent unauthorized users from kicking\n  or stealing another user\u0027s session if they obtain the unencrypted token.","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"Adds the support to encrypt VNC by passing ``password`` in the"},{"line_number":1181,"context_line":"``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":1182,"context_line":"remote console with password authentication."},{"line_number":1183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":30,"id":"55bce33c_8a5f6fd1","line":1182,"in_reply_to":"406d80bb_689d11ab","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/api/openstack/compute/schemas/remote_consoles.py":[{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9ae7784e9019104aa2d29fb0a6fea5bc7efa5b6a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                    \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027],"},{"line_number":24,"context_line":"                },"},{"line_number":25,"context_line":"                \u0027password\u0027: {"},{"line_number":26,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":27,"context_line":"                },"},{"line_number":28,"context_line":"            },"},{"line_number":29,"context_line":"            \u0027required\u0027: [\u0027type\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_697ff014","line":26,"range":{"start_line":26,"start_character":20,"end_line":26,"end_character":37},"updated":"2020-03-30 11:00:26.000000000","message":"TODO: More accurate format needs to be specified.","commit_id":"a97e4474a2570204357abac8e6c3baabf2647ce0"},{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9ae7784e9019104aa2d29fb0a6fea5bc7efa5b6a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                    \u0027enum\u0027: [\u0027novnc\u0027, \u0027xvpvnc\u0027],"},{"line_number":24,"context_line":"                },"},{"line_number":25,"context_line":"                \u0027password\u0027: {"},{"line_number":26,"context_line":"                    \u0027type\u0027: \u0027string\u0027,"},{"line_number":27,"context_line":"                },"},{"line_number":28,"context_line":"            },"},{"line_number":29,"context_line":"            \u0027required\u0027: [\u0027type\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_89c0742c","line":26,"range":{"start_line":26,"start_character":20,"end_line":26,"end_character":37},"updated":"2020-03-30 11:00:26.000000000","message":"TODO: more accurtae data format needs to be specified.","commit_id":"d2a3a9fb6d91889e7806da346d260aa6832ae6ab"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"272982b14fe73c6425bc09a364841ff044634d08","unresolved":false,"context_lines":[{"line_number":141,"context_line":"}"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"create_v286 \u003d copy.deepcopy(create_v28)"},{"line_number":144,"context_line":"create_v286[\u0027properties\u0027][\u0027remote_console\u0027][\u0027properties\u0027]\\"},{"line_number":145,"context_line":"    [\u0027password\u0027] \u003d parameter_types.console_password"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_2c7d361c","line":144,"updated":"2020-04-07 15:14:15.000000000","message":"pep8: E211 whitespace before \u0027[\u0027","commit_id":"8353b5787b1c6f2f533d48cb58574b789951eb20"}],"nova/api/validation/parameter_types.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":237,"context_line":"console_password \u003d {"},{"line_number":238,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":239,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":240,"context_line":"    \u0027maxLength\u0027: 8,"},{"line_number":241,"context_line":"}"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3a5afc91_b8e9d8cb","line":240,"updated":"2020-12-04 13:25:29.000000000","message":"Please add a note here why we have such a limitation on length","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":237,"context_line":"console_password \u003d {"},{"line_number":238,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":239,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":240,"context_line":"    \u0027maxLength\u0027: 8,"},{"line_number":241,"context_line":"}"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"0a8e490f_8884ade4","line":240,"in_reply_to":"3a5afc91_b8e9d8cb","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":234,"context_line":"}"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"# NOTE(wenping): The password cannot be more than 8 characters due to"},{"line_number":237,"context_line":"# vnc security http://people.redhat.com/pbonzini/qemu-test-doc/_build/html/topics/vnc_005fsecurity.html, # noqa"},{"line_number":238,"context_line":"# we can supprot with more complex password in the future."},{"line_number":239,"context_line":"console_password \u003d {"},{"line_number":240,"context_line":"    \u0027type\u0027: \u0027string\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"00efbbd2_472b4566","line":237,"range":{"start_line":237,"start_character":2,"end_line":237,"end_character":14},"updated":"2021-02-18 11:14:09.000000000","message":"inherent design flaws in the VNC protocol ?\n\nAlso, if you put the URL on its own line you shouldn\u0027t need the \u0027noqa\u0027 statement","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":true,"context_lines":[{"line_number":234,"context_line":"}"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"# NOTE(wenping): The password cannot be more than 8 characters due to"},{"line_number":237,"context_line":"# vnc security http://people.redhat.com/pbonzini/qemu-test-doc/_build/html/topics/vnc_005fsecurity.html, # noqa"},{"line_number":238,"context_line":"# we can supprot with more complex password in the future."},{"line_number":239,"context_line":"console_password \u003d {"},{"line_number":240,"context_line":"    \u0027type\u0027: \u0027string\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fd7209c1_121a27c1","line":237,"range":{"start_line":237,"start_character":2,"end_line":237,"end_character":14},"in_reply_to":"00efbbd2_472b4566","updated":"2021-02-19 10:02:57.000000000","message":"from the link content, yes, it\u0027s the inherent design flaws.","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"# NOTE(wenping): The password cannot be more than 8 characters due to"},{"line_number":237,"context_line":"# vnc security http://people.redhat.com/pbonzini/qemu-test-doc/_build/html/topics/vnc_005fsecurity.html, # noqa"},{"line_number":238,"context_line":"# we can supprot with more complex password in the future."},{"line_number":239,"context_line":"console_password \u003d {"},{"line_number":240,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":241,"context_line":"    \u0027minLength\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":30,"id":"af948ac2_b3ce3d70","line":238,"range":{"start_line":238,"start_character":9,"end_line":238,"end_character":21},"updated":"2021-02-18 11:14:09.000000000","message":"support","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"# NOTE(wenping): The password cannot be more than 8 characters due to"},{"line_number":237,"context_line":"# vnc security http://people.redhat.com/pbonzini/qemu-test-doc/_build/html/topics/vnc_005fsecurity.html, # noqa"},{"line_number":238,"context_line":"# we can supprot with more complex password in the future."},{"line_number":239,"context_line":"console_password \u003d {"},{"line_number":240,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":241,"context_line":"    \u0027minLength\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":30,"id":"1e6f0792_b1c9920e","line":238,"range":{"start_line":238,"start_character":9,"end_line":238,"end_character":21},"in_reply_to":"af948ac2_b3ce3d70","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":239,"context_line":"console_password \u003d {"},{"line_number":240,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":241,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":242,"context_line":"    \u0027maxLength\u0027: 8,"},{"line_number":243,"context_line":"}"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"503d3105_b23293f2","line":242,"updated":"2021-02-18 11:14:09.000000000","message":"You also have to ensure that they\u0027re ASCII. You can prove this by creating an instance with a password of, e.g. \u0027😊😊😊😊😊😊😊😊\u0027. You can connect with simply \u0027😊😊\u0027 due to how this is encoded. More details at [1].\n\n[1] https://news.ycombinator.com/item?id\u003d11130699","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":true,"context_lines":[{"line_number":239,"context_line":"console_password \u003d {"},{"line_number":240,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":241,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":242,"context_line":"    \u0027maxLength\u0027: 8,"},{"line_number":243,"context_line":"}"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"06941295_fd0e6bb6","line":242,"in_reply_to":"503d3105_b23293f2","updated":"2021-02-19 10:02:57.000000000","message":"sorry, i cannot open the link, do you means the console_password is ascii rather than string?","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/compute/api.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":true,"context_lines":[{"line_number":4461,"context_line":"        task_state\u003d[task_states.DELETING, task_states.MIGRATING])"},{"line_number":4462,"context_line":"    def get_vnc_console(self, context, instance, console_type):"},{"line_number":4463,"context_line":"        \"\"\"Get a url to an instance Console.\"\"\""},{"line_number":4464,"context_line":"        # NOTE(wenping): Reset VNC password support need compute service"},{"line_number":4465,"context_line":"        # version more than 55"},{"line_number":4466,"context_line":"        if instance.metadata and instance.metadata.get(\u0027console_passwd\u0027):"},{"line_number":4467,"context_line":"            reset_min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":4468,"context_line":"                context, [\u0027nova-compute\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"7d7b8579_3383b2b7","line":4465,"range":{"start_line":4464,"start_character":52,"end_line":4465,"end_character":30},"updated":"2021-01-29 15:13:50.000000000","message":"edit: needs at least compute service version 55","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"b720be4ec0b6a61a0322ead3b91e40a84144325c","unresolved":false,"context_lines":[{"line_number":4461,"context_line":"        task_state\u003d[task_states.DELETING, task_states.MIGRATING])"},{"line_number":4462,"context_line":"    def get_vnc_console(self, context, instance, console_type):"},{"line_number":4463,"context_line":"        \"\"\"Get a url to an instance Console.\"\"\""},{"line_number":4464,"context_line":"        # NOTE(wenping): Reset VNC password support need compute service"},{"line_number":4465,"context_line":"        # version more than 55"},{"line_number":4466,"context_line":"        if instance.metadata and instance.metadata.get(\u0027console_passwd\u0027):"},{"line_number":4467,"context_line":"            reset_min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":4468,"context_line":"                context, [\u0027nova-compute\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"86edd22d_89a48450","line":4465,"range":{"start_line":4464,"start_character":52,"end_line":4465,"end_character":30},"in_reply_to":"7d7b8579_3383b2b7","updated":"2021-02-02 13:02:32.000000000","message":"Done","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":true,"context_lines":[{"line_number":4464,"context_line":"        # NOTE(wenping): Reset VNC password support need compute service"},{"line_number":4465,"context_line":"        # version more than 55"},{"line_number":4466,"context_line":"        if instance.metadata and instance.metadata.get(\u0027console_passwd\u0027):"},{"line_number":4467,"context_line":"            reset_min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":4468,"context_line":"                context, [\u0027nova-compute\u0027])"},{"line_number":4469,"context_line":"            if reset_min_version \u003c MIN_COMPUTE_RESET_VNC_PASSWORD:"},{"line_number":4470,"context_line":"                raise exception.UnsupportedResetVNCPassword(protocol\u003d\u0027vnc\u0027)"},{"line_number":4471,"context_line":"        connect_info \u003d self.compute_rpcapi.get_vnc_console(context,"}],"source_content_type":"text/x-python","patch_set":28,"id":"14c94c4a_827c593d","line":4468,"range":{"start_line":4467,"start_character":32,"end_line":4468,"end_character":42},"updated":"2021-01-29 15:13:50.000000000","message":"You don\u0027t need to query all computes in all cells as you know where the instance currently runs. So you can simply check the service version of the compute pointed by instance.host\n\n                 svc \u003d objects.Service.get_by_host_and_binary(\n                    context, instance.host, \u0027nova-compute\u0027)\n                 if svc.version \u003c MIN_COMPUTE_RESET_VNC_PASSWORD:\n\nWhen the instance is moved to another compute (e.g migrated) then a new vnc console connection needs to be get by the end user.","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3d7c45a4d2a79044a9d98586bd784cc41faddb2b","unresolved":false,"context_lines":[{"line_number":4464,"context_line":"        # NOTE(wenping): Reset VNC password support need compute service"},{"line_number":4465,"context_line":"        # version more than 55"},{"line_number":4466,"context_line":"        if instance.metadata and instance.metadata.get(\u0027console_passwd\u0027):"},{"line_number":4467,"context_line":"            reset_min_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":4468,"context_line":"                context, [\u0027nova-compute\u0027])"},{"line_number":4469,"context_line":"            if reset_min_version \u003c MIN_COMPUTE_RESET_VNC_PASSWORD:"},{"line_number":4470,"context_line":"                raise exception.UnsupportedResetVNCPassword(protocol\u003d\u0027vnc\u0027)"},{"line_number":4471,"context_line":"        connect_info \u003d self.compute_rpcapi.get_vnc_console(context,"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfd462b9_8d2abbc8","line":4468,"range":{"start_line":4467,"start_character":32,"end_line":4468,"end_character":42},"in_reply_to":"14c94c4a_827c593d","updated":"2021-02-03 14:47:51.000000000","message":"Ack","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"}],"nova/compute/manager.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"baf5e1bd7333bdcbdfad605bae0f2a63a60f1686","unresolved":true,"context_lines":[{"line_number":6696,"context_line":"        password \u003d instance.metadata.get(\u0027console_passwd\u0027, None)"},{"line_number":6697,"context_line":"        if password:"},{"line_number":6698,"context_line":"            LOG.info(\"Reset console password\", instance\u003dinstance)"},{"line_number":6699,"context_line":"            self.driver.reset_vnc_passwd(context, instance, password)"},{"line_number":6700,"context_line":"            instance.save()"},{"line_number":6701,"context_line":"        try:"},{"line_number":6702,"context_line":"            # Retrieve connect info from driver, and then decorate with our"}],"source_content_type":"text/x-python","patch_set":16,"id":"3613bf81_18a1132f","line":6699,"updated":"2020-11-30 09:13:18.000000000","message":"Mova this section to Line6702, between try and except.\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/wallaby/approved/nova-support-webvnc-with-password-authentication.html#rest-api-impact","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":false,"context_lines":[{"line_number":6696,"context_line":"        password \u003d instance.metadata.get(\u0027console_passwd\u0027, None)"},{"line_number":6697,"context_line":"        if password:"},{"line_number":6698,"context_line":"            LOG.info(\"Reset console password\", instance\u003dinstance)"},{"line_number":6699,"context_line":"            self.driver.reset_vnc_passwd(context, instance, password)"},{"line_number":6700,"context_line":"            instance.save()"},{"line_number":6701,"context_line":"        try:"},{"line_number":6702,"context_line":"            # Retrieve connect info from driver, and then decorate with our"}],"source_content_type":"text/x-python","patch_set":16,"id":"43a7769b_fc92f055","line":6699,"in_reply_to":"3613bf81_18a1132f","updated":"2020-12-02 06:51:13.000000000","message":"Done","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"baf5e1bd7333bdcbdfad605bae0f2a63a60f1686","unresolved":true,"context_lines":[{"line_number":6718,"context_line":"        except exception.InstanceNotFound:"},{"line_number":6719,"context_line":"            if instance.vm_state !\u003d vm_states.BUILDING:"},{"line_number":6720,"context_line":"                raise"},{"line_number":6721,"context_line":"            raise exception.InstanceNotReady(instance_id\u003dinstance.uuid)"},{"line_number":6722,"context_line":""},{"line_number":6723,"context_line":"        return connect_info"},{"line_number":6724,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"925588ff_36276a2a","line":6721,"updated":"2020-11-30 09:13:18.000000000","message":"except NotImplementedError as ex:\n   raise 400","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":false,"context_lines":[{"line_number":6718,"context_line":"        except exception.InstanceNotFound:"},{"line_number":6719,"context_line":"            if instance.vm_state !\u003d vm_states.BUILDING:"},{"line_number":6720,"context_line":"                raise"},{"line_number":6721,"context_line":"            raise exception.InstanceNotReady(instance_id\u003dinstance.uuid)"},{"line_number":6722,"context_line":""},{"line_number":6723,"context_line":"        return connect_info"},{"line_number":6724,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1423076f_1598190b","line":6721,"in_reply_to":"925588ff_36276a2a","updated":"2020-12-02 06:51:13.000000000","message":"Done","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":6693,"context_line":"            if password:"},{"line_number":6694,"context_line":"                if instance.vm_state not in vm_states.ALLOW_GRAPHICS_UPDATE:"},{"line_number":6695,"context_line":"                    raise exception.InstanceInvalidState("},{"line_number":6696,"context_line":"                        attr\u003d\u0027graphic update state\u0027,"},{"line_number":6697,"context_line":"                        instance_uuid\u003dinstance.uuid,"},{"line_number":6698,"context_line":"                        state\u003dvm_states.ALLOW_GRAPHICS_UPDATE,"},{"line_number":6699,"context_line":"                        method\u003d\u0027reset_vnc_password\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1cf46e21_7e0fc7fc","line":6696,"range":{"start_line":6696,"start_character":30,"end_line":6696,"end_character":50},"updated":"2021-01-13 12:17:49.000000000","message":"\u0027vm_state\u0027 as this param specify which state/attribute of the instance object has an unexpected value","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":false,"context_lines":[{"line_number":6693,"context_line":"            if password:"},{"line_number":6694,"context_line":"                if instance.vm_state not in vm_states.ALLOW_GRAPHICS_UPDATE:"},{"line_number":6695,"context_line":"                    raise exception.InstanceInvalidState("},{"line_number":6696,"context_line":"                        attr\u003d\u0027graphic update state\u0027,"},{"line_number":6697,"context_line":"                        instance_uuid\u003dinstance.uuid,"},{"line_number":6698,"context_line":"                        state\u003dvm_states.ALLOW_GRAPHICS_UPDATE,"},{"line_number":6699,"context_line":"                        method\u003d\u0027reset_vnc_password\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"cdb39aaa_59126e68","line":6696,"range":{"start_line":6696,"start_character":30,"end_line":6696,"end_character":50},"in_reply_to":"1cf46e21_7e0fc7fc","updated":"2021-01-19 05:36:35.000000000","message":"Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":6695,"context_line":"                    raise exception.InstanceInvalidState("},{"line_number":6696,"context_line":"                        attr\u003d\u0027graphic update state\u0027,"},{"line_number":6697,"context_line":"                        instance_uuid\u003dinstance.uuid,"},{"line_number":6698,"context_line":"                        state\u003dvm_states.ALLOW_GRAPHICS_UPDATE,"},{"line_number":6699,"context_line":"                        method\u003d\u0027reset_vnc_password\u0027)"},{"line_number":6700,"context_line":"                LOG.info(\"Reset console password\", instance\u003dinstance)"},{"line_number":6701,"context_line":"                self.driver.reset_vnc_passwd(instance, password)"}],"source_content_type":"text/x-python","patch_set":26,"id":"51652871_5940d5f9","line":6698,"range":{"start_line":6698,"start_character":30,"end_line":6698,"end_character":61},"updated":"2021-01-13 12:17:49.000000000","message":"this needs to be the actual state of the instance so instance.vm_state","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":false,"context_lines":[{"line_number":6695,"context_line":"                    raise exception.InstanceInvalidState("},{"line_number":6696,"context_line":"                        attr\u003d\u0027graphic update state\u0027,"},{"line_number":6697,"context_line":"                        instance_uuid\u003dinstance.uuid,"},{"line_number":6698,"context_line":"                        state\u003dvm_states.ALLOW_GRAPHICS_UPDATE,"},{"line_number":6699,"context_line":"                        method\u003d\u0027reset_vnc_password\u0027)"},{"line_number":6700,"context_line":"                LOG.info(\"Reset console password\", instance\u003dinstance)"},{"line_number":6701,"context_line":"                self.driver.reset_vnc_passwd(instance, password)"}],"source_content_type":"text/x-python","patch_set":26,"id":"47b3a83b_8ac07451","line":6698,"range":{"start_line":6698,"start_character":30,"end_line":6698,"end_character":61},"in_reply_to":"51652871_5940d5f9","updated":"2021-01-19 05:36:35.000000000","message":"Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":6742,"context_line":"                instance.save()"},{"line_number":6743,"context_line":"        except NotImplementedError:"},{"line_number":6744,"context_line":"            raise exception.UnsupportedResetVNCPassword("},{"line_number":6745,"context_line":"                \"Method not implemented\")"},{"line_number":6746,"context_line":"        try:"},{"line_number":6747,"context_line":"            # Retrieve connect info from driver, and then decorate with our"},{"line_number":6748,"context_line":"            # access info token"}],"source_content_type":"text/x-python","patch_set":30,"id":"e32fb726_372d5139","line":6745,"updated":"2021-02-18 11:14:09.000000000","message":"nit: can you add a newline after this?","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":6742,"context_line":"                instance.save()"},{"line_number":6743,"context_line":"        except NotImplementedError:"},{"line_number":6744,"context_line":"            raise exception.UnsupportedResetVNCPassword("},{"line_number":6745,"context_line":"                \"Method not implemented\")"},{"line_number":6746,"context_line":"        try:"},{"line_number":6747,"context_line":"            # Retrieve connect info from driver, and then decorate with our"},{"line_number":6748,"context_line":"            # access info token"}],"source_content_type":"text/x-python","patch_set":30,"id":"77234fa6_df442a77","line":6745,"in_reply_to":"e32fb726_372d5139","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/console/rfb/auths.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    AUTH_SCHEME_MAP \u003d {"},{"line_number":28,"context_line":"        \"none\": authnone.RFBAuthSchemeNone,"},{"line_number":29,"context_line":"        \"vencrypt\": authvencrypt.RFBAuthSchemeVeNCrypt,"},{"line_number":30,"context_line":"        \"vnc\": authvnc.RFBAuthSchemeVNC,"},{"line_number":31,"context_line":"    }"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3dade33a_122d97e9","line":30,"updated":"2021-02-18 11:14:09.000000000","message":"Wait, this feels like one step forward and two steps back. Is it not possible to use password authentication with TLS?\n\nLater: The first Google result I found [1] suggests yes, it is.\n\n[1] https://linuxtechlab.com/secure-vnc-server-tls-encryption/","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"539ab8c4e4693b40a087b1416a0c66f240f64776","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    AUTH_SCHEME_MAP \u003d {"},{"line_number":28,"context_line":"        \"none\": authnone.RFBAuthSchemeNone,"},{"line_number":29,"context_line":"        \"vencrypt\": authvencrypt.RFBAuthSchemeVeNCrypt,"},{"line_number":30,"context_line":"        \"vnc\": authvnc.RFBAuthSchemeVNC,"},{"line_number":31,"context_line":"    }"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"22d6dc0d_000935e7","line":30,"in_reply_to":"3dade33a_122d97e9","updated":"2021-02-18 11:42:47.000000000","message":"Yes, more detail in the spec. The VeNCrypt security type provides an X509Vnc subtype that we should be able to use\n\n[1] https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#7243subtypes-with-vnc-suffix","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/console/rfb/authvnc.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"701758eab319666ef3c88f62e264deec2bfbbcf5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014-2016 Red Hat, Inc"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_cfd205d1","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":38},"updated":"2018-12-04 14:33:28.000000000","message":"I\u0027m guessing this is wrong","commit_id":"9d9f7a1525ae45f905afbf5a18b165c9c9f34a83"}],"nova/console/securityproxy/rfb.py":[{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9ae7784e9019104aa2d29fb0a6fea5bc7efa5b6a","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # Negotiate security with client before we say \"ok\" to the server"},{"line_number":149,"context_line":"        # send 1:[None], or auth.AuthType.VNC if vnc server requires it"},{"line_number":150,"context_line":"        # Note that, noVNC/websockify provide native support for rfb.VNC"},{"line_number":151,"context_line":"        # processing password authentication handshakes. Based on this,"},{"line_number":152,"context_line":"        # VNC rfb auth scheme is implemented overriding `security_handshake`"},{"line_number":153,"context_line":"        # with no-ops."}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_09bbc471","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":20},"updated":"2020-03-30 11:00:26.000000000","message":"Note that","commit_id":"d2a3a9fb6d91889e7806da346d260aa6832ae6ab"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a5e9921112b8a22eb09557848d395cd5677e7a0","unresolved":true,"context_lines":[{"line_number":148,"context_line":"        # send 1:[None], or 2:[auth.AuthType.VNC] if vnc server requires it."},{"line_number":149,"context_line":"        auth_type \u003d auth.AuthType.VNC if auth.AuthType.VNC \\"},{"line_number":150,"context_line":"                in permitted_auth_types else auth.AuthType.NONE"},{"line_number":151,"context_line":"        tenant_sock.sendall(auth.AUTH_STATUS_PASS + bytes((auth_type,)))"},{"line_number":152,"context_line":"        client_auth \u003d recv(tenant_sock, 1)[0]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        if client_auth !\u003d auth_type:"}],"source_content_type":"text/x-python","patch_set":29,"id":"61b8a712_1c756b9d","line":151,"updated":"2021-02-03 15:30:46.000000000","message":"should this be conditional also on if the instance has a console password.\n\ni.e. even if auth.AuthType.VNC is in permitted_auth_types that dose not mean all instance must use a password\n\nso i just want to ensure that we can still use non password protected sessions even if its allowed to use them.\n\n-1 since i dont see any test that assert we can create vnc sesssion without passwoard even if permitted_auth_types allwos vnc auth.","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"afc9994f5f37a83bf5eb91ea7ae93e3513eb8b8b","unresolved":true,"context_lines":[{"line_number":148,"context_line":"        # send 1:[None], or 2:[auth.AuthType.VNC] if vnc server requires it."},{"line_number":149,"context_line":"        auth_type \u003d auth.AuthType.VNC if auth.AuthType.VNC \\"},{"line_number":150,"context_line":"                in permitted_auth_types else auth.AuthType.NONE"},{"line_number":151,"context_line":"        tenant_sock.sendall(auth.AUTH_STATUS_PASS + bytes((auth_type,)))"},{"line_number":152,"context_line":"        client_auth \u003d recv(tenant_sock, 1)[0]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        if client_auth !\u003d auth_type:"}],"source_content_type":"text/x-python","patch_set":29,"id":"ad53aff8_18e4d099","line":151,"in_reply_to":"4125acbe_a1a7a7bb","updated":"2021-02-05 14:39:37.000000000","message":"there you said it does not depend on it but you did not state that when vnc auth type is used you are permiteted to not use a password to connect to the vnc session.\n\nwe need to ensure that even with the vnc auth type negotiated that we can connect to the console with no password\nso i would like to see a test that demonstrates that capability.\n\nit would be also nice if we could enable this feature in one of our ci jobs, perhaps nova-next or one of the simple jobs.\nthat way we can ensure that this feature is optional for the end-user regardless of the configuration value.\n\nit would also be nice to update the comment to note that authtype vnc allows passwordless auth like authtype none if a password is not defiend when the console is created.","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"473808d93f3da54d8137282a99715bfadcc8bf69","unresolved":true,"context_lines":[{"line_number":148,"context_line":"        # send 1:[None], or 2:[auth.AuthType.VNC] if vnc server requires it."},{"line_number":149,"context_line":"        auth_type \u003d auth.AuthType.VNC if auth.AuthType.VNC \\"},{"line_number":150,"context_line":"                in permitted_auth_types else auth.AuthType.NONE"},{"line_number":151,"context_line":"        tenant_sock.sendall(auth.AUTH_STATUS_PASS + bytes((auth_type,)))"},{"line_number":152,"context_line":"        client_auth \u003d recv(tenant_sock, 1)[0]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        if client_auth !\u003d auth_type:"}],"source_content_type":"text/x-python","patch_set":29,"id":"4125acbe_a1a7a7bb","line":151,"in_reply_to":"61b8a712_1c756b9d","updated":"2021-02-05 08:03:22.000000000","message":"I do seem not understand what you say.\n\nThe \u0027vnc\u0027 protocol does not have relation with the *password*, and we talked in PS20.\n\npls see https://review.opendev.org/c/openstack/nova/+/622336/20/nova/tests/unit/console/securityproxy/test_rfb.py#191","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dbe46413609ed3b81afd1759ca4b7bac91e9415c","unresolved":true,"context_lines":[{"line_number":159,"context_line":"            reason \u003d _(\"Client requested a security type that\u0027s not permitted\""},{"line_number":160,"context_line":"                       \"(%(client_auth)d): %(auth_type)s\") % {"},{"line_number":161,"context_line":"                           \u0027client_auth\u0027: client_auth,"},{"line_number":162,"context_line":"                           \u0027auth_type\u0027: auth_type}"},{"line_number":163,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":36,"id":"8fd1ef2b_69442e59","line":162,"updated":"2021-03-01 10:58:35.000000000","message":"This is what\u0027s breaking the Tempest test. The idea here is that you connect to the client with no authentication and then negotiate a secure connection with the server. There\u0027s no need to encrypt the client-proxy connection here since we can use TLS-encrypted WebSockets for that.","commit_id":"74fc085d8cf1df9bf55010fa3b48d63d91456ee3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c60bd92c76298c60f244db20298c2c9a98e9f839","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        # Negotiate security with client before we say \"ok\" to the server"},{"line_number":148,"context_line":"        # send 1:[None], or 2:[auth.AuthType.VNC] if vnc server requires it."},{"line_number":149,"context_line":"        auth_type \u003d auth.AuthType.VNC if auth.AuthType.VNC \\"},{"line_number":150,"context_line":"                in permitted_auth_types else auth.AuthType.NONE"},{"line_number":151,"context_line":"        tenant_sock.sendall(auth.AUTH_STATUS_PASS + bytes((auth_type,)))"},{"line_number":152,"context_line":"        client_auth \u003d recv(tenant_sock, 1)[0]"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"52bd3a32_8b6eb454","line":150,"updated":"2021-03-02 18:44:59.000000000","message":"This is a nonsensical check right? You\u0027re checking what the *server* supports (\u0027permitted_auth_types\u0027 is built above from server responses) but you\u0027re using it to configure the connection to the *client*. I think you need to either always use VNC auth type, assuming that allows an empty password, or switch between different behavior depending on whether a password is set for the instance. The latter approach will likely need new parameters passed through","commit_id":"768347b0b0ecd6fd9f695b57f6132c11d8a7976d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"72c1de4a98b88414d3016181cff1d851f40f6793","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        # Negotiate security with client before we say \"ok\" to the server"},{"line_number":148,"context_line":"        # send 1:[None], or 2:[auth.AuthType.VNC] if vnc server requires it."},{"line_number":149,"context_line":"        auth_type \u003d auth.AuthType.VNC if auth.AuthType.VNC \\"},{"line_number":150,"context_line":"                in permitted_auth_types else auth.AuthType.NONE"},{"line_number":151,"context_line":"        tenant_sock.sendall(auth.AUTH_STATUS_PASS + bytes((auth_type,)))"},{"line_number":152,"context_line":"        client_auth \u003d recv(tenant_sock, 1)[0]"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"e3f1c069_44936223","line":150,"in_reply_to":"52bd3a32_8b6eb454","updated":"2021-03-03 03:04:26.000000000","message":"I tried the patch without this change and found it\u0027s necessary, else I can\u0027t get through to the instance\u0027s console and get the password prompt. I guess it\u0027s because the client is connecting to the server (on the compute host) through this proxy, so it needs to support the auth type the server requires? But if that\u0027s the case, then I don\u0027t understand why we don\u0027t need to do that when vencrypt is being used.","commit_id":"768347b0b0ecd6fd9f695b57f6132c11d8a7976d"}],"nova/tests/functional/api_sample_tests/api_samples/os-remote-consoles/v2.88/create-encrypted-vnc-console-resp.json.tpl":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"b88a0431cbc72709f9a04c628e7bc37e69413a58","unresolved":true,"context_lines":[{"line_number":2,"context_line":"    \"remote_console\": {"},{"line_number":3,"context_line":"        \"protocol\": \"vnc\","},{"line_number":4,"context_line":"        \"type\": \"novnc\","},{"line_number":5,"context_line":"        \"url\": \"%(url)s\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":16,"id":"6a92b067_b26641cb","line":5,"updated":"2020-12-01 07:15:55.000000000","message":"Missing \"password\"","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"7d8aa4ef7ffb80440ef673031c82caba44121c6d","unresolved":true,"context_lines":[{"line_number":2,"context_line":"    \"remote_console\": {"},{"line_number":3,"context_line":"        \"protocol\": \"vnc\","},{"line_number":4,"context_line":"        \"type\": \"novnc\","},{"line_number":5,"context_line":"        \"url\": \"%(url)s\""},{"line_number":6,"context_line":"    }"},{"line_number":7,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":16,"id":"e14b9acc_5d2f5e3b","line":5,"in_reply_to":"6a92b067_b26641cb","updated":"2020-12-02 06:51:13.000000000","message":"we neednot password in the response json.","commit_id":"ffd35f9b724aa579f273f3e31e27becc7130f3c3"}],"nova/tests/functional/api_sample_tests/test_remote_consoles.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        uuid \u003d self._post_server()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        body \u003d {"},{"line_number":112,"context_line":"                \u0027protocol\u0027: \u0027vnc\u0027,"},{"line_number":113,"context_line":"                \u0027type\u0027: \u0027novnc\u0027,"},{"line_number":114,"context_line":"                \u0027password\u0027: \u0027password\u0027"},{"line_number":115,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":30,"id":"36785e4f_5c9e33ae","line":112,"range":{"start_line":112,"start_character":12,"end_line":112,"end_character":16},"updated":"2021-02-18 11:14:09.000000000","message":"drop\n\n(or put the whole thing on one line - it should fit)","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        uuid \u003d self._post_server()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        body \u003d {"},{"line_number":112,"context_line":"                \u0027protocol\u0027: \u0027vnc\u0027,"},{"line_number":113,"context_line":"                \u0027type\u0027: \u0027novnc\u0027,"},{"line_number":114,"context_line":"                \u0027password\u0027: \u0027password\u0027"},{"line_number":115,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":30,"id":"90d73e68_f81053f2","line":112,"range":{"start_line":112,"start_character":12,"end_line":112,"end_character":16},"in_reply_to":"36785e4f_5c9e33ae","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/tests/unit/api/openstack/compute/test_remote_consoles.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":553,"context_line":"                                             \u0027type\u0027: \u0027novnc\u0027,"},{"line_number":554,"context_line":"                                             \u0027url\u0027: \u0027http://fake\u0027}}, output)"},{"line_number":555,"context_line":"        mock_handler.assert_called_once_with(self.context, self.instance,"},{"line_number":556,"context_line":"                                             \u0027novnc\u0027)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def test_create_console_instance_not_ready(self):"},{"line_number":559,"context_line":"        mock_handler \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9c057de6_44b5f6d0","line":556,"updated":"2020-12-04 13:25:29.000000000","message":"you should assert that the password is added to the instance metadata in this case","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":553,"context_line":"                                             \u0027type\u0027: \u0027novnc\u0027,"},{"line_number":554,"context_line":"                                             \u0027url\u0027: \u0027http://fake\u0027}}, output)"},{"line_number":555,"context_line":"        mock_handler.assert_called_once_with(self.context, self.instance,"},{"line_number":556,"context_line":"                                             \u0027novnc\u0027)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def test_create_console_instance_not_ready(self):"},{"line_number":559,"context_line":"        mock_handler \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":20,"id":"b77d7755_712120d0","line":556,"in_reply_to":"9c057de6_44b5f6d0","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":552,"context_line":"        self.assertEqual({\u0027remote_console\u0027: {\u0027protocol\u0027: \u0027vnc\u0027,"},{"line_number":553,"context_line":"                                             \u0027type\u0027: \u0027novnc\u0027,"},{"line_number":554,"context_line":"                                             \u0027url\u0027: \u0027http://fake\u0027}}, output)"},{"line_number":555,"context_line":"        self.assertEqual(self.instance.metadata[\u0027console_passwd\u0027],"},{"line_number":556,"context_line":"                body[\u0027remote_console\u0027][\u0027password\u0027])"},{"line_number":557,"context_line":"        mock_handler.assert_called_once_with(self.context, self.instance,"},{"line_number":558,"context_line":"                                             \u0027novnc\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"4d7bbaf6_df0f576d","line":555,"updated":"2021-01-04 13:26:19.000000000","message":"The signature of assertEqual is assertEqual(expected, actual) so please change the order of the actual parameters here.","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"e05f1502ecf9bbcb130bb20035d32117686a4b74","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertEqual({\u0027remote_console\u0027: {\u0027protocol\u0027: \u0027vnc\u0027,"},{"line_number":553,"context_line":"                                             \u0027type\u0027: \u0027novnc\u0027,"},{"line_number":554,"context_line":"                                             \u0027url\u0027: \u0027http://fake\u0027}}, output)"},{"line_number":555,"context_line":"        self.assertEqual(self.instance.metadata[\u0027console_passwd\u0027],"},{"line_number":556,"context_line":"                body[\u0027remote_console\u0027][\u0027password\u0027])"},{"line_number":557,"context_line":"        mock_handler.assert_called_once_with(self.context, self.instance,"},{"line_number":558,"context_line":"                                             \u0027novnc\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"e0c669b5_f38fec44","line":555,"in_reply_to":"4d7bbaf6_df0f576d","updated":"2021-01-08 15:53:45.000000000","message":"Done","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d67e0081d0e5c9fef3b1aa85ebbe04ee3041eb69","unresolved":true,"context_lines":[{"line_number":372,"context_line":"                      lambda *a, **kw: self.instance)"},{"line_number":373,"context_line":"        self.controller \u003d console_v21.RemoteConsolesController()"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def test_create_vnc_console(self):"},{"line_number":376,"context_line":"        mock_handler \u003d mock.MagicMock()"},{"line_number":377,"context_line":"        mock_handler.return_value \u003d {\u0027url\u0027: \"http://fake\"}"},{"line_number":378,"context_line":"        self.controller.handlers[\u0027vnc\u0027] \u003d mock_handler"}],"source_content_type":"text/x-python","patch_set":30,"id":"42cc5263_588cbd41","line":375,"range":{"start_line":375,"start_character":3,"end_line":375,"end_character":38},"updated":"2021-02-09 08:19:13.000000000","message":"so i do not belive this assert that\nwe can use auth_schemes\u003d\"vnc\" without a password.\n\nwe have not configured it with \nself.flags(auth_schemes\u003d[\"vnc\"], group\u003d\"vnc\")\n\nthat is also not something we could really test in a unit test like this since\nwe mock out the interaction with the vnc server.\n\nhave you manually set the [vnc]/auth_schema\u003d[\"vnc\"] and created a vm with a console without a password.\nif that works then its fine but you have not said that actully works yet.\n\nto test this in the ci we would need a tempest","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"61653152cee49e84d9e6a339a1d608701309e17f","unresolved":true,"context_lines":[{"line_number":372,"context_line":"                      lambda *a, **kw: self.instance)"},{"line_number":373,"context_line":"        self.controller \u003d console_v21.RemoteConsolesController()"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def test_create_vnc_console(self):"},{"line_number":376,"context_line":"        mock_handler \u003d mock.MagicMock()"},{"line_number":377,"context_line":"        mock_handler.return_value \u003d {\u0027url\u0027: \"http://fake\"}"},{"line_number":378,"context_line":"        self.controller.handlers[\u0027vnc\u0027] \u003d mock_handler"}],"source_content_type":"text/x-python","patch_set":30,"id":"7574ac05_6948364b","line":375,"range":{"start_line":375,"start_character":3,"end_line":375,"end_character":38},"in_reply_to":"42cc5263_588cbd41","updated":"2021-02-16 02:25:17.000000000","message":"As we talked on IRC from http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2021-02-09.log.html#t2021-02-09T09:50:13 to http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2021-02-09.log.html#t2021-02-09T09:56:29, i will do the zuul job in the follow change.","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":4187,"context_line":"        self.flags(enabled\u003dFalse, group\u003d\u0027spice\u0027)"},{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":4190,"context_line":"        instance.metadata[\u0027console_passwd\u0027] \u003d \u0027password\u0027"},{"line_number":4191,"context_line":"        self.compute.build_and_run_instance(self.context,"},{"line_number":4192,"context_line":"            instance, {}, {}, {}, block_device_mapping\u003d[])"},{"line_number":4193,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"03036ea4_6c3a573e","line":4190,"range":{"start_line":4190,"start_character":8,"end_line":4190,"end_character":56},"updated":"2020-12-04 13:25:29.000000000","message":"This test passes even if I remove this line. So this not really tests password reset.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":4187,"context_line":"        self.flags(enabled\u003dFalse, group\u003d\u0027spice\u0027)"},{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":4190,"context_line":"        instance.metadata[\u0027console_passwd\u0027] \u003d \u0027password\u0027"},{"line_number":4191,"context_line":"        self.compute.build_and_run_instance(self.context,"},{"line_number":4192,"context_line":"            instance, {}, {}, {}, block_device_mapping\u003d[])"},{"line_number":4193,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"929a71d8_27036c5d","line":4190,"range":{"start_line":4190,"start_character":8,"end_line":4190,"end_character":56},"in_reply_to":"03036ea4_6c3a573e","updated":"2020-12-10 08:33:37.000000000","message":"this line intends to call driver.reset_vnc_password at \nhttps://review.opendev.org/c/openstack/nova/+/622336/20/nova/compute/manager.py#L6698,\nand driver.reset_vnc_password is defined at https://review.opendev.org/c/openstack/nova/+/622336/20/nova/virt/fake.py#L491","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":4187,"context_line":"        self.flags(enabled\u003dFalse, group\u003d\u0027spice\u0027)"},{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":4190,"context_line":"        instance.metadata[\u0027console_passwd\u0027] \u003d \u0027password\u0027"},{"line_number":4191,"context_line":"        self.compute.build_and_run_instance(self.context,"},{"line_number":4192,"context_line":"            instance, {}, {}, {}, block_device_mapping\u003d[])"},{"line_number":4193,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7740bcac_c663300b","line":4190,"range":{"start_line":4190,"start_character":8,"end_line":4190,"end_character":56},"in_reply_to":"929a71d8_27036c5d","updated":"2021-01-04 13:26:19.000000000","message":"Then you need to assert that reset_vnc_passwd was called on the fake driver as expected.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":4190,"context_line":"        instance.metadata[\u0027console_passwd\u0027] \u003d \u0027password\u0027"},{"line_number":4191,"context_line":"        self.compute.build_and_run_instance(self.context,"},{"line_number":4192,"context_line":"            instance, {}, {}, {}, block_device_mapping\u003d[])"},{"line_number":4193,"context_line":""},{"line_number":4194,"context_line":"        # Try with the full instance"},{"line_number":4195,"context_line":"        console \u003d self.compute.get_vnc_console(self.context, \u0027novnc\u0027,"},{"line_number":4196,"context_line":"                                               instance\u003dinstance)"},{"line_number":4197,"context_line":"        self.assertTrue(console)"},{"line_number":4198,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"00e33001_3cba42a9","line":4195,"range":{"start_line":4191,"start_character":1,"end_line":4195,"end_character":1},"updated":"2020-12-04 13:25:29.000000000","message":"why a fake instance is not enough for this unit test?","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":4190,"context_line":"        instance.metadata[\u0027console_passwd\u0027] \u003d \u0027password\u0027"},{"line_number":4191,"context_line":"        self.compute.build_and_run_instance(self.context,"},{"line_number":4192,"context_line":"            instance, {}, {}, {}, block_device_mapping\u003d[])"},{"line_number":4193,"context_line":""},{"line_number":4194,"context_line":"        # Try with the full instance"},{"line_number":4195,"context_line":"        console \u003d self.compute.get_vnc_console(self.context, \u0027novnc\u0027,"},{"line_number":4196,"context_line":"                                               instance\u003dinstance)"},{"line_number":4197,"context_line":"        self.assertTrue(console)"},{"line_number":4198,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"b27fe99c_be413159","line":4195,"range":{"start_line":4191,"start_character":1,"end_line":4195,"end_character":1},"in_reply_to":"00e33001_3cba42a9","updated":"2020-12-10 08:33:37.000000000","message":"seems this is no need, removed it.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":4131,"context_line":"        self.flags(enabled\u003dFalse, group\u003d\u0027spice\u0027)"},{"line_number":4132,"context_line":""},{"line_number":4133,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":4134,"context_line":"        instance.metadata[\u0027console_passwd\u0027] \u003d \u0027password\u0027"},{"line_number":4135,"context_line":"        console \u003d self.compute.get_vnc_console(self.context, \u0027novnc\u0027,"},{"line_number":4136,"context_line":"                                               instance\u003dinstance)"},{"line_number":4137,"context_line":"        self.assertTrue(console)"}],"source_content_type":"text/x-python","patch_set":26,"id":"3d76c577_59bb1beb","line":4134,"updated":"2021-01-13 12:17:49.000000000","message":"I still think that this test needs extra asserts please see my original comment in PS20: https://review.opendev.org/c/openstack/nova/+/622336/20/nova/tests/unit/compute/test_compute.py#4190","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":true,"context_lines":[{"line_number":4131,"context_line":"        self.flags(enabled\u003dFalse, group\u003d\u0027spice\u0027)"},{"line_number":4132,"context_line":""},{"line_number":4133,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":4134,"context_line":"        instance.metadata[\u0027console_passwd\u0027] \u003d \u0027password\u0027"},{"line_number":4135,"context_line":"        console \u003d self.compute.get_vnc_console(self.context, \u0027novnc\u0027,"},{"line_number":4136,"context_line":"                                               instance\u003dinstance)"},{"line_number":4137,"context_line":"        self.assertTrue(console)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7b8f0548_690db50e","line":4134,"in_reply_to":"3d76c577_59bb1beb","updated":"2021-01-19 05:36:35.000000000","message":"sorry forget to fix. Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"}],"nova/tests/unit/console/rfb/test_auth.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"321487cfe2ac11302701602ec4e7dd863197874c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.console.rfb import auth"},{"line_number":18,"context_line":"from nova.console.rfb import authvnc"},{"line_number":19,"context_line":"from nova.console.rfb import authnone"},{"line_number":20,"context_line":"from nova.console.rfb import auths"},{"line_number":21,"context_line":"from nova import exception"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_6f984274","line":18,"updated":"2020-04-02 05:25:15.000000000","message":"pep8: F401 \u0027nova.console.rfb.authvnc\u0027 imported but unused","commit_id":"797b6976108bf3cb168d49cfde3897b19ebf1628"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"321487cfe2ac11302701602ec4e7dd863197874c","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.console.rfb import auth"},{"line_number":18,"context_line":"from nova.console.rfb import authvnc"},{"line_number":19,"context_line":"from nova.console.rfb import authnone"},{"line_number":20,"context_line":"from nova.console.rfb import auths"},{"line_number":21,"context_line":"from nova import exception"},{"line_number":22,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_cf8cee37","line":19,"updated":"2020-04-02 05:25:15.000000000","message":"pep8: H306: imports not in alphabetical order (nova.console.rfb.authvnc, nova.console.rfb.authnone)","commit_id":"797b6976108bf3cb168d49cfde3897b19ebf1628"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa9483a84226c4ffe8866b1d855065adc6f3db47","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.console.rfb import auth"},{"line_number":18,"context_line":"from nova.console.rfb import authvnc"},{"line_number":19,"context_line":"from nova.console.rfb import authnone"},{"line_number":20,"context_line":"from nova.console.rfb import auths"},{"line_number":21,"context_line":"from nova import exception"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_e2070918","line":18,"updated":"2020-04-05 06:31:55.000000000","message":"pep8: F401 \u0027nova.console.rfb.authvnc\u0027 imported but unused","commit_id":"ef0bae083710e753b771eb9a31f89ab326385257"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa9483a84226c4ffe8866b1d855065adc6f3db47","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.console.rfb import auth"},{"line_number":18,"context_line":"from nova.console.rfb import authvnc"},{"line_number":19,"context_line":"from nova.console.rfb import authnone"},{"line_number":20,"context_line":"from nova.console.rfb import auths"},{"line_number":21,"context_line":"from nova import exception"},{"line_number":22,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_c20c853d","line":19,"updated":"2020-04-05 06:31:55.000000000","message":"pep8: H306: imports not in alphabetical order (nova.console.rfb.authvnc, nova.console.rfb.authnone)","commit_id":"ef0bae083710e753b771eb9a31f89ab326385257"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"109f04f4b8c6dc7bedb5396c711fe0229358c2f3","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.console.rfb import auth"},{"line_number":18,"context_line":"from nova.console.rfb import authvnc"},{"line_number":19,"context_line":"from nova.console.rfb import authnone"},{"line_number":20,"context_line":"from nova.console.rfb import auths"},{"line_number":21,"context_line":"from nova import exception"}],"source_content_type":"text/x-python","patch_set":9,"id":"df33271e_7d7c3ceb","line":18,"updated":"2020-04-05 11:53:49.000000000","message":"pep8: F401 \u0027nova.console.rfb.authvnc\u0027 imported but unused","commit_id":"4e3e3e6ec536f2801ccd7d608855c09de00c115b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"109f04f4b8c6dc7bedb5396c711fe0229358c2f3","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.console.rfb import auth"},{"line_number":18,"context_line":"from nova.console.rfb import authvnc"},{"line_number":19,"context_line":"from nova.console.rfb import authnone"},{"line_number":20,"context_line":"from nova.console.rfb import auths"},{"line_number":21,"context_line":"from nova import exception"},{"line_number":22,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":9,"id":"df33271e_dd8108c6","line":19,"updated":"2020-04-05 11:53:49.000000000","message":"pep8: H306: imports not in alphabetical order (nova.console.rfb.authvnc, nova.console.rfb.authnone)","commit_id":"4e3e3e6ec536f2801ccd7d608855c09de00c115b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"272982b14fe73c6425bc09a364841ff044634d08","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.console.rfb import auth"},{"line_number":18,"context_line":"from nova.console.rfb import authvnc"},{"line_number":19,"context_line":"from nova.console.rfb import authnone"},{"line_number":20,"context_line":"from nova.console.rfb import auths"},{"line_number":21,"context_line":"from nova import exception"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_8c8c4236","line":18,"updated":"2020-04-07 15:14:15.000000000","message":"pep8: F401 \u0027nova.console.rfb.authvnc\u0027 imported but unused","commit_id":"8353b5787b1c6f2f533d48cb58574b789951eb20"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"272982b14fe73c6425bc09a364841ff044634d08","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova.console.rfb import auth"},{"line_number":18,"context_line":"from nova.console.rfb import authvnc"},{"line_number":19,"context_line":"from nova.console.rfb import authnone"},{"line_number":20,"context_line":"from nova.console.rfb import auths"},{"line_number":21,"context_line":"from nova import exception"},{"line_number":22,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_ec834e03","line":19,"updated":"2020-04-07 15:14:15.000000000","message":"pep8: H306: imports not in alphabetical order (nova.console.rfb.authvnc, nova.console.rfb.authnone)","commit_id":"8353b5787b1c6f2f533d48cb58574b789951eb20"}],"nova/tests/unit/console/securityproxy/test_rfb.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"f954865f_7ef6afe5","updated":"2020-12-04 13:25:29.000000000","message":"Do we need a new test that uses the new auth protocol?","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"e283c608_1f1752c2","in_reply_to":"f954865f_7ef6afe5","updated":"2020-12-10 08:33:37.000000000","message":"i think the cases below cover the vnc protocol.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        self._expect_compute_recv(1, \"\\x02\")"},{"line_number":188,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":191,"context_line":"        self._expect_tenant_recv(1, \"\\x02\")"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        self._expect_compute_send(\"\\x01\")"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"d988ef83_3b555870","line":191,"range":{"start_line":189,"start_character":0,"end_line":191,"end_character":43},"updated":"2020-12-04 13:25:29.000000000","message":"I\u0027m not familiar these test, what is the reason these value are changed?","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":true,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        self._expect_compute_recv(1, \"\\x02\")"},{"line_number":188,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":191,"context_line":"        self._expect_tenant_recv(1, \"\\x02\")"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        self._expect_compute_send(\"\\x01\")"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"53511596_b3762f6f","line":191,"range":{"start_line":189,"start_character":0,"end_line":191,"end_character":43},"in_reply_to":"0d17a646_da7276ea","updated":"2021-01-19 05:36:35.000000000","message":"This dosenot depend on the vnc password provided. i purpose a new case to use None auth type, please review the new PS.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        self._expect_compute_recv(1, \"\\x02\")"},{"line_number":188,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":191,"context_line":"        self._expect_tenant_recv(1, \"\\x02\")"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        self._expect_compute_send(\"\\x01\")"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"0d17a646_da7276ea","line":191,"range":{"start_line":189,"start_character":0,"end_line":191,"end_character":43},"in_reply_to":"ccda93e6_af3d3c50","updated":"2021-01-04 13:26:19.000000000","message":"Thanks for the explanation. Does this change in the test means that vnc now always use auth_type \u0027vnc\u0027 and never use auth type None? Even if there is no vnc password provided in the domain xml?","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        self._expect_compute_recv(1, \"\\x02\")"},{"line_number":188,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":191,"context_line":"        self._expect_tenant_recv(1, \"\\x02\")"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        self._expect_compute_send(\"\\x01\")"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"ccda93e6_af3d3c50","line":191,"range":{"start_line":189,"start_character":0,"end_line":191,"end_character":43},"in_reply_to":"d988ef83_3b555870","updated":"2020-12-10 08:33:37.000000000","message":"01 means auth_type is None, 02 means auth_type is \u0027vnc\u0027. as expect compute_recv is \u0027\\x01\\x02\u0027, permitted_auth_types at 1_ is [1,2], and auth_type is \u002702\u0027 at 2_, so the expect tenant send at 3_ is \u0027\\x01\\x02\u0027, and the expect tenant recv is \u0027\\x02\u0027.\n1_: https://review.opendev.org/c/openstack/nova/+/622336/20/nova/console/securityproxy/rfb.py#L144\n2_: https://review.opendev.org/c/openstack/nova/+/622336/20/nova/console/securityproxy/rfb.py#L150\n2_: https://review.opendev.org/c/openstack/nova/+/622336/20/nova/console/securityproxy/rfb.py#L152","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":209,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":212,"context_line":"        self._expect_tenant_recv(1, \"\\x01\")"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        self.expected_manager_calls.append("},{"line_number":215,"context_line":"            mock.call.proxy._fail(self.tenant_sock,"}],"source_content_type":"text/x-python","patch_set":20,"id":"8c66e33f_fa48a373","line":212,"updated":"2020-12-04 13:25:29.000000000","message":"ditto","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":209,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":212,"context_line":"        self._expect_tenant_recv(1, \"\\x01\")"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        self.expected_manager_calls.append("},{"line_number":215,"context_line":"            mock.call.proxy._fail(self.tenant_sock,"}],"source_content_type":"text/x-python","patch_set":20,"id":"d570a8ad_566104cb","line":212,"in_reply_to":"8c66e33f_fa48a373","updated":"2020-12-10 08:33:37.000000000","message":"this is the invalid test.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":186,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":189,"context_line":"        self._expect_tenant_recv(1, \"\\x02\")"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self._expect_compute_send(\"\\x01\")"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"6c548ef1_26e00728","line":189,"updated":"2021-01-13 12:17:49.000000000","message":"Could you please answer my followup question in PS20: https://review.opendev.org/c/openstack/nova/+/622336/20/nova/tests/unit/console/securityproxy/test_rfb.py#191","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":true,"context_lines":[{"line_number":186,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":189,"context_line":"        self._expect_tenant_recv(1, \"\\x02\")"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self._expect_compute_send(\"\\x01\")"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"6e551fe1_927abef3","line":189,"in_reply_to":"6c548ef1_26e00728","updated":"2021-01-19 05:36:35.000000000","message":"sorry forget to fix. Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        self._expect_compute_recv(2, \"\\x01\\x02\")"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        self._expect_tenant_send(\"\\x01\\x02\")"},{"line_number":189,"context_line":"        self._expect_tenant_recv(1, \"\\x02\")"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self._expect_compute_send(\"\\x01\")"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"b9ab3ed1_1c61fd4d","line":189,"in_reply_to":"6e551fe1_927abef3","updated":"2021-01-29 15:13:50.000000000","message":"Ack","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"}],"nova/tests/unit/virt/libvirt/fakelibvirt.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":30,"id":"885e034a_942efc00","line":18594,"updated":"2021-02-18 11:14:09.000000000","message":"nit:\n\n  nopasswd \u003d \"\"\"\n  \u003cgraphics type\u003d\"vnc\" port\u003d\"5900\" autoport\u003d\"yes\" listen\u003d\"0.0.0.0\"\u003e\n    \u003clisten type\u003d\"address\" address\u003d\"0.0.0.0\"/\u003e\n  \u003c/graphics\u003e\n  \"\"\"\n  repasswd \u003d \"\"\"\n  \u003cgraphics type\u003d\"vnc\" port\u003d\"5900\" autoport\u003d\"yes\" listen\u003d\"0.0.0.0\" passwd\u003d\"456\"\u003e\n    \u003clisten type\u003d\"address\" address\u003d\"0.0.0.0\"/\u003e\n  \u003c/graphics\u003e\n  \"\"\"  # noqa: E501\n\nis much easier to read","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":30,"id":"abc253f3_dc7fb9cb","line":18600,"updated":"2021-02-18 11:14:09.000000000","message":"ditto\n\n(and all XML snippets below)","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":18900,"context_line":"        vdmock.updateDeviceFlags.assert_has_calls("},{"line_number":18901,"context_line":"            [mock.call(repasswd, flags\u003d3),"},{"line_number":18902,"context_line":"            mock.call(repasswd, flags\u003d2)])"},{"line_number":18903,"context_line":""},{"line_number":18904,"context_line":"    def test_get_vnc_console(self):"},{"line_number":18905,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":18906,"context_line":"        dummyxml \u003d (\"\u003cdomain type\u003d\u0027kvm\u0027\u003e\u003cname\u003einstance-0000000a\u003c/name\u003e\""}],"source_content_type":"text/x-python","patch_set":20,"id":"2d7806df_f2de105d","line":18903,"updated":"2020-12-04 13:25:29.000000000","message":"I think test coverage is missing for \n* the ConsoleTypeUnavailable case during reset\n* the case when the config is regenerated and the password is added to it from the instance via _guest_add_video_device()","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":18900,"context_line":"        vdmock.updateDeviceFlags.assert_has_calls("},{"line_number":18901,"context_line":"            [mock.call(repasswd, flags\u003d3),"},{"line_number":18902,"context_line":"            mock.call(repasswd, flags\u003d2)])"},{"line_number":18903,"context_line":""},{"line_number":18904,"context_line":"    def test_get_vnc_console(self):"},{"line_number":18905,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":18906,"context_line":"        dummyxml \u003d (\"\u003cdomain type\u003d\u0027kvm\u0027\u003e\u003cname\u003einstance-0000000a\u003c/name\u003e\""}],"source_content_type":"text/x-python","patch_set":20,"id":"33b934be_61fc1d13","line":18903,"in_reply_to":"2d7806df_f2de105d","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":18902,"context_line":"            [mock.call(repasswd, flags\u003d3),"},{"line_number":18903,"context_line":"            mock.call(repasswd, flags\u003d2)])"},{"line_number":18904,"context_line":""},{"line_number":18905,"context_line":"    def test_reset_vnc_password_unsupport_vm_state(self):"},{"line_number":18906,"context_line":"        inst \u003d objects.Instance(**self.test_instance)"},{"line_number":18907,"context_line":"        inst.vm_state \u003d vm_states.ERROR"},{"line_number":18908,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"af6f8b19_7b9de071","line":18905,"range":{"start_line":18905,"start_character":8,"end_line":18905,"end_character":50},"updated":"2021-01-04 13:26:19.000000000","message":"nit: unsupported","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"e05f1502ecf9bbcb130bb20035d32117686a4b74","unresolved":false,"context_lines":[{"line_number":18902,"context_line":"            [mock.call(repasswd, flags\u003d3),"},{"line_number":18903,"context_line":"            mock.call(repasswd, flags\u003d2)])"},{"line_number":18904,"context_line":""},{"line_number":18905,"context_line":"    def test_reset_vnc_password_unsupport_vm_state(self):"},{"line_number":18906,"context_line":"        inst \u003d objects.Instance(**self.test_instance)"},{"line_number":18907,"context_line":"        inst.vm_state \u003d vm_states.ERROR"},{"line_number":18908,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"f9adef60_1fd5028f","line":18905,"range":{"start_line":18905,"start_character":8,"end_line":18905,"end_character":50},"in_reply_to":"af6f8b19_7b9de071","updated":"2021-01-08 15:53:45.000000000","message":"In patchset 25, we remove the vm_state check to compute, so this case is deleted.","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":18959,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":18960,"context_line":"        self.create_fake_libvirt_mock(lookupByUUIDString\u003dfake_lookup)"},{"line_number":18961,"context_line":"        password_reset \u003d \u0027456\u0027"},{"line_number":18962,"context_line":"        drvr.reset_vnc_passwd(inst, password_reset)"},{"line_number":18963,"context_line":"        guest \u003d vconfig.LibvirtConfigGuest()"},{"line_number":18964,"context_line":"        inst.metadata[\u0027console_passwd\u0027] \u003d password_reset"},{"line_number":18965,"context_line":"        drvr._guest_add_video_device(guest, inst)"},{"line_number":18966,"context_line":"        self.assertEqual(guest.devices[0].passwd, password_reset)"},{"line_number":18967,"context_line":""},{"line_number":18968,"context_line":"    def test_get_vnc_console(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ce3551fa_57fd1944","line":18965,"range":{"start_line":18962,"start_character":0,"end_line":18965,"end_character":49},"updated":"2021-01-04 13:26:19.000000000","message":"why do you need to call both driver method? I think during config regeneration (e.g. VM hard reboot) there is no reset_vnc_passwd call on the driver.","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"e05f1502ecf9bbcb130bb20035d32117686a4b74","unresolved":false,"context_lines":[{"line_number":18959,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":18960,"context_line":"        self.create_fake_libvirt_mock(lookupByUUIDString\u003dfake_lookup)"},{"line_number":18961,"context_line":"        password_reset \u003d \u0027456\u0027"},{"line_number":18962,"context_line":"        drvr.reset_vnc_passwd(inst, password_reset)"},{"line_number":18963,"context_line":"        guest \u003d vconfig.LibvirtConfigGuest()"},{"line_number":18964,"context_line":"        inst.metadata[\u0027console_passwd\u0027] \u003d password_reset"},{"line_number":18965,"context_line":"        drvr._guest_add_video_device(guest, inst)"},{"line_number":18966,"context_line":"        self.assertEqual(guest.devices[0].passwd, password_reset)"},{"line_number":18967,"context_line":""},{"line_number":18968,"context_line":"    def test_get_vnc_console(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"f10dfe33_8eb3cf85","line":18965,"range":{"start_line":18962,"start_character":0,"end_line":18965,"end_character":49},"in_reply_to":"ce3551fa_57fd1944","updated":"2021-01-08 15:53:45.000000000","message":"Done","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"}],"nova/tests/unit/virt/libvirt/test_guest.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa9483a84226c4ffe8866b1d855065adc6f3db47","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.guest.reset_vnc_passwd_with_xml(xml, live\u003dTrue)"},{"line_number":76,"context_line":"        self.domain.updateDeviceFlags.assert_called_once_with("},{"line_number":77,"context_line":"            xml, fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG"},{"line_number":78,"context_line":"                 | fakelibvirt.VIR_DOMAIN_AFFECT_LIVE)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_launch(self):"},{"line_number":81,"context_line":"        self.guest.launch()"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_82027d08","line":78,"updated":"2020-04-05 06:31:55.000000000","message":"pep8: W503 line break before binary operator","commit_id":"ef0bae083710e753b771eb9a31f89ab326385257"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"109f04f4b8c6dc7bedb5396c711fe0229358c2f3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.guest.reset_vnc_passwd_with_xml(xml, live\u003dTrue)"},{"line_number":76,"context_line":"        self.domain.updateDeviceFlags.assert_called_once_with("},{"line_number":77,"context_line":"            xml, fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG"},{"line_number":78,"context_line":"                 | fakelibvirt.VIR_DOMAIN_AFFECT_LIVE)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_launch(self):"},{"line_number":81,"context_line":"        self.guest.launch()"}],"source_content_type":"text/x-python","patch_set":9,"id":"df33271e_9d778009","line":78,"updated":"2020-04-05 11:53:49.000000000","message":"pep8: W503 line break before binary operator","commit_id":"4e3e3e6ec536f2801ccd7d608855c09de00c115b"}],"nova/virt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":492,"context_line":"        raise NotImplementedError()"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def reset_vnc_passwd(self, instance, password):"},{"line_number":495,"context_line":"        \"\"\"Reset vnc password for a spice instance."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":498,"context_line":"        :param password: password to reset vnc"}],"source_content_type":"text/x-python","patch_set":20,"id":"bd71676d_7b35d2dd","line":495,"range":{"start_line":495,"start_character":30,"end_line":495,"end_character":41},"updated":"2020-12-04 13:25:29.000000000","message":"why this is specific for spice?","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":492,"context_line":"        raise NotImplementedError()"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def reset_vnc_passwd(self, instance, password):"},{"line_number":495,"context_line":"        \"\"\"Reset vnc password for a spice instance."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":498,"context_line":"        :param password: password to reset vnc"}],"source_content_type":"text/x-python","patch_set":20,"id":"ad08c49f_8b394784","line":495,"range":{"start_line":495,"start_character":30,"end_line":495,"end_character":41},"in_reply_to":"bd71676d_7b35d2dd","updated":"2020-12-10 08:33:37.000000000","message":"this is specific not spice. changed it.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":495,"context_line":"        \"\"\"Reset vnc password for a spice instance."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":498,"context_line":"        :param password: password to reset vnc"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        raise NotImplementedError()"},{"line_number":501,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"48a8f666_e8789f72","line":498,"range":{"start_line":498,"start_character":25,"end_line":498,"end_character":46},"updated":"2020-12-04 13:25:29.000000000","message":"password to set for the vnc console","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        \"\"\"Reset vnc password for a spice instance."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":498,"context_line":"        :param password: password to reset vnc"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        raise NotImplementedError()"},{"line_number":501,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7d37e020_dfefad3e","line":498,"range":{"start_line":498,"start_character":25,"end_line":498,"end_character":46},"in_reply_to":"48a8f666_e8789f72","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":498,"context_line":"        :param password: password to reset vnc"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        raise NotImplementedError()"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def get_spice_console(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":20,"id":"d299d9d1_a3821eb5","line":499,"updated":"2020-12-04 13:25:29.000000000","message":"Please define what exception this call could raise","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :param instance: nova.objects.instance.Instance"},{"line_number":498,"context_line":"        :param password: password to reset vnc"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        raise NotImplementedError()"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def get_spice_console(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":20,"id":"e6ac9a75_08cf6249","line":499,"in_reply_to":"d299d9d1_a3821eb5","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        :param password: password to set for the vnc console"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"        :raise ConsoleTypeUnavailable: vnc console type is unavailable to set"},{"line_number":500,"context_line":"                                       password for the instance"},{"line_number":501,"context_line":"        \"\"\""},{"line_number":502,"context_line":"        raise NotImplementedError()"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"07afddc2_9b5dbaa1","line":500,"range":{"start_line":500,"start_character":12,"end_line":500,"end_character":39},"updated":"2021-02-18 11:14:09.000000000","message":"nit: drop","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        :param password: password to set for the vnc console"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"        :raise ConsoleTypeUnavailable: vnc console type is unavailable to set"},{"line_number":500,"context_line":"                                       password for the instance"},{"line_number":501,"context_line":"        \"\"\""},{"line_number":502,"context_line":"        raise NotImplementedError()"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"e0785d72_3c31a457","line":500,"range":{"start_line":500,"start_character":12,"end_line":500,"end_character":39},"in_reply_to":"07afddc2_9b5dbaa1","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c60bd92c76298c60f244db20298c2c9a98e9f839","unresolved":true,"context_lines":[{"line_number":1963,"context_line":"        else:"},{"line_number":1964,"context_line":"            dev.set(\"autoport\", \"no\")"},{"line_number":1965,"context_line":"        if self.passwd:"},{"line_number":1966,"context_line":"            dev.set(\"passwd\", self.passwd)"},{"line_number":1967,"context_line":"        if self.keymap:"},{"line_number":1968,"context_line":"            dev.set(\"keymap\", self.keymap)"},{"line_number":1969,"context_line":"        if self.listen:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1d4caa7e_4515d30a","line":1966,"updated":"2021-03-02 18:44:59.000000000","message":"Hmm, thinking on it more, if we\u0027re encrypting the client\u003c-\u003eproxy channel then why is this needed? The instance lives on the server.","commit_id":"768347b0b0ecd6fd9f695b57f6132c11d8a7976d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"72c1de4a98b88414d3016181cff1d851f40f6793","unresolved":true,"context_lines":[{"line_number":1963,"context_line":"        else:"},{"line_number":1964,"context_line":"            dev.set(\"autoport\", \"no\")"},{"line_number":1965,"context_line":"        if self.passwd:"},{"line_number":1966,"context_line":"            dev.set(\"passwd\", self.passwd)"},{"line_number":1967,"context_line":"        if self.keymap:"},{"line_number":1968,"context_line":"            dev.set(\"keymap\", self.keymap)"},{"line_number":1969,"context_line":"        if self.listen:"}],"source_content_type":"text/x-python","patch_set":37,"id":"c08a8511_9fca5426","line":1966,"in_reply_to":"1d4caa7e_4515d30a","updated":"2021-03-03 03:04:26.000000000","message":"This adds an extra gate to get to the instance\u0027s console if you\u0027ve somehow discovered the console url of someone else\u0027s instance. Example: you\u0027re at the office and a coworker is using their openstack instance via the vnc console. You peek over the cubicle wall and take a photo of their screen, zoomed in on the address bar, and then type it in, token and all, into your own browser. You\u0027ll get access to their console immediately.\n\nIf the console required a password, then you would be prompted for the password when you visit the console url you \"stole\". So you can\u0027t get in (unless you\u0027ve spied on your coworker when they entered their password and have that too).","commit_id":"768347b0b0ecd6fd9f695b57f6132c11d8a7976d"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"321487cfe2ac11302701602ec4e7dd863197874c","unresolved":false,"context_lines":[{"line_number":3631,"context_line":""},{"line_number":3632,"context_line":"        LOG.info(\"Prepare new graphics XML ...\")"},{"line_number":3633,"context_line":"        graphics_xml \u003d update_graphics(guest, new_passwd)"},{"line_number":3634,"context_line":"        LOG.info(\"Reset console for %s with XML %s\" % (instance.uuid,"},{"line_number":3635,"context_line":"                                                       graphics_xml))"},{"line_number":3636,"context_line":"        vm_state \u003d instance.vm_state"},{"line_number":3637,"context_line":"        if vm_state in vm_states.ALLOW_GRAPHICS_UPDATE:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_8f9dc667","line":3634,"updated":"2020-04-02 05:25:15.000000000","message":"pep8: H904: String interpolation should be delayed to be handled by the logging code, rather than being done at the point of the logging call. Use \u0027,\u0027 instead of \u0027%\u0027.","commit_id":"797b6976108bf3cb168d49cfde3897b19ebf1628"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa9483a84226c4ffe8866b1d855065adc6f3db47","unresolved":false,"context_lines":[{"line_number":3637,"context_line":"        if vm_state in vm_states.ALLOW_GRAPHICS_UPDATE:"},{"line_number":3638,"context_line":"            live \u003d not flag and \\"},{"line_number":3639,"context_line":"                vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3640,"context_line":"            guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3641,"context_line":""},{"line_number":3642,"context_line":"    def get_spice_console(self, context, instance):"},{"line_number":3643,"context_line":"        def get_spice_ports_for_instance(instance_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_a2fd010a","line":3640,"updated":"2020-04-05 06:31:55.000000000","message":"pep8: F821 undefined name \u0027guest\u0027","commit_id":"ef0bae083710e753b771eb9a31f89ab326385257"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"109f04f4b8c6dc7bedb5396c711fe0229358c2f3","unresolved":false,"context_lines":[{"line_number":3634,"context_line":"        if vm_state in vm_states.ALLOW_GRAPHICS_UPDATE:"},{"line_number":3635,"context_line":"            live \u003d not flag and \\"},{"line_number":3636,"context_line":"                vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3637,"context_line":"            guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3638,"context_line":""},{"line_number":3639,"context_line":"    def get_spice_console(self, context, instance):"},{"line_number":3640,"context_line":"        def get_spice_ports_for_instance(instance_name):"}],"source_content_type":"text/x-python","patch_set":9,"id":"df33271e_3d1d94bd","line":3637,"updated":"2020-04-05 11:53:49.000000000","message":"pep8: F821 undefined name \u0027guest\u0027","commit_id":"4e3e3e6ec536f2801ccd7d608855c09de00c115b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":3806,"context_line":"        vm_state \u003d instance.vm_state"},{"line_number":3807,"context_line":"        gxml \u003d update_graphics(password)"},{"line_number":3808,"context_line":""},{"line_number":3809,"context_line":"        if vm_state in vm_states.ALLOW_GRAPHICS_UPDATE:"},{"line_number":3810,"context_line":"            live \u003d vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3811,"context_line":"            guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3812,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"6f5a21ef_13e0ed56","line":3809,"range":{"start_line":3809,"start_character":1,"end_line":3809,"end_character":55},"updated":"2020-12-04 13:25:29.000000000","message":"Is it intentional that we are not raising an error if the password cannot be set due to the VM state?","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":true,"context_lines":[{"line_number":3806,"context_line":"        vm_state \u003d instance.vm_state"},{"line_number":3807,"context_line":"        gxml \u003d update_graphics(password)"},{"line_number":3808,"context_line":""},{"line_number":3809,"context_line":"        if vm_state in vm_states.ALLOW_GRAPHICS_UPDATE:"},{"line_number":3810,"context_line":"            live \u003d vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3811,"context_line":"            guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3812,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"8f34659e_2cc979ff","line":3809,"range":{"start_line":3809,"start_character":1,"end_line":3809,"end_character":55},"in_reply_to":"6f5a21ef_13e0ed56","updated":"2020-12-10 08:33:37.000000000","message":"we can move L3807 in this condition and needn\u0027t raise an error.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":6347,"context_line":"            guest.add_device(dev)"},{"line_number":6348,"context_line":""},{"line_number":6349,"context_line":"    @staticmethod"},{"line_number":6350,"context_line":"    def _guest_add_video_device(guest, instance\u003dNone):"},{"line_number":6351,"context_line":"        # NB some versions of libvirt support both SPICE and VNC"},{"line_number":6352,"context_line":"        # at the same time. We\u0027re not trying to second guess which"},{"line_number":6353,"context_line":"        # those versions are. We\u0027ll just let libvirt report the"}],"source_content_type":"text/x-python","patch_set":20,"id":"482a804f_69ab19fd","line":6350,"range":{"start_line":6350,"start_character":39,"end_line":6350,"end_character":52},"updated":"2020-12-04 13:25:29.000000000","message":"The only real caller always provide the instance parameter so you can make it mandatory.","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":6347,"context_line":"            guest.add_device(dev)"},{"line_number":6348,"context_line":""},{"line_number":6349,"context_line":"    @staticmethod"},{"line_number":6350,"context_line":"    def _guest_add_video_device(guest, instance\u003dNone):"},{"line_number":6351,"context_line":"        # NB some versions of libvirt support both SPICE and VNC"},{"line_number":6352,"context_line":"        # at the same time. We\u0027re not trying to second guess which"},{"line_number":6353,"context_line":"        # those versions are. We\u0027ll just let libvirt report the"}],"source_content_type":"text/x-python","patch_set":20,"id":"01855ba2_97560a57","line":6350,"range":{"start_line":6350,"start_character":39,"end_line":6350,"end_character":52},"in_reply_to":"482a804f_69ab19fd","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":6356,"context_line":"        if CONF.vnc.enabled and guest.virt_type not in (\u0027lxc\u0027, \u0027uml\u0027):"},{"line_number":6357,"context_line":"            graphics \u003d vconfig.LibvirtConfigGuestGraphics()"},{"line_number":6358,"context_line":"            graphics.type \u003d \"vnc\""},{"line_number":6359,"context_line":"            if instance:"},{"line_number":6360,"context_line":"                passwd \u003d instance.metadata.get(\u0027console_passwd\u0027, None)"},{"line_number":6361,"context_line":"                if passwd:"},{"line_number":6362,"context_line":"                    graphics.passwd \u003d passwd"}],"source_content_type":"text/x-python","patch_set":20,"id":"51315eb6_06c26780","line":6359,"range":{"start_line":6359,"start_character":12,"end_line":6359,"end_character":24},"updated":"2020-12-04 13:25:29.000000000","message":"then you don\u0027t need this conditional","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":6356,"context_line":"        if CONF.vnc.enabled and guest.virt_type not in (\u0027lxc\u0027, \u0027uml\u0027):"},{"line_number":6357,"context_line":"            graphics \u003d vconfig.LibvirtConfigGuestGraphics()"},{"line_number":6358,"context_line":"            graphics.type \u003d \"vnc\""},{"line_number":6359,"context_line":"            if instance:"},{"line_number":6360,"context_line":"                passwd \u003d instance.metadata.get(\u0027console_passwd\u0027, None)"},{"line_number":6361,"context_line":"                if passwd:"},{"line_number":6362,"context_line":"                    graphics.passwd \u003d passwd"}],"source_content_type":"text/x-python","patch_set":20,"id":"12fa0aad_8d9c4978","line":6359,"range":{"start_line":6359,"start_character":12,"end_line":6359,"end_character":24},"in_reply_to":"51315eb6_06c26780","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":6357,"context_line":"            graphics \u003d vconfig.LibvirtConfigGuestGraphics()"},{"line_number":6358,"context_line":"            graphics.type \u003d \"vnc\""},{"line_number":6359,"context_line":"            if instance:"},{"line_number":6360,"context_line":"                passwd \u003d instance.metadata.get(\u0027console_passwd\u0027, None)"},{"line_number":6361,"context_line":"                if passwd:"},{"line_number":6362,"context_line":"                    graphics.passwd \u003d passwd"},{"line_number":6363,"context_line":"            graphics.listen \u003d CONF.vnc.server_listen"}],"source_content_type":"text/x-python","patch_set":20,"id":"b9c6786c_5bd9acdc","line":6360,"range":{"start_line":6360,"start_character":65,"end_line":6360,"end_character":69},"updated":"2020-12-04 13:25:29.000000000","message":"you can drop this the default behavior of get is to return None if the key is not found","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":6357,"context_line":"            graphics \u003d vconfig.LibvirtConfigGuestGraphics()"},{"line_number":6358,"context_line":"            graphics.type \u003d \"vnc\""},{"line_number":6359,"context_line":"            if instance:"},{"line_number":6360,"context_line":"                passwd \u003d instance.metadata.get(\u0027console_passwd\u0027, None)"},{"line_number":6361,"context_line":"                if passwd:"},{"line_number":6362,"context_line":"                    graphics.passwd \u003d passwd"},{"line_number":6363,"context_line":"            graphics.listen \u003d CONF.vnc.server_listen"}],"source_content_type":"text/x-python","patch_set":20,"id":"ebd7bbd7_5e237fed","line":6360,"range":{"start_line":6360,"start_character":65,"end_line":6360,"end_character":69},"in_reply_to":"b9c6786c_5bd9acdc","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":3802,"context_line":"                return etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"},{"line_number":3803,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3804,"context_line":""},{"line_number":3805,"context_line":"        LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3806,"context_line":"        vm_state \u003d instance.vm_state"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"        if vm_state in vm_states.ALLOW_GRAPHICS_UPDATE:"},{"line_number":3809,"context_line":"            gxml \u003d update_graphics(password)"},{"line_number":3810,"context_line":"            live \u003d vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3811,"context_line":"            guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3812,"context_line":""},{"line_number":3813,"context_line":"    def get_spice_console(self, context, instance):"},{"line_number":3814,"context_line":"        def get_spice_ports_for_instance(instance_name):"}],"source_content_type":"text/x-python","patch_set":23,"id":"694fade7_86fc193d","line":3811,"range":{"start_line":3805,"start_character":8,"end_line":3811,"end_character":55},"updated":"2021-01-04 13:26:19.000000000","message":"1) the log is not in sync with reality, as if the VM not in some specific state then we don\u0027t update the graphics part.\n\n2) I think we should not silently ignore when we cannot update the graphics due to VM state but raise an exception instead.","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"e05f1502ecf9bbcb130bb20035d32117686a4b74","unresolved":false,"context_lines":[{"line_number":3802,"context_line":"                return etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"},{"line_number":3803,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3804,"context_line":""},{"line_number":3805,"context_line":"        LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3806,"context_line":"        vm_state \u003d instance.vm_state"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"        if vm_state in vm_states.ALLOW_GRAPHICS_UPDATE:"},{"line_number":3809,"context_line":"            gxml \u003d update_graphics(password)"},{"line_number":3810,"context_line":"            live \u003d vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3811,"context_line":"            guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3812,"context_line":""},{"line_number":3813,"context_line":"    def get_spice_console(self, context, instance):"},{"line_number":3814,"context_line":"        def get_spice_ports_for_instance(instance_name):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7016eabf_52b04ec4","line":3811,"range":{"start_line":3805,"start_character":8,"end_line":3811,"end_character":55},"in_reply_to":"694fade7_86fc193d","updated":"2021-01-08 15:53:45.000000000","message":"Done","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":3806,"context_line":"            if graphic is not None:"},{"line_number":3807,"context_line":"                graphic.set(\u0027passwd\u0027, new_passwd)"},{"line_number":3808,"context_line":"                return etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"},{"line_number":3809,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3810,"context_line":""},{"line_number":3811,"context_line":"        LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3812,"context_line":"        gxml \u003d update_graphics(password)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1cc80aa8_d1c979f9","line":3809,"updated":"2021-01-13 12:17:49.000000000","message":"Is this exception handle somewhere upper in the call stack?","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":false,"context_lines":[{"line_number":3806,"context_line":"            if graphic is not None:"},{"line_number":3807,"context_line":"                graphic.set(\u0027passwd\u0027, new_passwd)"},{"line_number":3808,"context_line":"                return etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"},{"line_number":3809,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3810,"context_line":""},{"line_number":3811,"context_line":"        LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3812,"context_line":"        gxml \u003d update_graphics(password)"}],"source_content_type":"text/x-python","patch_set":26,"id":"e8620f09_0b3e19ce","line":3809,"in_reply_to":"1cc80aa8_d1c979f9","updated":"2021-01-19 05:36:35.000000000","message":"Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":3809,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3810,"context_line":""},{"line_number":3811,"context_line":"        LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3812,"context_line":"        gxml \u003d update_graphics(password)"},{"line_number":3813,"context_line":"        live \u003d instance.vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3814,"context_line":"        guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3815,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"24eae3c1_5ca4bb1f","line":3812,"range":{"start_line":3812,"start_character":15,"end_line":3812,"end_character":30},"updated":"2021-01-13 12:17:49.000000000","message":"you can inline the call as it is the only place you call it or move the update_graphics() as a class level utility. Having a nested def in the middle of the function does not help the readability","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":false,"context_lines":[{"line_number":3809,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3810,"context_line":""},{"line_number":3811,"context_line":"        LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3812,"context_line":"        gxml \u003d update_graphics(password)"},{"line_number":3813,"context_line":"        live \u003d instance.vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3814,"context_line":"        guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3815,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"a57b343e_2886a5fc","line":3812,"range":{"start_line":3812,"start_character":15,"end_line":3812,"end_character":30},"in_reply_to":"24eae3c1_5ca4bb1f","updated":"2021-01-19 05:36:35.000000000","message":"Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":3811,"context_line":"        LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3812,"context_line":"        gxml \u003d update_graphics(password)"},{"line_number":3813,"context_line":"        live \u003d instance.vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3814,"context_line":"        guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3815,"context_line":""},{"line_number":3816,"context_line":"    def get_spice_console(self, context, instance):"},{"line_number":3817,"context_line":"        def get_spice_ports_for_instance(instance_name):"}],"source_content_type":"text/x-python","patch_set":26,"id":"50cbeb78_beeea70a","line":3814,"updated":"2021-01-13 12:17:49.000000000","message":"as far as I see this call can raise libvirtError which also not handled","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":false,"context_lines":[{"line_number":3811,"context_line":"        LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3812,"context_line":"        gxml \u003d update_graphics(password)"},{"line_number":3813,"context_line":"        live \u003d instance.vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3814,"context_line":"        guest.reset_vnc_passwd_with_xml(gxml, live)"},{"line_number":3815,"context_line":""},{"line_number":3816,"context_line":"    def get_spice_console(self, context, instance):"},{"line_number":3817,"context_line":"        def get_spice_ports_for_instance(instance_name):"}],"source_content_type":"text/x-python","patch_set":26,"id":"94bbc70a_8625e1a0","line":3814,"in_reply_to":"50cbeb78_beeea70a","updated":"2021-01-19 05:36:35.000000000","message":"Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":true,"context_lines":[{"line_number":3798,"context_line":"    def reset_vnc_passwd(self, instance, password):"},{"line_number":3799,"context_line":"        guest \u003d self._host.get_guest(instance)"},{"line_number":3800,"context_line":""},{"line_number":3801,"context_line":"        def _update_graphics(new_passwd):"},{"line_number":3802,"context_line":"            xml \u003d guest.get_xml_desc()"},{"line_number":3803,"context_line":"            xml_dom \u003d etree.fromstring(xml)"},{"line_number":3804,"context_line":""},{"line_number":3805,"context_line":"            graphic \u003d xml_dom.find(\"./devices/graphics[@type\u003d\u0027vnc\u0027]\")"},{"line_number":3806,"context_line":"            if graphic is not None:"},{"line_number":3807,"context_line":"                graphic.set(\u0027passwd\u0027, new_passwd)"},{"line_number":3808,"context_line":"                return etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"},{"line_number":3809,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3810,"context_line":""},{"line_number":3811,"context_line":"        try:"},{"line_number":3812,"context_line":"            LOG.info(\"Prepare new graphics xml.\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"986f7f4f_2420748a","line":3809,"range":{"start_line":3801,"start_character":8,"end_line":3809,"end_character":70},"updated":"2021-01-29 15:13:50.000000000","message":"I still think that you dont need a separate nested def for this. Just inline this in the only place you call _update_graphics()","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3d7c45a4d2a79044a9d98586bd784cc41faddb2b","unresolved":false,"context_lines":[{"line_number":3798,"context_line":"    def reset_vnc_passwd(self, instance, password):"},{"line_number":3799,"context_line":"        guest \u003d self._host.get_guest(instance)"},{"line_number":3800,"context_line":""},{"line_number":3801,"context_line":"        def _update_graphics(new_passwd):"},{"line_number":3802,"context_line":"            xml \u003d guest.get_xml_desc()"},{"line_number":3803,"context_line":"            xml_dom \u003d etree.fromstring(xml)"},{"line_number":3804,"context_line":""},{"line_number":3805,"context_line":"            graphic \u003d xml_dom.find(\"./devices/graphics[@type\u003d\u0027vnc\u0027]\")"},{"line_number":3806,"context_line":"            if graphic is not None:"},{"line_number":3807,"context_line":"                graphic.set(\u0027passwd\u0027, new_passwd)"},{"line_number":3808,"context_line":"                return etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"},{"line_number":3809,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3810,"context_line":""},{"line_number":3811,"context_line":"        try:"},{"line_number":3812,"context_line":"            LOG.info(\"Prepare new graphics xml.\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"7654f012_25218b8e","line":3809,"range":{"start_line":3801,"start_character":8,"end_line":3809,"end_character":70},"in_reply_to":"986f7f4f_2420748a","updated":"2021-02-03 14:47:51.000000000","message":"Ack","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":true,"context_lines":[{"line_number":3809,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3810,"context_line":""},{"line_number":3811,"context_line":"        try:"},{"line_number":3812,"context_line":"            LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3813,"context_line":"            gxml \u003d _update_graphics(password)"},{"line_number":3814,"context_line":"            live \u003d instance.vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3815,"context_line":"            guest.update_graphic_tag_with_xml(gxml, live)"}],"source_content_type":"text/x-python","patch_set":28,"id":"462cf831_8e62c031","line":3812,"updated":"2021-01-29 15:13:50.000000000","message":"I don\u0027t think we need this on INFO level, I would simply delete this.","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3d7c45a4d2a79044a9d98586bd784cc41faddb2b","unresolved":false,"context_lines":[{"line_number":3809,"context_line":"            raise exception.ConsoleTypeUnavailable(console_type\u003d\u0027vnc\u0027)"},{"line_number":3810,"context_line":""},{"line_number":3811,"context_line":"        try:"},{"line_number":3812,"context_line":"            LOG.info(\"Prepare new graphics xml.\")"},{"line_number":3813,"context_line":"            gxml \u003d _update_graphics(password)"},{"line_number":3814,"context_line":"            live \u003d instance.vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3815,"context_line":"            guest.update_graphic_tag_with_xml(gxml, live)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3c0abdb2_0419c16d","line":3812,"in_reply_to":"462cf831_8e62c031","updated":"2021-02-03 14:47:51.000000000","message":"Ack","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":true,"context_lines":[{"line_number":3813,"context_line":"            gxml \u003d _update_graphics(password)"},{"line_number":3814,"context_line":"            live \u003d instance.vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3815,"context_line":"            guest.update_graphic_tag_with_xml(gxml, live)"},{"line_number":3816,"context_line":"        except exception.ConsoleTypeUnavailable:"},{"line_number":3817,"context_line":"            raise"},{"line_number":3818,"context_line":"        except libvirt.libvirtError as exc:"},{"line_number":3819,"context_line":"            error_code \u003d exc.get_error_code()"},{"line_number":3820,"context_line":"            LOG.exception("}],"source_content_type":"text/x-python","patch_set":28,"id":"9ecedbee_9471e654","line":3817,"range":{"start_line":3816,"start_character":0,"end_line":3817,"end_character":17},"updated":"2021-01-29 15:13:50.000000000","message":"Don\u0027t have to catch and exception if you only raise it again. This exception now handled in the API service and translated to HTTP 400. So you just let it propagate.","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"b720be4ec0b6a61a0322ead3b91e40a84144325c","unresolved":false,"context_lines":[{"line_number":3813,"context_line":"            gxml \u003d _update_graphics(password)"},{"line_number":3814,"context_line":"            live \u003d instance.vm_state in vm_states.ALLOW_GRAPHICS_LIVE_UPDATE"},{"line_number":3815,"context_line":"            guest.update_graphic_tag_with_xml(gxml, live)"},{"line_number":3816,"context_line":"        except exception.ConsoleTypeUnavailable:"},{"line_number":3817,"context_line":"            raise"},{"line_number":3818,"context_line":"        except libvirt.libvirtError as exc:"},{"line_number":3819,"context_line":"            error_code \u003d exc.get_error_code()"},{"line_number":3820,"context_line":"            LOG.exception("}],"source_content_type":"text/x-python","patch_set":28,"id":"ce1a1af7_2a2b6120","line":3817,"range":{"start_line":3816,"start_character":0,"end_line":3817,"end_character":17},"in_reply_to":"9ecedbee_9471e654","updated":"2021-02-02 13:02:32.000000000","message":"Done","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":true,"context_lines":[{"line_number":3822,"context_line":"                \u0027%(instance_uuid)s: [Error Code %(error_code)s] %(exc)s\u0027,"},{"line_number":3823,"context_line":"                {\u0027instance_uuid\u0027: instance.uuid,"},{"line_number":3824,"context_line":"                 \u0027error_code\u0027: error_code, \u0027exc\u0027: exc})"},{"line_number":3825,"context_line":"            raise"},{"line_number":3826,"context_line":""},{"line_number":3827,"context_line":"    def get_spice_console(self, context, instance):"},{"line_number":3828,"context_line":"        def get_spice_ports_for_instance(instance_name):"}],"source_content_type":"text/x-python","patch_set":28,"id":"93711f58_b0c6183b","line":3825,"range":{"start_line":3825,"start_character":12,"end_line":3825,"end_character":17},"updated":"2021-01-29 15:13:50.000000000","message":"This is not caught anywhere in the call stack so it will be translated to HTTP 500 automatically. I think that is a good response in this case.","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"b720be4ec0b6a61a0322ead3b91e40a84144325c","unresolved":false,"context_lines":[{"line_number":3822,"context_line":"                \u0027%(instance_uuid)s: [Error Code %(error_code)s] %(exc)s\u0027,"},{"line_number":3823,"context_line":"                {\u0027instance_uuid\u0027: instance.uuid,"},{"line_number":3824,"context_line":"                 \u0027error_code\u0027: error_code, \u0027exc\u0027: exc})"},{"line_number":3825,"context_line":"            raise"},{"line_number":3826,"context_line":""},{"line_number":3827,"context_line":"    def get_spice_console(self, context, instance):"},{"line_number":3828,"context_line":"        def get_spice_ports_for_instance(instance_name):"}],"source_content_type":"text/x-python","patch_set":28,"id":"a062fd8a_f9ca001c","line":3825,"range":{"start_line":3825,"start_character":12,"end_line":3825,"end_character":17},"in_reply_to":"93711f58_b0c6183b","updated":"2021-02-02 13:02:32.000000000","message":"Ack","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a5e9921112b8a22eb09557848d395cd5677e7a0","unresolved":true,"context_lines":[{"line_number":6342,"context_line":"            guest.add_device(dev)"},{"line_number":6343,"context_line":""},{"line_number":6344,"context_line":"    @staticmethod"},{"line_number":6345,"context_line":"    def _guest_add_video_device(guest, instance):"},{"line_number":6346,"context_line":"        # NB some versions of libvirt support both SPICE and VNC"},{"line_number":6347,"context_line":"        # at the same time. We\u0027re not trying to second guess which"},{"line_number":6348,"context_line":"        # those versions are. We\u0027ll just let libvirt report the"}],"source_content_type":"text/x-python","patch_set":29,"id":"85c44579_572193dc","line":6345,"range":{"start_line":6345,"start_character":39,"end_line":6345,"end_character":47},"updated":"2021-02-03 15:30:46.000000000","message":"nit: it would be better to just pass the password instead of the full instance but its ok i guess","commit_id":"9c99e28fc62d07dd8e3f6a7a24c9b39cacf725d7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"874dab477d3bac03a02b5919a8a0062604fc1ac9","unresolved":true,"context_lines":[{"line_number":3772,"context_line":"    def reset_vnc_passwd(self, instance, password):"},{"line_number":3773,"context_line":"        try:"},{"line_number":3774,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":3775,"context_line":"            xml \u003d guest.get_xml_desc()"},{"line_number":3776,"context_line":"            xml_dom \u003d etree.fromstring(xml)"},{"line_number":3777,"context_line":""},{"line_number":3778,"context_line":"            graphic \u003d xml_dom.find(\"./devices/graphics[@type\u003d\u0027vnc\u0027]\")"},{"line_number":3779,"context_line":"            if graphic is not None:"},{"line_number":3780,"context_line":"                graphic.set(\u0027passwd\u0027, password)"},{"line_number":3781,"context_line":"                gxml \u003d etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ed909f4e_fccd2907","line":3778,"range":{"start_line":3775,"start_character":1,"end_line":3778,"end_character":69},"updated":"2021-02-18 10:12:22.000000000","message":"supernit - This strikes me as something that should live in the Guest class returning a LibvirtConfig object. \n\n    graphic \u003d guest.get_graphic(type\u003d\u0027vnc\u0027)\n\nI guess we don\u0027t have any parse_dom logic in LibvirtConfigGuestGraphics that would make this pointless as we\u0027d still return an ElementTree.Element and still end up with the xml mess below.","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee6e768386d8cce219d7b1e5730875b3e3075ed6","unresolved":true,"context_lines":[{"line_number":3772,"context_line":"    def reset_vnc_passwd(self, instance, password):"},{"line_number":3773,"context_line":"        try:"},{"line_number":3774,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":3775,"context_line":"            xml \u003d guest.get_xml_desc()"},{"line_number":3776,"context_line":"            xml_dom \u003d etree.fromstring(xml)"},{"line_number":3777,"context_line":""},{"line_number":3778,"context_line":"            graphic \u003d xml_dom.find(\"./devices/graphics[@type\u003d\u0027vnc\u0027]\")"},{"line_number":3779,"context_line":"            if graphic is not None:"},{"line_number":3780,"context_line":"                graphic.set(\u0027passwd\u0027, password)"},{"line_number":3781,"context_line":"                gxml \u003d etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"f0565950_74d1fa09","line":3778,"range":{"start_line":3775,"start_character":1,"end_line":3778,"end_character":69},"in_reply_to":"ed909f4e_fccd2907","updated":"2021-02-18 11:14:09.000000000","message":"+1 Yeah, we have a couple of examples of this. I agree that this would make for a good API in \u0027nova.virt.libvirt.guest.Guest\u0027.","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":true,"context_lines":[{"line_number":3772,"context_line":"    def reset_vnc_passwd(self, instance, password):"},{"line_number":3773,"context_line":"        try:"},{"line_number":3774,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":3775,"context_line":"            xml \u003d guest.get_xml_desc()"},{"line_number":3776,"context_line":"            xml_dom \u003d etree.fromstring(xml)"},{"line_number":3777,"context_line":""},{"line_number":3778,"context_line":"            graphic \u003d xml_dom.find(\"./devices/graphics[@type\u003d\u0027vnc\u0027]\")"},{"line_number":3779,"context_line":"            if graphic is not None:"},{"line_number":3780,"context_line":"                graphic.set(\u0027passwd\u0027, password)"},{"line_number":3781,"context_line":"                gxml \u003d etree.tostring(graphic, encoding\u003d\u0027unicode\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"a01ec7d2_623ad1d4","line":3778,"range":{"start_line":3775,"start_character":1,"end_line":3778,"end_character":69},"in_reply_to":"f0565950_74d1fa09","updated":"2021-02-19 10:02:57.000000000","message":"can we modify in the follow change as there are couple of examples?","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}],"nova/virt/libvirt/guest.py":[{"author":{"_account_id":28889,"name":"Guo Jingyu","email":"guojy8993@163.com","username":"pandatt"},"change_message_id":"9ae7784e9019104aa2d29fb0a6fea5bc7efa5b6a","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            self._domain.updateDeviceFlags(xml, flags)"},{"line_number":137,"context_line":"        except libvirt.libvirtError:"},{"line_number":138,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":139,"context_line":"                LOG.error(\u0027Error resetting VNC password with \u0027"},{"line_number":140,"context_line":"                          \u0027graphics XML: %s\u0027, xml)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def launch(self, pause\u003dFalse):"},{"line_number":143,"context_line":"        \"\"\"Starts a created guest."}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_a9e2989e","line":140,"range":{"start_line":139,"start_character":16,"end_line":140,"end_character":50},"updated":"2020-03-30 11:00:26.000000000","message":"TODO: secret shouldn\u0027t be exposed by LOG","commit_id":"d2a3a9fb6d91889e7806da346d260aa6832ae6ab"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"272982b14fe73c6425bc09a364841ff044634d08","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            flags |\u003d libvirt.VIR_DOMAIN_AFFECT_LIVE"},{"line_number":135,"context_line":"        try:"},{"line_number":136,"context_line":"            self._domain.updateDeviceFlags(xml, flags)"},{"line_number":137,"context_line":"        except libvirt.libvirtError as e:"},{"line_number":138,"context_line":"            self._domain.updateDeviceFlags(xml,"},{"line_number":139,"context_line":"                flags\u003dlibvirt.VIR_DOMAIN_AFFECT_CONFIG)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_cc864a14","line":137,"updated":"2020-04-07 15:14:15.000000000","message":"pep8: F841 local variable \u0027e\u0027 is assigned to but never used","commit_id":"8353b5787b1c6f2f533d48cb58574b789951eb20"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0c24e92bc4ac5703b060fb26241c0d764a2c402e","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            flags |\u003d libvirt.VIR_DOMAIN_AFFECT_LIVE"},{"line_number":135,"context_line":"        try:"},{"line_number":136,"context_line":"            self._domain.updateDeviceFlags(xml, flags)"},{"line_number":137,"context_line":"        except libvirt.libvirtError as e:"},{"line_number":138,"context_line":"            self._domain.updateDeviceFlags(xml,"},{"line_number":139,"context_line":"                flags\u003dlibvirt.VIR_DOMAIN_AFFECT_CONFIG)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_5faf3ee2","line":137,"updated":"2020-04-09 11:00:35.000000000","message":"pep8: F841 local variable \u0027e\u0027 is assigned to but never used","commit_id":"8f851d869b6c3d059e671b1207c8ddc6dd9faa13"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":145,"context_line":"                          encodeutils.safe_decode(xml))"},{"line_number":146,"context_line":"        return guest"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def reset_vnc_passwd_with_xml(self, xml, live\u003dFalse):"},{"line_number":149,"context_line":"        \"\"\"Reset vnc password with graphics defination XML\"\"\""},{"line_number":150,"context_line":"        flags \u003d libvirt.VIR_DOMAIN_AFFECT_CONFIG"},{"line_number":151,"context_line":"        if live:"}],"source_content_type":"text/x-python","patch_set":26,"id":"3379555f_ed12f4fa","line":148,"range":{"start_line":148,"start_character":8,"end_line":148,"end_character":33},"updated":"2021-01-13 12:17:49.000000000","message":"this is not specific to password reset. This call can update the graphic tag in general","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":true,"context_lines":[{"line_number":145,"context_line":"                          encodeutils.safe_decode(xml))"},{"line_number":146,"context_line":"        return guest"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def reset_vnc_passwd_with_xml(self, xml, live\u003dFalse):"},{"line_number":149,"context_line":"        \"\"\"Reset vnc password with graphics defination XML\"\"\""},{"line_number":150,"context_line":"        flags \u003d libvirt.VIR_DOMAIN_AFFECT_CONFIG"},{"line_number":151,"context_line":"        if live:"}],"source_content_type":"text/x-python","patch_set":26,"id":"c86e2bd3_04560d36","line":148,"range":{"start_line":148,"start_character":8,"end_line":148,"end_character":33},"in_reply_to":"3379555f_ed12f4fa","updated":"2021-01-19 05:36:35.000000000","message":"yeah, changed the function name.","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6cc3c7634bcbbfb673abe3cbb58ff115c0867bec","unresolved":true,"context_lines":[{"line_number":146,"context_line":"        return guest"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def reset_vnc_passwd_with_xml(self, xml, live\u003dFalse):"},{"line_number":149,"context_line":"        \"\"\"Reset vnc password with graphics defination XML\"\"\""},{"line_number":150,"context_line":"        flags \u003d libvirt.VIR_DOMAIN_AFFECT_CONFIG"},{"line_number":151,"context_line":"        if live:"},{"line_number":152,"context_line":"            flags |\u003d libvirt.VIR_DOMAIN_AFFECT_LIVE"}],"source_content_type":"text/x-python","patch_set":26,"id":"580fe6a4_e6ccb3c6","line":149,"range":{"start_line":149,"start_character":44,"end_line":149,"end_character":54},"updated":"2021-01-13 12:17:49.000000000","message":"nit: definition","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"267c7c449f6d8e71310e9ebc439bc66971deba9a","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return guest"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def reset_vnc_passwd_with_xml(self, xml, live\u003dFalse):"},{"line_number":149,"context_line":"        \"\"\"Reset vnc password with graphics defination XML\"\"\""},{"line_number":150,"context_line":"        flags \u003d libvirt.VIR_DOMAIN_AFFECT_CONFIG"},{"line_number":151,"context_line":"        if live:"},{"line_number":152,"context_line":"            flags |\u003d libvirt.VIR_DOMAIN_AFFECT_LIVE"}],"source_content_type":"text/x-python","patch_set":26,"id":"6ad6c615_2ec5d8df","line":149,"range":{"start_line":149,"start_character":44,"end_line":149,"end_character":54},"in_reply_to":"580fe6a4_e6ccb3c6","updated":"2021-01-19 05:36:35.000000000","message":"Done","commit_id":"efa8a8ba20217978254888bf927e4b97d2cf3fc0"}],"releasenotes/notes/nova-support-webvnc-with-password-anthentication-a1e64b3a4ce1bff6.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3d79b704d9a9e5a1cffeba1398498ea2b995e73","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The support to encrypt VNC by passing ``password`` in the"},{"line_number":4,"context_line":"    ``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":5,"context_line":"    remote console with password authentication."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"809c4f90_d3e20c00","line":5,"updated":"2020-12-04 13:25:29.000000000","message":"Please mention the new configuration value that needs to be set to make this work","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"149a88b7bdc4c8acf70325eed3ab67f9c064c08c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The support to encrypt VNC by passing ``password`` in the"},{"line_number":4,"context_line":"    ``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":5,"context_line":"    remote console with password authentication."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"b6b343ce_558562c9","line":5,"in_reply_to":"809c4f90_d3e20c00","updated":"2020-12-10 08:33:37.000000000","message":"Done","commit_id":"1d9ffcc3c42a499788451b76bc05fb59153e8f71"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - The support to encrypt VNC by passing ``password`` in the"},{"line_number":4,"context_line":"    ``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":5,"context_line":"    remote console with password authentication."},{"line_number":6,"context_line":"    The  new configuration item_type value ``vnc`` that needs to be set in"},{"line_number":7,"context_line":"    ``auth_schemes`` group to make this work."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"43e4cdab_5145f4dc","line":6,"updated":"2021-01-04 13:26:19.000000000","message":"A new value ``vnc`` is added to the ``[vnc]auth_schemes`` configuration option to enable this feature.","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f23712dcf94223242c60e8fb4b554ed2dad85ef2","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - The support to encrypt VNC by passing ``password`` in the"},{"line_number":4,"context_line":"    ``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":5,"context_line":"    remote console with password authentication."},{"line_number":6,"context_line":"    The  new configuration item_type value ``vnc`` that needs to be set in"},{"line_number":7,"context_line":"    ``auth_schemes`` group to make this work."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"39617fa9_a288bd97","line":6,"range":{"start_line":6,"start_character":7,"end_line":6,"end_character":9},"updated":"2021-01-04 13:26:19.000000000","message":"nit: remove one of the spaces","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"e05f1502ecf9bbcb130bb20035d32117686a4b74","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - The support to encrypt VNC by passing ``password`` in the"},{"line_number":4,"context_line":"    ``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":5,"context_line":"    remote console with password authentication."},{"line_number":6,"context_line":"    The  new configuration item_type value ``vnc`` that needs to be set in"},{"line_number":7,"context_line":"    ``auth_schemes`` group to make this work."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"0a87a66b_37c01abc","line":6,"range":{"start_line":6,"start_character":7,"end_line":6,"end_character":9},"in_reply_to":"39617fa9_a288bd97","updated":"2021-01-08 15:53:45.000000000","message":"Done","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"e05f1502ecf9bbcb130bb20035d32117686a4b74","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - The support to encrypt VNC by passing ``password`` in the"},{"line_number":4,"context_line":"    ``POST /servers/\u003cuuid\u003e/remote-consoles`` API, which aims at providing a safer"},{"line_number":5,"context_line":"    remote console with password authentication."},{"line_number":6,"context_line":"    The  new configuration item_type value ``vnc`` that needs to be set in"},{"line_number":7,"context_line":"    ``auth_schemes`` group to make this work."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"dd35ac0a_00b8f275","line":6,"in_reply_to":"43e4cdab_5145f4dc","updated":"2021-01-08 15:53:45.000000000","message":"Done","commit_id":"e6e5dd72da65d64b02c50034d207aca2ea6a941b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"129496abb2cf13c3746a538465b85a91d5f5ea61","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":28,"id":"15aa1e55_69bb687e","line":8,"range":{"start_line":3,"start_character":4,"end_line":8,"end_character":0},"updated":"2021-01-29 15:13:50.000000000","message":"I would reword it a bit:\n\nThe new ``password`` field added in ``POST /servers/\u003cuuid\u003e/remote-consoles`` API allows configuring password for remote  VNC consoles. This feature needs to be enabled with the new ``vnc`` value of the ``[vnc]auth_schemes`` configuration option.","commit_id":"7162739628ac7b4a947188392d1fe04253d25816"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"874dab477d3bac03a02b5919a8a0062604fc1ac9","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The new ``password`` field added in ``POST /servers/\u003cuuid\u003e/remote-consoles``"},{"line_number":4,"context_line":"    API allows configuring password for remote  VNC consoles. This feature"},{"line_number":5,"context_line":"    needs to be enabled with the new ``vnc`` value of the ``[vnc]auth_schemes``"},{"line_number":6,"context_line":"    configuration option."}],"source_content_type":"text/x-yaml","patch_set":30,"id":"047c4d2e_e9ab118c","line":6,"range":{"start_line":3,"start_character":0,"end_line":6,"end_character":25},"updated":"2021-02-18 10:12:22.000000000","message":"You should reference the new microversion.","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"},{"author":{"_account_id":31412,"name":"Wenping Song","email":"songwenping@inspur.com","username":"songwenping"},"change_message_id":"80c3929738a2197cb2d6a37075a93244eec86b77","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The new ``password`` field added in ``POST /servers/\u003cuuid\u003e/remote-consoles``"},{"line_number":4,"context_line":"    API allows configuring password for remote  VNC consoles. This feature"},{"line_number":5,"context_line":"    needs to be enabled with the new ``vnc`` value of the ``[vnc]auth_schemes``"},{"line_number":6,"context_line":"    configuration option."}],"source_content_type":"text/x-yaml","patch_set":30,"id":"fb5e2552_6f66e3c7","line":6,"range":{"start_line":3,"start_character":0,"end_line":6,"end_character":25},"in_reply_to":"047c4d2e_e9ab118c","updated":"2021-02-19 10:02:57.000000000","message":"Done","commit_id":"82c35946f7b5fcb22997ada929bac4a3918b53bd"}]}
