)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"eff46e1b177a474be3f19a5151d0ffc7a2f0d9c5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add limits support to management interface"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This spec proposes extend driver management interface, add power"},{"line_number":10,"context_line":"and thermal limits support."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I56030124beb7e2e8f94c2162e37cbb25fcb49220"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"ba8a016a_8a44631b","line":9,"updated":"2015-11-24 11:21:40.000000000","message":"\"to extend\"","commit_id":"8cd1513bdea11d760397be8f3bc484ed3c099a32"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0758d6fcc741e53f8a07a4028a9d29e3679c0957","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add limits support to management interface"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This spec proposes extend driver management interface, add power"},{"line_number":10,"context_line":"and thermal limits support."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I56030124beb7e2e8f94c2162e37cbb25fcb49220"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9a8ffd7b_b5e1e800","line":9,"in_reply_to":"ba8a016a_8a44631b","updated":"2015-11-24 11:36:45.000000000","message":"Done","commit_id":"8cd1513bdea11d760397be8f3bc484ed3c099a32"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"c949ae4c7a84efaef6d347d045f4ac6f6482d4f7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add hardware properties API to management interface"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This spec proposes to extend driver management interface, add support"},{"line_number":10,"context_line":"for \"standartized\" properties."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I56030124beb7e2e8f94c2162e37cbb25fcb49220"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"9a8ffd7b_2b16394c","line":10,"updated":"2015-12-03 10:37:32.000000000","message":"standardized","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ff9823a1402cc25886627eb20f8c795265d7630","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add hardware properties API to management interface"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This spec proposes to extend driver management interface, add support"},{"line_number":10,"context_line":"for \"standartized\" properties."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I56030124beb7e2e8f94c2162e37cbb25fcb49220"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"9a8ffd7b_f91ec2b9","line":10,"in_reply_to":"9a8ffd7b_2b16394c","updated":"2015-12-03 12:27:46.000000000","message":"Done","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"}],"specs/approved/ironic-firmware-interface.rst":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"419ddc4fafd140ca5a293dd5faab7620c174a2e0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"          \u0027description\u0027: \u0027setting foo\u0027,"},{"line_number":45,"context_line":"          \u0027values\u0027: [0, 1, 2, 3],"},{"line_number":46,"context_line":"          \u0027default\u0027: 0,"},{"line_number":47,"context_line":"          \u0027capabilities\u0027: {\u0027foo\u0027: {0: \u0027off\u0027, 3: \u0027on\u0027}}"},{"line_number":48,"context_line":"          \u0027reset_needed\u0027: True"},{"line_number":49,"context_line":"        },"},{"line_number":50,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a4dcd0f_f94993b8","line":47,"updated":"2015-08-14 09:51:14.000000000","message":"What would be the capability state for values 1 and 2. I think these capabilities should not be boolean in nature as they are not used by deploy and are use purely during node selection.\n\nThe deploy capabilities needs to be boolean as driver needed to act to set the value of firmware setting appropriately based on flavor specification.","commit_id":"aa6c41dcc429e94a21ca6e0baa4ca2f62667e49b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5178cea553e412fc4ba315a7bcfda94cf5557d51","unresolved":false,"context_lines":[{"line_number":44,"context_line":"          \u0027description\u0027: \u0027setting foo\u0027,"},{"line_number":45,"context_line":"          \u0027values\u0027: [0, 1, 2, 3],"},{"line_number":46,"context_line":"          \u0027default\u0027: 0,"},{"line_number":47,"context_line":"          \u0027capabilities\u0027: {\u0027foo\u0027: {0: \u0027off\u0027, 3: \u0027on\u0027}}"},{"line_number":48,"context_line":"          \u0027reset_needed\u0027: True"},{"line_number":49,"context_line":"        },"},{"line_number":50,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa1b9901_f5244fb0","line":47,"in_reply_to":"1a4dcd0f_f94993b8","updated":"2015-08-17 15:03:10.000000000","message":"Yes, fixed.","commit_id":"aa6c41dcc429e94a21ca6e0baa4ca2f62667e49b"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"419ddc4fafd140ca5a293dd5faab7620c174a2e0","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Update BIOS/FW settings workflow:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a4dcd0f_b4023208","line":106,"updated":"2015-08-14 09:51:14.000000000","message":"Will driver allow deploy specific parameters to be set using this interface. Ex: boot_mode, secure boot. Drivers are capable of changing these attributes on the fly based on the values specified in the flavor.\n\nDo driver need to allow only those capabilities which are purely used in scheduling and cannot be changed as part of deploy?","commit_id":"aa6c41dcc429e94a21ca6e0baa4ca2f62667e49b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5178cea553e412fc4ba315a7bcfda94cf5557d51","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Update BIOS/FW settings workflow:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa1b9901_b5da5777","line":106,"in_reply_to":"1a4dcd0f_b4023208","updated":"2015-08-17 15:03:10.000000000","message":"Good point. I mean only capabilities used in scheduling, because deploy  capabilities are an user choice (user should be able to disable some of them even if support on the node exists). Will add to the spec.","commit_id":"aa6c41dcc429e94a21ca6e0baa4ca2f62667e49b"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"419ddc4fafd140ca5a293dd5faab7620c174a2e0","unresolved":false,"context_lines":[{"line_number":113,"context_line":"#. Postponed parameters applied during zapping or cleaning procedure, a new"},{"line_number":114,"context_line":"   clean step should be added in drivers."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"#. Driver updates node capabilities if there are linked capabilities."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a4dcd0f_942a962e","line":116,"updated":"2015-08-14 09:51:14.000000000","message":"Currently we had the capabilities populated only through inspection. Probably few extra capabilities could get added by the operator using this interface.\nWhat would happen to these newly added capabilities, if one  were to re-run the inspection?\nOr the capabilities available through this interface are going to be subset of the capabilities discovered through the inspection?\n\nEx: Node has ability to power cap through firmware settings. But this is not discovered through the inspection as one cannot have boolean value for this setting.\nHowever, the new firmware setting interface provides mechanism to the operator to specify this setting appropriately based on his need and can be set as a node selection capability.","commit_id":"aa6c41dcc429e94a21ca6e0baa4ca2f62667e49b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5178cea553e412fc4ba315a7bcfda94cf5557d51","unresolved":false,"context_lines":[{"line_number":113,"context_line":"#. Postponed parameters applied during zapping or cleaning procedure, a new"},{"line_number":114,"context_line":"   clean step should be added in drivers."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"#. Driver updates node capabilities if there are linked capabilities."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa1b9901_70efedb0","line":116,"in_reply_to":"1a4dcd0f_942a962e","updated":"2015-08-17 15:03:10.000000000","message":"\u003e What would happen to these newly added capabilities, if one were to re-run the inspection? - They will be updated, existing inspection code for example: \nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/ilo/inspect.py#L229-L236  https://github.com/openstack/ironic/blob/master/ironic/common/utils.py#L623-L638","commit_id":"aa6c41dcc429e94a21ca6e0baa4ca2f62667e49b"},{"author":{"_account_id":10202,"name":"Wan-yen Hsu","email":"wanyenhsu@gmail.com"},"change_message_id":"dea3cd47853a2be3eea9d82790d9335f1ab8bd92","unresolved":false,"context_lines":[{"line_number":44,"context_line":"          \u0027description\u0027: \u0027setting foo\u0027,"},{"line_number":45,"context_line":"          \u0027values\u0027: [0, 1, 2],"},{"line_number":46,"context_line":"          \u0027default\u0027: 0,"},{"line_number":47,"context_line":"          \u0027capabilities\u0027: {\u0027foo\u0027: {0: 10, 1: 20, 2: 30}}"},{"line_number":48,"context_line":"          \u0027reset_needed\u0027: True"},{"line_number":49,"context_line":"        },"},{"line_number":50,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_278e1828","line":47,"updated":"2015-09-01 19:04:15.000000000","message":"Not clear how the capabilities are defined above.  Is it just one capability \"foo\" or 3 capabilities: \"food0\", \"foo1\" and \"foo2\"?\nCurrently Nova only supports capabilities with single value.","commit_id":"f8a9ba3f1c408116d72defcd180579223b2039d0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"bc43346f25085fdcbd4a4083f3f9f9c953390780","unresolved":false,"context_lines":[{"line_number":44,"context_line":"          \u0027description\u0027: \u0027setting foo\u0027,"},{"line_number":45,"context_line":"          \u0027values\u0027: [0, 1, 2],"},{"line_number":46,"context_line":"          \u0027default\u0027: 0,"},{"line_number":47,"context_line":"          \u0027capabilities\u0027: {\u0027foo\u0027: {0: 10, 1: 20, 2: 30}}"},{"line_number":48,"context_line":"          \u0027reset_needed\u0027: True"},{"line_number":49,"context_line":"        },"},{"line_number":50,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_8eadd085","line":47,"in_reply_to":"da20952f_278e1828","updated":"2015-09-08 08:53:54.000000000","message":"Description of this example added.","commit_id":"f8a9ba3f1c408116d72defcd180579223b2039d0"},{"author":{"_account_id":10202,"name":"Wan-yen Hsu","email":"wanyenhsu@gmail.com"},"change_message_id":"dea3cd47853a2be3eea9d82790d9335f1ab8bd92","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        \u0027parameter2\u0027: \u0027start\u0027,"},{"line_number":101,"context_line":"        \u0027parameter3\u0027: 8,"},{"line_number":102,"context_line":"      }"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Update BIOS/FW settings workflow:"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_4acb111f","line":103,"updated":"2015-09-01 19:04:15.000000000","message":"I think the spec should allow user to set multiple firmware devices in a profile/template, e.g., desired-firmware-settings for a node instead of setting each individual firmware device.  User can apply this firmware profile as a zapping step.","commit_id":"f8a9ba3f1c408116d72defcd180579223b2039d0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"bc43346f25085fdcbd4a4083f3f9f9c953390780","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        \u0027parameter2\u0027: \u0027start\u0027,"},{"line_number":101,"context_line":"        \u0027parameter3\u0027: 8,"},{"line_number":102,"context_line":"      }"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Update BIOS/FW settings workflow:"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_2e7a84ba","line":103,"in_reply_to":"da20952f_4acb111f","updated":"2015-09-08 08:53:54.000000000","message":"Like in patch set 1? Please read comments on patch set 2.","commit_id":"f8a9ba3f1c408116d72defcd180579223b2039d0"},{"author":{"_account_id":10202,"name":"Wan-yen Hsu","email":"wanyenhsu@gmail.com"},"change_message_id":"dea3cd47853a2be3eea9d82790d9335f1ab8bd92","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":112,"context_line":"   new node.target_firmware_settings field."}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_e7334061","line":109,"updated":"2015-09-01 19:04:15.000000000","message":"I think this should be decided by the caller/user instead of driver.  Users should have options either to apply the update immediately or during next reboot.","commit_id":"f8a9ba3f1c408116d72defcd180579223b2039d0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"bc43346f25085fdcbd4a4083f3f9f9c953390780","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":112,"context_line":"   new node.target_firmware_settings field."}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_cec8a824","line":109,"in_reply_to":"da20952f_e7334061","updated":"2015-09-08 08:53:54.000000000","message":"\"Users should have options either to apply the update immediately or during next reboot.\" - Not sure that it is needed, because if an option can be applied immediately user can change it anytime, and after next reboot too.","commit_id":"f8a9ba3f1c408116d72defcd180579223b2039d0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc93eb9f42dea38fcf1b22a6c295b1971fb37fdf","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* \u0027description\u0027: human readable description, mandatory."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* \u0027values\u0027: list of supported values, optional."},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_2cc7c746","line":63,"updated":"2015-10-26 05:11:23.000000000","message":"I\u0027 somewhat uncertain about having description mandatory, I can imagine a driver not having it..","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"49581bf01af835b0585f66fac45feaa766bf73f7","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* \u0027description\u0027: human readable description, mandatory."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* \u0027values\u0027: list of supported values, optional."},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_aefbc446","line":63,"in_reply_to":"3a29b11f_2cc7c746","updated":"2015-10-26 12:28:35.000000000","message":"Done","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc93eb9f42dea38fcf1b22a6c295b1971fb37fdf","unresolved":false,"context_lines":[{"line_number":65,"context_line":"* \u0027values\u0027: list of supported values, optional."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* \u0027default\u0027: default value, optional. User can see that parameter was changed"},{"line_number":68,"context_line":"  or not and value after reset_to_defaults()."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional. These"},{"line_number":71,"context_line":"  capabilities are only used in scheduling, not as deploy options. In this"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_ccc3b337","line":68,"updated":"2015-10-26 05:11:23.000000000","message":"can\u0027t we just provide a JSON schema for a value? it will cover these and many more cases","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"49581bf01af835b0585f66fac45feaa766bf73f7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"* \u0027values\u0027: list of supported values, optional."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* \u0027default\u0027: default value, optional. User can see that parameter was changed"},{"line_number":68,"context_line":"  or not and value after reset_to_defaults()."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional. These"},{"line_number":71,"context_line":"  capabilities are only used in scheduling, not as deploy options. In this"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_e9121658","line":68,"in_reply_to":"3a29b11f_ccc3b337","updated":"2015-10-26 12:28:35.000000000","message":"Not sure, because driver can determine it dynamically after interacts with hardware.","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc93eb9f42dea38fcf1b22a6c295b1971fb37fdf","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"In example above:"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* \u0027version\u0027: firmware version string, mandatory, empty if unknown."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    Example 3 of setting new values::"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_ecc0ef2c","line":96,"updated":"2015-10-26 05:11:23.000000000","message":"I wonder why you expose version, but don\u0027t expose a vendor...","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"49581bf01af835b0585f66fac45feaa766bf73f7","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"In example above:"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* \u0027version\u0027: firmware version string, mandatory, empty if unknown."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    Example 3 of setting new values::"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_6ebb6c76","line":96,"in_reply_to":"3a29b11f_ecc0ef2c","updated":"2015-10-26 12:28:35.000000000","message":"Done","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc93eb9f42dea38fcf1b22a6c295b1971fb37fdf","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Update BIOS/FW settings workflow:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_8cdcdb19","line":109,"updated":"2015-10-26 05:11:23.000000000","message":"nit: s/does validate of/validates/","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"49581bf01af835b0585f66fac45feaa766bf73f7","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Update BIOS/FW settings workflow:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_0ed8b8ee","line":109,"in_reply_to":"3a29b11f_8cdcdb19","updated":"2015-10-26 12:28:35.000000000","message":"Done","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc93eb9f42dea38fcf1b22a6c295b1971fb37fdf","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":114,"context_line":"   new node.target_firmware_settings field."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_ace197d2","line":111,"updated":"2015-10-26 05:11:23.000000000","message":"nit: s/does update/updates/","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"49581bf01af835b0585f66fac45feaa766bf73f7","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":114,"context_line":"   new node.target_firmware_settings field."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_cee1609c","line":111,"in_reply_to":"3a29b11f_ace197d2","updated":"2015-10-26 12:28:35.000000000","message":"Done","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc93eb9f42dea38fcf1b22a6c295b1971fb37fdf","unresolved":false,"context_lines":[{"line_number":111,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":114,"context_line":"   new node.target_firmware_settings field."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"#. Postponed parameters applied during zapping or cleaning procedure, a new"},{"line_number":117,"context_line":"   clean step should be added in drivers."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_4ce6c3e9","line":114,"updated":"2015-10-26 05:11:23.000000000","message":"any ideas how to signal to a user when the setting will be in effect?","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"49581bf01af835b0585f66fac45feaa766bf73f7","unresolved":false,"context_lines":[{"line_number":111,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":114,"context_line":"   new node.target_firmware_settings field."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"#. Postponed parameters applied during zapping or cleaning procedure, a new"},{"line_number":117,"context_line":"   clean step should be added in drivers."}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_694cc676","line":114,"in_reply_to":"3a29b11f_4ce6c3e9","updated":"2015-10-26 12:28:35.000000000","message":"I mean hardware reset is needed, user can perform reset manually anytime.","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"b953e2e9623b1f4d6c252905c4407aa47b7945d2","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Opinions about this new interface:"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"* We can use additional node.firmware_settings field for store and cache"},{"line_number":132,"context_line":"  current settings of a node and return it content via API."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* Remove \u0027capabilities\u0027 key from list of available parameters, a driver returns"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7a2fa921_35774ea1","line":131,"updated":"2015-10-09 16:38:02.000000000","message":"But what happens if some setting is changed directly on a node without use of ironic?","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"49581bf01af835b0585f66fac45feaa766bf73f7","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"Opinions about this new interface:"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"* We can use additional node.firmware_settings field for store and cache"},{"line_number":132,"context_line":"  current settings of a node and return it content via API."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* Remove \u0027capabilities\u0027 key from list of available parameters, a driver returns"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_6e492c8e","line":131,"in_reply_to":"7a2fa921_35774ea1","updated":"2015-10-26 12:28:35.000000000","message":"IMO if user wants change w/o Ironic he/she must disable the cache.","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc93eb9f42dea38fcf1b22a6c295b1971fb37fdf","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    GET /v1/nodes/\u003cUUID\u003e/firmware/\u003cDEVICE\u003e"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  Parameters returned as example 2."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Client (CLI) impact"},{"line_number":184,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_6ceb7fb1","line":181,"updated":"2015-10-26 05:11:23.000000000","message":"you have to return both current and target settings, so that a user can figure out which are applied","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"49581bf01af835b0585f66fac45feaa766bf73f7","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    GET /v1/nodes/\u003cUUID\u003e/firmware/\u003cDEVICE\u003e"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  Parameters returned as example 2."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Client (CLI) impact"},{"line_number":184,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a29b11f_697366b5","line":181,"in_reply_to":"3a29b11f_6ceb7fb1","updated":"2015-10-26 12:28:35.000000000","message":"Good point. IMO better to return target via separate endpoint.","commit_id":"474365ec6736ea6b79b6f0c789264744decb01c8"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"3d78059805155ea02ee97cf8f647e2b1d09b8943","unresolved":false,"context_lines":[{"line_number":56,"context_line":"      ]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"In example above:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"1a26ad4f_6d7e9d1a","line":59,"updated":"2015-11-03 14:17:05.000000000","message":"I would like to see a couple more attributes (those are currently returned by the DRAC BIOS vendor-passthru):\n- read-only flag\n- list of possible values for options where the user can pick one (or is it \u0027values\u0027 in the above example?)\n- min length / max length / regexp for string values\n- min / max value for integer values\n- pending value for submitted changes which hasn\u0027t been applied until the node is rebooted","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8ed2ae6abc5e6c59ece8403ff4d0863d4b0ec6f8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"      ]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"In example above:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa80f949_b04a2682","line":59,"in_reply_to":"1a26ad4f_6d7e9d1a","updated":"2015-11-04 11:31:50.000000000","message":"1) What is use case for read only value, if user unable to change it? 2) Done. 3) Not sure, it will be over-complex. 4) Makes sense, done. 5) These are stored in \"target_firmware_settings\", it can be exposed like \"target_raid_config\".","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"3d78059805155ea02ee97cf8f647e2b1d09b8943","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* \u0027description\u0027: human readable description, optional."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* \u0027values\u0027: list of supported values, optional."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* \u0027default\u0027: default value, optional. User can see that parameter was changed"},{"line_number":68,"context_line":"  or not and value after reset_to_defaults()."}],"source_content_type":"text/x-rst","patch_set":10,"id":"1a26ad4f_edb70dd6","line":65,"updated":"2015-11-03 14:17:05.000000000","message":"changing the name to possible_values or something similar would avoid the confusion whether it\u0027s the current value or a list of possible values I mentioned earlier","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8ed2ae6abc5e6c59ece8403ff4d0863d4b0ec6f8","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* \u0027description\u0027: human readable description, optional."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* \u0027values\u0027: list of supported values, optional."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* \u0027default\u0027: default value, optional. User can see that parameter was changed"},{"line_number":68,"context_line":"  or not and value after reset_to_defaults()."}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa80f949_507ada25","line":65,"in_reply_to":"1a26ad4f_edb70dd6","updated":"2015-11-04 11:31:50.000000000","message":"Done","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"3d78059805155ea02ee97cf8f647e2b1d09b8943","unresolved":false,"context_lines":[{"line_number":65,"context_line":"* \u0027values\u0027: list of supported values, optional."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* \u0027default\u0027: default value, optional. User can see that parameter was changed"},{"line_number":68,"context_line":"  or not and value after reset_to_defaults()."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional. These"},{"line_number":71,"context_line":"  capabilities are only used in scheduling, not as deploy options. In this"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1a26ad4f_8df7798a","line":68,"updated":"2015-11-03 14:17:05.000000000","message":"the name default is confusing, when it really means the original value ironic found. or am I missing something?","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8ed2ae6abc5e6c59ece8403ff4d0863d4b0ec6f8","unresolved":false,"context_lines":[{"line_number":65,"context_line":"* \u0027values\u0027: list of supported values, optional."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* \u0027default\u0027: default value, optional. User can see that parameter was changed"},{"line_number":68,"context_line":"  or not and value after reset_to_defaults()."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional. These"},{"line_number":71,"context_line":"  capabilities are only used in scheduling, not as deploy options. In this"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa80f949_104772bc","line":68,"in_reply_to":"1a26ad4f_8df7798a","updated":"2015-11-04 11:31:50.000000000","message":"The default can be hardcoded in the driver. User can check current is default or not.","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"3d78059805155ea02ee97cf8f647e2b1d09b8943","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    Example 2 of expose current values::"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"      {"},{"line_number":85,"context_line":"        \u0027vendor\u0027: \u0027Foo Bar\u0027"},{"line_number":86,"context_line":"        \u0027version\u0027: \u00271.09.2015E\u0027"},{"line_number":87,"context_line":"        \u0027settings\u0027:"},{"line_number":88,"context_line":"          {"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1a26ad4f_6d28dde2","line":85,"updated":"2015-11-03 14:17:05.000000000","message":"vendor is just one of the read-only bios configuration attributes, why should we separate it?","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8ed2ae6abc5e6c59ece8403ff4d0863d4b0ec6f8","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    Example 2 of expose current values::"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"      {"},{"line_number":85,"context_line":"        \u0027vendor\u0027: \u0027Foo Bar\u0027"},{"line_number":86,"context_line":"        \u0027version\u0027: \u00271.09.2015E\u0027"},{"line_number":87,"context_line":"        \u0027settings\u0027:"},{"line_number":88,"context_line":"          {"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa80f949_b088e623","line":85,"in_reply_to":"1a26ad4f_6d28dde2","updated":"2015-11-04 11:31:50.000000000","message":"These are different keys, example from \"man dmidecode\":\n Manufacturer: Intel\n Product Name: C440GX+\n Version: 727281-001\n Serial Number: INCY92700942","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"3d78059805155ea02ee97cf8f647e2b1d09b8943","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"      {"},{"line_number":85,"context_line":"        \u0027vendor\u0027: \u0027Foo Bar\u0027"},{"line_number":86,"context_line":"        \u0027version\u0027: \u00271.09.2015E\u0027"},{"line_number":87,"context_line":"        \u0027settings\u0027:"},{"line_number":88,"context_line":"          {"},{"line_number":89,"context_line":"            \u0027parameter1\u0027: 2,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1a26ad4f_0d8049bf","line":86,"updated":"2015-11-03 14:17:05.000000000","message":"same for version","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"3d78059805155ea02ee97cf8f647e2b1d09b8943","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \u0027version\u0027: \u00271.09.2015E\u0027"},{"line_number":87,"context_line":"        \u0027settings\u0027:"},{"line_number":88,"context_line":"          {"},{"line_number":89,"context_line":"            \u0027parameter1\u0027: 2,"},{"line_number":90,"context_line":"            \u0027parameter2\u0027: \u0027stop\u0027,"},{"line_number":91,"context_line":"          },"},{"line_number":92,"context_line":"      }"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1a26ad4f_8d53f96a","line":89,"updated":"2015-11-03 14:17:05.000000000","message":"I don\u0027t see a reason to separate this from the previous example. The values can be returned as current_value.","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8ed2ae6abc5e6c59ece8403ff4d0863d4b0ec6f8","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \u0027version\u0027: \u00271.09.2015E\u0027"},{"line_number":87,"context_line":"        \u0027settings\u0027:"},{"line_number":88,"context_line":"          {"},{"line_number":89,"context_line":"            \u0027parameter1\u0027: 2,"},{"line_number":90,"context_line":"            \u0027parameter2\u0027: \u0027stop\u0027,"},{"line_number":91,"context_line":"          },"},{"line_number":92,"context_line":"      }"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa80f949_50cc1a89","line":89,"in_reply_to":"1a26ad4f_8d53f96a","updated":"2015-11-04 11:31:50.000000000","message":"Previous example for /driver/ API endpoint (REST API section), this for /\u003cnode\u003e/","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"3d78059805155ea02ee97cf8f647e2b1d09b8943","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"#. Driver validates user\u0027s parameters."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"#. If parameter(s) can be applied on the fly driver updates immediately."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":117,"context_line":"   new node.target_firmware_settings field."}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa80f949_cf9df25a","line":114,"updated":"2015-11-03 14:17:05.000000000","message":"I am wondering why not apply all parameters during cleaning...","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8ed2ae6abc5e6c59ece8403ff4d0863d4b0ec6f8","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"#. Driver validates user\u0027s parameters."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"#. If parameter(s) can be applied on the fly driver updates immediately."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":117,"context_line":"   new node.target_firmware_settings field."}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa80f949_bcbc476d","line":114,"in_reply_to":"fa80f949_cf9df25a","updated":"2015-11-04 11:31:50.000000000","message":"Intel Node manager policies is an example https://review.openstack.org/#/c/214657/ . If we can set power limit for active nodes, who we should do/wait for cleaning?","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"3d78059805155ea02ee97cf8f647e2b1d09b8943","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"- To get BIOS/FW available parameters of device::"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware/\u003cDEVICE\u003e"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  Properties returned as example 1."},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"1a26ad4f_70fbd2c1","line":166,"updated":"2015-11-03 14:17:05.000000000","message":"I think it would be better to drop this. The list of parameters doesn\u0027t only change from driver to driver, they change from node to node.","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"8ed2ae6abc5e6c59ece8403ff4d0863d4b0ec6f8","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"- To get BIOS/FW available parameters of device::"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware/\u003cDEVICE\u003e"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  Properties returned as example 1."},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa80f949_7c0c9f94","line":166,"in_reply_to":"1a26ad4f_70fbd2c1","updated":"2015-11-04 11:31:50.000000000","message":"Not sure. If driver for some device supports set of parameter, these parameters are the same for all nodes. Nodes with different devices should use different drivers.","commit_id":"655a0715970662f1080dd9361a82a19f5abeda1f"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"2cda464638ef3d8324512afa10f886244cd2dc4a","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"      ["},{"line_number":42,"context_line":"        {"},{"line_number":43,"context_line":"          \u0027name\u0027: \u0027parameter1\u0027,"},{"line_number":44,"context_line":"          \u0027description\u0027: \u0027setting foo\u0027,"},{"line_number":45,"context_line":"          \u0027possible_values\u0027: [0, 1, 2],"},{"line_number":46,"context_line":"          \u0027default\u0027: 0,"}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa80f949_a3305e02","line":43,"updated":"2015-11-05 17:49:50.000000000","message":"Looking at Imre\u0027s comments on previous patch set, it might make sense to add readonly flag, as some information received from firmware might be used e.g. during deployment.","commit_id":"1e964b462af96ab4e9f55af79bd127461aef1a7c"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4918eec80e4fbacb4d11ea2ffbd0a1c486cee39c","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"      ["},{"line_number":42,"context_line":"        {"},{"line_number":43,"context_line":"          \u0027name\u0027: \u0027parameter1\u0027,"},{"line_number":44,"context_line":"          \u0027description\u0027: \u0027setting foo\u0027,"},{"line_number":45,"context_line":"          \u0027possible_values\u0027: [0, 1, 2],"},{"line_number":46,"context_line":"          \u0027default\u0027: 0,"}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa80f949_25ea12dc","line":43,"in_reply_to":"fa80f949_a3305e02","updated":"2015-11-06 12:04:37.000000000","message":"\u003e\"might be used e.g. during deployment\" - not sure, because it creates cross-driver dependencies.","commit_id":"1e964b462af96ab4e9f55af79bd127461aef1a7c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"2cda464638ef3d8324512afa10f886244cd2dc4a","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"- To get available logical devices::"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  Returns list of available configurable devices."},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa80f949_4ea999de","line":165,"updated":"2015-11-05 17:49:50.000000000","message":"So IIUC, list of devices and parameters for each device supported by current driver will be set in firmware interface implementation? How does it look like? What if 2 nodes have the same list of devices, but only a couple of possible parameter values differ, they will need to use different fw interface implementation?","commit_id":"1e964b462af96ab4e9f55af79bd127461aef1a7c"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4918eec80e4fbacb4d11ea2ffbd0a1c486cee39c","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"- To get available logical devices::"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  Returns list of available configurable devices."},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa80f949_4554f651","line":165,"in_reply_to":"fa80f949_4ea999de","updated":"2015-11-06 12:04:37.000000000","message":"In other words, what should we do if node has devices \"foo\" and \"bar\", each with own firmware interface? Simple \"static\" solution is routing \"device_name: vendor_instance\" in the driver, like MixinVendorInterface. More suitable solution can be implemented after driver composition reform.","commit_id":"1e964b462af96ab4e9f55af79bd127461aef1a7c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"352b102acd5d06c5752e15d99af8da46cd140338","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* There is no generic way in Ironic to do BIOS/FW configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"* User should be able to get list of supported parameters and values from"},{"line_number":22,"context_line":"  the driver."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* Ironic should update capabilities of a node when corresponding parameters"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_c5a528a2","line":21,"updated":"2015-11-11 17:57:39.000000000","message":"is this a problem or a requirement?","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"352b102acd5d06c5752e15d99af8da46cd140338","unresolved":false,"context_lines":[{"line_number":21,"context_line":"* User should be able to get list of supported parameters and values from"},{"line_number":22,"context_line":"  the driver."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* Ironic should update capabilities of a node when corresponding parameters"},{"line_number":25,"context_line":"  were changed."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_05fc9070","line":24,"updated":"2015-11-11 17:57:39.000000000","message":"ditto. Also, I would differentiate capabilities here of the capabilities on properties field (used for scheduling) to make it clear for the user that we\u0027re talking about different things.","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":36,"context_line":"* User gets/sets BIOS/FW configuration information for Ironic driver via REST"},{"line_number":37,"context_line":"  API as JSON data."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    Example 1 (list of available parameters with descriptions)::"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"      ["},{"line_number":42,"context_line":"        {"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_7a4184a8","line":39,"updated":"2015-11-11 15:11:58.000000000","message":"where is this list defined? Is it in the driver\u0027s python code? does the user input it via the REST API?\n\nHow are variations in the hardware of different nodes that are supported by the same driver supported?\n\nIs this example JSON structure the result of a GET request? the content of a POST body? or something else?","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":84,"context_line":"* \u0027apply\u0027: when an option becomes active. One of \u0027reset\u0027 - after reset,"},{"line_number":85,"context_line":"  \u0027immediate\u0027 - immediately, \u0027cleaning\u0027 - during cleaning. Default is \u0027reset\u0027."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    Example 2 of expose current values::"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"      {"},{"line_number":90,"context_line":"        \u0027vendor\u0027: \u0027Foo Bar\u0027"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_5a728012","line":87,"updated":"2015-11-11 15:11:58.000000000","message":"again, is this the response to a GET or something else?","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":124,"context_line":"#. Postponed parameters applied during cleaning procedure, a new clean step"},{"line_number":125,"context_line":"   should be added in drivers with firmware interface."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"#. Driver updates node capabilities if there are linked capabilities."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_bae5aca4","line":127,"updated":"2015-11-11 15:11:58.000000000","message":"In the three examples above, how are these accessed?\n\nPlease include details about the HTTP requests, eg. GET, POST, etc, including error codes.","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"352b102acd5d06c5752e15d99af8da46cd140338","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"* Remove \u0027capabilities\u0027 key from list of available parameters, a driver returns"},{"line_number":143,"context_line":"  values just for capabilities and does conversion in native values internally,"},{"line_number":144,"context_line":"  new boolean flag for add a value to capabilities should be added."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"* Use or do not use \"/states/\" in API endpoints."},{"line_number":147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_a5e02497","line":144,"updated":"2015-11-11 17:57:39.000000000","message":"I really couldn\u0027t understand what you mean with this statement. Can you explain?","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"352b102acd5d06c5752e15d99af8da46cd140338","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  values just for capabilities and does conversion in native values internally,"},{"line_number":144,"context_line":"  new boolean flag for add a value to capabilities should be added."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"* Use or do not use \"/states/\" in API endpoints."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Data model impact"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_4597f8eb","line":146,"updated":"2015-11-11 17:57:39.000000000","message":"What do you mean here? I saw no reference of \"/states/\" in previous lines.","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  Returns list of available configurable devices."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"- To get BIOS/FW available parameters of device::"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_7a8bc4c3","line":167,"updated":"2015-11-11 15:11:58.000000000","message":"This list may vary by Node as well, not merely by Driver.\n\nPlease also include sample result object, list of error codes, etc","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware/\u003cDEVICE\u003e"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"  Properties returned as example 1."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"  Return codes: 200 - properties returned 404 - extension is not supported."},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_1554cbfc","line":173,"updated":"2015-11-11 15:11:58.000000000","message":"Oh - I see what you\u0027re doing. Please move the examples down here for easier referencing. Thanks.","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"  Properties returned as example 1."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"  Return codes: 200 - properties returned 404 - extension is not supported."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"- To set new parameters::"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_3549cf60","line":175,"updated":"2015-11-11 15:11:58.000000000","message":"What if \u003cDEVICE\u003e doesn\u0027t exist? That should also probably return a 404","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"  Return codes: 202 - parameters accepted 404 - extension is not supported."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"- To get current parameters::"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_15a28bfd","line":183,"updated":"2015-11-11 15:11:58.000000000","message":"please list all error codes that can be returned by this. \n\nEg., what if the supplied parameters are not valid, or the device doesn\u0027t exist","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"- To get target parameters::"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    GET /v1/nodes/\u003cUUID\u003e/firmware/\u003cDEVICE\u003e/target"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_b5f05ffe","line":193,"updated":"2015-11-11 15:11:58.000000000","message":"\"target\"? \n\nWhile I believe we need to track the requested (\"target\") state separately from current state, this is the first time I\u0027ve seen this mentioned in the spec, so I don\u0027t know how you plan to represent it. Please improve the samples and description of how this will work.","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":244,"context_line":"          :raises: MissingParameterValue"},{"line_number":245,"context_line":"          \"\"\""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"      def get_devices():"},{"line_number":248,"context_line":"          \"\"\"Gets list of devices."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"          :returns: list of available configurable devices."}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_b53e1f89","line":247,"updated":"2015-11-11 15:11:58.000000000","message":"this assumes that the list of devices is driver-specific, not node-specific. It is most definitely going to vary between nodes.","commit_id":"f545c775d785423054310991996422a890b0fde4"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"26cba53037a91fe95f53311a6cbcf04cdbaf0e14","unresolved":false,"context_lines":[{"line_number":286,"context_line":"          \"\"\""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"      def reset_to_defaults(task, device\u003dNone):"},{"line_number":289,"context_line":"          \"\"\"Reset BIOS/FW settings for a node to factory defaults."},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"          :param task: TaskManager object containing the node."},{"line_number":292,"context_line":"          :param device: Optional name of device to reset. Reset all devices if"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da85f559_75fbd7c1","line":289,"updated":"2015-11-11 15:11:58.000000000","message":"what if factory_defaults aren\u0027t the desired defaults? Is there a way for an operator to define the default settings which will be applied?","commit_id":"f545c775d785423054310991996422a890b0fde4"}],"specs/approved/ironic-management-limits.rst":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4f0fa7dcf299eb4c05eaa826bdb04dc970e3063f","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"- To set a new limit::"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    PUT /v1/nodes/\u003cUUID\u003e/management/limits"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  with a parameters described in ``Driver API impact`` section and BODY that"},{"line_number":70,"context_line":"  contains limit values."}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba8a016a_db4774ba","line":67,"updated":"2015-11-18 14:18:50.000000000","message":"Does it make sense to introduce different endpoints for power and thermal limits? i.e. /v1/nodes/\u003cUUID\u003e/management/limits/power /v1/nodes/\u003cUUID\u003e/management/limits/(thermal or temperature)","commit_id":"27ad975a589b29fcaf67f4368a0c8c565eb34207"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"6aa79729766dfdc530b395d22550fb8b29e77c98","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"- To set a new limit::"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    PUT /v1/nodes/\u003cUUID\u003e/management/limits"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  with a parameters described in ``Driver API impact`` section and BODY that"},{"line_number":70,"context_line":"  contains limit values."}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba8a016a_15d704ee","line":67,"in_reply_to":"ba8a016a_db4774ba","updated":"2015-11-18 15:30:11.000000000","message":"Yes, done.","commit_id":"27ad975a589b29fcaf67f4368a0c8c565eb34207"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4f0fa7dcf299eb4c05eaa826bdb04dc970e3063f","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    GET /v1/nodes/\u003cUUID\u003e/management/limits"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  Returns a dict described in ``Driver API impact`` section."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Client (CLI) impact"},{"line_number":79,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba8a016a_3bb0008a","line":76,"updated":"2015-11-18 14:18:50.000000000","message":"IIRC this section should also include possible http response codes.","commit_id":"27ad975a589b29fcaf67f4368a0c8c565eb34207"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"6aa79729766dfdc530b395d22550fb8b29e77c98","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    GET /v1/nodes/\u003cUUID\u003e/management/limits"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  Returns a dict described in ``Driver API impact`` section."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Client (CLI) impact"},{"line_number":79,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba8a016a_d8bd33b8","line":76,"in_reply_to":"ba8a016a_3bb0008a","updated":"2015-11-18 15:30:11.000000000","message":"Done","commit_id":"27ad975a589b29fcaf67f4368a0c8c565eb34207"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4f0fa7dcf299eb4c05eaa826bdb04dc970e3063f","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"$ ironic node-get-supported-limits \u003cnode-uuid\u003e"},{"line_number":84,"context_line":"$ ironic node-get-limits \u003cnode-uuid\u003e"},{"line_number":85,"context_line":"$ ironic node-set-limit \u003cnode-uuid\u003e param\u003dvalue [param1\u003dvalue1] ..."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"RPC API impact"},{"line_number":88,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba8a016a_5b0aa47a","line":85,"updated":"2015-11-18 14:18:50.000000000","message":"Should it also include type?","commit_id":"27ad975a589b29fcaf67f4368a0c8c565eb34207"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"6aa79729766dfdc530b395d22550fb8b29e77c98","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"$ ironic node-get-supported-limits \u003cnode-uuid\u003e"},{"line_number":84,"context_line":"$ ironic node-get-limits \u003cnode-uuid\u003e"},{"line_number":85,"context_line":"$ ironic node-set-limit \u003cnode-uuid\u003e param\u003dvalue [param1\u003dvalue1] ..."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"RPC API impact"},{"line_number":88,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba8a016a_78ae8782","line":85,"in_reply_to":"ba8a016a_5b0aa47a","updated":"2015-11-18 15:30:11.000000000","message":"Done","commit_id":"27ad975a589b29fcaf67f4368a0c8c565eb34207"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4f0fa7dcf299eb4c05eaa826bdb04dc970e3063f","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                     {"},{"line_number":129,"context_line":"                      # exception action, one of \u0027no\u0027 (no action), \u0027off\u0027"},{"line_number":130,"context_line":"                      # (hard power off), \u0027log\u0027 (write to system event log)."},{"line_number":131,"context_line":"                      \u0027action\u0027: value1,"},{"line_number":132,"context_line":"                      # requested power limit in watts"},{"line_number":133,"context_line":"                      \u0027limit\u0027: value2,"},{"line_number":134,"context_line":"                      # maximum correction time in milliseconds"}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba8a016a_fbf7d856","line":131,"updated":"2015-11-18 14:18:50.000000000","message":"Also might be good to return these required fields to user somehow, maybe in get_supported_limits return not only True/False but also parameter names with descriptions, so that user would know what to set? Or add support for GET at /v1/nodes/\u003cUUID\u003e/management/limits/(power, thermal) that will return those.","commit_id":"27ad975a589b29fcaf67f4368a0c8c565eb34207"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"6aa79729766dfdc530b395d22550fb8b29e77c98","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                     {"},{"line_number":129,"context_line":"                      # exception action, one of \u0027no\u0027 (no action), \u0027off\u0027"},{"line_number":130,"context_line":"                      # (hard power off), \u0027log\u0027 (write to system event log)."},{"line_number":131,"context_line":"                      \u0027action\u0027: value1,"},{"line_number":132,"context_line":"                      # requested power limit in watts"},{"line_number":133,"context_line":"                      \u0027limit\u0027: value2,"},{"line_number":134,"context_line":"                      # maximum correction time in milliseconds"}],"source_content_type":"text/x-rst","patch_set":18,"id":"ba8a016a_7881a7c2","line":131,"in_reply_to":"ba8a016a_fbf7d856","updated":"2015-11-18 15:30:11.000000000","message":"There is no \"generic\" mechanism in Ironic for this, so I prefer now to make a good documentation.","commit_id":"27ad975a589b29fcaf67f4368a0c8c565eb34207"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"eff46e1b177a474be3f19a5151d0ffc7a2f0d9c5","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Management part of modern server hardware often include support of power and"},{"line_number":20,"context_line":"thermal limits. Power limit is a mechanism that supports power consumption"},{"line_number":21,"context_line":"value defined by iser. Thermal limit is setting of maximum inlet temperature"},{"line_number":22,"context_line":"with exception actions such as power off. Minimal requirements for power and"},{"line_number":23,"context_line":"thermal limits described in DCMI specification [#]_. There are also vendor"},{"line_number":24,"context_line":"technologies like HP Power Capping [#]_ and IBM Active Energy Manager [#]_"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba8a016a_ca9eebb7","line":21,"updated":"2015-11-24 11:21:40.000000000","message":"defined by user.","commit_id":"8cd1513bdea11d760397be8f3bc484ed3c099a32"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0758d6fcc741e53f8a07a4028a9d29e3679c0957","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Management part of modern server hardware often include support of power and"},{"line_number":20,"context_line":"thermal limits. Power limit is a mechanism that supports power consumption"},{"line_number":21,"context_line":"value defined by iser. Thermal limit is setting of maximum inlet temperature"},{"line_number":22,"context_line":"with exception actions such as power off. Minimal requirements for power and"},{"line_number":23,"context_line":"thermal limits described in DCMI specification [#]_. There are also vendor"},{"line_number":24,"context_line":"technologies like HP Power Capping [#]_ and IBM Active Energy Manager [#]_"}],"source_content_type":"text/x-rst","patch_set":19,"id":"9a8ffd7b_75c14080","line":21,"in_reply_to":"ba8a016a_ca9eebb7","updated":"2015-11-24 11:36:45.000000000","message":"Done","commit_id":"8cd1513bdea11d760397be8f3bc484ed3c099a32"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"eff46e1b177a474be3f19a5151d0ffc7a2f0d9c5","unresolved":false,"context_lines":[{"line_number":31,"context_line":"* Extend Ironic driver management interface for power and thermal limits"},{"line_number":32,"context_line":"  support, details described in ``Driver API impact`` section."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* Create new REST API endpoints for operate with limits (also requires RPC API"},{"line_number":35,"context_line":"  changes)."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Implement new ``IPMI_DCMIManagement`` interface which will use"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba8a016a_6af33f0b","line":34,"updated":"2015-11-24 11:21:40.000000000","message":"for operating","commit_id":"8cd1513bdea11d760397be8f3bc484ed3c099a32"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0758d6fcc741e53f8a07a4028a9d29e3679c0957","unresolved":false,"context_lines":[{"line_number":31,"context_line":"* Extend Ironic driver management interface for power and thermal limits"},{"line_number":32,"context_line":"  support, details described in ``Driver API impact`` section."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* Create new REST API endpoints for operate with limits (also requires RPC API"},{"line_number":35,"context_line":"  changes)."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"* Implement new ``IPMI_DCMIManagement`` interface which will use"}],"source_content_type":"text/x-rst","patch_set":19,"id":"9a8ffd7b_95406409","line":34,"in_reply_to":"ba8a016a_6af33f0b","updated":"2015-11-24 11:36:45.000000000","message":"Done","commit_id":"8cd1513bdea11d760397be8f3bc484ed3c099a32"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"eff46e1b177a474be3f19a5151d0ffc7a2f0d9c5","unresolved":false,"context_lines":[{"line_number":226,"context_line":"Work Items"},{"line_number":227,"context_line":"----------"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"* Modyfy base driver ``ManagementInterface`` class."},{"line_number":230,"context_line":"* Implement new RPC API methods."},{"line_number":231,"context_line":"* Create new REST API entrypoints."},{"line_number":232,"context_line":"* Implement ``IPMI_DCMIManagement`` interface."}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba8a016a_0a7dd3b0","line":229,"updated":"2015-11-24 11:21:40.000000000","message":"Modify","commit_id":"8cd1513bdea11d760397be8f3bc484ed3c099a32"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0758d6fcc741e53f8a07a4028a9d29e3679c0957","unresolved":false,"context_lines":[{"line_number":226,"context_line":"Work Items"},{"line_number":227,"context_line":"----------"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"* Modyfy base driver ``ManagementInterface`` class."},{"line_number":230,"context_line":"* Implement new RPC API methods."},{"line_number":231,"context_line":"* Create new REST API entrypoints."},{"line_number":232,"context_line":"* Implement ``IPMI_DCMIManagement`` interface."}],"source_content_type":"text/x-rst","patch_set":19,"id":"9a8ffd7b_35ee58ed","line":229,"in_reply_to":"ba8a016a_0a7dd3b0","updated":"2015-11-24 11:36:45.000000000","message":"Done","commit_id":"8cd1513bdea11d760397be8f3bc484ed3c099a32"}],"specs/approved/ironic-management-properties.rst":[{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"c949ae4c7a84efaef6d347d045f4ac6f6482d4f7","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/ironic-management-properties"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes extend driver management interface, add methods for support"},{"line_number":14,"context_line":"standartized node properties."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_4badbde7","line":13,"updated":"2015-12-03 10:37:32.000000000","message":"to extend","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ff9823a1402cc25886627eb20f8c795265d7630","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/ironic-management-properties"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes extend driver management interface, add methods for support"},{"line_number":14,"context_line":"standartized node properties."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_c0d2e75b","line":13,"in_reply_to":"9a8ffd7b_4badbde7","updated":"2015-12-03 12:27:46.000000000","message":"Done","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"c949ae4c7a84efaef6d347d045f4ac6f6482d4f7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/ironic-management-properties"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes extend driver management interface, add methods for support"},{"line_number":14,"context_line":"standartized node properties."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_6b1e8160","line":14,"updated":"2015-12-03 10:37:32.000000000","message":"standardized","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ff9823a1402cc25886627eb20f8c795265d7630","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/ironic-management-properties"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes extend driver management interface, add methods for support"},{"line_number":14,"context_line":"standartized node properties."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_c03987a5","line":14,"in_reply_to":"9a8ffd7b_6b1e8160","updated":"2015-12-03 12:27:46.000000000","message":"Done","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"c949ae4c7a84efaef6d347d045f4ac6f6482d4f7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Modern hardware have set of parameters which are defined in standard"},{"line_number":20,"context_line":"specifications or can be \"standartized\" via the common API. Examples are"},{"line_number":21,"context_line":"get/set boot devices (already implemented in Ironic), power and thermal system"},{"line_number":22,"context_line":"limits etc."}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_4b94dd89","line":19,"updated":"2015-12-03 10:37:32.000000000","message":"has instead of have","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ff9823a1402cc25886627eb20f8c795265d7630","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Modern hardware have set of parameters which are defined in standard"},{"line_number":20,"context_line":"specifications or can be \"standartized\" via the common API. Examples are"},{"line_number":21,"context_line":"get/set boot devices (already implemented in Ironic), power and thermal system"},{"line_number":22,"context_line":"limits etc."}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_c060a7a7","line":19,"in_reply_to":"9a8ffd7b_4b94dd89","updated":"2015-12-03 12:27:46.000000000","message":"Done","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"c949ae4c7a84efaef6d347d045f4ac6f6482d4f7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Modern hardware have set of parameters which are defined in standard"},{"line_number":20,"context_line":"specifications or can be \"standartized\" via the common API. Examples are"},{"line_number":21,"context_line":"get/set boot devices (already implemented in Ironic), power and thermal system"},{"line_number":22,"context_line":"limits etc."},{"line_number":23,"context_line":"There are two way for implementing management of these parameters via Ironic:"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_6bf1a100","line":20,"updated":"2015-12-03 10:37:32.000000000","message":"standardized","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ff9823a1402cc25886627eb20f8c795265d7630","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Modern hardware have set of parameters which are defined in standard"},{"line_number":20,"context_line":"specifications or can be \"standartized\" via the common API. Examples are"},{"line_number":21,"context_line":"get/set boot devices (already implemented in Ironic), power and thermal system"},{"line_number":22,"context_line":"limits etc."},{"line_number":23,"context_line":"There are two way for implementing management of these parameters via Ironic:"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_800dbfe9","line":20,"in_reply_to":"9a8ffd7b_6bf1a100","updated":"2015-12-03 12:27:46.000000000","message":"Done","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"c949ae4c7a84efaef6d347d045f4ac6f6482d4f7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"specifications or can be \"standartized\" via the common API. Examples are"},{"line_number":21,"context_line":"get/set boot devices (already implemented in Ironic), power and thermal system"},{"line_number":22,"context_line":"limits etc."},{"line_number":23,"context_line":"There are two way for implementing management of these parameters via Ironic:"},{"line_number":24,"context_line":"add specific driver management interface methods for each feature/set of"},{"line_number":25,"context_line":"parameters (can be a lot of such in the future) or create a generic API in the"},{"line_number":26,"context_line":"driver management interface."}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_6bc8c1a8","line":23,"updated":"2015-12-03 10:37:32.000000000","message":"ways","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ff9823a1402cc25886627eb20f8c795265d7630","unresolved":false,"context_lines":[{"line_number":20,"context_line":"specifications or can be \"standartized\" via the common API. Examples are"},{"line_number":21,"context_line":"get/set boot devices (already implemented in Ironic), power and thermal system"},{"line_number":22,"context_line":"limits etc."},{"line_number":23,"context_line":"There are two way for implementing management of these parameters via Ironic:"},{"line_number":24,"context_line":"add specific driver management interface methods for each feature/set of"},{"line_number":25,"context_line":"parameters (can be a lot of such in the future) or create a generic API in the"},{"line_number":26,"context_line":"driver management interface."}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_c02e6742","line":23,"in_reply_to":"9a8ffd7b_6bc8c1a8","updated":"2015-12-03 12:27:46.000000000","message":"Done","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"c949ae4c7a84efaef6d347d045f4ac6f6482d4f7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"parameters (can be a lot of such in the future) or create a generic API in the"},{"line_number":26,"context_line":"driver management interface."},{"line_number":27,"context_line":"This generic API should not be a vendor-specific, but contains an extendable"},{"line_number":28,"context_line":"set of standartized properties."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Proposed change"},{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_2b44f947","line":28,"updated":"2015-12-03 10:37:32.000000000","message":"standardized","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ff9823a1402cc25886627eb20f8c795265d7630","unresolved":false,"context_lines":[{"line_number":25,"context_line":"parameters (can be a lot of such in the future) or create a generic API in the"},{"line_number":26,"context_line":"driver management interface."},{"line_number":27,"context_line":"This generic API should not be a vendor-specific, but contains an extendable"},{"line_number":28,"context_line":"set of standartized properties."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Proposed change"},{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_8024df5f","line":28,"in_reply_to":"9a8ffd7b_2b44f947","updated":"2015-12-03 12:27:46.000000000","message":"Done","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"a8a5d2487a3a6d9a532850f54b20360e376587af","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/supported"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  Returns a list described in ``Driver API impact`` section with HTTP 200."},{"line_number":65,"context_line":"  API caches results from RPC API calls for reducing requests to hardware."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"- To set a property::"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_1c2894e1","line":64,"updated":"2015-12-02 14:45:10.000000000","message":"I don\u0027t get to see the list contents in the ``Driver API impact`` section :-) Isn\u0027 that dandy if we get to see a result sample for each of the REST APIs described here? just like this one: https://review.openstack.org/#/c/231288/9/specs/approved/manual-cleaning.rst (Line: 201:223)","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d678e9bcc363c2884d886dcfe9289989efcbbc52","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/supported"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  Returns a list described in ``Driver API impact`` section with HTTP 200."},{"line_number":65,"context_line":"  API caches results from RPC API calls for reducing requests to hardware."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"- To set a property::"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_baa6f5be","line":64,"in_reply_to":"9a8ffd7b_1c2894e1","updated":"2015-12-03 10:03:55.000000000","message":"Yes, will add an example.","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"a8a5d2487a3a6d9a532850f54b20360e376587af","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cname\u003e"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  with BODY that contains parameters. Return codes are HTTP 202 (conductor"},{"line_number":72,"context_line":"  uses async worker for set) or HTTP 400 if property is not supported or"},{"line_number":73,"context_line":"  invalid values passed (conductor uses validate_property() method"},{"line_number":74,"context_line":"  synchronously)."}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_9cbd646a","line":71,"updated":"2015-12-02 14:45:10.000000000","message":"Same here. Or is it the case that we still don\u0027t have enough information as to what to put in here? Please help me understand.","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d678e9bcc363c2884d886dcfe9289989efcbbc52","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cname\u003e"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  with BODY that contains parameters. Return codes are HTTP 202 (conductor"},{"line_number":72,"context_line":"  uses async worker for set) or HTTP 400 if property is not supported or"},{"line_number":73,"context_line":"  invalid values passed (conductor uses validate_property() method"},{"line_number":74,"context_line":"  synchronously)."}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_da2df9a8","line":71,"in_reply_to":"9a8ffd7b_9cbd646a","updated":"2015-12-03 10:03:55.000000000","message":"This is property-specific, but will add an example.","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"a8a5d2487a3a6d9a532850f54b20360e376587af","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cname\u003e"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"  Returns a dict described in ``Driver API impact`` section with HTTP 200."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Client (CLI) impact"},{"line_number":83,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_5c6a9cee","line":80,"updated":"2015-12-02 14:45:10.000000000","message":"Same here.","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d678e9bcc363c2884d886dcfe9289989efcbbc52","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cname\u003e"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"  Returns a dict described in ``Driver API impact`` section with HTTP 200."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Client (CLI) impact"},{"line_number":83,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"9a8ffd7b_5d5583f7","line":80,"in_reply_to":"9a8ffd7b_5c6a9cee","updated":"2015-12-03 10:03:55.000000000","message":"Same above.","commit_id":"114be76ef31beb8e7cf5ef7151592d3edf3a1c05"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"d9e8beb266b229b0419ad07828ae8ea0dc54c37f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \u0027limit_bar\u0027,"},{"line_number":72,"context_line":"        ... more ..."},{"line_number":73,"context_line":"      ]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"- To set a property::"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a8ffd7b_6a23d2bd","line":74,"updated":"2015-12-03 13:43:55.000000000","message":"wouldn\u0027t that be nice to have the properties retrieved as::\n\n  [\n    {\n      \u0027name\u0027: \u003cname of property\u003e,\n      \u0027description\u0027: \u003cdescription of property\u003e\n            # description may also include the\n            # possible values for the property.\n    },\n    ... more ...\n  ]","commit_id":"6997cbf1418c22226745873413a88b57606f3c28"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"3a479de001d52edcef6d91078996e0624b2386ed","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \u0027limit_bar\u0027,"},{"line_number":72,"context_line":"        ... more ..."},{"line_number":73,"context_line":"      ]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"- To set a property::"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a8ffd7b_dd15e13f","line":74,"in_reply_to":"9a8ffd7b_6a23d2bd","updated":"2015-12-03 15:03:31.000000000","message":"Not sure. The reason for not to include this extra info is: management properties should not be vendor specific. They should be standard for Ironic and fully documented, and all drivers which implements property \u0027foo\u0027 should accept the same parameters, in difference with drivers parameters which are vendor specific.","commit_id":"6997cbf1418c22226745873413a88b57606f3c28"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"d9e8beb266b229b0419ad07828ae8ea0dc54c37f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"  Returns a dict with parameters names and values like in example above with"},{"line_number":97,"context_line":"  HTTP 200."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Client (CLI) impact"},{"line_number":100,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a8ffd7b_85338961","line":97,"updated":"2015-12-03 13:43:55.000000000","message":"My suggestion is to have the property values fetched as::\n\n    {\n      \u0027name\u0027: \u003cname of property\u003e,\n      \u0027description\u0027: \u003cdescription of property\u003e\n      \u0027value\u0027: {\n                   \u0027param1\u0027: \u0027value1\u0027,\n                   \u0027param2\u0027: \u0027value2\u0027,\n                   ... more ...\n                 }\n    }","commit_id":"6997cbf1418c22226745873413a88b57606f3c28"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"3a479de001d52edcef6d91078996e0624b2386ed","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"  Returns a dict with parameters names and values like in example above with"},{"line_number":97,"context_line":"  HTTP 200."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Client (CLI) impact"},{"line_number":100,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a8ffd7b_9db75939","line":97,"in_reply_to":"9a8ffd7b_85338961","updated":"2015-12-03 15:03:31.000000000","message":"Request sender already knows the name of property, about description see above.","commit_id":"6997cbf1418c22226745873413a88b57606f3c28"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"d9e8beb266b229b0419ad07828ae8ea0dc54c37f","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* ``get_supported_properties`` - get supported properties for a node."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* ``get_property_values`` - get current property values for a node."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"* ``set_property`` - set property with parameters for a node."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a8ffd7b_a97547fa","line":116,"updated":"2015-12-03 13:43:55.000000000","message":"if the getter api is named as ``get_property_values``, shouldn\u0027t the setter be named in a similar manner as ``set_property_values`` instead of ``set_property``. Moreover, if you at all want to stick to this naming convention then I feel ``get(set)_property_value(omitting \u0027s\u0027 here)`` is more apt.\n\n  get_supported_properties\n  get_property_value\n  set_property_value\n\nOr, to follow a different naming convention altogether. e.g.::\n\n  get_supported_properties\n  get_property\n  set_property\n\nAgain, can\u0027t we have a single REST API to return all the supported properties along with their currently set values::\n\n  GET /v1/nodes/\u003cnode-ident\u003e/management/properties/supported?values\u003dtrue\n  # very crude though way of expressing this one, but might have to check what should be the recommended way.\n\nOn the CLI front::\n\n  get_supported_property_values\n\nIt\u0027s debatable if at all it adds any value or could be an absolute overkill.","commit_id":"6997cbf1418c22226745873413a88b57606f3c28"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"3a479de001d52edcef6d91078996e0624b2386ed","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"* ``get_supported_properties`` - get supported properties for a node."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* ``get_property_values`` - get current property values for a node."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"* ``set_property`` - set property with parameters for a node."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a8ffd7b_bd701d09","line":116,"in_reply_to":"9a8ffd7b_a97547fa","updated":"2015-12-03 15:03:31.000000000","message":"1) Good suggestion about names, done. 2) Get current and supported is different things, typical use case: - user/script/service which want to work with property \u0027foo\u0027 does GET /v1/nodes/\u003cnode-ident\u003e/management/properties/supported, and found that \u0027foo\u0027 is supported on a node, then GET /v1/nodes/\u003cnode-ident\u003e/management/properties/foo for example.","commit_id":"6997cbf1418c22226745873413a88b57606f3c28"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/ironic-management-properties"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to extend driver management interface, add methods for"},{"line_number":14,"context_line":"support standardized node properties."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_64a04a91","line":14,"updated":"2015-12-06 14:10:16.000000000","message":"s/support/supporting a set of/","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0aabd3194d6590e280f9a32c32989fb30b7ac167","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/ironic-management-properties"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This spec proposes to extend driver management interface, add methods for"},{"line_number":14,"context_line":"support standardized node properties."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Problem description"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_6ea572b3","line":14,"in_reply_to":"7a740942_64a04a91","updated":"2015-12-07 12:07:31.000000000","message":"Done","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"add specific driver management interface methods for each feature/set of"},{"line_number":25,"context_line":"parameters (can be a lot of such in the future) or create a generic API in the"},{"line_number":26,"context_line":"driver management interface."},{"line_number":27,"context_line":"This generic API should not be a vendor-specific, but contains an extendable"},{"line_number":28,"context_line":"set of standardized properties."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_44cc2e6a","line":27,"updated":"2015-12-06 14:10:16.000000000","message":"s/be a vendor-specific/be vendor-specific/\n\ns/contains an extendable/expose a/","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0aabd3194d6590e280f9a32c32989fb30b7ac167","unresolved":false,"context_lines":[{"line_number":24,"context_line":"add specific driver management interface methods for each feature/set of"},{"line_number":25,"context_line":"parameters (can be a lot of such in the future) or create a generic API in the"},{"line_number":26,"context_line":"driver management interface."},{"line_number":27,"context_line":"This generic API should not be a vendor-specific, but contains an extendable"},{"line_number":28,"context_line":"set of standardized properties."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_0ee86eb3","line":27,"in_reply_to":"7a740942_44cc2e6a","updated":"2015-12-07 12:07:31.000000000","message":"Done","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"* Extend Ironic driver management interface, add methods for support generic"},{"line_number":34,"context_line":"  properties, details described in ``Driver API impact``."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* Create new REST API endpoints for operating with properties (also requires"},{"line_number":37,"context_line":"  RPC API changes)."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"* Usage of each new property via API should be fully documented."}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_64c7ea45","line":36,"updated":"2015-12-06 14:10:16.000000000","message":"s/operating with properties/managing properties/","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0aabd3194d6590e280f9a32c32989fb30b7ac167","unresolved":false,"context_lines":[{"line_number":33,"context_line":"* Extend Ironic driver management interface, add methods for support generic"},{"line_number":34,"context_line":"  properties, details described in ``Driver API impact``."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* Create new REST API endpoints for operating with properties (also requires"},{"line_number":37,"context_line":"  RPC API changes)."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"* Usage of each new property via API should be fully documented."}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_eecde25d","line":36,"in_reply_to":"7a740942_64c7ea45","updated":"2015-12-07 12:07:31.000000000","message":"Done","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"Alternatives"},{"line_number":42,"context_line":"------------"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Usage of vendor passthru mechanism."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Data model impact"},{"line_number":47,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_c4dede10","line":44,"updated":"2015-12-06 14:10:16.000000000","message":"Big -1 on this alternative, since it will introduce a Wild West area in Ironic that will lead to a complete lack of interoperability between clouds.","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0aabd3194d6590e280f9a32c32989fb30b7ac167","unresolved":false,"context_lines":[{"line_number":41,"context_line":"Alternatives"},{"line_number":42,"context_line":"------------"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Usage of vendor passthru mechanism."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Data model impact"},{"line_number":47,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_ce27c610","line":44,"in_reply_to":"7a740942_c4dede10","updated":"2015-12-07 12:07:31.000000000","message":"Totally agree.","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"- To get supported node properties::"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/supported"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  Returns an unordered list of supported properties with HTTP 200. Each item in"},{"line_number":65,"context_line":"  the list is a property name. API caches results from RPC API calls for"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_84e8d6b5","line":62,"updated":"2015-12-06 14:10:16.000000000","message":"How about:\n\n GET /v1/nodes/{id}/properties/schema\n\nSee below for why I recommend this...","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        \u0027control_foo\u0027,"},{"line_number":71,"context_line":"        \u0027limit_bar\u0027,"},{"line_number":72,"context_line":"        ... more ..."},{"line_number":73,"context_line":"      ]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"- To set a property::"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_643cca2f","line":73,"updated":"2015-12-06 14:10:16.000000000","message":"Instead of the above, how about returning a JSONSchema document that is machine-readable by the client and informs the client of all possible properties and all possible input values for those properties? That way, this is self-describing.\n\nFor example:\n\n GET /v1/nodes/{id}/properties/schema\n 200 OK\n {\n   \"title\": \"Node properties schema\",\n   \"type\": \"object\",\n   \"properties\": {\n     \"control_foo\": {\n       \"description\": \"How do I control foo?\",\n       \"type\": {\n         \"enum\": [\n           \"option1\",\n           \"option2\"\n         ]\n       }\n     }\n     \"limit_bar\": {\n       \"description\": \"The limit of bar\",\n       \"type\": \"integer\",\n       \"minimum\": 0\n     },\n   }\n   \"required\": [\"control_foo\"]\n }","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0aabd3194d6590e280f9a32c32989fb30b7ac167","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        \u0027control_foo\u0027,"},{"line_number":71,"context_line":"        \u0027limit_bar\u0027,"},{"line_number":72,"context_line":"        ... more ..."},{"line_number":73,"context_line":"      ]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"- To set a property::"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_bef70958","line":73,"in_reply_to":"7a740942_643cca2f","updated":"2015-12-07 12:07:31.000000000","message":"Agree with you, but this is a long story. There are many vendor-specific parameters, example of they you can see Intel Node Manager policies spec https://review.openstack.org/#/c/214657/ . Two ways for dealing with these parameters are possible 1) Generic interface for exposing these parameters with possible values (with JSON Schema or something else). 2) Ironic vendor interface (user should know all about before using of it). I personally think that (1) is better. But Mr. Devananda left the comment on patchset 17 (which I did more generic): \"This proposal for a REST interface is a generalized reflection of hardware. it\u0027s not abstract -- it will require every user to know exactly what hardware they\u0027re talking to, and implement hardware-specific logic in their applications.\" This is the reason why this spec has been reworked. In your example above response is machine-readable, but potentially can be many hardware-related properties which is added by vendors and in Devananda\u0027s words \"it will require every user to know exactly what hardware they\u0027re talking to\" and \"is a generalized reflection of hardware. it\u0027s not abstract\".","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"- To set a property::"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"  with BODY that contains parameters names and values. Return codes are"},{"line_number":80,"context_line":"  HTTP 202 (conductor uses async worker for set) or HTTP 400 if property is not"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_2446c2bf","line":77,"updated":"2015-12-06 14:10:16.000000000","message":"Is there a need for the /management/ part of the URI?\n\nHow about just:\n\n PUT /v1/nodes/{id}/properties/{property_name}\n {\n   ...\n }\n\nwith the body matching the validating against the JSONSchema document I mentioned above?\n\nSo, for the control_foo property, it might look like:\n\n PUT /v1/nodes/{id}/properties/control_foo\n {\n   \"option2\"\n }","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0aabd3194d6590e280f9a32c32989fb30b7ac167","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"- To set a property::"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"  with BODY that contains parameters names and values. Return codes are"},{"line_number":80,"context_line":"  HTTP 202 (conductor uses async worker for set) or HTTP 400 if property is not"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_0e45ce6e","line":77,"in_reply_to":"7a740942_2446c2bf","updated":"2015-12-07 12:07:31.000000000","message":"I think /management/ part is needed, because 1) it\u0027s related to management driver\u0027s interface 2) main reason - it\u0027s shows that properties are for node management purposes (not deploying, console, etc.)","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"  Returns a dict with parameters names and values like in example above with"},{"line_number":97,"context_line":"  HTTP 200."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Client (CLI) impact"},{"line_number":100,"context_line":"-------------------"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_840d3692","line":98,"updated":"2015-12-06 14:10:16.000000000","message":"You will want the ability to \"unset\" a property using a call to:\n\n DELETE /v1/nodes/{id}/properties/{property_name}\n\nreturning a 204 No Content on success.","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0aabd3194d6590e280f9a32c32989fb30b7ac167","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"  Returns a dict with parameters names and values like in example above with"},{"line_number":97,"context_line":"  HTTP 200."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Client (CLI) impact"},{"line_number":100,"context_line":"-------------------"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_29868413","line":98,"in_reply_to":"7a740942_840d3692","updated":"2015-12-07 12:07:31.000000000","message":"Done, it\u0027s needed.","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"095f8488ec4547a8dc081b6712c20c7ab996bc0a","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"New options should be added for management properties:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"$ ironic node-get-supported-properties \u003cnode-ident\u003e"},{"line_number":105,"context_line":"$ ironic node-get-property \u003cnode-ident\u003e --name \u003cproperty-name\u003e"},{"line_number":106,"context_line":"$ ironic node-set-property \u003cnode-ident\u003e --name \u003cproperty-name\u003e param\u003dvalue"},{"line_number":107,"context_line":"[param1\u003dvalue1] ..."}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_e4167aa6","line":104,"updated":"2015-12-06 14:10:16.000000000","message":"To match existing CLI command structure, this should be:\n\n ironic propery-list \u003cNODE\u003e\n ironic property-show \u003cNODE\u003e \u003cPROPERTY\u003e\n ironic property-set \u003cNODE\u003e \u003cPROPERTY\u003e \u003cVALUE\u003e\n ironic property-unset \u003cNODE\u003e \u003cPROPERTY\u003e","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0aabd3194d6590e280f9a32c32989fb30b7ac167","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"New options should be added for management properties:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"$ ironic node-get-supported-properties \u003cnode-ident\u003e"},{"line_number":105,"context_line":"$ ironic node-get-property \u003cnode-ident\u003e --name \u003cproperty-name\u003e"},{"line_number":106,"context_line":"$ ironic node-set-property \u003cnode-ident\u003e --name \u003cproperty-name\u003e param\u003dvalue"},{"line_number":107,"context_line":"[param1\u003dvalue1] ..."}],"source_content_type":"text/x-rst","patch_set":24,"id":"7a740942_292a042d","line":104,"in_reply_to":"7a740942_e4167aa6","updated":"2015-12-07 12:07:31.000000000","message":"Node-related ironic subcommands start with \"node-\".","commit_id":"c335718ad225ad0522839115cf8c7dbf7f6ce680"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7bf21e635243f79be2acf6f0c4c4c6cee123e62e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"There are two ways for implementing management of these parameters via Ironic:"},{"line_number":24,"context_line":"add specific driver management interface methods for each feature/set of"},{"line_number":25,"context_line":"parameters (can be a lot of such in the future) or create a generic API in the"},{"line_number":26,"context_line":"driver management interface."},{"line_number":27,"context_line":"This generic API should not be vendor-specific, but expose a set of"},{"line_number":28,"context_line":"standardized properties."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_c401e207","line":26,"updated":"2015-12-07 13:01:23.000000000","message":"These should be in the alternatives","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"9a4cba3087fc8a3b12de12ec0e8e6a18aec39260","unresolved":false,"context_lines":[{"line_number":23,"context_line":"There are two ways for implementing management of these parameters via Ironic:"},{"line_number":24,"context_line":"add specific driver management interface methods for each feature/set of"},{"line_number":25,"context_line":"parameters (can be a lot of such in the future) or create a generic API in the"},{"line_number":26,"context_line":"driver management interface."},{"line_number":27,"context_line":"This generic API should not be vendor-specific, but expose a set of"},{"line_number":28,"context_line":"standardized properties."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_bc01143a","line":26,"in_reply_to":"7a740942_c401e207","updated":"2015-12-08 12:37:35.000000000","message":"Done","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7bf21e635243f79be2acf6f0c4c4c6cee123e62e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* Extend Ironic driver management interface, add methods for support generic"},{"line_number":34,"context_line":"  properties, details described in ``Driver API impact``."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* Create new REST API endpoints for managing properties (also requires RPC API"},{"line_number":37,"context_line":"  changes)."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_e704204b","line":34,"updated":"2015-12-07 13:01:23.000000000","message":"If we allow it to be too generic I think we lose the power of abstraction. We could ended up with each driver implementing their own values and now the user will have to learn how to set those properties differently across many different drivers.\n\nTake the set boot device as an example, when setting the boot device to boot from the network we must use \"pxe\", for all drivers. Even if internally that value has to be mapped to something like \"nic\", \"net\", \"network\" etc... This is great for the user experience IMO because you don\u0027t have to learn the specifics of that driver to be able to use it.\n\nNow if we make it too generic by allowing each driver can implement their own properties and values the way they want, I think that:\n\n1. It\u0027s duplicating vendor passthru\n\n2. It might turn-out to be a bad experience for the user when trying to work with different drivers in Ironic\n\n...\n\nIn my opinion, I prefer the alternative of having specific methods for each feature on the management interface (if they are common/supported across many drivers, otherwise vendor passthru)","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f06d04bcc05b630f7121ec1df5ad10d6d6347157","unresolved":false,"context_lines":[{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* Extend Ironic driver management interface, add methods for support generic"},{"line_number":34,"context_line":"  properties, details described in ``Driver API impact``."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* Create new REST API endpoints for managing properties (also requires RPC API"},{"line_number":37,"context_line":"  changes)."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_724c709e","line":34,"in_reply_to":"7a740942_32fca871","updated":"2015-12-07 13:18:07.000000000","message":"get_sensor_data is used by ironic. it\u0027s used by the conductor to send data to ceilometer, and is not exposed to users.\n\nhere it\u0027s the opposite: we\u0027re introducing methods that are not accessed by ironic and that are only exposed to users via API, kind of vendor passthru. What I want to avoid is having a dozen of similar get_supported_XXX, get_XXX, set_XXX methods in the management interface in a few cycles once we create a precedent.","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"49dd52564c6192c1040ee411b63fea6cf22a4539","unresolved":false,"context_lines":[{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* Extend Ironic driver management interface, add methods for support generic"},{"line_number":34,"context_line":"  properties, details described in ``Driver API impact``."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* Create new REST API endpoints for managing properties (also requires RPC API"},{"line_number":37,"context_line":"  changes)."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_cdbfc5a8","line":34,"in_reply_to":"7a740942_724c709e","updated":"2015-12-07 13:46:16.000000000","message":"Right, maybe it\u0027s only me, but why we care if the method exposed is or is not accessed by Ironic as long as they offer an abstract way of managing the hardware ? I don\u0027t think that it was even part of the initial conception of the management interface [0]\n\nIndependent of how we architect it internally (whether having the get_supported_XXX, get_XXX and set_XXX or something else) in the API those options are exposed endpoints, e.g the boot device right now is:\n\n* GET /v1/nodes/\u003cnode-ident\u003e/management/boot_device - for getting the current boot device\n\n* PUT /v1/nodes/\u003cnode-ident\u003e/management/boot_device - for setting the boot device\n\n* GET /v1/nodes/\u003cnode-ident\u003e/management/boot_device/supported - for getting the supported options\n\n\nThe spec proposes something similar to the API:\n\n* GET /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e\n\n* PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e\n\n* GET /v1/nodes/\u003cnode-ident\u003e/management/properties/supported\n\n\nI don\u0027t think it\u0027s good because we are leaking internal information in the API. E.g,  things under \"management/properties/\u003cXXX\u003e\" will mean not used internally by Ironic and things under \"management/\u003cXXX\u003e\" is used internally by Ironic\n\n[0] http://specs.openstack.org/openstack/ironic-specs/specs/juno-implemented/new-management-interface.html","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"79e9ca88aaafa2decf6bea3d9cff29b9a9475c45","unresolved":false,"context_lines":[{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* Extend Ironic driver management interface, add methods for support generic"},{"line_number":34,"context_line":"  properties, details described in ``Driver API impact``."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* Create new REST API endpoints for managing properties (also requires RPC API"},{"line_number":37,"context_line":"  changes)."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_32fca871","line":34,"in_reply_to":"7a740942_923ebc8a","updated":"2015-12-07 13:14:09.000000000","message":"\u003e I\u0027ve -1 the previous version suggesting that, because it\u0027s cluttering the management interface with things that are not directly used by ironic itself.\n\nI don\u0027t think that it\u0027s a requirement for the methods in the management interface to be used by Ironic itself, take the get_sensor_data() method for example it\u0027s not used by Ironic but it allows other systems to be able to integrate with Ironic when managing their hardware.\n\nI think the idea of the management interface was to offer means of management the hardware capabilities in a generic way across all drivers in Ironic (usually by promoting vendor passthru methods that are common across many drivers)","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6df4550c3f88c774e0ee1e3d355d1e6e0fdae29d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* Extend Ironic driver management interface, add methods for support generic"},{"line_number":34,"context_line":"  properties, details described in ``Driver API impact``."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* Create new REST API endpoints for managing properties (also requires RPC API"},{"line_number":37,"context_line":"  changes)."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_f8fa8174","line":34,"in_reply_to":"7a740942_cdbfc5a8","updated":"2015-12-07 13:49:24.000000000","message":"\u003e why we care if the method exposed is or is not accessed by Ironic as long as they offer an abstract way of managing the hardware\n\nbecause we won\u0027t be accessing this methods directly via task.driver.management.get_foobar. then we can make sure we can maintain the properties list in a smarter fashion. I\u0027m not sure how many of them people will end up with as soon as we allow the first to be introduced..\n\nkind of agree about rest interface though.","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2ad368b712fcc4d47b250975d630cee53de3037b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* Extend Ironic driver management interface, add methods for support generic"},{"line_number":34,"context_line":"  properties, details described in ``Driver API impact``."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* Create new REST API endpoints for managing properties (also requires RPC API"},{"line_number":37,"context_line":"  changes)."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_923ebc8a","line":34,"in_reply_to":"7a740942_e704204b","updated":"2015-12-07 13:06:12.000000000","message":"\u003e It\u0027s duplicating vendor passthru\n\nThat\u0027s the specific reason I think we should standardize the list of properties ironic-wide.\n\n\u003e  I prefer the alternative of having specific methods for each feature on the management interface\n\nI\u0027ve -1 the previous version suggesting that, because it\u0027s cluttering the management interface with things that are not directly used by ironic itself.","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2ad368b712fcc4d47b250975d630cee53de3037b","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"REST API impact"},{"line_number":56,"context_line":"---------------"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"New REST API endpoints will be added:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"- To get supported node properties::"}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_b253b8e1","line":57,"updated":"2015-12-07 13:06:12.000000000","message":"There should be a ReST interface returning properties supported by ironic (globally, for all drivers) as well as their JSON schemas.","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"574a5d68e54d4938bdb614d7911847732724d417","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"REST API impact"},{"line_number":56,"context_line":"---------------"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"New REST API endpoints will be added:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"- To get supported node properties::"}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_f3ddc2e0","line":57,"in_reply_to":"7a740942_b253b8e1","updated":"2015-12-07 14:07:16.000000000","message":"+1, will do.","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"9a4cba3087fc8a3b12de12ec0e8e6a18aec39260","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"REST API impact"},{"line_number":56,"context_line":"---------------"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"New REST API endpoints will be added:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"- To get supported node properties::"}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_ff71cb0c","line":57,"in_reply_to":"7a740942_b253b8e1","updated":"2015-12-08 12:37:35.000000000","message":"Done","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2ad368b712fcc4d47b250975d630cee53de3037b","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"Work Items"},{"line_number":234,"context_line":"----------"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"* Modify base driver ``ManagementInterface`` class."},{"line_number":237,"context_line":"* Implement new RPC API methods."},{"line_number":238,"context_line":"* Create new REST API entrypoints."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_320d88e8","line":235,"updated":"2015-12-07 13:06:12.000000000","message":"we should invent a driver-independent place to contain all properties with their JSON schemas","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"574a5d68e54d4938bdb614d7911847732724d417","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"Work Items"},{"line_number":234,"context_line":"----------"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"* Modify base driver ``ManagementInterface`` class."},{"line_number":237,"context_line":"* Implement new RPC API methods."},{"line_number":238,"context_line":"* Create new REST API entrypoints."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7a740942_93cebe2c","line":235,"in_reply_to":"7a740942_320d88e8","updated":"2015-12-07 14:07:16.000000000","message":"+1","commit_id":"1d8fc6b060ef3eda9a2bd5f3d5b646b25afe56cd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6b44456c6efa1b57a57d21aa5127dd9fc6c900a7","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"- To get all properties supported by Ironic::"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    GET /v1/node_management_properties"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  Returns a JSON dict with all supported properties in current version of"},{"line_number":65,"context_line":"  Ironic with their JSON schemas. HTTP code 200."}],"source_content_type":"text/x-rst","patch_set":28,"id":"5a5ae5dd_8d7ba0bd","line":62,"updated":"2016-02-08 15:31:39.000000000","message":"this URL seems pretty inconsistent with the next one. so either this should be /v1/management/properties, or the next should be /v1/nodes/\u003cident\u003e/management_properties/\n\nI also slighly prefer dashes to underscores in URL\u0027s","commit_id":"d9ecd2adfcb14514919e315bfa8920e613c748c5"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"e07af5244c0f11f3cbfa7e3ceb1718d1ba097c53","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"- To get all properties supported by Ironic::"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    GET /v1/node_management_properties"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  Returns a JSON dict with all supported properties in current version of"},{"line_number":65,"context_line":"  Ironic with their JSON schemas. HTTP code 200."}],"source_content_type":"text/x-rst","patch_set":28,"id":"3a57f1b5_8e3123a5","line":62,"in_reply_to":"5a5ae5dd_8d7ba0bd","updated":"2016-02-10 09:16:54.000000000","message":"Done","commit_id":"d9ecd2adfcb14514919e315bfa8920e613c748c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6b44456c6efa1b57a57d21aa5127dd9fc6c900a7","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"- To set a property::"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"  with BODY that contains parameters as defined in property JSON schema. Return"},{"line_number":118,"context_line":"  codes are HTTP 202 (conductor uses async worker for set) or HTTP 400 if"}],"source_content_type":"text/x-rst","patch_set":28,"id":"5a5ae5dd_2d4dcc99","line":115,"updated":"2016-02-08 15:31:39.000000000","message":"what if we have a property with name \"supported\"? :) maybe drop \"supported\" from previous URL?","commit_id":"d9ecd2adfcb14514919e315bfa8920e613c748c5"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"e07af5244c0f11f3cbfa7e3ceb1718d1ba097c53","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"- To set a property::"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    PUT /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"  with BODY that contains parameters as defined in property JSON schema. Return"},{"line_number":118,"context_line":"  codes are HTTP 202 (conductor uses async worker for set) or HTTP 400 if"}],"source_content_type":"text/x-rst","patch_set":28,"id":"3a57f1b5_ce007bad","line":115,"in_reply_to":"5a5ae5dd_2d4dcc99","updated":"2016-02-10 09:16:54.000000000","message":"Done","commit_id":"d9ecd2adfcb14514919e315bfa8920e613c748c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a07f6ca516ab65a21228fd590f28babd738d1a40","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        \u0027control_foo\u0027,"},{"line_number":109,"context_line":"        \u0027limit_bar\u0027,"},{"line_number":110,"context_line":"        ... more ..."},{"line_number":111,"context_line":"      ]"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"- To set a property::"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"1af94dfe_a858528b","line":111,"updated":"2016-03-17 14:44:30.000000000","message":"any particular reason to not return values as well?","commit_id":"1b8910bd3adb6a6f0c0eaa9a5539997e6d6a203b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"bae034ef119dff006908c9e3ea76c766cd87234a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        \u0027control_foo\u0027,"},{"line_number":109,"context_line":"        \u0027limit_bar\u0027,"},{"line_number":110,"context_line":"        ... more ..."},{"line_number":111,"context_line":"      ]"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"- To set a property::"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"fa0719c6_a81739ec","line":111,"in_reply_to":"1af94dfe_a858528b","updated":"2016-03-21 08:50:31.000000000","message":"This will double generic results of GET \"/v1/management/properties\", because values for node are high hardware dependent and often no out of band standard way for getting valid values. For example we want to set power limit via DCMI command. This limit is 16 bit unsigned. Is value 100000 invalid? Yes, and Ironic can validate it via json schema. And how about 10000? We don\u0027t know. Ironic should send the command to HW, and user can look \"last_error\".","commit_id":"1b8910bd3adb6a6f0c0eaa9a5539997e6d6a203b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a07f6ca516ab65a21228fd590f28babd738d1a40","unresolved":false,"context_lines":[{"line_number":118,"context_line":"  codes are HTTP 202 (conductor uses async worker for set) or HTTP 400 if"},{"line_number":119,"context_line":"  property is not supported or invalid values passed (Ironic API service does"},{"line_number":120,"context_line":"  validation via property JSON schema)."},{"line_number":121,"context_line":"  An example of parameters data::"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"      {"},{"line_number":124,"context_line":"        \u0027limit\u0027: 100,"}],"source_content_type":"text/x-rst","patch_set":29,"id":"1af94dfe_885d967b","line":121,"updated":"2016-03-17 14:44:30.000000000","message":"When property does not exist, we should return 404 (as given URL does not exist for this node)","commit_id":"1b8910bd3adb6a6f0c0eaa9a5539997e6d6a203b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"bae034ef119dff006908c9e3ea76c766cd87234a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"  codes are HTTP 202 (conductor uses async worker for set) or HTTP 400 if"},{"line_number":119,"context_line":"  property is not supported or invalid values passed (Ironic API service does"},{"line_number":120,"context_line":"  validation via property JSON schema)."},{"line_number":121,"context_line":"  An example of parameters data::"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"      {"},{"line_number":124,"context_line":"        \u0027limit\u0027: 100,"}],"source_content_type":"text/x-rst","patch_set":29,"id":"fa0719c6_a6e5aba9","line":121,"in_reply_to":"1af94dfe_885d967b","updated":"2016-03-21 08:50:31.000000000","message":"Done","commit_id":"1b8910bd3adb6a6f0c0eaa9a5539997e6d6a203b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a07f6ca516ab65a21228fd590f28babd738d1a40","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"  Returns a dict with parameters like in example above with HTTP 200."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"- To unset the property::"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"1af94dfe_e856da5a","line":133,"updated":"2016-03-17 14:44:30.000000000","message":"ditto about 404","commit_id":"1b8910bd3adb6a6f0c0eaa9a5539997e6d6a203b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"bae034ef119dff006908c9e3ea76c766cd87234a","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    GET /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"  Returns a dict with parameters like in example above with HTTP 200."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"- To unset the property::"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"fa0719c6_86e2279e","line":133,"in_reply_to":"1af94dfe_e856da5a","updated":"2016-03-21 08:50:31.000000000","message":"Done","commit_id":"1b8910bd3adb6a6f0c0eaa9a5539997e6d6a203b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a07f6ca516ab65a21228fd590f28babd738d1a40","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    DELETE /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  Returns No Content HTTP 204 on success, HTTP 400 if property is not"},{"line_number":140,"context_line":"  supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":29,"id":"1af94dfe_c8531e6a","line":140,"updated":"2016-03-17 14:44:30.000000000","message":"ditto","commit_id":"1b8910bd3adb6a6f0c0eaa9a5539997e6d6a203b"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"bae034ef119dff006908c9e3ea76c766cd87234a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    DELETE /v1/nodes/\u003cnode-ident\u003e/management/properties/\u003cproperty-name\u003e"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  Returns No Content HTTP 204 on success, HTTP 400 if property is not"},{"line_number":140,"context_line":"  supported."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":29,"id":"fa0719c6_e6ede38f","line":140,"in_reply_to":"1af94dfe_c8531e6a","updated":"2016-03-21 08:50:31.000000000","message":"Done","commit_id":"1b8910bd3adb6a6f0c0eaa9a5539997e6d6a203b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0457752fbc4891b3ffe30362d80a81b91f601bdf","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* Usage of vendor passthru mechanism."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"* Add specific driver management interface methods for each feature."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Data model impact"},{"line_number":47,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_70eccdc7","line":44,"range":{"start_line":44,"start_character":1,"end_line":44,"end_character":68},"updated":"2016-04-04 21:36:19.000000000","message":"It seems like this would be a required action by driver maintainers for this functionality to be used...  Perhaps it was meant for elsewhere in the specification?","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"12325585d4208f460dfb1c4371910b2a2dd65499","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* Usage of vendor passthru mechanism."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"* Add specific driver management interface methods for each feature."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Data model impact"},{"line_number":47,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_252ac77e","line":44,"range":{"start_line":44,"start_character":1,"end_line":44,"end_character":68},"in_reply_to":"9a061dce_70eccdc7","updated":"2016-04-06 08:26:56.000000000","message":"This is only alternative way, for example if we want limit support add get_limit(), set_limit() etc as separate methods to management interface.","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0457752fbc4891b3ffe30362d80a81b91f601bdf","unresolved":false,"context_lines":[{"line_number":46,"context_line":"Data model impact"},{"line_number":47,"context_line":"-----------------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"None"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"State Machine Impact"},{"line_number":52,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_95da3377","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":4},"updated":"2016-04-04 21:36:19.000000000","message":"How is this not impacting the data model?  Does that mean any property being set, any piece of data being returned is locking a host and completely transitory?","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"12325585d4208f460dfb1c4371910b2a2dd65499","unresolved":false,"context_lines":[{"line_number":46,"context_line":"Data model impact"},{"line_number":47,"context_line":"-----------------"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"None"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"State Machine Impact"},{"line_number":52,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_6a3f6cd6","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":4},"in_reply_to":"9a061dce_95da3377","updated":"2016-04-06 08:26:56.000000000","message":"No DB changes, no migrations, no new objects, so no data model impact.","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0457752fbc4891b3ffe30362d80a81b91f601bdf","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"These methods are linked to driver API method below."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Driver API impact"},{"line_number":172,"context_line":"-----------------"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_b2894dcd","line":170,"updated":"2016-04-04 21:36:19.000000000","message":"Nit: empty line?","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"12325585d4208f460dfb1c4371910b2a2dd65499","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"These methods are linked to driver API method below."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Driver API impact"},{"line_number":172,"context_line":"-----------------"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_4abd4867","line":170,"in_reply_to":"9a061dce_b2894dcd","updated":"2016-04-06 08:26:56.000000000","message":"Done","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0457752fbc4891b3ffe30362d80a81b91f601bdf","unresolved":false,"context_lines":[{"line_number":262,"context_line":"* Implement new RPC API methods."},{"line_number":263,"context_line":"* Create a new REST API entrypoint for properties list with JSON schemas."},{"line_number":264,"context_line":"* Create new REST API entrypoints."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Dependencies"},{"line_number":267,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_f5b9ef2f","line":265,"updated":"2016-04-04 21:36:19.000000000","message":"I feel like implementing the interface is one thing, but I think the community, both of operators and developers, to fully understand how this will better help them in their day to day lives, and that such functionality needs to be on track to be implemented into a reference driver.","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"12325585d4208f460dfb1c4371910b2a2dd65499","unresolved":false,"context_lines":[{"line_number":262,"context_line":"* Implement new RPC API methods."},{"line_number":263,"context_line":"* Create a new REST API entrypoint for properties list with JSON schemas."},{"line_number":264,"context_line":"* Create new REST API entrypoints."},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Dependencies"},{"line_number":267,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_eaf89c4b","line":265,"in_reply_to":"9a061dce_f5b9ef2f","updated":"2016-04-06 08:26:56.000000000","message":"Agree, https://review.openstack.org/#/c/251957/ describes an implementation example.","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0457752fbc4891b3ffe30362d80a81b91f601bdf","unresolved":false,"context_lines":[{"line_number":281,"context_line":"Documentation Impact"},{"line_number":282,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Documentation will be provided."},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"References"},{"line_number":287,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_127e39e4","line":284,"range":{"start_line":284,"start_character":0,"end_line":284,"end_character":31},"updated":"2016-04-04 21:36:19.000000000","message":"I\u0027d prefer to see a list of documentation work items or highlights that would be associated with the change that will be landed in parallel.  I think stating that something will be provided is implied, but we need to know the substance of what will be provided.","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"12325585d4208f460dfb1c4371910b2a2dd65499","unresolved":false,"context_lines":[{"line_number":281,"context_line":"Documentation Impact"},{"line_number":282,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Documentation will be provided."},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"References"},{"line_number":287,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a061dce_0af4f083","line":284,"range":{"start_line":284,"start_character":0,"end_line":284,"end_character":31},"in_reply_to":"9a061dce_127e39e4","updated":"2016-04-06 08:26:56.000000000","message":"Done","commit_id":"b56ac87d0ed634415afc70db84d3edb1c4884ba3"}],"specs/liberty/ironic-firmware-interface.rst":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"      {"},{"line_number":42,"context_line":"        \u0027bios\u0027:"},{"line_number":43,"context_line":"          {"},{"line_number":44,"context_line":"            ["},{"line_number":45,"context_line":"              {"},{"line_number":46,"context_line":"                \u0027name\u0027: \u0027parameter1\u0027,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_6de85817","line":43,"updated":"2015-08-10 08:32:09.000000000","message":"Why do we need a dictionary again.  Can\u0027t it be just a list ?\n\n  {\n    \u0027bios\u0027: [ {\n                 \u0027name\u0027: \u0027parameter1\u0027,\n                 \u0027values\u0027: [0, 1, 2, 3],\n               },\n               {\n                 \u0027name\u0027: \u0027parameter2\u0027,\n                 \u0027values\u0027: [\"a\", \"b\"],\n               }\n             ]\n  }","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"      {"},{"line_number":42,"context_line":"        \u0027bios\u0027:"},{"line_number":43,"context_line":"          {"},{"line_number":44,"context_line":"            ["},{"line_number":45,"context_line":"              {"},{"line_number":46,"context_line":"                \u0027name\u0027: \u0027parameter1\u0027,"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_693a7ee9","line":43,"in_reply_to":"1a4dcd0f_6de85817","updated":"2015-08-10 15:10:40.000000000","message":"Yes, forgot to remove. Done.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"bda6b2987439e8aa8692c4896ce54bfcfd9f683b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                \u0027description\u0027: \u0027setting bar\u0027,"},{"line_number":56,"context_line":"                \u0027values\u0027: [\u0027stop\u0027, \u0027start\u0027],"},{"line_number":57,"context_line":"                \u0027apply_online\u0027: True"},{"line_number":58,"context_line":"              },"},{"line_number":59,"context_line":"            ]"},{"line_number":60,"context_line":"          },"},{"line_number":61,"context_line":"        \u0027controller1\u0027:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_b6983a79","line":58,"updated":"2015-08-07 09:10:43.000000000","message":"There could be firmware settings that may not translate into the capabilities. Say some power related e.g. dynamic_power_capping on iLO or SR-IOV which ironic provisioning may not use, but can be used in TripleO installations wherein baremetal further gets used up as a hypervisor for VM provisioning.\n\nMay be we expose only provide parameters that are capability parameters here.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                \u0027description\u0027: \u0027setting bar\u0027,"},{"line_number":56,"context_line":"                \u0027values\u0027: [\u0027stop\u0027, \u0027start\u0027],"},{"line_number":57,"context_line":"                \u0027apply_online\u0027: True"},{"line_number":58,"context_line":"              },"},{"line_number":59,"context_line":"            ]"},{"line_number":60,"context_line":"          },"},{"line_number":61,"context_line":"        \u0027controller1\u0027:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_b93a0f33","line":58,"in_reply_to":"1a4dcd0f_b6983a79","updated":"2015-08-10 15:10:40.000000000","message":"Not sure. IMO all of params should be here for user information.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"bda6b2987439e8aa8692c4896ce54bfcfd9f683b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"              },"},{"line_number":59,"context_line":"            ]"},{"line_number":60,"context_line":"          },"},{"line_number":61,"context_line":"        \u0027controller1\u0027:"},{"line_number":62,"context_line":"          {"},{"line_number":63,"context_line":"            ["},{"line_number":64,"context_line":"              {"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_b6c7da94","line":61,"updated":"2015-08-07 09:10:43.000000000","message":"What is \u0027controller\u0027 mean here?\n\nWhy driver need to publish the settings that do not affect capabilities?\nIt can be any valid setting that one wants to updated on Controller.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"              },"},{"line_number":59,"context_line":"            ]"},{"line_number":60,"context_line":"          },"},{"line_number":61,"context_line":"        \u0027controller1\u0027:"},{"line_number":62,"context_line":"          {"},{"line_number":63,"context_line":"            ["},{"line_number":64,"context_line":"              {"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_59818b8e","line":61,"in_reply_to":"1a4dcd0f_b6c7da94","updated":"2015-08-10 15:10:40.000000000","message":"\u0027controller\u0027 mean \u0027logical device\u0027 like \u0027nic\u0027, \u0027raid\u0027 etc. \u003e Why driver need to publish the settings that do not affect capabilities? - For one-vendor specific options.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"In example above:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"* \u0027bios\u0027, \u0027controller1\u0027: names of configurable devices, mandatory."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_eddc6876","line":75,"updated":"2015-08-10 08:32:09.000000000","message":"I think we can call it namespace for the setting, instead of the configurable device, hence keeping it generic.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c9ddf797353b44d657ab7fe727104a80df6ec252","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"In example above:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"* \u0027bios\u0027, \u0027controller1\u0027: names of configurable devices, mandatory."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_0b7869f1","line":75,"in_reply_to":"1a4dcd0f_7fe1ccfd","updated":"2015-08-11 05:50:30.000000000","message":"I am not sure even, but may be let\u0027s wait to hear back from others.  Device is fine with me as well.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"In example above:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"* \u0027bios\u0027, \u0027controller1\u0027: names of configurable devices, mandatory."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_7fe1ccfd","line":75,"in_reply_to":"1a4dcd0f_eddc6876","updated":"2015-08-10 15:10:40.000000000","message":"Not sure. But we can think that these names are \"logical devices\" like \"network\", \"raid\", etc.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"* \u0027description\u0027: human readable description, optional."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* \u0027values\u0027: list of supported values, mandatory."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_8dd4c447","line":79,"updated":"2015-08-10 08:32:09.000000000","message":"We have to make it mandatory :)","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* \u0027name\u0027: name of parameter, mandatory."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"* \u0027description\u0027: human readable description, optional."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* \u0027values\u0027: list of supported values, mandatory."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_bfbe74d2","line":79,"in_reply_to":"1a4dcd0f_8dd4c447","updated":"2015-08-10 15:10:40.000000000","message":"Done","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* \u0027values\u0027: list of supported values, mandatory."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* \u0027default\u0027: default value, optional."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_adbd0004","line":83,"updated":"2015-08-10 08:32:09.000000000","message":"How does default work here ? Someone could pass in the just the setting name while setting it ? Is it used in reset_to_defaults ? If there is no default, then is this setting ignored in reset_to_defaults ?","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* \u0027values\u0027: list of supported values, mandatory."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* \u0027default\u0027: default value, optional."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_df4d80c5","line":83,"in_reply_to":"1a4dcd0f_adbd0004","updated":"2015-08-10 15:10:40.000000000","message":"Description updated.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* \u0027default\u0027: default value, optional."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"* \u0027apply_online\u0027: can be applied on the fly in any state of a node, optional,"},{"line_number":88,"context_line":"  default is False."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_ed39c8d9","line":85,"updated":"2015-08-10 08:32:09.000000000","message":"Does Ironic really need to care about transforming the name/value into the capability name/capability value to be added.  In my opinion, it can be easily taken care if the driver would accept what was required for the capability and then would transform into appropriate setting for the hardware.  For example:\n\n  {\n    \u0027name\u0027: \u0027parameter1\u0027,\n    \u0027values\u0027: [0, 1, 2, 3],\n    \u0027capabilities\u0027: {\u0027foo\u0027: {0: \u0027off\u0027, 3: \u0027on\u0027}}\n  }\n\nIn the above, I assume that you meant that if someone passes parameter1\u003d0, then Ironic needs to add a capability of foo\u003d0 for the node.  In my opinion, this can be reverse-managed, if we are ready to define it like\n\n  {\n    \u0027name\u0027: \u0027foo\u0027,\n    \u0027values\u0027: [\u0027off\u0027, \u0027on\u0027],\n  }\n\nand let the driver handle the conversion of 0 to off and 3 to on.  That makes the Ironic code much simpler, leaving it to the driver to handle the name/values in the desired way.\n\n+1 to adding a flag whether a capability needs to be created for the particular setting or not (as stendulker suggested)","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* \u0027default\u0027: default value, optional."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"* \u0027apply_online\u0027: can be applied on the fly in any state of a node, optional,"},{"line_number":88,"context_line":"  default is False."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_c8fdc33c","line":85,"in_reply_to":"1a4dcd0f_ed39c8d9","updated":"2015-08-10 15:10:40.000000000","message":"\u003e assume that you meant that if someone passes parameter1\u003d0, then Ironic needs to add a capability of foo\u003d0 - if someone passes parameter1\u003d0 Ironic \nadds capability of foo\u003d\u0027off\u0027. Maybe makes sense, but 0 is \"vendor\" value and \"off\" is  capability \"logical\" value. Not sure about right way, waiting for more comments.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* \u0027apply_online\u0027: can be applied on the fly in any state of a node, optional,"},{"line_number":88,"context_line":"  default is False."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* \u0027reset_needed\u0027: node reset required after change, optional, default is True."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    Example 2 of expose current values::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_0de4340b","line":90,"updated":"2015-08-10 08:32:09.000000000","message":"This is after all the settings have been applied, right ?","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":87,"context_line":"* \u0027apply_online\u0027: can be applied on the fly in any state of a node, optional,"},{"line_number":88,"context_line":"  default is False."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* \u0027reset_needed\u0027: node reset required after change, optional, default is True."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    Example 2 of expose current values::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_9320544b","line":90,"in_reply_to":"1a4dcd0f_0de4340b","updated":"2015-08-10 15:10:40.000000000","message":"This about just one option. For example we have an option \"low_power_mode\" that can be applied on-the-fly (False) and all options with True postponed to cleaning/zapping.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"bda6b2987439e8aa8692c4896ce54bfcfd9f683b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            \u0027version\u0027: \u00271.09.2015E\u0027"},{"line_number":99,"context_line":"            \u0027settings\u0027:"},{"line_number":100,"context_line":"              {"},{"line_number":101,"context_line":"                parameter1\u0027: 2,"},{"line_number":102,"context_line":"                parameter2\u0027: \u0027stop\u0027,"},{"line_number":103,"context_line":"              },"},{"line_number":104,"context_line":"          },"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_764ab256","line":101,"updated":"2015-08-07 09:10:43.000000000","message":"Add begining quote \u0027\u0027\u0027 to parameter1.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            \u0027version\u0027: \u00271.09.2015E\u0027"},{"line_number":99,"context_line":"            \u0027settings\u0027:"},{"line_number":100,"context_line":"              {"},{"line_number":101,"context_line":"                parameter1\u0027: 2,"},{"line_number":102,"context_line":"                parameter2\u0027: \u0027stop\u0027,"},{"line_number":103,"context_line":"              },"},{"line_number":104,"context_line":"          },"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_89ba6a6d","line":101,"in_reply_to":"1a4dcd0f_764ab256","updated":"2015-08-10 15:10:40.000000000","message":"Done","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"bda6b2987439e8aa8692c4896ce54bfcfd9f683b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            \u0027settings\u0027:"},{"line_number":100,"context_line":"              {"},{"line_number":101,"context_line":"                parameter1\u0027: 2,"},{"line_number":102,"context_line":"                parameter2\u0027: \u0027stop\u0027,"},{"line_number":103,"context_line":"              },"},{"line_number":104,"context_line":"          },"},{"line_number":105,"context_line":"        \u0027controller1\u0027:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_9645fe43","line":102,"updated":"2015-08-07 09:10:43.000000000","message":"ditto","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            \u0027settings\u0027:"},{"line_number":100,"context_line":"              {"},{"line_number":101,"context_line":"                parameter1\u0027: 2,"},{"line_number":102,"context_line":"                parameter2\u0027: \u0027stop\u0027,"},{"line_number":103,"context_line":"              },"},{"line_number":104,"context_line":"          },"},{"line_number":105,"context_line":"        \u0027controller1\u0027:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_49ad4230","line":102,"in_reply_to":"1a4dcd0f_9645fe43","updated":"2015-08-10 15:10:40.000000000","message":"Done","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"In example above:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* \u0027version\u0027: firmware version string, mandatory, empty if unknown."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    Example 3 of setting new values::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_eda2289a","line":117,"updated":"2015-08-10 08:32:09.000000000","message":"What does version do here ? What is it used for ?","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"In example above:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* \u0027version\u0027: firmware version string, mandatory, empty if unknown."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    Example 3 of setting new values::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_13ee848b","line":117,"in_reply_to":"1a4dcd0f_eda2289a","updated":"2015-08-10 15:10:40.000000000","message":"This is vendor-specific firmware revision, for example user can make choice to update fw or not.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":141,"context_line":"   node.driver_internal_info field with \u0027firmware_settings\u0027 key"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_0dc75446","line":138,"updated":"2015-08-10 08:32:09.000000000","message":"Do we need to store the firmware settings updated on the node somewhere so that operator can easily lookup the current values applied ?\n\n  node.firmware_settings ?","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":141,"context_line":"   node.driver_internal_info field with \u0027firmware_settings\u0027 key"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_134a0484","line":138,"in_reply_to":"1a4dcd0f_0dc75446","updated":"2015-08-10 15:10:40.000000000","message":"But user can update settings manually, get_firmware_properties() driver\u0027s method intended for this purpose.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c9ddf797353b44d657ab7fe727104a80df6ec252","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"#. Driver does validate of user\u0027s parameters."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":141,"context_line":"   node.driver_internal_info field with \u0027firmware_settings\u0027 key"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_eb2e5df9","line":138,"in_reply_to":"1a4dcd0f_134a0484","updated":"2015-08-11 05:50:30.000000000","message":"I am not sure if we can expose output of  get_firmware_properties() in an API as it would be requiring the bmc or bare metal node to be contacted while an API request is in progress.  Instead of that, we can cache the value returned by get_firmware_properties() in node.firmware_settings by a periodic task, an asynchronous api OR a zap/clean step  and return it (just like we do for power state).","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"bda6b2987439e8aa8692c4896ce54bfcfd9f683b","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":141,"context_line":"   node.driver_internal_info field with \u0027firmware_settings\u0027 key"},{"line_number":142,"context_line":"   (\u0027firmware_settings\u0027: {\u0027bios\u0027: {\u0027foo\u0027: \u0027bar\u0027}})."},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_b6b35a97","line":140,"updated":"2015-08-07 09:10:43.000000000","message":"Some management controllers like HP iLO can save the settings till the next boot happens. But saving them also in node.driver_internal_info is helpful to operator to know the pending settings..","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":138,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":141,"context_line":"   node.driver_internal_info field with \u0027firmware_settings\u0027 key"},{"line_number":142,"context_line":"   (\u0027firmware_settings\u0027: {\u0027bios\u0027: {\u0027foo\u0027: \u0027bar\u0027}})."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"#. Postponed parameters applied during zapping or cleaning procedure."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_4db47cd0","line":141,"updated":"2015-08-10 08:32:09.000000000","message":"Why not into a separate field of it\u0027s own ? \n\n  node.target_firmware_settings\n\nThis allows DB query to find out nodes with pending firmware settings (for which zap may be initiated programatically).","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":138,"context_line":"#. If parameter(s) can be applied on the fly driver does update immediately."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"#. If parameter(s) can not be applied immediately driver saves them in"},{"line_number":141,"context_line":"   node.driver_internal_info field with \u0027firmware_settings\u0027 key"},{"line_number":142,"context_line":"   (\u0027firmware_settings\u0027: {\u0027bios\u0027: {\u0027foo\u0027: \u0027bar\u0027}})."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"#. Postponed parameters applied during zapping or cleaning procedure."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_7c46b550","line":141,"in_reply_to":"1a4dcd0f_4db47cd0","updated":"2015-08-10 15:10:40.000000000","message":"Good point, done.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":141,"context_line":"   node.driver_internal_info field with \u0027firmware_settings\u0027 key"},{"line_number":142,"context_line":"   (\u0027firmware_settings\u0027: {\u0027bios\u0027: {\u0027foo\u0027: \u0027bar\u0027}})."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"#. Postponed parameters applied during zapping or cleaning procedure."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"#. Driver updates node capabilities if there are linked capabilities."},{"line_number":147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_ad750033","line":144,"updated":"2015-08-10 08:32:09.000000000","message":"I hope there will be a new clean step added for this ? It\u0027s not mentioned in proposed changes.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":141,"context_line":"   node.driver_internal_info field with \u0027firmware_settings\u0027 key"},{"line_number":142,"context_line":"   (\u0027firmware_settings\u0027: {\u0027bios\u0027: {\u0027foo\u0027: \u0027bar\u0027}})."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"#. Postponed parameters applied during zapping or cleaning procedure."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"#. Driver updates node capabilities if there are linked capabilities."},{"line_number":147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_5ce73940","line":144,"in_reply_to":"1a4dcd0f_ad750033","updated":"2015-08-10 15:10:40.000000000","message":"Done","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware/properties"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"  Properties returned as example 1."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"- To set new parameters::"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_71ad9230","line":175,"updated":"2015-08-10 08:32:09.000000000","message":"May be worth noting the return codes \n\n200 - for returning the properties\n404 - if extension is not supported","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware/properties"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"  Properties returned as example 1."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"- To set new parameters::"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_4d92254d","line":175,"in_reply_to":"1a4dcd0f_71ad9230","updated":"2015-08-10 15:10:40.000000000","message":"Done","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"- To set new parameters::"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    PUT /v1/nodes/NNNN/states/firmware"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":182,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_b148fa88","line":179,"updated":"2015-08-10 08:32:09.000000000","message":"May be worth noting the return codes\n\n200 - for returning the properties 404 - if extension is not supported","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"- To set new parameters::"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    PUT /v1/nodes/NNNN/states/firmware"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":182,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_edfd316f","line":179,"in_reply_to":"1a4dcd0f_b148fa88","updated":"2015-08-10 15:10:40.000000000","message":"Done","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"- To get current parameters::"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    GET /v1/nodes/NNNN/states/firmware"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_913a9ee6","line":183,"updated":"2015-08-10 08:32:09.000000000","message":"To remain compatible with other things like (power, provision_states, raid) which are part of state, we needn\u0027t have the new endpoint. Instead return this information in \n\n  GET /v1/nodes/NNNN\n  GET /v1/nodes/NNNN/states\n\nJust like https://github.com/openstack/ironic-specs/blob/master/specs/approved/ironic-generic-raid-interface.rst#rest-api-impact","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"- To get current parameters::"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    GET /v1/nodes/NNNN/states/firmware"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_eddc5148","line":183,"in_reply_to":"1a4dcd0f_913a9ee6","updated":"2015-08-10 15:10:40.000000000","message":"This information comes from hardware to driver, not from DB column, do you think that endpoint is not needed for this case?","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c9ddf797353b44d657ab7fe727104a80df6ec252","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"- To get current parameters::"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    GET /v1/nodes/NNNN/states/firmware"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_6b224d03","line":183,"in_reply_to":"1a4dcd0f_eddc5148","updated":"2015-08-11 05:50:30.000000000","message":"Hmm yeah, I agree. But another possibility as I mentioned above, is to have the firmware settings queried by a periodic task, an asynchronous api OR a zap/clean step to cache the firmware settings in node.firmware_settings and then return it in this API.  In that way, we can still keep our API synchronous without talking to the bare metal or the bmc.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":189,"context_line":"Client (CLI) impact"},{"line_number":190,"context_line":"-------------------"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"New options should be added for getting/setting BIOS/FW parameters."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"RPC API impact"},{"line_number":195,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_71091231","line":192,"updated":"2015-08-10 08:32:09.000000000","message":"Can we mention the new options ?","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":189,"context_line":"Client (CLI) impact"},{"line_number":190,"context_line":"-------------------"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"New options should be added for getting/setting BIOS/FW parameters."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"RPC API impact"},{"line_number":195,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_190543c1","line":192,"in_reply_to":"1a4dcd0f_71091231","updated":"2015-08-10 15:10:40.000000000","message":"Done","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":11278,"name":"Anusha Ramineni","email":"anusha.ramineni@india.nec.com","username":"anusha08"},"change_message_id":"86f9f2d4e9067b45e86d6e18b2ebead839b50446","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"New RPC API methods will be created:"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* ``get_firmware_properties`` - get parameters from a driver."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"* ``get_firmware_settings`` - get parameters for a node."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_299b6819","line":199,"updated":"2015-08-07 11:21:57.000000000","message":"what does this return? supported firmware capabilities by the driver?","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"New RPC API methods will be created:"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* ``get_firmware_properties`` - get parameters from a driver."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"* ``get_firmware_settings`` - get parameters for a node."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_56fcfa3d","line":199,"in_reply_to":"1a4dcd0f_299b6819","updated":"2015-08-10 15:10:40.000000000","message":"Item updated.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"bda6b2987439e8aa8692c4896ce54bfcfd9f683b","unresolved":false,"context_lines":[{"line_number":219,"context_line":"          \"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"      def get_firmware_properties(task):"},{"line_number":222,"context_line":"          \"\"\"Gets BIOS/FW properties defined by the driver."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"          :param task: TaskManager object containing the node."},{"line_number":225,"context_line":"          :returns: A dictionary of properties."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_36342afa","line":222,"updated":"2015-08-07 09:10:43.000000000","message":"Are these subset of firmware settings that are linked to \u0027capabilities\u0027?","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":219,"context_line":"          \"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"      def get_firmware_properties(task):"},{"line_number":222,"context_line":"          \"\"\"Gets BIOS/FW properties defined by the driver."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"          :param task: TaskManager object containing the node."},{"line_number":225,"context_line":"          :returns: A dictionary of properties."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_36636e43","line":222,"in_reply_to":"1a4dcd0f_36342afa","updated":"2015-08-10 15:10:40.000000000","message":"No. There are all of them.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":11278,"name":"Anusha Ramineni","email":"anusha.ramineni@india.nec.com","username":"anusha08"},"change_message_id":"86f9f2d4e9067b45e86d6e18b2ebead839b50446","unresolved":false,"context_lines":[{"line_number":232,"context_line":"          :returns: A dictionary of settings."},{"line_number":233,"context_line":"          \"\"\""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"      def set_firmware_settings(task, settings):"},{"line_number":236,"context_line":"          \"\"\"Sets BIOS/FW settings for a node."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"          :param task: TaskManager object containing the node."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_c4118b53","line":235,"updated":"2015-08-07 11:21:57.000000000","message":"As most of the firmware settings require a reboot, so its better to be part of zap steps right? even if the API is provided for the same, they won\u0027t be effective until a reboot.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":232,"context_line":"          :returns: A dictionary of settings."},{"line_number":233,"context_line":"          \"\"\""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"      def set_firmware_settings(task, settings):"},{"line_number":236,"context_line":"          \"\"\"Sets BIOS/FW settings for a node."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"          :param task: TaskManager object containing the node."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_96f922cb","line":235,"in_reply_to":"1a4dcd0f_c4118b53","updated":"2015-08-10 15:10:40.000000000","message":"Yes, sure. Docstring updated.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bdce1954a0c76cef64deb9ec435d64bc9fdaf763","unresolved":false,"context_lines":[{"line_number":239,"context_line":"          :param settings: A dictionary of settings."},{"line_number":240,"context_line":"          \"\"\""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"      def reset_to_defaults(task, device):"},{"line_number":243,"context_line":"          \"\"\"Reset BIOS/FW settings for a node to factory defaults."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"          :param task: TaskManager object containing the node."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_345ff80f","line":242,"updated":"2015-08-10 08:32:09.000000000","message":"I think device should be renamed as namespace as mentioned in the previous comment. Also, it should be optional, and we can reset settings in all namespaces to default if it wasn\u0027t mentioned.","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"7a46ffb8509da03fcb376563752b7f1edac10cf2","unresolved":false,"context_lines":[{"line_number":239,"context_line":"          :param settings: A dictionary of settings."},{"line_number":240,"context_line":"          \"\"\""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"      def reset_to_defaults(task, device):"},{"line_number":243,"context_line":"          \"\"\"Reset BIOS/FW settings for a node to factory defaults."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"          :param task: TaskManager object containing the node."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_f6598636","line":242,"in_reply_to":"1a4dcd0f_345ff80f","updated":"2015-08-10 15:10:40.000000000","message":"\u003e and we can reset settings in all namespaces to default if it wasn\u0027t mentioned - good idea. And look to my comment above, I think devices are \"logical devices\".","commit_id":"8219df86c7e419d4e0326307fed00febd65ef924"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"61552608c677b732058d1657bead6b7212f91adf","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  configuration."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* New REST API endpoints will be created for setting and retrieving the"},{"line_number":34,"context_line":"  BIOS/FW properties."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* User gets/sets BIOS/FW configuration information for Ironic driver via REST"},{"line_number":37,"context_line":"  API as JSON data."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_b9666627","line":34,"updated":"2015-08-11 07:38:33.000000000","message":"I wonder if we need it as a part of zapping actually..","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"61552608c677b732058d1657bead6b7212f91adf","unresolved":false,"context_lines":[{"line_number":36,"context_line":"* User gets/sets BIOS/FW configuration information for Ironic driver via REST"},{"line_number":37,"context_line":"  API as JSON data."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    Example 1 of expose available parameters::"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"      {"},{"line_number":42,"context_line":"        \u0027bios\u0027:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_596de202","line":39,"updated":"2015-08-11 07:38:33.000000000","message":"1. nit: s/expose//\n\n2. what exactly is shows in this example? available parameters description?\n\n3. lets make it a bit more RESTish. This \u0027bios\u0027 and \u0027controller1\u0027 could be part of URL, not be in JSON. See below.","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5de5f3df861352930bee6094b373c815a335843b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"* User gets/sets BIOS/FW configuration information for Ironic driver via REST"},{"line_number":37,"context_line":"  API as JSON data."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    Example 1 of expose available parameters::"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"      {"},{"line_number":42,"context_line":"        \u0027bios\u0027:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_8f38fc3e","line":39,"in_reply_to":"1a4dcd0f_596de202","updated":"2015-08-11 09:12:06.000000000","message":"Done","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c24926a433faaabd1d91c058cceaad167a8060bb","unresolved":false,"context_lines":[{"line_number":80,"context_line":"* \u0027default\u0027: default value, optional. User can see that parameter was changed"},{"line_number":81,"context_line":"  or not and value after reset_to_defaults()."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* \u0027apply_online\u0027: can be applied on the fly in any state of a node, optional,"},{"line_number":86,"context_line":"  default is False."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_6a355e44","line":83,"updated":"2015-08-11 08:42:32.000000000","message":"Continuing from the previous patch set, I got your point on transforming the capabilities, but this is something that the driver can easily transform by keeping a dictionary of keys/values (to transform foo\u003doff to parameter1\u003d0 internally before sending it to the bmc).  May be we can just mention this too in the alternatives to see other\u0027s thoughts.","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f6c178e3787a91e357d219ef2e18b1e769bc20d3","unresolved":false,"context_lines":[{"line_number":80,"context_line":"* \u0027default\u0027: default value, optional. User can see that parameter was changed"},{"line_number":81,"context_line":"  or not and value after reset_to_defaults()."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* \u0027capabilities\u0027: name and values of linked capabilities, optional."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"* \u0027apply_online\u0027: can be applied on the fly in any state of a node, optional,"},{"line_number":86,"context_line":"  default is False."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_2969a325","line":83,"in_reply_to":"1a4dcd0f_6a355e44","updated":"2015-08-11 09:30:14.000000000","message":"Done","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c24926a433faaabd1d91c058cceaad167a8060bb","unresolved":false,"context_lines":[{"line_number":145,"context_line":"#. Driver updates node capabilities if there are linked capabilities."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Alternatives"},{"line_number":149,"context_line":"------------"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"* Developers can use vendor passthru mechanism for BIOS/FW settings."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_6ab0fedd","line":148,"updated":"2015-08-11 08:42:32.000000000","message":"from the previous patchset, can you please capture node.firmware_settings as an alternative at least so that we could get people\u0027s thoughts on this as well ?","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f6c178e3787a91e357d219ef2e18b1e769bc20d3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"#. Driver updates node capabilities if there are linked capabilities."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Alternatives"},{"line_number":149,"context_line":"------------"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"* Developers can use vendor passthru mechanism for BIOS/FW settings."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_c977df00","line":148,"in_reply_to":"1a4dcd0f_6ab0fedd","updated":"2015-08-11 09:30:14.000000000","message":"Done","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"61552608c677b732058d1657bead6b7212f91adf","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"- To get BIOS/FW available parameters::"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware/properties"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"  Properties returned as example 1."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_7970dedc","line":172,"updated":"2015-08-11 07:38:33.000000000","message":"I suggest 2 endpoints:\n\n GET /v1/drivers/\u003cdriver\u003e/firmware\n\nlists available devices\n\n GET /v1/drivers/\u003cdriver\u003e/firmware/\u003cDEVICE\u003e\n\nshows properties for \u003cDEVICE\u003e \u003d \u0027bios\u0027, \u0027controller1\u0027","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c24926a433faaabd1d91c058cceaad167a8060bb","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"- To get BIOS/FW available parameters::"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware/properties"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"  Properties returned as example 1."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_8a71caaa","line":172,"in_reply_to":"1a4dcd0f_7970dedc","updated":"2015-08-11 08:42:32.000000000","message":"+1","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5de5f3df861352930bee6094b373c815a335843b","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"- To get BIOS/FW available parameters::"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    GET /v1/drivers/\u003cdriver\u003e/firmware/properties"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"  Properties returned as example 1."},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_ca2fd23c","line":172,"in_reply_to":"1a4dcd0f_7970dedc","updated":"2015-08-11 09:12:06.000000000","message":"Done","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"61552608c677b732058d1657bead6b7212f91adf","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"- To set new parameters::"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    PUT /v1/nodes/NNNN/states/firmware"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_1978bac3","line":180,"updated":"2015-08-11 07:38:33.000000000","message":"I suggest:\n\n PUT /v1/nodes/\u003cUUID\u003e/firmware/\u003cDEVICE\u003e\n\nwhich works for a specific device. And I don\u0027t think we should use \"states\" here.","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5de5f3df861352930bee6094b373c815a335843b","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"- To set new parameters::"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    PUT /v1/nodes/NNNN/states/firmware"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_ca92724b","line":180,"in_reply_to":"1a4dcd0f_1978bac3","updated":"2015-08-11 09:12:06.000000000","message":"Done","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c24926a433faaabd1d91c058cceaad167a8060bb","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"- To set new parameters::"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    PUT /v1/nodes/NNNN/states/firmware"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_2a975691","line":180,"in_reply_to":"1a4dcd0f_1978bac3","updated":"2015-08-11 08:42:32.000000000","message":"We use /states/ for power and raid. So to remain consistent with the current endpoints, why not put inside /states ?","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"6fe48f153c6391477da69e23adff1229232eedbf","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"- To set new parameters::"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    PUT /v1/nodes/NNNN/states/firmware"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"  with a BODY containing the JSON as example 3."},{"line_number":183,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_e98e5bcf","line":180,"in_reply_to":"1a4dcd0f_2a975691","updated":"2015-08-11 09:32:38.000000000","message":"Added to alternatives.","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"61552608c677b732058d1657bead6b7212f91adf","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"- To get current parameters::"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    GET /v1/nodes/NNNN/states/firmware"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"  Parameters returned as example 2."},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_397336e9","line":188,"updated":"2015-08-11 07:38:33.000000000","message":"here:\n\n GET /v1/nodes/\u003cUUID\u003e/firmware/\u003cDEVICE\u003e","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5de5f3df861352930bee6094b373c815a335843b","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"- To get current parameters::"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    GET /v1/nodes/NNNN/states/firmware"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"  Parameters returned as example 2."},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_6a447e73","line":188,"in_reply_to":"1a4dcd0f_397336e9","updated":"2015-08-11 09:12:06.000000000","message":"Done","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c24926a433faaabd1d91c058cceaad167a8060bb","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"- To get current parameters::"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    GET /v1/nodes/NNNN/states/firmware"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"  Parameters returned as example 2."},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_ea1ace16","line":188,"in_reply_to":"1a4dcd0f_397336e9","updated":"2015-08-11 08:42:32.000000000","message":"I had a comment on this in previous patchset, just posting it here.  Do you forsee drivers getting firmware settings from a BMC synchronously from the API ? That would be violation of the our common policy that GET calls should be synchronous and shouldn\u0027t talk to BMC.  \n\nWe will need either:\n1) a periodic task or an asynchronous api OR a zap/clean step to cache the firmware settings in node.firmware_settings\n2) endpoint to return a link which can be used to query later.\n\ni would actually prefer the former.","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"61552608c677b732058d1657bead6b7212f91adf","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"New options should be added for getting/setting BIOS/FW parameters."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"$ ironic node-get-firmware-properties \u003cdriver\u003e"},{"line_number":198,"context_line":"$ ironic node-get-firmware-settings \u003cnode-uuid\u003e"},{"line_number":199,"context_line":"$ ironic node-set-firmware-settings \u003cnode-uuid\u003e param\u003dvalue [param1\u003dvalue1] ..."},{"line_number":200,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_d981f290","line":197,"updated":"2015-08-11 07:38:33.000000000","message":"should be driver-get-firmware-properties","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5de5f3df861352930bee6094b373c815a335843b","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"New options should be added for getting/setting BIOS/FW parameters."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"$ ironic node-get-firmware-properties \u003cdriver\u003e"},{"line_number":198,"context_line":"$ ironic node-get-firmware-settings \u003cnode-uuid\u003e"},{"line_number":199,"context_line":"$ ironic node-set-firmware-settings \u003cnode-uuid\u003e param\u003dvalue [param1\u003dvalue1] ..."},{"line_number":200,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_efc42041","line":197,"in_reply_to":"1a4dcd0f_d981f290","updated":"2015-08-11 09:12:06.000000000","message":"Done","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"61552608c677b732058d1657bead6b7212f91adf","unresolved":false,"context_lines":[{"line_number":216,"context_line":"-----------------"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"A new ``FirmwareInterface`` will be created. It will contain the following"},{"line_number":219,"context_line":"methods::"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"      def validate(task):"},{"line_number":222,"context_line":"          \"\"\"Validates driver\u0027s parameters for BIOS/FW settings."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_f97ceeb6","line":219,"updated":"2015-08-11 07:38:33.000000000","message":"please modify according to changes in API above","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5de5f3df861352930bee6094b373c815a335843b","unresolved":false,"context_lines":[{"line_number":216,"context_line":"-----------------"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"A new ``FirmwareInterface`` will be created. It will contain the following"},{"line_number":219,"context_line":"methods::"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"      def validate(task):"},{"line_number":222,"context_line":"          \"\"\"Validates driver\u0027s parameters for BIOS/FW settings."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_2a5f5642","line":219,"in_reply_to":"1a4dcd0f_f97ceeb6","updated":"2015-08-11 09:12:06.000000000","message":"Done","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"61552608c677b732058d1657bead6b7212f91adf","unresolved":false,"context_lines":[{"line_number":249,"context_line":"          :param settings: A dictionary of settings."},{"line_number":250,"context_line":"          \"\"\""},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"      def reset_to_defaults(task, device\u003dNone):"},{"line_number":253,"context_line":"          \"\"\"Reset BIOS/FW settings for a node to factory defaults."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"          :param task: TaskManager object containing the node."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_994a8a82","line":252,"updated":"2015-08-11 07:38:33.000000000","message":"this call is not exposed in API. do we need DELETE /v1/nodes/\u003cUUID\u003e/firmware/\u003cDEVICE\u003e ?","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5de5f3df861352930bee6094b373c815a335843b","unresolved":false,"context_lines":[{"line_number":249,"context_line":"          :param settings: A dictionary of settings."},{"line_number":250,"context_line":"          \"\"\""},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"      def reset_to_defaults(task, device\u003dNone):"},{"line_number":253,"context_line":"          \"\"\"Reset BIOS/FW settings for a node to factory defaults."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"          :param task: TaskManager object containing the node."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_6a0c7e94","line":252,"in_reply_to":"1a4dcd0f_994a8a82","updated":"2015-08-11 09:12:06.000000000","message":"IMO no, because this intended for internal use for cleaning/zapping step.","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c24926a433faaabd1d91c058cceaad167a8060bb","unresolved":false,"context_lines":[{"line_number":249,"context_line":"          :param settings: A dictionary of settings."},{"line_number":250,"context_line":"          \"\"\""},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"      def reset_to_defaults(task, device\u003dNone):"},{"line_number":253,"context_line":"          \"\"\"Reset BIOS/FW settings for a node to factory defaults."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"          :param task: TaskManager object containing the node."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a4dcd0f_caa4b2ba","line":252,"in_reply_to":"1a4dcd0f_994a8a82","updated":"2015-08-11 08:42:32.000000000","message":"also we can think of  PUT /v1/nodes/\u003cUUID\u003e/firmware/defaults and PUT /v1/nodes/\u003cUUID\u003e/firmware/defaults/\u003cDEVICE\u003e.  I am not sure if DELETing a setting would logically mean resetting it to default.","commit_id":"5331ad34ae1480f374e1732583f0b71bc2c94a49"}]}
