)]}'
{"doc/source/contributor/webapi-version-history.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d82aa51b72d11ab1a1f31c5d0bdd3aac4bcd8abd","unresolved":false,"context_lines":[{"line_number":2,"context_line":"REST API Version History"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"1.57 (Train, 13.0.0)"},{"line_number":6,"context_line":"--------------------"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Added the following new endpoints for indicator management:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fce034c_0562643f","line":5,"updated":"2019-04-12 14:54:11.000000000","message":"please don\u0027t assume the next version, use \"master\" for now","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1abf9c9a162fe9fd75a598cd8c515766572bb2ff","unresolved":false,"context_lines":[{"line_number":2,"context_line":"REST API Version History"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"1.57 (Train, 13.0.0)"},{"line_number":6,"context_line":"--------------------"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Added the following new endpoints for indicator management:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fce034c_ffac608d","line":5,"in_reply_to":"3fce034c_0562643f","updated":"2019-04-15 21:30:13.000000000","message":"Done","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d82aa51b72d11ab1a1f31c5d0bdd3aac4bcd8abd","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Added the following new endpoints for indicator management:"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators/supported`` to list all"},{"line_number":11,"context_line":"  available indicators names for each of the hardware component."},{"line_number":12,"context_line":"  Currently known components are: ``system``, ``chassis`` and ``drive``."},{"line_number":13,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators/\u003ccomponent\u003e/\u003cindicator_ident\u003e``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fce034c_25676050","line":10,"updated":"2019-04-12 14:54:11.000000000","message":"please remove /supported, it should be exposed as links on /indicators","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1abf9c9a162fe9fd75a598cd8c515766572bb2ff","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Added the following new endpoints for indicator management:"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators/supported`` to list all"},{"line_number":11,"context_line":"  available indicators names for each of the hardware component."},{"line_number":12,"context_line":"  Currently known components are: ``system``, ``chassis`` and ``drive``."},{"line_number":13,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators/\u003ccomponent\u003e/\u003cindicator_ident\u003e``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fce034c_1fa84c75","line":10,"in_reply_to":"3fce034c_25676050","updated":"2019-04-15 21:30:13.000000000","message":"Done","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ce7457c196d96855674ec7ffa5c9f17fdbfe3588","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators`` to list all"},{"line_number":14,"context_line":"  available indicators names for each of the hardware component."},{"line_number":15,"context_line":"  Currently known components are: ``system``, ``chassis`` and ``drive``."},{"line_number":16,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators/\u003ccomponent\u003e/\u003cindicator_ident\u003e``"},{"line_number":17,"context_line":"  to retrieve all indicators and their states for the hardware component."},{"line_number":18,"context_line":"* ``PUT /v1/nodes/\u003cnode_ident\u003e/management/indicators/\u003ccomponent\u003e/\u003cindicator_ident\u003e``"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_c2dbf51e","line":15,"updated":"2019-06-18 04:36:04.000000000","message":"Should this be:\n\n  ``chassis``, ``system``, ``disk``, ``power`` and ``nic``\n\nas per https://review.opendev.org/#/c/649675/11/ironic/common/components.py","commit_id":"333077a15b40329cd53d841b5b42e041c9b6bff0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"53565a6bd3684f20b7c82033dd15f1c51f38ec48","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators`` to list all"},{"line_number":14,"context_line":"  available indicators names for each of the hardware component."},{"line_number":15,"context_line":"  Currently known components are: ``system``, ``chassis`` and ``drive``."},{"line_number":16,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators/\u003ccomponent\u003e/\u003cindicator_ident\u003e``"},{"line_number":17,"context_line":"  to retrieve all indicators and their states for the hardware component."},{"line_number":18,"context_line":"* ``PUT /v1/nodes/\u003cnode_ident\u003e/management/indicators/\u003ccomponent\u003e/\u003cindicator_ident\u003e``"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9fb8cfa7_d4262f69","line":15,"in_reply_to":"9fb8cfa7_c2dbf51e","updated":"2019-06-19 15:36:08.000000000","message":"Indeed!","commit_id":"333077a15b40329cd53d841b5b42e041c9b6bff0"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b9cb3aecd9deee1518fe75de26fbcf80743055ea","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added ``owner`` field to the allocation object. The field should match the"},{"line_number":18,"context_line":"``project_id`` of the intended owner. If the ``owner`` field is set, the"},{"line_number":19,"context_line":"allocation process will only match the allocation with a node that has the"},{"line_number":20,"context_line":"same ``owner`` field set."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"1.59 (Ussuri, master)"}],"source_content_type":"text/x-rst","patch_set":24,"id":"3fa7e38b_e95c7c59","side":"PARENT","line":19,"updated":"2020-02-07 00:28:21.000000000","message":"wut?!?","commit_id":"3004a1410b60b8aa8fb0287a417d1e1abecb2422"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ea62e82101cdae54507d89a3bea6423d8af016ba","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Added the following new endpoints for indicator management:"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"* Added ``owner`` field to the allocation object. The field should match the"},{"line_number":11,"context_line":"  ``project_id`` of the intended owner. If the ``owner`` field is set, the"},{"line_number":12,"context_line":"  allocation process will only match the allocation with a node that has the"},{"line_number":13,"context_line":"  same ``owner`` field set."},{"line_number":14,"context_line":"* ``GET /v1/nodes/\u003cnode_ident\u003e/management/indicators`` to list all"},{"line_number":15,"context_line":"  available indicators names for each of the hardware component."},{"line_number":16,"context_line":"  Currently known components are: ``chassis``, ``system``, ``disk``, ``power``"}],"source_content_type":"text/x-rst","patch_set":30,"id":"1fa4df85_98eed789","line":13,"range":{"start_line":10,"start_character":0,"end_line":13,"end_character":27},"updated":"2020-03-11 20:58:06.000000000","message":"This looks wrong :\\","commit_id":"ab9279dd8fbaa62e4dc6d6b0bbd855ede97e5e84"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d82aa51b72d11ab1a1f31c5d0bdd3aac4bcd8abd","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    @METRICS.timer(\u0027IndicatorController.get\u0027)"},{"line_number":301,"context_line":"    @expose.expose(wtypes.text, types.uuid_or_name, wtypes.text, wtypes.text)"},{"line_number":302,"context_line":"    def get(self, node_ident, component, indicator):"},{"line_number":303,"context_line":"        \"\"\"Get node hardware component indicator and their states."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        :param node_ident: the UUID or logical name of a node."}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_a5691026","line":302,"updated":"2019-04-12 14:54:11.000000000","message":"I\u0027m not sure if this even works, you\u0027re missing one intermediary step: an endpoint for /\u003ccomponent\u003e","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1abf9c9a162fe9fd75a598cd8c515766572bb2ff","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    @METRICS.timer(\u0027IndicatorController.get\u0027)"},{"line_number":301,"context_line":"    @expose.expose(wtypes.text, types.uuid_or_name, wtypes.text, wtypes.text)"},{"line_number":302,"context_line":"    def get(self, node_ident, component, indicator):"},{"line_number":303,"context_line":"        \"\"\"Get node hardware component indicator and their states."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        :param node_ident: the UUID or logical name of a node."}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_9f5f5c71","line":302,"in_reply_to":"3fce034c_a5691026","updated":"2019-04-15 21:30:13.000000000","message":"Hmmm, my understanding is that the intermediate component is needed for constant parts of the location path. The dynamic parts get eaten by this `RestController`...\n\nI am hopeful to finally assemble the whole thing and give it a devstack run...","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d82aa51b72d11ab1a1f31c5d0bdd3aac4bcd8abd","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @METRICS.timer(\u0027IndicatorController.supported\u0027)"},{"line_number":324,"context_line":"    @expose.expose(wtypes.text, types.uuid_or_name)"},{"line_number":325,"context_line":"    def supported(self, node_ident):"},{"line_number":326,"context_line":"        \"\"\"Get node hardware components and their indicators."},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        :param node_ident: the UUID or logical name of a node."}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_45762c09","line":325,"updated":"2019-04-12 14:54:11.000000000","message":"should be implemented via get_all","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1abf9c9a162fe9fd75a598cd8c515766572bb2ff","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    @METRICS.timer(\u0027IndicatorController.supported\u0027)"},{"line_number":324,"context_line":"    @expose.expose(wtypes.text, types.uuid_or_name)"},{"line_number":325,"context_line":"    def supported(self, node_ident):"},{"line_number":326,"context_line":"        \"\"\"Get node hardware components and their indicators."},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        :param node_ident: the UUID or logical name of a node."}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_bf79f8fc","line":325,"in_reply_to":"3fce034c_45762c09","updated":"2019-04-15 21:30:13.000000000","message":"Done","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d82aa51b72d11ab1a1f31c5d0bdd3aac4bcd8abd","unresolved":false,"context_lines":[{"line_number":333,"context_line":"                ::"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"                    {"},{"line_number":336,"context_line":"                        \u0027chassis\u0027: [\u0027enclosure-0\u0027],"},{"line_number":337,"context_line":"                        \u0027system\u0027: [\u0027blade-A\u0027]"},{"line_number":338,"context_line":"                        \u0027drive\u0027: [\u0027ssd0\u0027]"},{"line_number":339,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_65732817","line":336,"updated":"2019-04-12 14:54:11.000000000","message":"should have links to sub-urls and should only link a components","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1abf9c9a162fe9fd75a598cd8c515766572bb2ff","unresolved":false,"context_lines":[{"line_number":333,"context_line":"                ::"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"                    {"},{"line_number":336,"context_line":"                        \u0027chassis\u0027: [\u0027enclosure-0\u0027],"},{"line_number":337,"context_line":"                        \u0027system\u0027: [\u0027blade-A\u0027]"},{"line_number":338,"context_line":"                        \u0027drive\u0027: [\u0027ssd0\u0027]"},{"line_number":339,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_16d112ce","line":336,"in_reply_to":"3fce034c_65732817","updated":"2019-04-15 21:30:13.000000000","message":"Done","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    links \u003d wsme.wsattr([link.Link], readonly\u003dTrue)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def __init__(self, **kwargs):"},{"line_number":280,"context_line":"        self.name \u003d kwargs.get(\u0027name\u0027)"},{"line_number":281,"context_line":"        self.component \u003d kwargs.get(\u0027component\u0027)"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_969e57b6","line":279,"updated":"2019-04-16 10:04:05.000000000","message":"Why not pass arguments explicitly?","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"5da213f41c964c3cadd734b249e2530c615d3e24","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    links \u003d wsme.wsattr([link.Link], readonly\u003dTrue)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def __init__(self, **kwargs):"},{"line_number":280,"context_line":"        self.name \u003d kwargs.get(\u0027name\u0027)"},{"line_number":281,"context_line":"        self.component \u003d kwargs.get(\u0027component\u0027)"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_888dd37c","line":279,"in_reply_to":"3fce034c_969e57b6","updated":"2019-04-17 11:21:46.000000000","message":"Well, the only subtile reason is to align with the base wsme type signature:\n\n\n    class Base(six.with_metaclass(BaseMeta)):\n        \"\"\"Base type for complex types\"\"\"\n        def __init__(self, **kw):\n            for key, value in kw.items():\n                if hasattr(self, key):\n                    setattr(self, key, value)","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            link.Link.make_link("},{"line_number":294,"context_line":"                \u0027bookmark\u0027, url, \u0027nodes\u0027,"},{"line_number":295,"context_line":"                \u0027%s/management/indicators/%s/%s\u0027 % ("},{"line_number":296,"context_line":"                    node_uuid, component, name),"},{"line_number":297,"context_line":"                bookmark\u003dTrue)]"},{"line_number":298,"context_line":"        return indicator"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_36a52305","line":296,"updated":"2019-04-16 10:04:05.000000000","message":"You should only link to components and each component should link to each indicator. Annoying, but quite in spirit of Redfish :)","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"class IndicatorController(rest.RestController):"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    @METRICS.timer(\u0027IndicatorController.put\u0027)"},{"line_number":330,"context_line":"    @expose.expose(None, types.uuid_or_name, wtypes.text, wtypes.text,"},{"line_number":331,"context_line":"                   wtypes.text, status_code\u003dhttp_client.NO_CONTENT)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_56a8efd9","line":328,"updated":"2019-04-16 10:04:05.000000000","message":"Needs microversioning (see allocations or deploy templates for examples on how to use routing to version the whole controller)","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"}],"ironic/api/controllers/v1/versions.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"49a80b0c8672549019849325c0d517f9ca01b3f5","unresolved":false,"context_lines":[{"line_number":97,"context_line":"# v1.57: Add support for updating an exisiting allocation."},{"line_number":98,"context_line":"# v1.58: Add support for backfilling allocations."},{"line_number":99,"context_line":"# v1.59: Add support vendor data in configdrives."},{"line_number":100,"context_line":"# v1.60: Add support for indicators"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":103,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":22,"id":"3fa7e38b_6401b86d","line":100,"updated":"2019-12-19 16:26:58.000000000","message":"This needs to be rebased on master, as v1.60 has been released. v1.61 would be IPA security comm improvements which is in a decent shape to land, so it may be good to rebase this off of that as that patch chain is 5 patches across two projects that would need to be updated/rebased as opposed to a single patch at this time.","commit_id":"4814fedb7ae4a569701cc8ef7d069de12e86b94b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b4a8ffd81fd45202eb2d20d86aef0419df205ba1","unresolved":false,"context_lines":[{"line_number":97,"context_line":"# v1.57: Add support for updating an exisiting allocation."},{"line_number":98,"context_line":"# v1.58: Add support for backfilling allocations."},{"line_number":99,"context_line":"# v1.59: Add support vendor data in configdrives."},{"line_number":100,"context_line":"# v1.60: Add support for indicators"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":103,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":22,"id":"3fa7e38b_003f4c86","line":100,"in_reply_to":"3fa7e38b_6401b86d","updated":"2020-01-02 15:02:23.000000000","message":"Done","commit_id":"4814fedb7ae4a569701cc8ef7d069de12e86b94b"}],"ironic/common/policy.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d82aa51b72d11ab1a1f31c5d0bdd3aac4bcd8abd","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        \u0027Change Node indicator state\u0027,"},{"line_number":142,"context_line":"        [{\u0027path\u0027: \u0027/nodes/{node_ident}/management/indicators/\u0027"},{"line_number":143,"context_line":"                  \u0027{component}/{indicator}\u0027,"},{"line_number":144,"context_line":"          \u0027method\u0027: \u0027PATCH\u0027}]),"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":147,"context_line":"        \u0027baremetal:node:inject_nmi\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_e5607835","line":144,"updated":"2019-04-12 14:54:11.000000000","message":"PUT","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1abf9c9a162fe9fd75a598cd8c515766572bb2ff","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        \u0027Change Node indicator state\u0027,"},{"line_number":142,"context_line":"        [{\u0027path\u0027: \u0027/nodes/{node_ident}/management/indicators/\u0027"},{"line_number":143,"context_line":"                  \u0027{component}/{indicator}\u0027,"},{"line_number":144,"context_line":"          \u0027method\u0027: \u0027PATCH\u0027}]),"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":147,"context_line":"        \u0027baremetal:node:inject_nmi\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_b68d9ed4","line":144,"in_reply_to":"3fce034c_e5607835","updated":"2019-04-15 21:30:13.000000000","message":"Done","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        \u0027Retrieve Node indicators and their states\u0027,"},{"line_number":133,"context_line":"        [{\u0027path\u0027: \u0027/nodes/{node_ident}/management/indicators/\u0027"},{"line_number":134,"context_line":"                  \u0027{component}/{indicator}\u0027,"},{"line_number":135,"context_line":"          \u0027method\u0027: \u0027GET\u0027},"},{"line_number":136,"context_line":"         {\u0027path\u0027: \u0027/nodes/{node_ident}/management/indicators\u0027,"},{"line_number":137,"context_line":"          \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":138,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_16aa67d1","line":135,"updated":"2019-04-16 10:04:05.000000000","message":"missing path /indicators/{component}","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"}],"ironic/conductor/manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d82aa51b72d11ab1a1f31c5d0bdd3aac4bcd8abd","unresolved":false,"context_lines":[{"line_number":3089,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":3090,"context_line":"                                  purpose\u003d\u0027setting indicator state\u0027) as task:"},{"line_number":3091,"context_line":"            task.driver.management.validate(task)"},{"line_number":3092,"context_line":"            task.driver.management.set_indicator_state("},{"line_number":3093,"context_line":"                task, component, indicator, state)"},{"line_number":3094,"context_line":""},{"line_number":3095,"context_line":"    @METRICS.timer(\u0027ConductorManager.get_indicator_states\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_c55bfc84","line":3092,"updated":"2019-04-12 14:54:11.000000000","message":"This should better be asynchronous.","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"58881f75225735391151e4b4dd0bcf5adeaf8ba3","unresolved":false,"context_lines":[{"line_number":3089,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":3090,"context_line":"                                  purpose\u003d\u0027setting indicator state\u0027) as task:"},{"line_number":3091,"context_line":"            task.driver.management.validate(task)"},{"line_number":3092,"context_line":"            task.driver.management.set_indicator_state("},{"line_number":3093,"context_line":"                task, component, indicator, state)"},{"line_number":3094,"context_line":""},{"line_number":3095,"context_line":"    @METRICS.timer(\u0027ConductorManager.get_indicator_states\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_13cb5972","line":3092,"in_reply_to":"3fce034c_5631da0a","updated":"2019-04-16 09:27:23.000000000","message":"If this locks up for a minute (because, BMC), it will lock a conductor RPC thread and an API thread/process waiting for it. Think of our power state changes: we do them asynchronously. A request is accepted, then we process it internally.","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1abf9c9a162fe9fd75a598cd8c515766572bb2ff","unresolved":false,"context_lines":[{"line_number":3089,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":3090,"context_line":"                                  purpose\u003d\u0027setting indicator state\u0027) as task:"},{"line_number":3091,"context_line":"            task.driver.management.validate(task)"},{"line_number":3092,"context_line":"            task.driver.management.set_indicator_state("},{"line_number":3093,"context_line":"                task, component, indicator, state)"},{"line_number":3094,"context_line":""},{"line_number":3095,"context_line":"    @METRICS.timer(\u0027ConductorManager.get_indicator_states\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_5631da0a","line":3092,"in_reply_to":"3fce034c_c55bfc84","updated":"2019-04-15 21:30:13.000000000","message":"Could you please elaborate on this?","commit_id":"d742887003639291812ad67625fef01df886538e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":3117,"context_line":"        \"\"\""},{"line_number":3118,"context_line":"        LOG.debug(\u0027RPC get_indicator_states called for node %s\u0027, node_id)"},{"line_number":3119,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":3120,"context_line":"                                  purpose\u003d\u0027getting indicators states\u0027) as task:"},{"line_number":3121,"context_line":"            task.driver.management.validate(task)"},{"line_number":3122,"context_line":"            return task.driver.management.get_indicator_state("},{"line_number":3123,"context_line":"                task, component, indicator)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_f6aebbe5","line":3120,"updated":"2019-04-16 10:04:05.000000000","message":"are you sure you need an exlusive lock here?","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"}],"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":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":1931,"context_line":"        data \u003d self.get_json("},{"line_number":1932,"context_line":"            \u0027/nodes/%s/management/indicators\u0027"},{"line_number":1933,"context_line":"            \u0027/%s/%s\u0027 % (node.uuid, component, indicator),"},{"line_number":1934,"context_line":"            headers\u003d{api_base.Version.string: \"1.57\"})"},{"line_number":1935,"context_line":"        self.assertEqual(expected_data, data)"},{"line_number":1936,"context_line":"        mock_gis.assert_called_once_with("},{"line_number":1937,"context_line":"            mock.ANY, node.uuid, component, indicator,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_b6b8332a","line":1934,"updated":"2019-04-16 10:04:05.000000000","message":"this is identicaly to the previous test. you need to use an older version (1.56) and make sure the code is METHOD_NOT_ALLOWED for PUT and NOT_FOUND for GET (see allocations or deploy templates)","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":1936,"context_line":"        mock_gis.assert_called_once_with("},{"line_number":1937,"context_line":"            mock.ANY, node.uuid, component, indicator,"},{"line_number":1938,"context_line":"            topic\u003d\u0027test-topic\u0027)"},{"line_number":1939,"context_line":""},{"line_number":1940,"context_line":"    @mock.patch.object(rpcapi.ConductorAPI, \u0027get_indicator_state\u0027)"},{"line_number":1941,"context_line":"    def test_get_indicator_state_iface_not_supported(self, mock_gis):"},{"line_number":1942,"context_line":"        node \u003d obj_utils.create_test_node(self.context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_d6b37f4c","line":1939,"updated":"2019-04-16 10:04:05.000000000","message":"missing unit test for GET /nodes/%s/management/indicators/%s (a component)","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":1978,"context_line":"        }"},{"line_number":1979,"context_line":""},{"line_number":1980,"context_line":"        data \u003d self.get_json(\u0027/nodes/%s/management/indicators\u0027"},{"line_number":1981,"context_line":"                             % node.uuid)"},{"line_number":1982,"context_line":"        self.assertEqual(expected_data, data)"},{"line_number":1983,"context_line":"        mock_gsi.assert_called_once_with(mock.ANY, node.uuid, \u0027test-topic\u0027)"},{"line_number":1984,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_76840b5f","line":1981,"updated":"2019-04-16 10:04:05.000000000","message":"missing unit test on this URL with older API version (see above)","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":5164,"context_line":"        ret \u003d self.put_json("},{"line_number":5165,"context_line":"            \u0027/nodes/%s/management/indicators\u0027"},{"line_number":5166,"context_line":"            \u0027/%s/%s\u0027 % (self.node.uuid, component, indicator),"},{"line_number":5167,"context_line":"            {\u0027state\u0027: state}, headers\u003d{api_base.Version.string: \"1.57\"})"},{"line_number":5168,"context_line":"        self.assertEqual(http_client.NO_CONTENT, ret.status_code)"},{"line_number":5169,"context_line":"        self.assertEqual(b\u0027\u0027, ret.body)"},{"line_number":5170,"context_line":"        mock_sis.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_96873762","line":5167,"updated":"2019-04-16 10:04:05.000000000","message":"ditto re incorrect versioning tests","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce37ddc43ba6a4860c76225b47fa1c794db1f04","unresolved":false,"context_lines":[{"line_number":5213,"context_line":"            expect_errors\u003dTrue)"},{"line_number":5214,"context_line":"        self.assertEqual(\u0027application/json\u0027, ret.content_type)"},{"line_number":5215,"context_line":"        self.assertEqual(http_client.BAD_REQUEST, ret.status_code)"},{"line_number":5216,"context_line":""},{"line_number":5217,"context_line":""},{"line_number":5218,"context_line":"class TestCheckCleanSteps(base.TestCase):"},{"line_number":5219,"context_line":"    def test__check_clean_steps_not_list(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fce034c_367e836b","line":5216,"updated":"2019-04-16 10:04:05.000000000","message":"missing unit tests on METHOD_NOT_ALLOWED for PUT on /indicators and /indicators/%s","commit_id":"8b3d77d2fb66b61cdd296f63d8688c9ca88990c1"}]}
