)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"f151279f9e7b1f667e3ca3000010713a18285401","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"73d5d7ff_dafa1bfc","updated":"2024-11-30 05:07:26.000000000","message":"recheck - paramiko.ssh_exception.SSHException: No existing session","commit_id":"13f61e674ee014d2880250b669d5f68175bf0816"}],"api-ref/source/baremetal-api-v1-node-management.inc":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc28f8475e949df9278db4edc3b2c91a48b77401","unresolved":true,"context_lines":[{"line_number":461,"context_line":"   or ``service_steps`` dictionary."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":".. versionadded:: 1.95"},{"line_number":464,"context_line":"   Added the ability to set/unset disable_power_off on a node."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"Normal response code: 202"},{"line_number":467,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":2,"id":"f3962982_80912b99","line":464,"updated":"2024-11-27 15:24:37.000000000","message":"nit: ``disable_power_off`` (double ticks)","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ba02ab1520304401a51ae1bd9a62247c5e9c218f","unresolved":false,"context_lines":[{"line_number":461,"context_line":"   or ``service_steps`` dictionary."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":".. versionadded:: 1.95"},{"line_number":464,"context_line":"   Added the ability to set/unset disable_power_off on a node."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"Normal response code: 202"},{"line_number":467,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":2,"id":"de55f271_ce596e70","line":464,"in_reply_to":"f3962982_80912b99","updated":"2024-11-28 12:08:24.000000000","message":"Done","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ca75f3ad6f3d4052c85909b24e3bf962d622d31","unresolved":false,"context_lines":[{"line_number":906,"context_line":"  description: |"},{"line_number":907,"context_line":"    If set to ``true``, power off for the node is explicitly disabled,"},{"line_number":908,"context_line":"    instead a reboot will be used in place of power on/off. Also when"},{"line_number":909,"context_line":"    possible the node is disabled in place of power off."},{"line_number":910,"context_line":"  in: body"},{"line_number":911,"context_line":"  required: false"},{"line_number":912,"context_line":"  type: boolean"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"62e6114d_3202bfe9","line":909,"updated":"2024-11-12 14:14:43.000000000","message":"I\u0027m not sure what you mean by the last sentence.","commit_id":"66bfb946467c3292df3530400b647104186924e5"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"9408bd97048f458841e563e193319b017835b809","unresolved":true,"context_lines":[{"line_number":906,"context_line":"  description: |"},{"line_number":907,"context_line":"    If set to ``true``, power off for the node is explicitly disabled,"},{"line_number":908,"context_line":"    instead a reboot will be used in place of power on/off. Also when"},{"line_number":909,"context_line":"    possible the node is disabled in place of power off."},{"line_number":910,"context_line":"  in: body"},{"line_number":911,"context_line":"  required: false"},{"line_number":912,"context_line":"  type: boolean"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"dbc1bf44_356b3ed7","line":909,"in_reply_to":"62e6114d_3202bfe9","updated":"2024-11-12 16:02:20.000000000","message":"How about something like\n\nIf set to ``true``, power off for the node is explicitly disabled,\ninstead, a reboot will be used in place of power on/off. Additionally, when possible, the node will be disabled (i.e., its API agent will be rendered unusable and network configuration will be removed) instead of being powered \noff.","commit_id":"66bfb946467c3292df3530400b647104186924e5"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"00c42c4556e9cbc41cc19e1868c22bcceae72d66","unresolved":false,"context_lines":[{"line_number":906,"context_line":"  description: |"},{"line_number":907,"context_line":"    If set to ``true``, power off for the node is explicitly disabled,"},{"line_number":908,"context_line":"    instead a reboot will be used in place of power on/off. Also when"},{"line_number":909,"context_line":"    possible the node is disabled in place of power off."},{"line_number":910,"context_line":"  in: body"},{"line_number":911,"context_line":"  required: false"},{"line_number":912,"context_line":"  type: boolean"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"2388366b_6e394eb2","line":909,"in_reply_to":"dbc1bf44_356b3ed7","updated":"2024-11-13 11:05:39.000000000","message":"Done","commit_id":"66bfb946467c3292df3530400b647104186924e5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc28f8475e949df9278db4edc3b2c91a48b77401","unresolved":true,"context_lines":[{"line_number":899,"context_line":"    If set to true, power off for the node is explicitly disabled, instead, a"},{"line_number":900,"context_line":"    reboot will be used in place of power on/off.  Additionally, when possible,"},{"line_number":901,"context_line":"    the node will be disabled (i.e., its API agent will be rendered unusable"},{"line_number":902,"context_line":"    and network configurationwill be removed) instead of being powered off."},{"line_number":903,"context_line":"  in: body"},{"line_number":904,"context_line":"  required: false"},{"line_number":905,"context_line":"  type: boolean"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"344100e9_8b8b6d96","line":902,"updated":"2024-11-27 15:24:37.000000000","message":"Missing space before \"will\"","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ba02ab1520304401a51ae1bd9a62247c5e9c218f","unresolved":false,"context_lines":[{"line_number":899,"context_line":"    If set to true, power off for the node is explicitly disabled, instead, a"},{"line_number":900,"context_line":"    reboot will be used in place of power on/off.  Additionally, when possible,"},{"line_number":901,"context_line":"    the node will be disabled (i.e., its API agent will be rendered unusable"},{"line_number":902,"context_line":"    and network configurationwill be removed) instead of being powered off."},{"line_number":903,"context_line":"  in: body"},{"line_number":904,"context_line":"  required: false"},{"line_number":905,"context_line":"  type: boolean"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"36ccb8f3_69b3b6fa","line":902,"in_reply_to":"344100e9_8b8b6d96","updated":"2024-11-28 12:08:24.000000000","message":"Done","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc28f8475e949df9278db4edc3b2c91a48b77401","unresolved":true,"context_lines":[{"line_number":1694,"context_line":"  type: string"},{"line_number":1695,"context_line":"req_disable_power_off:"},{"line_number":1696,"context_line":"  description: |"},{"line_number":1697,"context_line":"    Set to ``true``, disable power off of a node."},{"line_number":1698,"context_line":"  in: body"},{"line_number":1699,"context_line":"  required: false"},{"line_number":1700,"context_line":"  type: boolean"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9f90c6d3_775ab8a3","line":1697,"updated":"2024-11-27 15:24:37.000000000","message":"I think here it\u0027s even more valuable to have the complete description, like for the response field above","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ba02ab1520304401a51ae1bd9a62247c5e9c218f","unresolved":false,"context_lines":[{"line_number":1694,"context_line":"  type: string"},{"line_number":1695,"context_line":"req_disable_power_off:"},{"line_number":1696,"context_line":"  description: |"},{"line_number":1697,"context_line":"    Set to ``true``, disable power off of a node."},{"line_number":1698,"context_line":"  in: body"},{"line_number":1699,"context_line":"  required: false"},{"line_number":1700,"context_line":"  type: boolean"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"dd28753c_ea86c303","line":1697,"in_reply_to":"9f90c6d3_775ab8a3","updated":"2024-11-28 12:08:24.000000000","message":"Done","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"}],"ironic/api/controllers/v1/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc28f8475e949df9278db4edc3b2c91a48b77401","unresolved":true,"context_lines":[{"line_number":878,"context_line":"    \u0027parent_node\u0027: versions.MINOR_83_PARENT_CHILD_NODES,"},{"line_number":879,"context_line":"    \u0027firmware_interface\u0027: versions.MINOR_86_FIRMWARE_INTERFACE,"},{"line_number":880,"context_line":"    \u0027service_step\u0027: versions.MINOR_87_SERVICE,"},{"line_number":881,"context_line":"    \u0027disable_power_off\u0027: versions.MINOR_95_DISABLE_POWER_OFF"},{"line_number":882,"context_line":"}"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"for field in V31_FIELDS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fa9e2af_bfb867fc","line":881,"updated":"2024-11-27 15:24:37.000000000","message":"nit: add trailing comma","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ba02ab1520304401a51ae1bd9a62247c5e9c218f","unresolved":false,"context_lines":[{"line_number":878,"context_line":"    \u0027parent_node\u0027: versions.MINOR_83_PARENT_CHILD_NODES,"},{"line_number":879,"context_line":"    \u0027firmware_interface\u0027: versions.MINOR_86_FIRMWARE_INTERFACE,"},{"line_number":880,"context_line":"    \u0027service_step\u0027: versions.MINOR_87_SERVICE,"},{"line_number":881,"context_line":"    \u0027disable_power_off\u0027: versions.MINOR_95_DISABLE_POWER_OFF"},{"line_number":882,"context_line":"}"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"for field in V31_FIELDS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"907ce006_062b0e00","line":881,"in_reply_to":"5fa9e2af_bfb867fc","updated":"2024-11-28 12:08:24.000000000","message":"Done, although there was none there before the patch","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc28f8475e949df9278db4edc3b2c91a48b77401","unresolved":true,"context_lines":[{"line_number":2222,"context_line":"    return api.request.version.minor \u003e\u003d versions.MINOR_94_PORT_NODENAME"},{"line_number":2223,"context_line":""},{"line_number":2224,"context_line":""},{"line_number":2225,"context_line":"def allow_node_disable_power_off():"},{"line_number":2226,"context_line":"    \"\"\"Check if \u0027disable_power_off\u0027 can be set/unset on nodes\"\"\""},{"line_number":2227,"context_line":"    return api.request.version.minor \u003e\u003d versions.MINOR_95_DISABLE_POWER_OFF"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c5248b1_5c2f370c","line":2225,"updated":"2024-11-27 15:24:37.000000000","message":"Is this call used anywhere? It\u0027s possible that updating VERSIONED_FIELDS is enough.","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ba02ab1520304401a51ae1bd9a62247c5e9c218f","unresolved":false,"context_lines":[{"line_number":2222,"context_line":"    return api.request.version.minor \u003e\u003d versions.MINOR_94_PORT_NODENAME"},{"line_number":2223,"context_line":""},{"line_number":2224,"context_line":""},{"line_number":2225,"context_line":"def allow_node_disable_power_off():"},{"line_number":2226,"context_line":"    \"\"\"Check if \u0027disable_power_off\u0027 can be set/unset on nodes\"\"\""},{"line_number":2227,"context_line":"    return api.request.version.minor \u003e\u003d versions.MINOR_95_DISABLE_POWER_OFF"}],"source_content_type":"text/x-python","patch_set":2,"id":"fe6b0e31_77c8a797","line":2225,"in_reply_to":"2c5248b1_5c2f370c","updated":"2024-11-28 12:08:24.000000000","message":"I\u0027ve removed it, I may have been using it at some stage, not sure...","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"}],"ironic/common/policy.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ca75f3ad6f3d4052c85909b24e3bf962d622d31","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":1065,"context_line":"        name\u003d\u0027baremetal:node:update:disable_power_off\u0027,"},{"line_number":1066,"context_line":"        check_str\u003dSYSTEM_ADMIN,"},{"line_number":1067,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":1068,"context_line":"        description\u003d\u0027Governs if power off can be disabled via he API clients.\u0027,"},{"line_number":1069,"context_line":"        operations\u003d["},{"line_number":1070,"context_line":"            {\u0027path\u0027: \u0027/nodes/{node_ident}\u0027, \u0027method\u0027: \u0027PATCH\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"657f81d1_a1fcc31a","line":1067,"updated":"2024-11-12 14:14:43.000000000","message":"I think scope_types should include \"project\" even if the default policy does not use it","commit_id":"66bfb946467c3292df3530400b647104186924e5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ca75f3ad6f3d4052c85909b24e3bf962d622d31","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"        name\u003d\u0027baremetal:node:update:disable_power_off\u0027,"},{"line_number":1066,"context_line":"        check_str\u003dSYSTEM_ADMIN,"},{"line_number":1067,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":1068,"context_line":"        description\u003d\u0027Governs if power off can be disabled via he API clients.\u0027,"},{"line_number":1069,"context_line":"        operations\u003d["},{"line_number":1070,"context_line":"            {\u0027path\u0027: \u0027/nodes/{node_ident}\u0027, \u0027method\u0027: \u0027PATCH\u0027}"},{"line_number":1071,"context_line":"        ],"}],"source_content_type":"text/x-python","patch_set":1,"id":"e52ae531_96097cc3","line":1068,"updated":"2024-11-12 14:14:43.000000000","message":"nit: \"the API\"","commit_id":"66bfb946467c3292df3530400b647104186924e5"}],"ironic/tests/unit/api/controllers/v1/test_node.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc28f8475e949df9278db4edc3b2c91a48b77401","unresolved":true,"context_lines":[{"line_number":529,"context_line":"        data \u003d self.get_json(\u0027/nodes/%s\u0027 % node.uuid,"},{"line_number":530,"context_line":"                             headers\u003d{api_base.Version.string: \u00271.95\u0027})"},{"line_number":531,"context_line":"        # Default for disable_power_off is False (so not Null)"},{"line_number":532,"context_line":"        self.assertFalse(data[\u0027disable_power_off\u0027])"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def test_node_disable_power_off_true_field(self):"},{"line_number":535,"context_line":"        node \u003d obj_utils.create_test_node(self.context, disable_power_off\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"24069250_0d9c2a1e","line":532,"updated":"2024-11-27 15:24:37.000000000","message":"assertFalse is going to pass for None, you probably want assertIs(.., False)","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ba02ab1520304401a51ae1bd9a62247c5e9c218f","unresolved":false,"context_lines":[{"line_number":529,"context_line":"        data \u003d self.get_json(\u0027/nodes/%s\u0027 % node.uuid,"},{"line_number":530,"context_line":"                             headers\u003d{api_base.Version.string: \u00271.95\u0027})"},{"line_number":531,"context_line":"        # Default for disable_power_off is False (so not Null)"},{"line_number":532,"context_line":"        self.assertFalse(data[\u0027disable_power_off\u0027])"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def test_node_disable_power_off_true_field(self):"},{"line_number":535,"context_line":"        node \u003d obj_utils.create_test_node(self.context, disable_power_off\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3663436d_c21a651a","line":532,"in_reply_to":"24069250_0d9c2a1e","updated":"2024-11-28 12:08:24.000000000","message":"Done","commit_id":"2fa7a340dd8e9e6595f67a555acec9d1bc05a7ca"}],"releasenotes/notes/disable_power_off_api-a8fa90405a9261e3.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ca75f3ad6f3d4052c85909b24e3bf962d622d31","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds support for set \u0027disable_power_node\u0027 on node creation"},{"line_number":5,"context_line":"    along with set/unset \u0027disable_power_node\u0027 on existing nodes."},{"line_number":6,"context_line":"    If set to ``true``, power off for the node is explicitly disabled,"},{"line_number":7,"context_line":"    instead a reboot will be used in place of power on/off. Also when"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"2e66b936_3c29806c","line":4,"updated":"2024-11-12 14:14:43.000000000","message":"Typo: disable_power_off\n\nalso: to set / for setting?","commit_id":"66bfb946467c3292df3530400b647104186924e5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ca75f3ad6f3d4052c85909b24e3bf962d622d31","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds support for set \u0027disable_power_node\u0027 on node creation"},{"line_number":5,"context_line":"    along with set/unset \u0027disable_power_node\u0027 on existing nodes."},{"line_number":6,"context_line":"    If set to ``true``, power off for the node is explicitly disabled,"},{"line_number":7,"context_line":"    instead a reboot will be used in place of power on/off. Also when"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"74fa9e09_9833cf83","line":4,"updated":"2024-11-12 14:14:43.000000000","message":"nit: use double ticks around symbol names: ``disable_power_off``","commit_id":"66bfb946467c3292df3530400b647104186924e5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ca75f3ad6f3d4052c85909b24e3bf962d622d31","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    along with set/unset \u0027disable_power_node\u0027 on existing nodes."},{"line_number":6,"context_line":"    If set to ``true``, power off for the node is explicitly disabled,"},{"line_number":7,"context_line":"    instead a reboot will be used in place of power on/off. Also when"},{"line_number":8,"context_line":"    possible the node is disabled in place of power off."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":1,"id":"fa60d9ea_08f96ae1","line":8,"updated":"2024-11-12 14:14:43.000000000","message":"Same question about the last sentence (not sure what you mean under \"node is disabled\")","commit_id":"66bfb946467c3292df3530400b647104186924e5"}]}
