)]}'
{"ironic/common/components.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"de5b52259cf772652debdbcaab9315b477529e5f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"Chassis enclosing one or more hardware components\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"SYSTEM \u003d \u0027system\u0027"},{"line_number":24,"context_line":"\"Computing system\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"DISK \u003d \u0027disk\u0027"},{"line_number":27,"context_line":"\"Storage drive\""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_e386cd13","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":18},"updated":"2019-06-10 10:38:11.000000000","message":"All comments in this file needs to be updated as:\ns/ \"Computing system\" / \"\"\"Computing system\"\"\"","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b0bf646183f5136bac2b08d119ce6c47219b7d3e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"Chassis enclosing one or more hardware components\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"SYSTEM \u003d \u0027system\u0027"},{"line_number":24,"context_line":"\"Computing system\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"DISK \u003d \u0027disk\u0027"},{"line_number":27,"context_line":"\"Storage drive\""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_a5ca154b","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":18},"in_reply_to":"9fb8cfa7_e386cd13","updated":"2019-06-10 13:47:14.000000000","message":"Done","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"}],"ironic/common/indicator_states.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"2c2c277a4c9860c41f0ca981bd373932f323913e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"ON \u003d \u0027on\u0027"},{"line_number":24,"context_line":"\"LED is on\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"BLINKING \u003d \u0027blinking\u0027"},{"line_number":27,"context_line":"\"LED is blinking\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_531293b3","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":8},"updated":"2019-04-11 06:27:33.000000000","message":"Do we need to add \u0027Unknown\u0027 as well? For some of the devices like \u0027Chassis\u0027 its a supported value [1] where \u0027The state of the Indicator LED cannot be determined.\u0027\n[1] https://www.dmtf.org/sites/default/files/standards/documents/DSP2046_2017.0a.pdf","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"2e2e9d36f57ca82291466da432d4be1006c21976","unresolved":false,"context_lines":[{"line_number":23,"context_line":"ON \u003d \u0027on\u0027"},{"line_number":24,"context_line":"\"LED is on\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"BLINKING \u003d \u0027blinking\u0027"},{"line_number":27,"context_line":"\"LED is blinking\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_e491379b","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":8},"in_reply_to":"3fce034c_531293b3","updated":"2019-04-15 17:31:43.000000000","message":"Done","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"de5b52259cf772652debdbcaab9315b477529e5f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"OFF \u003d \u0027off\u0027"},{"line_number":21,"context_line":"\"LED is off\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ON \u003d \u0027on\u0027"},{"line_number":24,"context_line":"\"LED is on\""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_837fd113","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":12},"updated":"2019-06-10 10:38:11.000000000","message":"ditto","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b0bf646183f5136bac2b08d119ce6c47219b7d3e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"OFF \u003d \u0027off\u0027"},{"line_number":21,"context_line":"\"LED is off\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ON \u003d \u0027on\u0027"},{"line_number":24,"context_line":"\"LED is on\""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_45d8f91c","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":12},"in_reply_to":"9fb8cfa7_837fd113","updated":"2019-06-10 13:47:14.000000000","message":"Done","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"}],"ironic/common/led_states.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c226f2eeaf8ffec81ce2c5dbc990f7d70fa0e60b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5fc1f717_cf075d1d","updated":"2019-04-04 08:40:13.000000000","message":"It feels like we need ironic.common.constants to avoid creating a new tiny file for each case","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"41324c6ab64e1845adeff3594fc38588bda7c77e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5fc1f717_f89d410a","in_reply_to":"5fc1f717_cf075d1d","updated":"2019-04-04 10:23:35.000000000","message":"On the other hand, unrelated constants being put together may collide. Like this `ON` can potentially  equal to different literals in different contexts. With the way we do it now, we can enjoy short names in the module scope...","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c226f2eeaf8ffec81ce2c5dbc990f7d70fa0e60b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"LED is not lit\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LIT \u003d \u0027lit\u0027"},{"line_number":24,"context_line":"\"LED is lit\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"BLINKING \u003d \u0027blinking\u0027"},{"line_number":27,"context_line":"\"LED is blinking\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_6f066923","line":24,"updated":"2019-04-04 08:40:13.000000000","message":"I think I like ON","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6ba960e89cc41dcf1e1ef8297028a507223215a3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"LED is not lit\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LIT \u003d \u0027lit\u0027"},{"line_number":24,"context_line":"\"LED is lit\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"BLINKING \u003d \u0027blinking\u0027"},{"line_number":27,"context_line":"\"LED is blinking\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_5cba5be1","line":24,"updated":"2019-04-03 17:34:28.000000000","message":"I\u0027m not sure lit is really the best word, then again I don\u0027t know what is.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e44e20af3da28cde7f3c2bbee1e2d692f6544fb6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"LED is not lit\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LIT \u003d \u0027lit\u0027"},{"line_number":24,"context_line":"\"LED is lit\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"BLINKING \u003d \u0027blinking\u0027"},{"line_number":27,"context_line":"\"LED is blinking\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_c9c99d79","line":24,"in_reply_to":"5fc1f717_22b96678","updated":"2019-04-04 07:11:15.000000000","message":"what about just ON in opposite to OFF ?\nor change OFF to UNLIT :D","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"a1c291339a3b250e4f820f051da5de4842d4985c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"LED is not lit\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LIT \u003d \u0027lit\u0027"},{"line_number":24,"context_line":"\"LED is lit\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"BLINKING \u003d \u0027blinking\u0027"},{"line_number":27,"context_line":"\"LED is blinking\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_22b96678","line":24,"in_reply_to":"5fc1f717_5cba5be1","updated":"2019-04-03 19:51:05.000000000","message":"glowing? lighting? let\u0027s summon grammarian!","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"41324c6ab64e1845adeff3594fc38588bda7c77e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"LED is not lit\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LIT \u003d \u0027lit\u0027"},{"line_number":24,"context_line":"\"LED is lit\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"BLINKING \u003d \u0027blinking\u0027"},{"line_number":27,"context_line":"\"LED is blinking\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_78fcf13d","line":24,"in_reply_to":"5fc1f717_6f066923","updated":"2019-04-04 10:23:35.000000000","message":"ON then","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"}],"ironic/drivers/base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c226f2eeaf8ffec81ce2c5dbc990f7d70fa0e60b","unresolved":false,"context_lines":[{"line_number":965,"context_line":"        raise exception.UnsupportedDriverExtension("},{"line_number":966,"context_line":"            driver\u003dtask.node.driver, extension\u003d\u0027inject_nmi\u0027)"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    def get_supported_leds(self, task):"},{"line_number":969,"context_line":"        \"\"\"Get a map of the supported indicator LED."},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"        :param task: A task from TaskManager."}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_8f287597","line":968,"updated":"2019-04-04 08:40:13.000000000","message":"Thinking aloud, maybe s/led/indicator/ in all names? I understand that technically they\u0027re all LED, but their role is to be an indicator. Maybe in the future we have other kinds of indicators..","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"41324c6ab64e1845adeff3594fc38588bda7c77e","unresolved":false,"context_lines":[{"line_number":965,"context_line":"        raise exception.UnsupportedDriverExtension("},{"line_number":966,"context_line":"            driver\u003dtask.node.driver, extension\u003d\u0027inject_nmi\u0027)"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    def get_supported_leds(self, task):"},{"line_number":969,"context_line":"        \"\"\"Get a map of the supported indicator LED."},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"        :param task: A task from TaskManager."}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_58c015e1","line":968,"in_reply_to":"5fc1f717_8f287597","updated":"2019-04-04 10:23:35.000000000","message":"Makes sense to me.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c226f2eeaf8ffec81ce2c5dbc990f7d70fa0e60b","unresolved":false,"context_lines":[{"line_number":977,"context_line":"                    {"},{"line_number":978,"context_line":"                        \u0027chassis\u0027: [\u0027enclosure-0\u0027],"},{"line_number":979,"context_line":"                        \u0027system\u0027: [\u0027blade-A@enclosure-0\u0027]"},{"line_number":980,"context_line":"                        \u0027drive\u0027: [\u0027ssd0@blade-A@enclosure-1\u0027]"},{"line_number":981,"context_line":"                    }"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_2f194187","line":980,"updated":"2019-04-04 08:40:13.000000000","message":"So, \"@\" won\u0027t be interpreted anyhow by the generic code, right? Btw, if possible, I\u0027d recommend avoiding @ since it\u0027s a special symbol in URLs.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6ba960e89cc41dcf1e1ef8297028a507223215a3","unresolved":false,"context_lines":[{"line_number":977,"context_line":"                    {"},{"line_number":978,"context_line":"                        \u0027chassis\u0027: [\u0027enclosure-0\u0027],"},{"line_number":979,"context_line":"                        \u0027system\u0027: [\u0027blade-A@enclosure-0\u0027]"},{"line_number":980,"context_line":"                        \u0027drive\u0027: [\u0027ssd0@blade-A@enclosure-1\u0027]"},{"line_number":981,"context_line":"                    }"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_bc149fea","line":980,"updated":"2019-04-03 17:34:28.000000000","message":"so if we\u0027re asking a single node\u0027s view, why do we nest the data out to the enclosure?","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"41324c6ab64e1845adeff3594fc38588bda7c77e","unresolved":false,"context_lines":[{"line_number":977,"context_line":"                    {"},{"line_number":978,"context_line":"                        \u0027chassis\u0027: [\u0027enclosure-0\u0027],"},{"line_number":979,"context_line":"                        \u0027system\u0027: [\u0027blade-A@enclosure-0\u0027]"},{"line_number":980,"context_line":"                        \u0027drive\u0027: [\u0027ssd0@blade-A@enclosure-1\u0027]"},{"line_number":981,"context_line":"                    }"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_b8b0198d","line":980,"in_reply_to":"5fc1f717_2f194187","updated":"2019-04-04 10:23:35.000000000","message":"\u003e So, \"@\" won\u0027t be interpreted anyhow by the generic code, right? \n\nCorrect.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"a1c291339a3b250e4f820f051da5de4842d4985c","unresolved":false,"context_lines":[{"line_number":977,"context_line":"                    {"},{"line_number":978,"context_line":"                        \u0027chassis\u0027: [\u0027enclosure-0\u0027],"},{"line_number":979,"context_line":"                        \u0027system\u0027: [\u0027blade-A@enclosure-0\u0027]"},{"line_number":980,"context_line":"                        \u0027drive\u0027: [\u0027ssd0@blade-A@enclosure-1\u0027]"},{"line_number":981,"context_line":"                    }"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_c222e2ba","line":980,"in_reply_to":"5fc1f717_bc149fea","updated":"2019-04-03 19:51:05.000000000","message":"This nesting is not enforced by the abstract API. This is up to the driver to name the LEDs.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c226f2eeaf8ffec81ce2c5dbc990f7d70fa0e60b","unresolved":false,"context_lines":[{"line_number":980,"context_line":"                        \u0027drive\u0027: [\u0027ssd0@blade-A@enclosure-1\u0027]"},{"line_number":981,"context_line":"                    }"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        \"\"\""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"    @abc.abstractmethod"},{"line_number":986,"context_line":"    def set_led_state(self, task, component, state, led_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_4f1ccd76","line":983,"updated":"2019-04-04 08:40:13.000000000","message":"should be\n\n return {}\n\n(unless you want to handle None specially)","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"41324c6ab64e1845adeff3594fc38588bda7c77e","unresolved":false,"context_lines":[{"line_number":980,"context_line":"                        \u0027drive\u0027: [\u0027ssd0@blade-A@enclosure-1\u0027]"},{"line_number":981,"context_line":"                    }"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        \"\"\""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"    @abc.abstractmethod"},{"line_number":986,"context_line":"    def set_led_state(self, task, component, state, led_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_d8aba51b","line":983,"in_reply_to":"5fc1f717_4f1ccd76","updated":"2019-04-04 10:23:35.000000000","message":"Done","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c226f2eeaf8ffec81ce2c5dbc990f7d70fa0e60b","unresolved":false,"context_lines":[{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        \"\"\""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"    @abc.abstractmethod"},{"line_number":986,"context_line":"    def set_led_state(self, task, component, state, led_id\u003dNone):"},{"line_number":987,"context_line":"        \"\"\"Set indicator LED(s) on the hardware component to the desired state."},{"line_number":988,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_ef125962","line":985,"updated":"2019-04-04 08:40:13.000000000","message":"You cannot add more abstract methods to existing interfaces, it will immediately break all out-of-tree implementations.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"41324c6ab64e1845adeff3594fc38588bda7c77e","unresolved":false,"context_lines":[{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        \"\"\""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"    @abc.abstractmethod"},{"line_number":986,"context_line":"    def set_led_state(self, task, component, state, led_id\u003dNone):"},{"line_number":987,"context_line":"        \"\"\"Set indicator LED(s) on the hardware component to the desired state."},{"line_number":988,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_f839c1f1","line":985,"in_reply_to":"5fc1f717_ef125962","updated":"2019-04-04 10:23:35.000000000","message":"Indeed! How come they sneaked in...?","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c226f2eeaf8ffec81ce2c5dbc990f7d70fa0e60b","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":1001,"context_line":"        \"\"\""},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"    @abc.abstractmethod"},{"line_number":1004,"context_line":"    def get_led_state(self, task, component):"},{"line_number":1005,"context_line":"        \"\"\"Get current state of the indicator LED(s) on the hardware component."},{"line_number":1006,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_0f16c556","line":1003,"updated":"2019-04-04 08:40:13.000000000","message":"ditto","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"41324c6ab64e1845adeff3594fc38588bda7c77e","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":1001,"context_line":"        \"\"\""},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"    @abc.abstractmethod"},{"line_number":1004,"context_line":"    def get_led_state(self, task, component):"},{"line_number":1005,"context_line":"        \"\"\"Get current state of the indicator LED(s) on the hardware component."},{"line_number":1006,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_183daddc","line":1003,"in_reply_to":"5fc1f717_0f16c556","updated":"2019-04-04 10:23:35.000000000","message":"Done","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c226f2eeaf8ffec81ce2c5dbc990f7d70fa0e60b","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"        \"\"\""},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"    @abc.abstractmethod"},{"line_number":1004,"context_line":"    def get_led_state(self, task, component):"},{"line_number":1005,"context_line":"        \"\"\"Get current state of the indicator LED(s) on the hardware component."},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"        :param task: A task from TaskManager."}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_af0c5142","line":1004,"updated":"2019-04-04 08:40:13.000000000","message":"nit: \"get_indicator_states\"? Plural for \"states\" because this call doesn\u0027t accept indicator_id.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"41324c6ab64e1845adeff3594fc38588bda7c77e","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"        \"\"\""},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"    @abc.abstractmethod"},{"line_number":1004,"context_line":"    def get_led_state(self, task, component):"},{"line_number":1005,"context_line":"        \"\"\"Get current state of the indicator LED(s) on the hardware component."},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"        :param task: A task from TaskManager."}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_b82339be","line":1004,"in_reply_to":"5fc1f717_af0c5142","updated":"2019-04-04 10:23:35.000000000","message":"Done","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6ba960e89cc41dcf1e1ef8297028a507223215a3","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"            ::"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"                {"},{"line_number":1017,"context_line":"                    \u0027ssd0@blade-A@enclosure-1\u0027: \u0027off\u0027,"},{"line_number":1018,"context_line":"                    \u0027ssd1@blade-B@enclosure-2\u0027: \u0027blinking\u0027"},{"line_number":1019,"context_line":"                }"},{"line_number":1020,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_3c298f36","line":1017,"updated":"2019-04-03 17:34:28.000000000","message":"Surely this would be good for redfish, but for ipmi what would we do?\n\nI also wonder about other drivers.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"a1c291339a3b250e4f820f051da5de4842d4985c","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"            ::"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"                {"},{"line_number":1017,"context_line":"                    \u0027ssd0@blade-A@enclosure-1\u0027: \u0027off\u0027,"},{"line_number":1018,"context_line":"                    \u0027ssd1@blade-B@enclosure-2\u0027: \u0027blinking\u0027"},{"line_number":1019,"context_line":"                }"},{"line_number":1020,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_0d07bb1a","line":1017,"in_reply_to":"5fc1f717_3c298f36","updated":"2019-04-03 19:51:05.000000000","message":"This is up to the driver to announce the LEDs it has access to via the `get_supported_leds` call.\n\nIf this management interface of some particular hardware type does not support certain `component`, it won\u0027t report the LEDs for it here and through `get_supported_leds`.","commit_id":"14ab9f3368aec4b375470049187c79ac1c9bd1dd"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"2c2c277a4c9860c41f0ca981bd373932f323913e","unresolved":false,"context_lines":[{"line_number":976,"context_line":"                ::"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"                    {"},{"line_number":979,"context_line":"                        \u0027chassis\u0027: [\u0027enclosure-0\u0027],"},{"line_number":980,"context_line":"                        \u0027system\u0027: [\u0027blade-A\u0027]"},{"line_number":981,"context_line":"                        \u0027drive\u0027: [\u0027ssd0\u0027]"},{"line_number":982,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_73dc6f18","line":979,"range":{"start_line":979,"start_character":36,"end_line":979,"end_character":49},"updated":"2019-04-11 06:27:33.000000000","message":"Are these list of devices? Is indicator IDs are devices? It looks to me these are devices that support \u0027indication\u0027 of some sort.","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"2e2e9d36f57ca82291466da432d4be1006c21976","unresolved":false,"context_lines":[{"line_number":976,"context_line":"                ::"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"                    {"},{"line_number":979,"context_line":"                        \u0027chassis\u0027: [\u0027enclosure-0\u0027],"},{"line_number":980,"context_line":"                        \u0027system\u0027: [\u0027blade-A\u0027]"},{"line_number":981,"context_line":"                        \u0027drive\u0027: [\u0027ssd0\u0027]"},{"line_number":982,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_e407f71b","line":979,"range":{"start_line":979,"start_character":36,"end_line":979,"end_character":49},"in_reply_to":"3fce034c_73dc6f18","updated":"2019-04-15 17:31:43.000000000","message":"These are lists of opaque indicator IDs.\n\nThe model I am trying to implement here is that ironic introduces the definite kinds  of hardware components that might have indicators. These are \u0027system\u0027, \u0027chassis\u0027 and \u0027drive\u0027. That allows user to ask ironic to light up the LED here or there.\n\nGenerally speaking, there may be more than one instance of each component. Drive is the most obvious example. That brings up the need for another identifier - indicator (or component) ID.\n\nAnother dimension of the same problem is that every single component instance may have more than one LED. Perhaps it\u0027s more of the OEM thing, standard Redfish does not seem to offer multiple indicators so far.\n\nSo the general case is that there can be many instances of the same component (e.g. drive), each component instance may carry many different indicators (e.g. activity, failure, service etc).\n\nI am thinking that fixing component types but leaving component/indicator instance IDs untyped is a reasonable midground here. Then the driver could  maintain a reasonable set of self-explanatory names of the indicators. For Redfish it is likely to be just component names.\n\nThen ironic could report:\n\n* LED on \"drive\" component, ID \"fujitsu-123\"\n* LED on \"system\"  component, ID \"OK-TO-REMOVE\"\n\nThis flexible indicator name approach suggests that the user should have a way to discover the indicators being offered.\n\nThe fallback scenario for ironic would be to operate on all indicators of the given type if the user can\u0027t discover or pick any specific indicator ID.","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"2c2c277a4c9860c41f0ca981bd373932f323913e","unresolved":false,"context_lines":[{"line_number":985,"context_line":"        raise exception.UnsupportedDriverExtension("},{"line_number":986,"context_line":"            driver\u003dtask.node.driver, extension\u003d\u0027get_supported_indicators\u0027)"},{"line_number":987,"context_line":""},{"line_number":988,"context_line":"    def set_indicators_states(self, task, component, indicators):"},{"line_number":989,"context_line":"        \"\"\"Set indicator on the hardware component to the desired state."},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"        :param task: A task from TaskManager."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_338267ca","line":988,"range":{"start_line":988,"start_character":8,"end_line":988,"end_character":29},"updated":"2019-04-11 06:27:33.000000000","message":"Looks double plural. Should it be \u0027set_indicator_state\u0027?","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"2e2e9d36f57ca82291466da432d4be1006c21976","unresolved":false,"context_lines":[{"line_number":985,"context_line":"        raise exception.UnsupportedDriverExtension("},{"line_number":986,"context_line":"            driver\u003dtask.node.driver, extension\u003d\u0027get_supported_indicators\u0027)"},{"line_number":987,"context_line":""},{"line_number":988,"context_line":"    def set_indicators_states(self, task, component, indicators):"},{"line_number":989,"context_line":"        \"\"\"Set indicator on the hardware component to the desired state."},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"        :param task: A task from TaskManager."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_7f7e306c","line":988,"range":{"start_line":988,"start_character":8,"end_line":988,"end_character":29},"in_reply_to":"3fce034c_338267ca","updated":"2019-04-15 17:31:43.000000000","message":"Done","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"2c2c277a4c9860c41f0ca981bd373932f323913e","unresolved":false,"context_lines":[{"line_number":1003,"context_line":"                    \u0027ssd1\u0027: \u0027blinking\u0027"},{"line_number":1004,"context_line":"                }"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":1007,"context_line":"                 specified."},{"line_number":1008,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":1009,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_f3f85f7d","line":1006,"range":{"start_line":1006,"start_character":53,"end_line":1006,"end_character":64},"updated":"2019-04-11 06:27:33.000000000","message":"boot device?","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"2e2e9d36f57ca82291466da432d4be1006c21976","unresolved":false,"context_lines":[{"line_number":1003,"context_line":"                    \u0027ssd1\u0027: \u0027blinking\u0027"},{"line_number":1004,"context_line":"                }"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":1007,"context_line":"                 specified."},{"line_number":1008,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":1009,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_9f819c4d","line":1006,"range":{"start_line":1006,"start_character":53,"end_line":1006,"end_character":64},"in_reply_to":"3fce034c_f3f85f7d","updated":"2019-04-15 17:31:43.000000000","message":"Done","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"2c2c277a4c9860c41f0ca981bd373932f323913e","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"        raise exception.UnsupportedDriverExtension("},{"line_number":1011,"context_line":"            driver\u003dtask.node.driver, extension\u003d\u0027set_indicators_states\u0027)"},{"line_number":1012,"context_line":""},{"line_number":1013,"context_line":"    def get_indicators_states(self, task, component):"},{"line_number":1014,"context_line":"        \"\"\"Get current state of the indicator on the hardware component."},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        :param task: A task from TaskManager."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_f36b7f1c","line":1013,"range":{"start_line":1013,"start_character":8,"end_line":1013,"end_character":29},"updated":"2019-04-11 06:27:33.000000000","message":"Looks double plural. Should it be \u0027get_indicator_state\u0027?","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"2e2e9d36f57ca82291466da432d4be1006c21976","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"        raise exception.UnsupportedDriverExtension("},{"line_number":1011,"context_line":"            driver\u003dtask.node.driver, extension\u003d\u0027set_indicators_states\u0027)"},{"line_number":1012,"context_line":""},{"line_number":1013,"context_line":"    def get_indicators_states(self, task, component):"},{"line_number":1014,"context_line":"        \"\"\"Get current state of the indicator on the hardware component."},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        :param task: A task from TaskManager."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_3f98a8be","line":1013,"range":{"start_line":1013,"start_character":8,"end_line":1013,"end_character":29},"in_reply_to":"3fce034c_f36b7f1c","updated":"2019-04-15 17:31:43.000000000","message":"Done","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"de5b52259cf772652debdbcaab9315b477529e5f","unresolved":false,"context_lines":[{"line_number":984,"context_line":"                        \u0027enclosure-0\u0027: {"},{"line_number":985,"context_line":"                            \"readonly\": true,"},{"line_number":986,"context_line":"                            \"states\": ["},{"line_number":987,"context_line":"                                \"OFF\","},{"line_number":988,"context_line":"                                \"ON\""},{"line_number":989,"context_line":"                            ]"},{"line_number":990,"context_line":"                        }"},{"line_number":991,"context_line":"                    },"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_3432d960","line":988,"range":{"start_line":987,"start_character":32,"end_line":988,"end_character":36},"updated":"2019-06-10 10:38:11.000000000","message":"Would it be in lowercase as mentioned in indicator_states.py?\n\"off\", \"on\" ?","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b0bf646183f5136bac2b08d119ce6c47219b7d3e","unresolved":false,"context_lines":[{"line_number":984,"context_line":"                        \u0027enclosure-0\u0027: {"},{"line_number":985,"context_line":"                            \"readonly\": true,"},{"line_number":986,"context_line":"                            \"states\": ["},{"line_number":987,"context_line":"                                \"OFF\","},{"line_number":988,"context_line":"                                \"ON\""},{"line_number":989,"context_line":"                            ]"},{"line_number":990,"context_line":"                        }"},{"line_number":991,"context_line":"                    },"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_854031a7","line":988,"range":{"start_line":987,"start_character":32,"end_line":988,"end_character":36},"in_reply_to":"9fb8cfa7_3432d960","updated":"2019-06-10 13:47:14.000000000","message":"Done","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"de5b52259cf772652debdbcaab9315b477529e5f","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"            `get_supported_indicators`)."},{"line_number":1024,"context_line":"        :state: Desired state of the indicator, one of"},{"line_number":1025,"context_line":"            :mod:`ironic.common.indicator_states`."},{"line_number":1026,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":1027,"context_line":"                 specified."},{"line_number":1028,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":1029,"context_line":"        \"\"\""},{"line_number":1030,"context_line":"        raise exception.UnsupportedDriverExtension("}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_cac98c78","line":1027,"range":{"start_line":1026,"start_character":39,"end_line":1027,"end_character":27},"updated":"2019-06-10 10:38:11.000000000","message":"This text needs to be changed.","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b0bf646183f5136bac2b08d119ce6c47219b7d3e","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"            `get_supported_indicators`)."},{"line_number":1024,"context_line":"        :state: Desired state of the indicator, one of"},{"line_number":1025,"context_line":"            :mod:`ironic.common.indicator_states`."},{"line_number":1026,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":1027,"context_line":"                 specified."},{"line_number":1028,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":1029,"context_line":"        \"\"\""},{"line_number":1030,"context_line":"        raise exception.UnsupportedDriverExtension("}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_a53d352c","line":1027,"range":{"start_line":1026,"start_character":39,"end_line":1027,"end_character":27},"in_reply_to":"9fb8cfa7_cac98c78","updated":"2019-06-10 13:47:14.000000000","message":"Done","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"de5b52259cf772652debdbcaab9315b477529e5f","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"            :mod:`ironic.common.components`."},{"line_number":1039,"context_line":"        :param indicator: Indicator ID (as reported by"},{"line_number":1040,"context_line":"            `get_supported_indicators`)."},{"line_number":1041,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":1042,"context_line":"        :returns: Current state of the indicator, one of"},{"line_number":1043,"context_line":"            :mod:`ironic.common.indicator_states`."},{"line_number":1044,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_d4801dc2","line":1041,"range":{"start_line":1041,"start_character":9,"end_line":1041,"end_character":15},"updated":"2019-06-10 10:38:11.000000000","message":"It can also raise \u0027InvalidParameterValue\u0027 if invalid component/indicator is passed.","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b0bf646183f5136bac2b08d119ce6c47219b7d3e","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"            :mod:`ironic.common.components`."},{"line_number":1039,"context_line":"        :param indicator: Indicator ID (as reported by"},{"line_number":1040,"context_line":"            `get_supported_indicators`)."},{"line_number":1041,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":1042,"context_line":"        :returns: Current state of the indicator, one of"},{"line_number":1043,"context_line":"            :mod:`ironic.common.indicator_states`."},{"line_number":1044,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_251b85d0","line":1041,"range":{"start_line":1041,"start_character":9,"end_line":1041,"end_character":15},"in_reply_to":"9fb8cfa7_d4801dc2","updated":"2019-06-10 13:47:14.000000000","message":"Done","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"}],"ironic/drivers/modules/fake.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"2c2c277a4c9860c41f0ca981bd373932f323913e","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def get_supported_indicators(self, task):"},{"line_number":225,"context_line":"        return {"},{"line_number":226,"context_line":"            components.CHASSIS: [\u0027led\u0027],"},{"line_number":227,"context_line":"            components.SYSTEM: [\u0027led\u0027]"},{"line_number":228,"context_line":"        }"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_f3261f17","line":226,"range":{"start_line":226,"start_character":34,"end_line":226,"end_character":37},"updated":"2019-04-11 06:27:33.000000000","message":"Should it be name of device e.g. \u0027\u0027enclosure-0\u0027\u0027 as example provided in base.py?","commit_id":"6d84d3430f223d1107336623d4d607fc06c2b288"}],"releasenotes/notes/add-indicator-control-2e145ceabb1b0f7c.yaml":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"de5b52259cf772652debdbcaab9315b477529e5f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds ``get_indicator_state``, ``set_indicator_state`` and"},{"line_number":5,"context_line":"    ``get_supported_indicators`` methods to driver management interface."},{"line_number":6,"context_line":"    Drivers can override these methods implementing indicators (e.g. LEDs)"},{"line_number":7,"context_line":"    management calls against the BMC of the baremetal nodes being managed."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"9fb8cfa7_14c9d524","line":7,"range":{"start_line":2,"start_character":0,"end_line":7,"end_character":74},"updated":"2019-06-10 10:38:11.000000000","message":"The releasenotes can go as part of API patch where this feature is complete.","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b0bf646183f5136bac2b08d119ce6c47219b7d3e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds ``get_indicator_state``, ``set_indicator_state`` and"},{"line_number":5,"context_line":"    ``get_supported_indicators`` methods to driver management interface."},{"line_number":6,"context_line":"    Drivers can override these methods implementing indicators (e.g. LEDs)"},{"line_number":7,"context_line":"    management calls against the BMC of the baremetal nodes being managed."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"9fb8cfa7_852911e7","line":7,"range":{"start_line":2,"start_character":0,"end_line":7,"end_character":74},"in_reply_to":"9fb8cfa7_14c9d524","updated":"2019-06-10 13:47:14.000000000","message":"Done","commit_id":"0c61292ea1aa65d925c6374662b6ce3f6d91db29"}]}
