)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"03e1940908b8de9b0185f9bb9d71206eebbe97ef","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":" GET /v1/node_transitions"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9fb03ecf98fe3b2845da8cac69d41d3a687071a5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa69d971_fb167057","line":13,"updated":"2016-01-07 15:41:29.000000000","message":"Add Partial-Bug: #1526761","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":" GET /v1/node_transitions"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9fb03ecf98fe3b2845da8cac69d41d3a687071a5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"da6ed579_65c94678","line":13,"in_reply_to":"fa69d971_fb167057","updated":"2016-01-13 07:10:55.000000000","message":"Done","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"}],"specs/approved/state-api.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"69380fa9a43e676f53c2e3f5874eb377595c2f92","unresolved":false,"context_lines":[{"line_number":26,"context_line":"So that, if this document is left not updated, operators cannot operate"},{"line_number":27,"context_line":"nodes correctly unless reading source codes."},{"line_number":28,"context_line":"When operators execute provision API/command with invalid transitions, they can"},{"line_number":29,"context_line":"know that the transitions is invalid, but which transitions they can execute."},{"line_number":30,"context_line":"For example, when executing \"ironic node-set-provision-state \u003cuuid\u003e inspect\""},{"line_number":31,"context_line":"command for the node of which provisioning state is \"available\","},{"line_number":32,"context_line":"we can get below error message:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_111ed06f","line":29,"updated":"2015-10-23 09:20:36.000000000","message":"but NOT which..","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b2781d616558de71d3a00c3a12bd5ddd12defc73","unresolved":false,"context_lines":[{"line_number":26,"context_line":"So that, if this document is left not updated, operators cannot operate"},{"line_number":27,"context_line":"nodes correctly unless reading source codes."},{"line_number":28,"context_line":"When operators execute provision API/command with invalid transitions, they can"},{"line_number":29,"context_line":"know that the transitions is invalid, but which transitions they can execute."},{"line_number":30,"context_line":"For example, when executing \"ironic node-set-provision-state \u003cuuid\u003e inspect\""},{"line_number":31,"context_line":"command for the node of which provisioning state is \"available\","},{"line_number":32,"context_line":"we can get below error message:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_3bb5bf7d","line":29,"in_reply_to":"3a29b11f_111ed06f","updated":"2015-10-26 02:34:58.000000000","message":"Done","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"69380fa9a43e676f53c2e3f5874eb377595c2f92","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    \"target_power_state\": \"power on\","},{"line_number":64,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":65,"context_line":"    \"target_raid_config\": null,"},{"line_number":66,"context_line":"    \"allowed_transitions\": [\"inspect\", \"zap\", \"provide\"],"},{"line_number":67,"context_line":"    \"transitions\":{"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        \"enroll\": [\"manage\": \"manageable\"],"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_b1103c5a","line":66,"updated":"2015-10-23 09:20:36.000000000","message":"1. please exclude \"zap\" from your example, we\u0027re reworking it\n\n2. I didn\u0027t get what \"transitions\" is for, but would be good to also provide the target state here:\n\n \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"}","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b2781d616558de71d3a00c3a12bd5ddd12defc73","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    \"target_power_state\": \"power on\","},{"line_number":64,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":65,"context_line":"    \"target_raid_config\": null,"},{"line_number":66,"context_line":"    \"allowed_transitions\": [\"inspect\", \"zap\", \"provide\"],"},{"line_number":67,"context_line":"    \"transitions\":{"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        \"enroll\": [\"manage\": \"manageable\"],"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_1bad6331","line":66,"in_reply_to":"3a29b11f_b1103c5a","updated":"2015-10-26 02:34:58.000000000","message":"Done","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"69380fa9a43e676f53c2e3f5874eb377595c2f92","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    \"allowed_transitions\": [\"inspect\", \"zap\", \"provide\"],"},{"line_number":67,"context_line":"    \"transitions\":{"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        \"enroll\": [\"manage\": \"manageable\"],"},{"line_number":70,"context_line":"        \"manageable\": [\"inspect\": \"manageable\", \"zap\": \"manageable\","},{"line_number":71,"context_line":"        \"provide\": \"available\"],"},{"line_number":72,"context_line":"        \"available\": [\"manage\": \"manageable\", \"active\": \"active\"],"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_d1137863","line":69,"updated":"2015-10-23 09:20:36.000000000","message":"[] -\u003e {} here and below","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b2781d616558de71d3a00c3a12bd5ddd12defc73","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    \"allowed_transitions\": [\"inspect\", \"zap\", \"provide\"],"},{"line_number":67,"context_line":"    \"transitions\":{"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        \"enroll\": [\"manage\": \"manageable\"],"},{"line_number":70,"context_line":"        \"manageable\": [\"inspect\": \"manageable\", \"zap\": \"manageable\","},{"line_number":71,"context_line":"        \"provide\": \"available\"],"},{"line_number":72,"context_line":"        \"available\": [\"manage\": \"manageable\", \"active\": \"active\"],"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_7b625718","line":69,"in_reply_to":"3a29b11f_d1137863","updated":"2015-10-26 02:34:58.000000000","message":"Done","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"69380fa9a43e676f53c2e3f5874eb377595c2f92","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \"rescue\": \"rescue\"],"},{"line_number":75,"context_line":"        \"rescue\": [\"unrescu\": \"active\", \"delete\": \"available\"]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_710f0437","line":77,"updated":"2015-10-23 09:20:36.000000000","message":"does this \"transitions\" field contain the whole state machine? then it\u0027s would be good to move to separate API","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b2781d616558de71d3a00c3a12bd5ddd12defc73","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \"rescue\": \"rescue\"],"},{"line_number":75,"context_line":"        \"rescue\": [\"unrescu\": \"active\", \"delete\": \"available\"]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_de4599b3","line":77,"in_reply_to":"3a29b11f_710f0437","updated":"2015-10-26 02:34:58.000000000","message":"Yes, it contains whole state machine. The reason why I did so and didn\u0027t separate to other API is that. \n\nas you can see L140-150, when operating nodes from UI, for example, if someone wants to delete a node when state is AVAILABLE, it\u0027s user-friendly that the node will be deleted by just clicking a button something like \"GO\" with \"Delete\" is selected in a pulldown menu (\"active\" will be done automatically). In order to realize this, if \"transitions\" field is included in other API, one more REST API request will be needed. By including \"transitions\" field into GET /v1/nodes/(node_ident)/states and GET /v1/nodes API, we can reduce API request. WDYT?","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"69380fa9a43e676f53c2e3f5874eb377595c2f92","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"                \"rescue\": [\"unrescu\": \"active\", \"delete\": \"available\"]"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"            }"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_910ae024","line":127,"updated":"2015-10-23 09:20:36.000000000","message":"ditto as above","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b2781d616558de71d3a00c3a12bd5ddd12defc73","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"                \"rescue\": [\"unrescu\": \"active\", \"delete\": \"available\"]"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"            }"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_be19bd24","line":127,"in_reply_to":"3a29b11f_910ae024","updated":"2015-10-26 02:34:58.000000000","message":"Done","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"69380fa9a43e676f53c2e3f5874eb377595c2f92","unresolved":false,"context_lines":[{"line_number":135,"context_line":"Use case:"},{"line_number":136,"context_line":"* Operators can change node state from UI"},{"line_number":137,"context_line":"(not only horizon, but also any other vendor specific portal site)"},{"line_number":138,"context_line":"using GET /v1/nodes/(node_ident)/states and GET /v1/nodes APIs::"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":" +----+------------------------------+"},{"line_number":141,"context_line":" |uuid|transitions                   |"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_31050c13","line":138,"updated":"2015-10-23 09:20:36.000000000","message":"this paragraph should be indented","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b2781d616558de71d3a00c3a12bd5ddd12defc73","unresolved":false,"context_lines":[{"line_number":135,"context_line":"Use case:"},{"line_number":136,"context_line":"* Operators can change node state from UI"},{"line_number":137,"context_line":"(not only horizon, but also any other vendor specific portal site)"},{"line_number":138,"context_line":"using GET /v1/nodes/(node_ident)/states and GET /v1/nodes APIs::"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":" +----+------------------------------+"},{"line_number":141,"context_line":" |uuid|transitions                   |"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_3e592d8f","line":138,"in_reply_to":"3a29b11f_31050c13","updated":"2015-10-26 02:34:58.000000000","message":"Done","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"69380fa9a43e676f53c2e3f5874eb377595c2f92","unresolved":false,"context_lines":[{"line_number":147,"context_line":"       |Delete                    |"},{"line_number":148,"context_line":"       |Provisioning              |"},{"line_number":149,"context_line":"       |Clean up                  |"},{"line_number":150,"context_line":"       +--------------------------+"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* There is a node-list table, and operators can select an operation from"},{"line_number":153,"context_line":"  pulldown menu(or something like it), and in this time,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_5100c801","line":150,"updated":"2015-10-23 09:20:36.000000000","message":"then we should include human-readable description to transitions..","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b2781d616558de71d3a00c3a12bd5ddd12defc73","unresolved":false,"context_lines":[{"line_number":147,"context_line":"       |Delete                    |"},{"line_number":148,"context_line":"       |Provisioning              |"},{"line_number":149,"context_line":"       |Clean up                  |"},{"line_number":150,"context_line":"       +--------------------------+"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* There is a node-list table, and operators can select an operation from"},{"line_number":153,"context_line":"  pulldown menu(or something like it), and in this time,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_fe53b56a","line":150,"in_reply_to":"3a29b11f_5100c801","updated":"2015-10-26 02:34:58.000000000","message":"Maybe yes, it would be more kind.","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"69380fa9a43e676f53c2e3f5874eb377595c2f92","unresolved":false,"context_lines":[{"line_number":193,"context_line":"to these CLIs."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":" ironic node-show-states"},{"line_number":196,"context_line":" ironic node-list"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"RPC API impact"},{"line_number":199,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_fc01ab05","line":196,"updated":"2015-10-23 09:20:36.000000000","message":"node-list? I think you meant node-show","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b2781d616558de71d3a00c3a12bd5ddd12defc73","unresolved":false,"context_lines":[{"line_number":193,"context_line":"to these CLIs."},{"line_number":194,"context_line":""},{"line_number":195,"context_line":" ironic node-show-states"},{"line_number":196,"context_line":" ironic node-list"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"RPC API impact"},{"line_number":199,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a29b11f_7ec6c517","line":196,"in_reply_to":"3a29b11f_fc01ab05","updated":"2015-10-26 02:34:58.000000000","message":"No, node-list. I wrote the reason above. Perhaps it would be nice fixing node-show also.","commit_id":"d2f239f816870b31a6667232d3eef0ce6df998c5"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"896821b34cfeff2ec87c859524b8c9f5c5fecaad","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"target_power_state\": \"power on\","},{"line_number":65,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":66,"context_line":"    \"target_raid_config\": null,"},{"line_number":67,"context_line":"    \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":68,"context_line":"    \"transitions\":{"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        \"enroll\": {\"manage\": \"manageable\"],"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a26ad4f_dd512464","line":67,"updated":"2015-10-28 02:43:23.000000000","message":"this \"allowed_transitions\" -- yes, good.","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"896821b34cfeff2ec87c859524b8c9f5c5fecaad","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":66,"context_line":"    \"target_raid_config\": null,"},{"line_number":67,"context_line":"    \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":68,"context_line":"    \"transitions\":{"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        \"enroll\": {\"manage\": \"manageable\"],"},{"line_number":71,"context_line":"        \"manageable\": {\"inspect\": \"manageable\", \"zap\": \"manageable\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a26ad4f_7d4ed0c2","line":68,"updated":"2015-10-28 02:43:23.000000000","message":"Agree -- this resource does not depend on the node, and shouldn\u0027t be a subresource of the Node.","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"9ba3da032f1e24973dde3809755675664e41668d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":66,"context_line":"    \"target_raid_config\": null,"},{"line_number":67,"context_line":"    \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":68,"context_line":"    \"transitions\":{"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        \"enroll\": {\"manage\": \"manageable\"],"},{"line_number":71,"context_line":"        \"manageable\": {\"inspect\": \"manageable\", \"zap\": \"manageable\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a26ad4f_f236a1b3","line":68,"updated":"2015-10-27 13:25:50.000000000","message":"Agree with Dmitry comment on ps6. GET with a \"node_ident\" should not contain \"static\" info.","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"286594648743f36f7d50e0050bc91e8a38e6f559","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":66,"context_line":"    \"target_raid_config\": null,"},{"line_number":67,"context_line":"    \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":68,"context_line":"    \"transitions\":{"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        \"enroll\": {\"manage\": \"manageable\"],"},{"line_number":71,"context_line":"        \"manageable\": {\"inspect\": \"manageable\", \"zap\": \"manageable\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"da85f559_e295af32","line":68,"in_reply_to":"1a26ad4f_7d4ed0c2","updated":"2015-11-12 01:39:23.000000000","message":"OK, I see the reason why this API should not include this data. Dmitry, Yuriy, Devananda, thank you for advising. I will separate API which provides \"transitions\".\n\nAnd also about Dmitry\u0027s comment on ps6(sorry for having skipped), IMO \"allowed_transitions\" doesn\u0027t need to include target state like \n \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"}\n\nbecause another \"transitions\" API will provide it. WDYT?","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"9ba3da032f1e24973dde3809755675664e41668d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            \"provision_state\": \"manageable\","},{"line_number":111,"context_line":"            \"uuid\": \"1be26c0b-03f2-4d2e-ae87-c02d7f33c123\","},{"line_number":112,"context_line":"            \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":113,"context_line":"            \"transitions\": {"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"                \"enroll\": {\"manage\": \"manageable\"},"},{"line_number":116,"context_line":"                \"manageable\": {\"inspect\": \"manageable\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a26ad4f_326c199c","line":113,"updated":"2015-10-27 13:25:50.000000000","message":"ditto, there is \"uuid\"","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"286594648743f36f7d50e0050bc91e8a38e6f559","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            \"provision_state\": \"manageable\","},{"line_number":111,"context_line":"            \"uuid\": \"1be26c0b-03f2-4d2e-ae87-c02d7f33c123\","},{"line_number":112,"context_line":"            \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":113,"context_line":"            \"transitions\": {"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"                \"enroll\": {\"manage\": \"manageable\"},"},{"line_number":116,"context_line":"                \"manageable\": {\"inspect\": \"manageable\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"da85f559_05c8fd72","line":113,"in_reply_to":"1a26ad4f_326c199c","updated":"2015-11-12 01:39:23.000000000","message":"Done. I will remove.","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"9ba3da032f1e24973dde3809755675664e41668d","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Operators can change node state from UI (not only horizon, but also any"},{"line_number":139,"context_line":"  other vendor specific portal site)"},{"line_number":140,"context_line":"  using GET /v1/nodes/(node_ident)/states and GET /v1/nodes APIs"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"::"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a26ad4f_1231dda2","line":140,"updated":"2015-10-27 13:25:50.000000000","message":"This sentence looks strange, maybe like ... using information from GET ...","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"286594648743f36f7d50e0050bc91e8a38e6f559","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Operators can change node state from UI (not only horizon, but also any"},{"line_number":139,"context_line":"  other vendor specific portal site)"},{"line_number":140,"context_line":"  using GET /v1/nodes/(node_ident)/states and GET /v1/nodes APIs"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"::"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da85f559_c5a435bb","line":140,"in_reply_to":"1a26ad4f_1231dda2","updated":"2015-11-12 01:39:23.000000000","message":"Done","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"896821b34cfeff2ec87c859524b8c9f5c5fecaad","unresolved":false,"context_lines":[{"line_number":162,"context_line":"  which the operator selected will be done automatically."},{"line_number":163,"context_line":"  (It depends on each service provider\u0027s policy)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":166,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":167,"context_line":"  This will be realized by adding \"transitions\" field into"},{"line_number":168,"context_line":"  GET /v1/nodes/(node_ident)/states and GET /v1/nodes API."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a26ad4f_9d4bacb0","line":165,"updated":"2015-10-28 02:43:23.000000000","message":"I disagree with this. The API should only say \"these are the currently available operations for this node\" because there is no guarantee that the node will actually go from A -\u003e B -\u003e C -\u003e D without failing at some step along the way.","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"f71ceea8750c8a8782b0b46b5ffb069a280f4579","unresolved":false,"context_lines":[{"line_number":162,"context_line":"  which the operator selected will be done automatically."},{"line_number":163,"context_line":"  (It depends on each service provider\u0027s policy)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":166,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":167,"context_line":"  This will be realized by adding \"transitions\" field into"},{"line_number":168,"context_line":"  GET /v1/nodes/(node_ident)/states and GET /v1/nodes API."}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa80f949_485e7177","line":165,"in_reply_to":"1a26ad4f_9d4bacb0","updated":"2015-11-05 17:13:22.000000000","message":"The believe what Yuiko is trying to say here is that one use case for providing the list of transitions for every possible state as she suggested the transitions field do, is so an external application can automatically workout the indirect path to a requested state then attempt to move a node through the required steps. The API isn\u0027t guaranteeing anything, just being informative.","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"286594648743f36f7d50e0050bc91e8a38e6f559","unresolved":false,"context_lines":[{"line_number":162,"context_line":"  which the operator selected will be done automatically."},{"line_number":163,"context_line":"  (It depends on each service provider\u0027s policy)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":166,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":167,"context_line":"  This will be realized by adding \"transitions\" field into"},{"line_number":168,"context_line":"  GET /v1/nodes/(node_ident)/states and GET /v1/nodes API."}],"source_content_type":"text/x-rst","patch_set":8,"id":"da85f559_d832dca6","line":165,"in_reply_to":"fa80f949_485e7177","updated":"2015-11-12 01:39:23.000000000","message":"Sam, thank you for helping me. Yes, this is what I wanted to say. Whether guaranteeing or not depends to external application, not to this API. This API just helps these kinds of external applications.","commit_id":"e30b98da3a9951eb39cc3e4524ca906373d4c996"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d3e33d88ec969f0ebc413f7149c9844caa9033fe","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* Return type: NodeStates"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"  + type NodeStates"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"{"},{"line_number":62,"context_line":"    \"console_enabled\": false,"},{"line_number":63,"context_line":"    \"last_error\": null,"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_3e7f34e1","line":60,"updated":"2015-11-12 13:20:50.000000000","message":"for it to render properly you need to use the following syntax:\n\n ::\n\n     {\n         \"console_enabled\": ......\n\n(double colon and indentation are essential)","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"3b39978e696764879704b48ec33c65f0f2dc096f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* Return type: NodeStates"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"  + type NodeStates"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"{"},{"line_number":62,"context_line":"    \"console_enabled\": false,"},{"line_number":63,"context_line":"    \"last_error\": null,"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_ae50a55f","line":60,"in_reply_to":"da85f559_3e7f34e1","updated":"2015-11-13 09:08:42.000000000","message":"Done","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d3e33d88ec969f0ebc413f7149c9844caa9033fe","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    \"target_power_state\": \"power on\","},{"line_number":69,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":70,"context_line":"    \"target_raid_config\": null,"},{"line_number":71,"context_line":"    \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"}"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_de8148c4","line":71,"updated":"2015-11-12 13:20:50.000000000","message":"we can use a dict here to give more information:\n\n \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"avilable\"}\n\nthus a user will know also the target state","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"808b2c56ebe51c4957f5c975d2dea1414ae054ab","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    \"target_power_state\": \"power on\","},{"line_number":69,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":70,"context_line":"    \"target_raid_config\": null,"},{"line_number":71,"context_line":"    \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"}"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_de2116b6","line":71,"in_reply_to":"da85f559_94c9345d","updated":"2015-11-13 09:10:15.000000000","message":"I would call it consistency ;) also it would make a user do 2 API requests when it\u0027s easy enough to provide the information in only one","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"61f5647910e9217de0662587209972ef3b3cf71d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    \"target_power_state\": \"power on\","},{"line_number":69,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":70,"context_line":"    \"target_raid_config\": null,"},{"line_number":71,"context_line":"    \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"}"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_41878712","line":71,"in_reply_to":"da85f559_de2116b6","updated":"2015-11-13 09:25:01.000000000","message":"Thanks, I understand consistency, I will fix it. BTW, about operating, user need to call 2 API anyway, because user can know only next status using this API. For example, if someone want to make the status from ENROLL to AVAILABLE, he need to do manage and provide. It cannot be done unless  GET /v1/nodes/transitions API.","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"3b39978e696764879704b48ec33c65f0f2dc096f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    \"target_power_state\": \"power on\","},{"line_number":69,"context_line":"    \"target_provision_state\": \"none\","},{"line_number":70,"context_line":"    \"target_raid_config\": null,"},{"line_number":71,"context_line":"    \"allowed_transitions\": [\"inspect\", \"provide\"],"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"}"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_94c9345d","line":71,"in_reply_to":"da85f559_de8148c4","updated":"2015-11-13 09:08:42.000000000","message":"thank you for your advice. IMO, user can know target state using GET /v1/nodes/transitions , so adding target state to this API seems redundant. WDYT?","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d3e33d88ec969f0ebc413f7149c9844caa9033fe","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"  + type NodeCollection"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"{"},{"line_number":82,"context_line":"    \"nodes\": ["},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"            \"instance_uuid\": \"dcf1fbc5-93fc-4596-9395-b80572f6267b\","}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_fe844cd3","line":81,"updated":"2015-11-12 13:20:50.000000000","message":"ditto about rendering","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"3b39978e696764879704b48ec33c65f0f2dc096f","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"  + type NodeCollection"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"{"},{"line_number":82,"context_line":"    \"nodes\": ["},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"            \"instance_uuid\": \"dcf1fbc5-93fc-4596-9395-b80572f6267b\","}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_be88d2c7","line":81,"in_reply_to":"da85f559_fe844cd3","updated":"2015-11-13 09:08:42.000000000","message":"Done","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d3e33d88ec969f0ebc413f7149c9844caa9033fe","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"* Returns: A json object with the list of transitions."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"{"},{"line_number":122,"context_line":"    \"transitions\":{"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        \"enroll\": {\"manage\": \"manageable\"},"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_9e70a00c","line":121,"updated":"2015-11-12 13:20:50.000000000","message":"ditto about rendering","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"3b39978e696764879704b48ec33c65f0f2dc096f","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"* Returns: A json object with the list of transitions."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"{"},{"line_number":122,"context_line":"    \"transitions\":{"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        \"enroll\": {\"manage\": \"manageable\"},"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_5e644648","line":121,"in_reply_to":"da85f559_9e70a00c","updated":"2015-11-13 09:08:42.000000000","message":"Done","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d3e33d88ec969f0ebc413f7149c9844caa9033fe","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \"active\": {\"rebuild\": \"active\", \"delete\": \"available\","},{"line_number":131,"context_line":"        \"rescue\": \"rescue\"},"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        \"rescue\": {\"unrescu\": \"active\", \"delete\": \"available\"}"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    }"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_be6b241d","line":133,"updated":"2015-11-12 13:20:50.000000000","message":"typo in unrescue","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"3b39978e696764879704b48ec33c65f0f2dc096f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \"active\": {\"rebuild\": \"active\", \"delete\": \"available\","},{"line_number":131,"context_line":"        \"rescue\": \"rescue\"},"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        \"rescue\": {\"unrescu\": \"active\", \"delete\": \"available\"}"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    }"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da85f559_ded7d6bd","line":133,"in_reply_to":"da85f559_be6b241d","updated":"2015-11-13 09:08:42.000000000","message":"Done","commit_id":"5644f4b95298b7238648da8a5eff5194dd5b660f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"96ef639c0b57693f390dd4cb27d8635bc31d1c75","unresolved":false,"context_lines":[{"line_number":70,"context_line":"      \"target_power_state\": \"power on\","},{"line_number":71,"context_line":"      \"target_provision_state\": \"none\","},{"line_number":72,"context_line":"      \"target_raid_config\": null,"},{"line_number":73,"context_line":"      \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"avilable\"},"},{"line_number":74,"context_line":"    }"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"GET /v1/nodes"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba8a016a_4e59a8fd","line":73,"updated":"2015-11-17 22:17:54.000000000","message":"nit: s/avilable/available/","commit_id":"513265e57177d7f01fbfbec0239e1a6f0cf17804"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"147bd1c36bd00ed81fc4e00b2fc00ac8b36e6ce3","unresolved":false,"context_lines":[{"line_number":70,"context_line":"      \"target_power_state\": \"power on\","},{"line_number":71,"context_line":"      \"target_provision_state\": \"none\","},{"line_number":72,"context_line":"      \"target_raid_config\": null,"},{"line_number":73,"context_line":"      \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"avilable\"},"},{"line_number":74,"context_line":"    }"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"GET /v1/nodes"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba8a016a_cf2a5990","line":73,"in_reply_to":"ba8a016a_4e59a8fd","updated":"2015-11-18 11:58:01.000000000","message":"Done","commit_id":"513265e57177d7f01fbfbec0239e1a6f0cf17804"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"96ef639c0b57693f390dd4cb27d8635bc31d1c75","unresolved":false,"context_lines":[{"line_number":100,"context_line":"          \"power_state\": \"power on\","},{"line_number":101,"context_line":"          \"provision_state\": \"manageable\","},{"line_number":102,"context_line":"          \"uuid\": \"1be26c0b-03f2-4d2e-ae87-c02d7f33c123\","},{"line_number":103,"context_line":"          \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"avilable\"},"},{"line_number":104,"context_line":"        }"},{"line_number":105,"context_line":"      ]"},{"line_number":106,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba8a016a_8e5f90e4","line":103,"updated":"2015-11-17 22:17:54.000000000","message":"nit: s/avilable/available/","commit_id":"513265e57177d7f01fbfbec0239e1a6f0cf17804"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"147bd1c36bd00ed81fc4e00b2fc00ac8b36e6ce3","unresolved":false,"context_lines":[{"line_number":100,"context_line":"          \"power_state\": \"power on\","},{"line_number":101,"context_line":"          \"provision_state\": \"manageable\","},{"line_number":102,"context_line":"          \"uuid\": \"1be26c0b-03f2-4d2e-ae87-c02d7f33c123\","},{"line_number":103,"context_line":"          \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"avilable\"},"},{"line_number":104,"context_line":"        }"},{"line_number":105,"context_line":"      ]"},{"line_number":106,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba8a016a_6f1a4d7f","line":103,"in_reply_to":"ba8a016a_8e5f90e4","updated":"2015-11-18 11:58:01.000000000","message":"Done","commit_id":"513265e57177d7f01fbfbec0239e1a6f0cf17804"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"032037f39c785afef0f766fbdd7622e4e994f4b7","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \"available\": {\"manage\": \"manageable\", \"active\": \"active\"},"},{"line_number":122,"context_line":"        \"active\": {\"rebuild\": \"active\", \"delete\": \"available\","},{"line_number":123,"context_line":"        \"rescue\": \"rescue\"},"},{"line_number":124,"context_line":"        \"rescue\": {\"unrescue\": \"active\", \"delete\": \"available\"}"},{"line_number":125,"context_line":"      }"},{"line_number":126,"context_line":"    }"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_d2066785","line":124,"updated":"2015-11-18 18:09:12.000000000","message":"I think it makes sense to add allowed transitions from each transition state error cases also.","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1015878b12050f0d116fbb30c0dd2b81a23bac54","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \"available\": {\"manage\": \"manageable\", \"active\": \"active\"},"},{"line_number":122,"context_line":"        \"active\": {\"rebuild\": \"active\", \"delete\": \"available\","},{"line_number":123,"context_line":"        \"rescue\": \"rescue\"},"},{"line_number":124,"context_line":"        \"rescue\": {\"unrescue\": \"active\", \"delete\": \"available\"}"},{"line_number":125,"context_line":"      }"},{"line_number":126,"context_line":"    }"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_6c569b07","line":124,"in_reply_to":"ba8a016a_48de4ade","updated":"2015-11-19 12:38:41.000000000","message":"Oh, I didn\u0027t think about it and IMO we don\u0027t need it. mmm, I\u0027d like to know for what it is useful.","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aadcc7fbc3839b2d8a7ce51eac4754109a4c771a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \"available\": {\"manage\": \"manageable\", \"active\": \"active\"},"},{"line_number":122,"context_line":"        \"active\": {\"rebuild\": \"active\", \"delete\": \"available\","},{"line_number":123,"context_line":"        \"rescue\": \"rescue\"},"},{"line_number":124,"context_line":"        \"rescue\": {\"unrescue\": \"active\", \"delete\": \"available\"}"},{"line_number":125,"context_line":"      }"},{"line_number":126,"context_line":"    }"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_48de4ade","line":124,"in_reply_to":"ba8a016a_d2066785","updated":"2015-11-18 18:15:23.000000000","message":"This is not a complete list, I guess. It will be autogenerated in reality.","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"032037f39c785afef0f766fbdd7622e4e994f4b7","unresolved":false,"context_lines":[{"line_number":143,"context_line":"       |Inspection                |"},{"line_number":144,"context_line":"       |Delete                    |"},{"line_number":145,"context_line":"       |Provisioning              |"},{"line_number":146,"context_line":"       |Clean up                  |"},{"line_number":147,"context_line":"       +--------------------------+"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* There is a node-list table, and operators can select an operation from"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_0de61444","line":146,"updated":"2015-11-18 18:09:12.000000000","message":"Better to display them in the order they should be executed in the lifecycle of the node.","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aadcc7fbc3839b2d8a7ce51eac4754109a4c771a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"       |Inspection                |"},{"line_number":144,"context_line":"       |Delete                    |"},{"line_number":145,"context_line":"       |Provisioning              |"},{"line_number":146,"context_line":"       |Clean up                  |"},{"line_number":147,"context_line":"       +--------------------------+"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* There is a node-list table, and operators can select an operation from"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_c8f0fa69","line":146,"in_reply_to":"ba8a016a_0de61444","updated":"2015-11-18 18:15:23.000000000","message":"Let\u0027s not discuss a theoretical UI here","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1015878b12050f0d116fbb30c0dd2b81a23bac54","unresolved":false,"context_lines":[{"line_number":143,"context_line":"       |Inspection                |"},{"line_number":144,"context_line":"       |Delete                    |"},{"line_number":145,"context_line":"       |Provisioning              |"},{"line_number":146,"context_line":"       |Clean up                  |"},{"line_number":147,"context_line":"       +--------------------------+"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* There is a node-list table, and operators can select an operation from"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_cc7a2788","line":146,"in_reply_to":"ba8a016a_c8f0fa69","updated":"2015-11-19 12:38:41.000000000","message":"Yeah, it\u0027s just an example in order to make easy to imagine usecase, but it makes people confused, sorry.","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"032037f39c785afef0f766fbdd7622e4e994f4b7","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* There is a node-list table, and operators can select an operation from"},{"line_number":150,"context_line":"  pulldown menu(or something like it), and in this time,"},{"line_number":151,"context_line":"  (1)some operations which are available are shown as enabled,"},{"line_number":152,"context_line":"  and others are shown as disabled."},{"line_number":153,"context_line":"  (2)all operations are shown as enabled and when operator selects one of them,"},{"line_number":154,"context_line":"  some operations which should been done before the operation"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_4d989c78","line":151,"updated":"2015-11-18 18:09:12.000000000","message":"How does it provide the required inputs for that operation using the API transitions?","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1015878b12050f0d116fbb30c0dd2b81a23bac54","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* There is a node-list table, and operators can select an operation from"},{"line_number":150,"context_line":"  pulldown menu(or something like it), and in this time,"},{"line_number":151,"context_line":"  (1)some operations which are available are shown as enabled,"},{"line_number":152,"context_line":"  and others are shown as disabled."},{"line_number":153,"context_line":"  (2)all operations are shown as enabled and when operator selects one of them,"},{"line_number":154,"context_line":"  some operations which should been done before the operation"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_cc0b07d5","line":151,"in_reply_to":"ba8a016a_4805ea43","updated":"2015-11-19 12:38:41.000000000","message":"Yes. Should I remove this section?","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aadcc7fbc3839b2d8a7ce51eac4754109a4c771a","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* There is a node-list table, and operators can select an operation from"},{"line_number":150,"context_line":"  pulldown menu(or something like it), and in this time,"},{"line_number":151,"context_line":"  (1)some operations which are available are shown as enabled,"},{"line_number":152,"context_line":"  and others are shown as disabled."},{"line_number":153,"context_line":"  (2)all operations are shown as enabled and when operator selects one of them,"},{"line_number":154,"context_line":"  some operations which should been done before the operation"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_4805ea43","line":151,"in_reply_to":"ba8a016a_4d989c78","updated":"2015-11-18 18:15:23.000000000","message":"ditto, this is not relevant to this spec","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"032037f39c785afef0f766fbdd7622e4e994f4b7","unresolved":false,"context_lines":[{"line_number":151,"context_line":"  (1)some operations which are available are shown as enabled,"},{"line_number":152,"context_line":"  and others are shown as disabled."},{"line_number":153,"context_line":"  (2)all operations are shown as enabled and when operator selects one of them,"},{"line_number":154,"context_line":"  some operations which should been done before the operation"},{"line_number":155,"context_line":"  which the operator selected will be done automatically."},{"line_number":156,"context_line":"  (This is just an example and it depends on each service provider\u0027s policy,"},{"line_number":157,"context_line":"  so that API doesn\u0027t need to guarantee that the node will actually go through"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_4dfc1cb8","line":154,"updated":"2015-11-18 18:09:12.000000000","message":"nit: s/should been/should have been","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1015878b12050f0d116fbb30c0dd2b81a23bac54","unresolved":false,"context_lines":[{"line_number":151,"context_line":"  (1)some operations which are available are shown as enabled,"},{"line_number":152,"context_line":"  and others are shown as disabled."},{"line_number":153,"context_line":"  (2)all operations are shown as enabled and when operator selects one of them,"},{"line_number":154,"context_line":"  some operations which should been done before the operation"},{"line_number":155,"context_line":"  which the operator selected will be done automatically."},{"line_number":156,"context_line":"  (This is just an example and it depends on each service provider\u0027s policy,"},{"line_number":157,"context_line":"  so that API doesn\u0027t need to guarantee that the node will actually go through"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_4cae37e7","line":154,"in_reply_to":"ba8a016a_4dfc1cb8","updated":"2015-11-19 12:38:41.000000000","message":"Done","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"032037f39c785afef0f766fbdd7622e4e994f4b7","unresolved":false,"context_lines":[{"line_number":154,"context_line":"  some operations which should been done before the operation"},{"line_number":155,"context_line":"  which the operator selected will be done automatically."},{"line_number":156,"context_line":"  (This is just an example and it depends on each service provider\u0027s policy,"},{"line_number":157,"context_line":"  so that API doesn\u0027t need to guarantee that the node will actually go through"},{"line_number":158,"context_line":"  the required steps without failing.)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"* In order to realize either way (1) or (2), API should provide data"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_0dda9417","line":157,"updated":"2015-11-18 18:09:12.000000000","message":"What do you mean by \" API doesn\u0027t need to guarantee that the node will actually go through the required steps\"?\nIf we allow state transition from here it has to do the required step to move to that transition state.","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1015878b12050f0d116fbb30c0dd2b81a23bac54","unresolved":false,"context_lines":[{"line_number":154,"context_line":"  some operations which should been done before the operation"},{"line_number":155,"context_line":"  which the operator selected will be done automatically."},{"line_number":156,"context_line":"  (This is just an example and it depends on each service provider\u0027s policy,"},{"line_number":157,"context_line":"  so that API doesn\u0027t need to guarantee that the node will actually go through"},{"line_number":158,"context_line":"  the required steps without failing.)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"* In order to realize either way (1) or (2), API should provide data"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_2cce5363","line":157,"in_reply_to":"ba8a016a_0dda9417","updated":"2015-11-19 12:38:41.000000000","message":"This means that when status moves like A-\u003eB-\u003eC-\u003eD and operator wants to make machine state from A to D and if one dashboard do all the status A-\u003eB-\u003eC-\u003eD, it\u0027s dashboard\u0027s responsibility and not API\u0027s. Does this also make people confused? Should I remove?","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"032037f39c785afef0f766fbdd7622e4e994f4b7","unresolved":false,"context_lines":[{"line_number":181,"context_line":"REST API impact"},{"line_number":182,"context_line":"---------------"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Add new fields \"allowed_transitions\" to"},{"line_number":185,"context_line":"GET /v1/nodes/(node_ident)/states and GET /v1/nodes API"},{"line_number":186,"context_line":"and add new API"},{"line_number":187,"context_line":"GET /v1/nodes/transitions ."}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_8d58c48b","line":184,"updated":"2015-11-18 18:09:12.000000000","message":"the value for this will/should change as the node moves in a new state.","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1015878b12050f0d116fbb30c0dd2b81a23bac54","unresolved":false,"context_lines":[{"line_number":181,"context_line":"REST API impact"},{"line_number":182,"context_line":"---------------"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Add new fields \"allowed_transitions\" to"},{"line_number":185,"context_line":"GET /v1/nodes/(node_ident)/states and GET /v1/nodes API"},{"line_number":186,"context_line":"and add new API"},{"line_number":187,"context_line":"GET /v1/nodes/transitions ."}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_a7f1fc6c","line":184,"in_reply_to":"ba8a016a_8d58c48b","updated":"2015-11-19 12:38:41.000000000","message":"Yes, you\u0027re right. Sorry, I\u0027m not sure what you want to let me do. Should I add something for here?","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"032037f39c785afef0f766fbdd7622e4e994f4b7","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Add new command executes API GET /v1/nodes/transitions ."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":" ironic node-transitions"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"RPC API impact"},{"line_number":203,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_8d420467","line":200,"updated":"2015-11-18 18:09:12.000000000","message":"why is this required? to do any state transitions?","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1015878b12050f0d116fbb30c0dd2b81a23bac54","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Add new command executes API GET /v1/nodes/transitions ."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":" ironic node-transitions"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"RPC API impact"},{"line_number":203,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_d205dc10","line":200,"in_reply_to":"ba8a016a_88b43282","updated":"2015-11-19 12:38:41.000000000","message":"This CLI just shows the result of GET /v1/nodes/transitions API and it will be useful for us, don\u0027t you think so?","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aadcc7fbc3839b2d8a7ce51eac4754109a4c771a","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Add new command executes API GET /v1/nodes/transitions ."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":" ironic node-transitions"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"RPC API impact"},{"line_number":203,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ba8a016a_88b43282","line":200,"in_reply_to":"ba8a016a_8d420467","updated":"2015-11-18 18:15:23.000000000","message":"Do you object to introducing a CLI command for new API? could you please provide your reasoning?","commit_id":"e46dfcef87db81f69434a68b3325be8fe557fb24"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3defb9423087b3ec793980e1c4b1adeefa8e9100","unresolved":false,"context_lines":[{"line_number":70,"context_line":"      \"target_power_state\": \"power on\","},{"line_number":71,"context_line":"      \"target_provision_state\": \"none\","},{"line_number":72,"context_line":"      \"target_raid_config\": null,"},{"line_number":73,"context_line":"      \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"},"},{"line_number":74,"context_line":"    }"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"GET /v1/nodes"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_59820a54","line":73,"updated":"2015-11-25 02:07:27.000000000","message":"I\u0027m not sure I like this.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"137a5cd33572972be59899e541dbe52c37464f4b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"      \"target_power_state\": \"power on\","},{"line_number":71,"context_line":"      \"target_provision_state\": \"none\","},{"line_number":72,"context_line":"      \"target_raid_config\": null,"},{"line_number":73,"context_line":"      \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"},"},{"line_number":74,"context_line":"    }"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"GET /v1/nodes"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_62eb4814","line":73,"in_reply_to":"9a8ffd7b_15ec278e","updated":"2015-11-26 11:40:51.000000000","message":"Oh, nice point. I was thinking show allowed_transitions using transition information, so that in case of cleaning, {\"done\": \"available\", \"fail\": \"cleanfail\", \"wait: \"cleanwait\", \"manage\": \"manageable\"}, right? https://github.com/openstack/ironic/blob/master/ironic/common/states.py#L288-L312\n\nBut no human can do done/fail/wait (and I guess what you want to say is this). So that it seems to be nice showing data which includes active/deleted/rebuild/inspect/provide/manage/abort - just supported states.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e97a2489a71c8025d671426ee841fab5ddc777aa","unresolved":false,"context_lines":[{"line_number":70,"context_line":"      \"target_power_state\": \"power on\","},{"line_number":71,"context_line":"      \"target_provision_state\": \"none\","},{"line_number":72,"context_line":"      \"target_raid_config\": null,"},{"line_number":73,"context_line":"      \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"},"},{"line_number":74,"context_line":"    }"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"GET /v1/nodes"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_15ec278e","line":73,"in_reply_to":"9a8ffd7b_59820a54","updated":"2015-11-25 14:56:34.000000000","message":"I was wondering. What do you show for a node that is eg in provision state \u0027cleaning\u0027? What would the allowed_transitions be? Or do you show no allowed transitions?","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"de293222ff480cc0e1e6911ff286a358bebe5e74","unresolved":false,"context_lines":[{"line_number":70,"context_line":"      \"target_power_state\": \"power on\","},{"line_number":71,"context_line":"      \"target_provision_state\": \"none\","},{"line_number":72,"context_line":"      \"target_raid_config\": null,"},{"line_number":73,"context_line":"      \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"},"},{"line_number":74,"context_line":"    }"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"GET /v1/nodes"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_cf6a39ed","line":73,"in_reply_to":"9a8ffd7b_62eb4814","updated":"2015-11-26 21:52:56.000000000","message":"I think that you need to think about what you want to show/what the intent of this spec is. It isn\u0027t as straightforward as one might think. Is the intent to show what/if a node can be moved to a different state via API only, or is the intent to show what the \u0027next\u0027 thing might happen to a node, either internally or via an explicit API request.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3defb9423087b3ec793980e1c4b1adeefa8e9100","unresolved":false,"context_lines":[{"line_number":100,"context_line":"          \"power_state\": \"power on\","},{"line_number":101,"context_line":"          \"provision_state\": \"manageable\","},{"line_number":102,"context_line":"          \"uuid\": \"1be26c0b-03f2-4d2e-ae87-c02d7f33c123\","},{"line_number":103,"context_line":"          \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"},"},{"line_number":104,"context_line":"        }"},{"line_number":105,"context_line":"      ]"},{"line_number":106,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_397386b3","line":103,"updated":"2015-11-25 02:07:27.000000000","message":"I need to think about it more, but I don\u0027t think this makes sense. This API is meant to show node information.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"cda59b1ed690bb9cba87339c5c3366b9998dc121","unresolved":false,"context_lines":[{"line_number":100,"context_line":"          \"power_state\": \"power on\","},{"line_number":101,"context_line":"          \"provision_state\": \"manageable\","},{"line_number":102,"context_line":"          \"uuid\": \"1be26c0b-03f2-4d2e-ae87-c02d7f33c123\","},{"line_number":103,"context_line":"          \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"},"},{"line_number":104,"context_line":"        }"},{"line_number":105,"context_line":"      ]"},{"line_number":106,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_515c1e4b","line":103,"in_reply_to":"9a8ffd7b_397386b3","updated":"2015-11-25 06:26:45.000000000","message":"You mean allowed_transitions doesn\u0027t depend on particular node just on state? Hmm, you\u0027re right...I have no idea.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e97a2489a71c8025d671426ee841fab5ddc777aa","unresolved":false,"context_lines":[{"line_number":100,"context_line":"          \"power_state\": \"power on\","},{"line_number":101,"context_line":"          \"provision_state\": \"manageable\","},{"line_number":102,"context_line":"          \"uuid\": \"1be26c0b-03f2-4d2e-ae87-c02d7f33c123\","},{"line_number":103,"context_line":"          \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"},"},{"line_number":104,"context_line":"        }"},{"line_number":105,"context_line":"      ]"},{"line_number":106,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_f50f23df","line":103,"in_reply_to":"9a8ffd7b_515c1e4b","updated":"2015-11-25 14:56:34.000000000","message":"So \u0027allowed_transitions\u0027 isn\u0027t really something that we store in the node\u0027s DB. Or is that what you were thinking of doing? And if we don\u0027t store it, I don\u0027t like the idea of it being \u0027generated\u0027. And I also don\u0027t like the idea of storing it. That\u0027s why we have the state machine -- to get that information, so it doesn\u0027t make sense to be stored.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"137a5cd33572972be59899e541dbe52c37464f4b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"          \"power_state\": \"power on\","},{"line_number":101,"context_line":"          \"provision_state\": \"manageable\","},{"line_number":102,"context_line":"          \"uuid\": \"1be26c0b-03f2-4d2e-ae87-c02d7f33c123\","},{"line_number":103,"context_line":"          \"allowed_transitions\": {\"inspect\": \"manageable\", \"provide\": \"available\"},"},{"line_number":104,"context_line":"        }"},{"line_number":105,"context_line":"      ]"},{"line_number":106,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_45a88edb","line":103,"in_reply_to":"9a8ffd7b_f50f23df","updated":"2015-11-26 11:40:51.000000000","message":"Or is that what you were thinking of doing?  -\u003e No. \n\nyeah, I understand your concern and how data model should be, but could you please read my comment on L110?","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3defb9423087b3ec793980e1c4b1adeefa8e9100","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Add new API:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"GET /v1/nodes/transitions"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"List transitions."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_59e9aa19","line":110,"updated":"2015-11-25 02:07:27.000000000","message":"It seems like we should be able to leverage this to show:\n1. all states/transitions\n2. the state/transition for a particular node","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"137a5cd33572972be59899e541dbe52c37464f4b","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Add new API:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"GET /v1/nodes/transitions"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"List transitions."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_65bcb2dc","line":110,"in_reply_to":"9a8ffd7b_1c944fe0","updated":"2015-11-26 11:40:51.000000000","message":"I think we don\u0027t need GET /v1/nodes/\u003cnode-ident\u003e/transitions because we can provide enough information using just GET /v1/nodes/(node_ident)/states (or GET /v1/nodes) and GET /v1/nodes/transitions let operators know which transitions are available for the node. \n\nFor example, please imagine, when we will provide UI like L137-L147, we can create a node-list table using GET /v1/nodes and create a pulldown menu using GET /v1/nodes/transitions. \n\nThe reason why I added allowed_transitions into GET /v1/nodes is that when we will provide the UI, we can create both node-list table and pulldown menu using just GET /v1/nodes. WDYT?\n\nI just want to explain why I think GET /v1/nodes/\u003cnode-ident\u003e/transitions is unnecessary, and then I\u0027m becoming agree with removing allowed_transitions from GET /v1/nodes/(node_ident)/states and GET /v1/nodes","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e97a2489a71c8025d671426ee841fab5ddc777aa","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Add new API:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"GET /v1/nodes/transitions"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"List transitions."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_1c944fe0","line":110,"in_reply_to":"9a8ffd7b_315f1a43","updated":"2015-11-25 14:56:34.000000000","message":"I am suggesting option 2 instead of the \u0027allowed_transitions\u0027 you have for the above \u0027GET /v1/nodes/(node_ident)/states\u0027 and\t\u0027GET /v1/nodes\u0027.\n\nI think this fits better with our existing API.\n\nI mean GET /v1/nodes/\u003cnode-ident\u003e/transitions","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"cda59b1ed690bb9cba87339c5c3366b9998dc121","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Add new API:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"GET /v1/nodes/transitions"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"List transitions."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_315f1a43","line":110,"in_reply_to":"9a8ffd7b_59e9aa19","updated":"2015-11-25 06:26:45.000000000","message":"About option 2, which do you mean GET /v1/nodes/transitions/\u003cnode-ident\u003e or GET /v1/nodes/transitions/\u003cstate\u003e? I assume latter.\n\nI feel option 1 is enough to know which transitions are available for each states. I don\u0027t have strong opinion to add option 2 but could you please teach me its merits?","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"de293222ff480cc0e1e6911ff286a358bebe5e74","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Add new API:"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"GET /v1/nodes/transitions"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"List transitions."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_af2495c4","line":110,"in_reply_to":"9a8ffd7b_65bcb2dc","updated":"2015-11-26 21:52:56.000000000","message":"I\u0027m not sure I understand the above except for the last line :-)\n\nThe GET /v1/nodes/\u003cnode-ident\u003e/transitions should return the transition information relevant to the specified node. And there should not be any need to modify GET /v1/nodes/ or GET /v1/nodes/states as you describe in this spec, because I don\u0027t think it makes sense for the latter two to have an \u0027allowed_transitions\u0027 field.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3defb9423087b3ec793980e1c4b1adeefa8e9100","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    {"},{"line_number":117,"context_line":"      \"transitions\":{"},{"line_number":118,"context_line":"        \"enroll\": {\"manage\": \"manageable\"},"},{"line_number":119,"context_line":"        \"manageable\": {\"inspect\": \"manageable\","},{"line_number":120,"context_line":"                       \"provide\": \"available\"},"},{"line_number":121,"context_line":"        \"available\": {\"manage\": \"manageable\", \"active\": \"active\"},"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_f9c17e81","line":118,"updated":"2015-11-25 02:07:27.000000000","message":"so it is\n\u003cfrom-state\u003e: {\u003caction or verb\u003e: \u003cto-state\u003e} ?","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"cda59b1ed690bb9cba87339c5c3366b9998dc121","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    {"},{"line_number":117,"context_line":"      \"transitions\":{"},{"line_number":118,"context_line":"        \"enroll\": {\"manage\": \"manageable\"},"},{"line_number":119,"context_line":"        \"manageable\": {\"inspect\": \"manageable\","},{"line_number":120,"context_line":"                       \"provide\": \"available\"},"},{"line_number":121,"context_line":"        \"available\": {\"manage\": \"manageable\", \"active\": \"active\"},"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_e30a2cd2","line":118,"in_reply_to":"9a8ffd7b_f9c17e81","updated":"2015-11-25 06:26:45.000000000","message":"Yes, it is.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e97a2489a71c8025d671426ee841fab5ddc777aa","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \"available\": {\"manage\": \"manageable\", \"active\": \"active\"},"},{"line_number":122,"context_line":"        \"active\": {\"rebuild\": \"active\", \"delete\": \"available\","},{"line_number":123,"context_line":"        \"rescue\": \"rescue\"},"},{"line_number":124,"context_line":"        \"rescue\": {\"unrescue\": \"active\", \"delete\": \"available\"}"},{"line_number":125,"context_line":"      }"},{"line_number":126,"context_line":"    }"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_35612b3a","line":124,"updated":"2015-11-25 14:56:34.000000000","message":"I was thinking a bit more about this. You are only showing \u0027stable\u0027 states for the keys here. So you\u0027re interested in showing them which states they can initiate a transition, and you are showing them the target-provision-state (the stable state that the node can go to, not the intermediate states).\n\nAlso, what about the error states -- it might be useful to show the user where they can transition from those *FAILs.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"137a5cd33572972be59899e541dbe52c37464f4b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \"available\": {\"manage\": \"manageable\", \"active\": \"active\"},"},{"line_number":122,"context_line":"        \"active\": {\"rebuild\": \"active\", \"delete\": \"available\","},{"line_number":123,"context_line":"        \"rescue\": \"rescue\"},"},{"line_number":124,"context_line":"        \"rescue\": {\"unrescue\": \"active\", \"delete\": \"available\"}"},{"line_number":125,"context_line":"      }"},{"line_number":126,"context_line":"    }"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_88544bff","line":124,"in_reply_to":"9a8ffd7b_35612b3a","updated":"2015-11-26 11:40:51.000000000","message":"Great idea. I will add *FAILS and ERROR also.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"de293222ff480cc0e1e6911ff286a358bebe5e74","unresolved":false,"context_lines":[{"line_number":160,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":161,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":162,"context_line":"  This will be realized by providing \"transitions\" info by"},{"line_number":163,"context_line":"  GET /v1/nodes/transitions API."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Alternatives"},{"line_number":166,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_6afe9baf","line":163,"updated":"2015-11-26 21:52:56.000000000","message":"Hmm. I hadn\u0027t read this far before. I don\u0027t see why you need both /v1/nodes/../states and /v1/nodes to return the allowed_transitions.\n\nIf I understand this, you want to make one API call to get a list of nodes with their allowed transitions so you can generate a UI for them. I guess you aren\u0027t dealing with too many nodes if you can list them in a GUI :)\n\nI\u0027m not sure what others think about having support for \u0027synthetic\u0027 (generated? not sure what to call them) node fields like this allowed_transitions. I\u0027m worried about the overhead of generating this for every node any time we create an instance of a node.\n\nMaybe something we should discuss as a group.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"d6f33d3e8529a8d187f9e5be7ec5078907bf854d","unresolved":false,"context_lines":[{"line_number":160,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":161,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":162,"context_line":"  This will be realized by providing \"transitions\" info by"},{"line_number":163,"context_line":"  GET /v1/nodes/transitions API."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Alternatives"},{"line_number":166,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9a8ffd7b_6d51cb35","line":163,"in_reply_to":"9a8ffd7b_6afe9baf","updated":"2015-11-27 08:54:52.000000000","message":"you want to make one API call to get a list of nodes with their allowed transitions so you can generate a UI for them. -\u003e Yes, that\u0027s what I want to say exactly. \n\nYes, I\u0027d like to know how others think about it.","commit_id":"f141105f6312c47c922bed302498bdb4a3333405"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61460572802eb091f90db53624a64fc821119aeb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Problem description"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Currently, Ironic State Machine is implemented, but the only way which"},{"line_number":21,"context_line":"operators can know that which transition is executable for the node"},{"line_number":22,"context_line":"(For example, provisioning state of the node is \"available\", executable"},{"line_number":23,"context_line":"transitions is \"active\".)"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_1a1d7a73","line":20,"updated":"2015-12-03 19:32:50.000000000","message":"s/which/that/","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4777f2d46cfeaf58b3c706495b1023b18255890b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Problem description"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Currently, Ironic State Machine is implemented, but the only way which"},{"line_number":21,"context_line":"operators can know that which transition is executable for the node"},{"line_number":22,"context_line":"(For example, provisioning state of the node is \"available\", executable"},{"line_number":23,"context_line":"transitions is \"active\".)"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_2dd3503a","line":20,"in_reply_to":"7a740942_1a1d7a73","updated":"2015-12-04 03:05:34.000000000","message":"Done","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61460572802eb091f90db53624a64fc821119aeb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Currently, Ironic State Machine is implemented, but the only way which"},{"line_number":21,"context_line":"operators can know that which transition is executable for the node"},{"line_number":22,"context_line":"(For example, provisioning state of the node is \"available\", executable"},{"line_number":23,"context_line":"transitions is \"active\".)"},{"line_number":24,"context_line":"is the document: http://docs.openstack.org/developer/ironic/dev/states.html"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_9a096a34","line":21,"updated":"2015-12-03 19:32:50.000000000","message":"s/that//","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4777f2d46cfeaf58b3c706495b1023b18255890b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Currently, Ironic State Machine is implemented, but the only way which"},{"line_number":21,"context_line":"operators can know that which transition is executable for the node"},{"line_number":22,"context_line":"(For example, provisioning state of the node is \"available\", executable"},{"line_number":23,"context_line":"transitions is \"active\".)"},{"line_number":24,"context_line":"is the document: http://docs.openstack.org/developer/ironic/dev/states.html"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_0db0d4f3","line":21,"in_reply_to":"7a740942_9a096a34","updated":"2015-12-04 03:05:34.000000000","message":"Done","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61460572802eb091f90db53624a64fc821119aeb","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Currently, Ironic State Machine is implemented, but the only way which"},{"line_number":21,"context_line":"operators can know that which transition is executable for the node"},{"line_number":22,"context_line":"(For example, provisioning state of the node is \"available\", executable"},{"line_number":23,"context_line":"transitions is \"active\".)"},{"line_number":24,"context_line":"is the document: http://docs.openstack.org/developer/ironic/dev/states.html"},{"line_number":25,"context_line":"So that, if this document is left not updated, operators cannot operate"},{"line_number":26,"context_line":"nodes correctly unless reading source codes."}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_dc560f06","line":23,"updated":"2015-12-03 19:32:50.000000000","message":"Maybe put this (since it is a sentence) after this sentence. Ie, after line 24.","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4777f2d46cfeaf58b3c706495b1023b18255890b","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Currently, Ironic State Machine is implemented, but the only way which"},{"line_number":21,"context_line":"operators can know that which transition is executable for the node"},{"line_number":22,"context_line":"(For example, provisioning state of the node is \"available\", executable"},{"line_number":23,"context_line":"transitions is \"active\".)"},{"line_number":24,"context_line":"is the document: http://docs.openstack.org/developer/ironic/dev/states.html"},{"line_number":25,"context_line":"So that, if this document is left not updated, operators cannot operate"},{"line_number":26,"context_line":"nodes correctly unless reading source codes."}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_cdf5ec83","line":23,"in_reply_to":"7a740942_dc560f06","updated":"2015-12-04 03:05:34.000000000","message":"Done","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61460572802eb091f90db53624a64fc821119aeb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"operators can know that which transition is executable for the node"},{"line_number":22,"context_line":"(For example, provisioning state of the node is \"available\", executable"},{"line_number":23,"context_line":"transitions is \"active\".)"},{"line_number":24,"context_line":"is the document: http://docs.openstack.org/developer/ironic/dev/states.html"},{"line_number":25,"context_line":"So that, if this document is left not updated, operators cannot operate"},{"line_number":26,"context_line":"nodes correctly unless reading source codes."},{"line_number":27,"context_line":"When operators execute provision API/command with invalid transitions, they can"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_3c2b9384","line":24,"updated":"2015-12-03 19:32:50.000000000","message":"Maybe add a period after this. ie, s/html/html./","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4777f2d46cfeaf58b3c706495b1023b18255890b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"operators can know that which transition is executable for the node"},{"line_number":22,"context_line":"(For example, provisioning state of the node is \"available\", executable"},{"line_number":23,"context_line":"transitions is \"active\".)"},{"line_number":24,"context_line":"is the document: http://docs.openstack.org/developer/ironic/dev/states.html"},{"line_number":25,"context_line":"So that, if this document is left not updated, operators cannot operate"},{"line_number":26,"context_line":"nodes correctly unless reading source codes."},{"line_number":27,"context_line":"When operators execute provision API/command with invalid transitions, they can"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_ed0b087c","line":24,"in_reply_to":"7a740942_3c2b9384","updated":"2015-12-04 03:05:34.000000000","message":"Done","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61460572802eb091f90db53624a64fc821119aeb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"enroll\": {\"manage\": \"manageable\"},"},{"line_number":62,"context_line":"        \"inspectfail\": {\"manage\": \"manageable\"},"},{"line_number":63,"context_line":"        \"manageable\": {\"inspect\": \"manageable\","},{"line_number":64,"context_line":"                       \"provide\": \"available\"},"},{"line_number":65,"context_line":"      }"},{"line_number":66,"context_line":"    }"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_3f94e535","line":64,"updated":"2015-12-03 19:32:50.000000000","message":"It would be good to document what transitions this will return. And what the values are. Eg:\n\n\u003cfrom-state\u003e: { \u003ctransition1\u003e:\u003ctarget-state1\u003e, \u003ctransition2\u003e:\u003ctarget_state2\u003e, ...}\n\nWhich \u003cfrom-state\u003es will this return? All states, or only stable states, or stable states + error states, or states from which a transition can be initiated via API.\n\nI see \u0027cleaning\u0027 -- the user cannot initiate any transitions from there; that is used internally for manual cleaning.","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4777f2d46cfeaf58b3c706495b1023b18255890b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"enroll\": {\"manage\": \"manageable\"},"},{"line_number":62,"context_line":"        \"inspectfail\": {\"manage\": \"manageable\"},"},{"line_number":63,"context_line":"        \"manageable\": {\"inspect\": \"manageable\","},{"line_number":64,"context_line":"                       \"provide\": \"available\"},"},{"line_number":65,"context_line":"      }"},{"line_number":66,"context_line":"    }"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_5b87730f","line":64,"in_reply_to":"7a740942_3f94e535","updated":"2015-12-04 03:05:34.000000000","message":"I\u0027ve added more detail explanation, thanks.\n\nIt seems possible to do manage for the cleaning node. https://github.com/openstack/ironic/blob/master/ironic/common/states.py#L312","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4b72479c839ed4c0f9ecc8e278406b3a9f3fb872","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"enroll\": {\"manage\": \"manageable\"},"},{"line_number":62,"context_line":"        \"inspectfail\": {\"manage\": \"manageable\"},"},{"line_number":63,"context_line":"        \"manageable\": {\"inspect\": \"manageable\","},{"line_number":64,"context_line":"                       \"provide\": \"available\"},"},{"line_number":65,"context_line":"      }"},{"line_number":66,"context_line":"    }"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_cf7f5913","line":64,"in_reply_to":"7a740942_5b87730f","updated":"2015-12-08 23:51:14.000000000","message":"Yes, that is used internally. (Similar to \u0027done\u0027 can transition a node from CLEANING to AVAILABLE.) The user cannot do that. Although I just looked; if they tried, I think they\u0027d get a NodeLocked error which probably isn\u0027t what we want. I\u0027ll fix that.","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4890aebded2b2ac2a31eb4b7b7a58468f3eeb530","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"enroll\": {\"manage\": \"manageable\"},"},{"line_number":62,"context_line":"        \"inspectfail\": {\"manage\": \"manageable\"},"},{"line_number":63,"context_line":"        \"manageable\": {\"inspect\": \"manageable\","},{"line_number":64,"context_line":"                       \"provide\": \"available\"},"},{"line_number":65,"context_line":"      }"},{"line_number":66,"context_line":"    }"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_df3f7a23","line":64,"in_reply_to":"7a740942_cf7f5913","updated":"2015-12-11 07:42:41.000000000","message":"I see, thanks.","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61460572802eb091f90db53624a64fc821119aeb","unresolved":false,"context_lines":[{"line_number":121,"context_line":"---------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Add new API"},{"line_number":124,"context_line":"GET /v1/nodes/transitions ."},{"line_number":125,"context_line":"Please see \"Proposed change\"."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_9f02b93d","line":124,"updated":"2015-12-03 19:32:50.000000000","message":"I think it is \u0027GET /v1/node_transitions\u0027 ?","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4777f2d46cfeaf58b3c706495b1023b18255890b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"---------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Add new API"},{"line_number":124,"context_line":"GET /v1/nodes/transitions ."},{"line_number":125,"context_line":"Please see \"Proposed change\"."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_fb7c1f22","line":124,"in_reply_to":"7a740942_9f02b93d","updated":"2015-12-04 03:05:34.000000000","message":"Done. Nice catch, thanks","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61460572802eb091f90db53624a64fc821119aeb","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Client (CLI) impact"},{"line_number":128,"context_line":"-------------------"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Add new command executes API GET /v1/node_transitions ."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":" ironic node-transitions"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_ff5e5d75","line":130,"updated":"2015-12-03 19:32:50.000000000","message":"this is the CLI part (ie, python-ironicclient). So I think you will do something like \u0027ironic node-transitions\u0027?","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4777f2d46cfeaf58b3c706495b1023b18255890b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"Client (CLI) impact"},{"line_number":128,"context_line":"-------------------"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Add new command executes API GET /v1/node_transitions ."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":" ironic node-transitions"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_1bc80b55","line":130,"in_reply_to":"7a740942_ff5e5d75","updated":"2015-12-04 03:05:34.000000000","message":"Done","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61460572802eb091f90db53624a64fc821119aeb","unresolved":false,"context_lines":[{"line_number":210,"context_line":"Documentation Impact"},{"line_number":211,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Update API document adding a new API and adding a new field to existing API"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"References"},{"line_number":216,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_df34c14b","line":213,"updated":"2015-12-03 19:32:50.000000000","message":"you probably want to delete the \u0027and adding a new field ..\u0027 part","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"4777f2d46cfeaf58b3c706495b1023b18255890b","unresolved":false,"context_lines":[{"line_number":210,"context_line":"Documentation Impact"},{"line_number":211,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Update API document adding a new API and adding a new field to existing API"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"References"},{"line_number":216,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a740942_a6d8ba54","line":213,"in_reply_to":"7a740942_df34c14b","updated":"2015-12-04 03:05:34.000000000","message":"Done","commit_id":"949fd754575b040e6880bd7553c5beff5a4d0d2a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"32cb34c5e2cf45269121198d838c1fca39d7ff16","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  + transitions"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    - Type: dict(unicode: json)"},{"line_number":54,"context_line":"      The transitions infotmation which consists of"},{"line_number":55,"context_line":"      \u003cfrom-state\u003e: {"},{"line_number":56,"context_line":"      \u003ctransition1\u003e:\u003ctarget-state1\u003e,"},{"line_number":57,"context_line":"      \u003ctransition2\u003e:\u003ctarget_state2\u003e, ...}"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_83f050ca","line":54,"updated":"2015-12-08 23:50:27.000000000","message":"s/infotmation/information/","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7de35f7cfe2d48c1e146886eca94d621041426e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  + transitions"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    - Type: dict(unicode: json)"},{"line_number":54,"context_line":"      The transitions infotmation which consists of"},{"line_number":55,"context_line":"      \u003cfrom-state\u003e: {"},{"line_number":56,"context_line":"      \u003ctransition1\u003e:\u003ctarget-state1\u003e,"},{"line_number":57,"context_line":"      \u003ctransition2\u003e:\u003ctarget_state2\u003e, ...}"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_2db457f0","line":54,"in_reply_to":"7a740942_83f050ca","updated":"2015-12-11 07:42:48.000000000","message":"Done","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"32cb34c5e2cf45269121198d838c1fca39d7ff16","unresolved":false,"context_lines":[{"line_number":54,"context_line":"      The transitions infotmation which consists of"},{"line_number":55,"context_line":"      \u003cfrom-state\u003e: {"},{"line_number":56,"context_line":"      \u003ctransition1\u003e:\u003ctarget-state1\u003e,"},{"line_number":57,"context_line":"      \u003ctransition2\u003e:\u003ctarget_state2\u003e, ...}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"::"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_230e3c8c","line":57,"updated":"2015-12-08 23:50:27.000000000","message":"none of this shows up on the rendered page.","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7de35f7cfe2d48c1e146886eca94d621041426e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"      The transitions infotmation which consists of"},{"line_number":55,"context_line":"      \u003cfrom-state\u003e: {"},{"line_number":56,"context_line":"      \u003ctransition1\u003e:\u003ctarget-state1\u003e,"},{"line_number":57,"context_line":"      \u003ctransition2\u003e:\u003ctarget_state2\u003e, ...}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"::"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_4db763f5","line":57,"in_reply_to":"7a740942_230e3c8c","updated":"2015-12-11 07:42:48.000000000","message":"Done","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"32cb34c5e2cf45269121198d838c1fca39d7ff16","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Add new API"},{"line_number":136,"context_line":"GET /v1/node_transitions ."},{"line_number":137,"context_line":"Please see \"Proposed change\"."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Client (CLI) impact"},{"line_number":140,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_83761004","line":137,"updated":"2015-12-08 23:50:27.000000000","message":"Should mention that there will be a (micro)version bump.","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7de35f7cfe2d48c1e146886eca94d621041426e","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Add new API"},{"line_number":136,"context_line":"GET /v1/node_transitions ."},{"line_number":137,"context_line":"Please see \"Proposed change\"."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Client (CLI) impact"},{"line_number":140,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_cdc35356","line":137,"in_reply_to":"7a740942_83761004","updated":"2015-12-11 07:42:48.000000000","message":"Done","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"32cb34c5e2cf45269121198d838c1fca39d7ff16","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"  + ironic node-transitions"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    - --sort-key \u003cfield\u003e : Transition field that will be used for sorting."},{"line_number":147,"context_line":"      The default is \"from\"."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    - --sort-dir \u003cdirection\u003e : Sort direction: \"asc\" (the default) or \"asc\"."}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_8f1cf16a","line":146,"updated":"2015-12-08 23:50:27.000000000","message":"Nothing from here down shows up in the rendered page: http://docs-draft.openstack.org/22/224022/15/check/gate-ironic-specs-docs/471897e//doc/build/html/specs/approved/state-api.html","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7de35f7cfe2d48c1e146886eca94d621041426e","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"  + ironic node-transitions"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    - --sort-key \u003cfield\u003e : Transition field that will be used for sorting."},{"line_number":147,"context_line":"      The default is \"from\"."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    - --sort-dir \u003cdirection\u003e : Sort direction: \"asc\" (the default) or \"asc\"."}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_4d38c33d","line":146,"in_reply_to":"7a740942_8f1cf16a","updated":"2015-12-11 07:42:48.000000000","message":"Done","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"32cb34c5e2cf45269121198d838c1fca39d7ff16","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    - --sort-key \u003cfield\u003e : Transition field that will be used for sorting."},{"line_number":147,"context_line":"      The default is \"from\"."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    - --sort-dir \u003cdirection\u003e : Sort direction: \"asc\" (the default) or \"asc\"."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"::"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_af2e8d89","line":149,"updated":"2015-12-08 23:50:27.000000000","message":"s/or \"asc\"/or \"desc\"/","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7de35f7cfe2d48c1e146886eca94d621041426e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    - --sort-key \u003cfield\u003e : Transition field that will be used for sorting."},{"line_number":147,"context_line":"      The default is \"from\"."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    - --sort-dir \u003cdirection\u003e : Sort direction: \"asc\" (the default) or \"asc\"."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"::"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_2dabf78a","line":149,"in_reply_to":"7a740942_af2e8d89","updated":"2015-12-11 07:42:48.000000000","message":"Done","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"32cb34c5e2cf45269121198d838c1fca39d7ff16","unresolved":false,"context_lines":[{"line_number":151,"context_line":"::"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":" +-----------+----------+-----------+"},{"line_number":154,"context_line":" |from       |transition|target     |"},{"line_number":155,"context_line":" +-----------+----------+-----------+"},{"line_number":156,"context_line":" |ACTIVE     |rebuild   |ACTIVE     |"},{"line_number":157,"context_line":" |ACTIVE     |deleted   |AVAILABLE  |"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_2f5cdd7b","line":154,"updated":"2015-12-08 23:50:27.000000000","message":"I wonder if \u0027transition\u0027 is the right word. The transition is eg \u0027rebuild\u0027 causes the node to transition from \u0027active\u0027 to \u0027active\u0027. automaton refers to \u0027rebuild\u0027 as an \u0027event\u0027. We sort of refer to it as \u0027verb\u0027 in our code. With OpenStackClient, I think it fits under \u0027verb\u0027 there.","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"86bd39280a101029a4d8cd706b4a3453b5ffe3a7","unresolved":false,"context_lines":[{"line_number":151,"context_line":"::"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":" +-----------+----------+-----------+"},{"line_number":154,"context_line":" |from       |transition|target     |"},{"line_number":155,"context_line":" +-----------+----------+-----------+"},{"line_number":156,"context_line":" |ACTIVE     |rebuild   |ACTIVE     |"},{"line_number":157,"context_line":" |ACTIVE     |deleted   |AVAILABLE  |"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_7874679b","line":154,"in_reply_to":"7a740942_2f5cdd7b","updated":"2015-12-11 02:27:38.000000000","message":"Ya, +1 to \u0027event\u0027 or \u0027verb\u0027\n\nhttps://en.wikipedia.org/wiki/Finite-state_machine\n\n\u0027\u0027\u0027It is conceived as an abstract machine that can be in one of a finite number of states. The machine is in only one state at a time; the state it is in at any given time is called the current state. It can change from one state to another when initiated by a triggering event or condition; this is called a transition. A particular FSM is defined by a list of its states, and the triggering condition for each transition.\n\u0027\u0027\u0027\n\nStates are things that u can end up in, events/verb trigger a transition (in a way a transition is the outcome of that event/verb being reacted to) to end up in a new state. I\u0027d rather pick event/verb, probably preference to verb because that seems to be what ironic is using itself.","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7de35f7cfe2d48c1e146886eca94d621041426e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"::"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":" +-----------+----------+-----------+"},{"line_number":154,"context_line":" |from       |transition|target     |"},{"line_number":155,"context_line":" +-----------+----------+-----------+"},{"line_number":156,"context_line":" |ACTIVE     |rebuild   |ACTIVE     |"},{"line_number":157,"context_line":" |ACTIVE     |deleted   |AVAILABLE  |"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7a740942_ed95ef3f","line":154,"in_reply_to":"7a740942_7874679b","updated":"2015-12-11 07:42:48.000000000","message":"OK, I\u0027ll change to \"event\".","commit_id":"b495f3a21a0a4c6c02bcf21107781b3625714242"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ebdf7fb970fe3e25b988e670bd5c0476b0d6c7d0","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/state-api"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes adding new API:"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"3a7e1126_c5829252","line":11,"updated":"2015-12-17 10:59:48.000000000","message":"Please use RFE bug 1526761 instead of blueprint link here.","commit_id":"f56692f446660870bfa73d4a86e95647686054db"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"25063882830b9fc2628aad695eb47e45776a8fd7","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/ironic/+spec/state-api"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes adding new API:"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"fa69d971_9bcf4d55","line":11,"in_reply_to":"3a7e1126_c5829252","updated":"2016-01-07 04:50:48.000000000","message":"Done","commit_id":"f56692f446660870bfa73d4a86e95647686054db"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fdad0d6a93ced53d46c8661918a6289d6d162802","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Add new API:"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"GET /v1/node_transitions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5a710552_b6480e89","line":45,"updated":"2015-12-14 18:37:06.000000000","message":"I suspect we want to allow \u0026sort_dir\u0026sort_id, since your CLI below allows it.","commit_id":"f56692f446660870bfa73d4a86e95647686054db"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"25063882830b9fc2628aad695eb47e45776a8fd7","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Add new API:"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"GET /v1/node_transitions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"fa69d971_9b0aed24","line":45,"in_reply_to":"5a710552_b6480e89","updated":"2016-01-07 04:50:48.000000000","message":"Done","commit_id":"f56692f446660870bfa73d4a86e95647686054db"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fdad0d6a93ced53d46c8661918a6289d6d162802","unresolved":false,"context_lines":[{"line_number":221,"context_line":"Client (CLI) impact"},{"line_number":222,"context_line":"-------------------"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Add new command executes API GET /v1/node_transitions ."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"  + ironic node-transitions"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5a710552_e1fece04","line":224,"updated":"2015-12-14 18:37:06.000000000","message":"s/executes/that executes/","commit_id":"f56692f446660870bfa73d4a86e95647686054db"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"25063882830b9fc2628aad695eb47e45776a8fd7","unresolved":false,"context_lines":[{"line_number":221,"context_line":"Client (CLI) impact"},{"line_number":222,"context_line":"-------------------"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"Add new command executes API GET /v1/node_transitions ."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"  + ironic node-transitions"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"fa69d971_db362550","line":224,"in_reply_to":"5a710552_e1fece04","updated":"2016-01-07 04:50:48.000000000","message":"Done","commit_id":"f56692f446660870bfa73d4a86e95647686054db"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fdad0d6a93ced53d46c8661918a6289d6d162802","unresolved":false,"context_lines":[{"line_number":241,"context_line":" |AVAILABLE  |manage    |MANAGEABLE |"},{"line_number":242,"context_line":" |AVAILABLE  |active    |ACTIVE     |"},{"line_number":243,"context_line":" |CLEANFAIL  |manage    |MANAGEABLE |"},{"line_number":244,"context_line":" |CLEANING   |manage    |MANAGEABLE |"},{"line_number":245,"context_line":" |CLEANWAIT  |abort     |CLEANFAIL  |"},{"line_number":246,"context_line":" |DELETING   |clean     |AVAILABLE  |"},{"line_number":247,"context_line":" |DEPLOYFAIL |rebuild   |ACTIVE     |"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5a710552_e1256eae","line":244,"updated":"2015-12-14 18:37:06.000000000","message":"not this.","commit_id":"f56692f446660870bfa73d4a86e95647686054db"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"25063882830b9fc2628aad695eb47e45776a8fd7","unresolved":false,"context_lines":[{"line_number":241,"context_line":" |AVAILABLE  |manage    |MANAGEABLE |"},{"line_number":242,"context_line":" |AVAILABLE  |active    |ACTIVE     |"},{"line_number":243,"context_line":" |CLEANFAIL  |manage    |MANAGEABLE |"},{"line_number":244,"context_line":" |CLEANING   |manage    |MANAGEABLE |"},{"line_number":245,"context_line":" |CLEANWAIT  |abort     |CLEANFAIL  |"},{"line_number":246,"context_line":" |DELETING   |clean     |AVAILABLE  |"},{"line_number":247,"context_line":" |DEPLOYFAIL |rebuild   |ACTIVE     |"}],"source_content_type":"text/x-rst","patch_set":18,"id":"fa69d971_fb1449a0","line":244,"in_reply_to":"5a710552_e1256eae","updated":"2016-01-07 04:50:48.000000000","message":"Done","commit_id":"f56692f446660870bfa73d4a86e95647686054db"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"5332c852a614d5b264d92d95da69d212a6b1e97d","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_10c84f21","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"updated":"2016-01-11 19:46:47.000000000","message":"There are multiple different state machines, tightly connected, that manage maintenance mode, power state, and enrollment state. I\u0027d like to know how those interact?","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"058a2210c80cc752a784333323a0f00e4d119e78","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_7cf3330b","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"in_reply_to":"da6ed579_031d2273","updated":"2016-01-12 17:18:50.000000000","message":"Josh is right. We only use a state machine for the provision states. Or perhaps I should word it as \u0027ironic only has an explicit state machine for provision states\u0027. It is a fair question to ask what the interactions/connections are between those three though. \n\nBut is that outside the scope of this spec? Should this spec be explicit and be \u0027Add a provision state transitions API\u0027?","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f5b90bd9e39a86ac0650109abbe20caec23091c8","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_077500f8","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"in_reply_to":"da6ed579_07742033","updated":"2016-01-12 17:39:55.000000000","message":"Sure, doesn\u0027t seem impossible to solve though.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_44b75bd8","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"in_reply_to":"da6ed579_077500f8","updated":"2016-01-13 07:10:55.000000000","message":"Thank you for interesting question. The original idea is that I want to know \"what I can/can\u0027t to for this node!?\".\n\nWhat do you imagine output of GET /v1/node_transitions?machine\u003dmaintenance or GET /v1/node_transitions?machine\u003dpower ? (If I misunderstand, sorry, ) it is like {\"from_state\":\"off\", \"target_state\":\"on\", \"event\":\"on\"}, I think it doesn\u0027t make sense so much, because power/maintenance has just 2 states. on/off and true/false. WDYT?\n\nThen I concerned again more deeply. You know, provision/power/maintenance mode states are associating complexly. For example, we cannot change power state during CLEANWAIT/CLEANING. And also, we cannot deploy node if it is in maintenance mode. I cannot know what should I do for the node in such case until reading codes.\n\nBut, I think providing all of such kind of information by API makes people confused. These detail information should be provided in document.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"8539bfdd7e2fcf71021d77ccad3f784bad15ed03","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_c44c8672","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"in_reply_to":"da6ed579_44b75bd8","updated":"2016-01-13 17:02:49.000000000","message":"Well one could also say that this new API should just be provided in a document to (which http://docs.openstack.org/developer/ironic/dev/states.html is), there is a fine line... Anyways, let\u0027s start with this and see how it is received and see how it all ends up.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"bdae0818de896d622640857e0ea73a4c6e3c8290","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_e7beacfe","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"in_reply_to":"da6ed579_7cf3330b","updated":"2016-01-12 17:32:35.000000000","message":"Thanks for verifying what I thought ruby. It\u0027d be an interesting question on how to interconnect all the different states in explicit state machines (likely requires some clever thinking and coding and refactoring) although it does seem outside the scope of this spec... (although this spec seems like it shouldn\u0027t restrict that future spec).\n\nMaybe to accomodate that the API is.\n\n   GET /v1/node_transitions?machine\u003dprovision\n\nSo that later it can add on.\n\n   GET /v1/node_transitions?machine\u003dmaintenance \n\n(or something like that)\n\nThat way when/if new machines get added they can also be output.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"548f4ce101456a137fbc9a70c11c76649c9545f4","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_07742033","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"in_reply_to":"da6ed579_e71a2c17","updated":"2016-01-12 17:36:14.000000000","message":"I think ironic would have the same problems with taskflow as inspector (e.g. having external transitions)","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"54961a9731ef6572b5e51e843d550d7d5018c04c","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_e71a2c17","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"in_reply_to":"da6ed579_e7beacfe","updated":"2016-01-12 17:34:26.000000000","message":"Just a thought but the taskflow workflow(s) (that is somewhat like a machine) is introspectable, not saying ironic should refactor itself to use taskflow workflow\u0027s all over, but just saying if it did (in some future world), then well it could easily output those workflows (and transitions and all) pretty much out of the box ;)","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"9eb3f2e0abc3b7d0215f81f8bf95b0c45139480a","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Add new transitions API"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_031d2273","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":19},"in_reply_to":"fa69d971_10c84f21","updated":"2016-01-12 01:46:21.000000000","message":"I didn\u0027t think some of these were explicit state-machines (and therefore not introspectable/dumpable in this manner); but someone closer to the ironic world may know the answer to this.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"03e1940908b8de9b0185f9bb9d71206eebbe97ef","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes adding new API:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":" GET /v1/node_transitions"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_b6a32d00","line":13,"updated":"2016-01-07 15:41:29.000000000","message":"nit, it isn\u0027t a blueprint anymore. s/blueprint/specification/ ?","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/1526761"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This blueprint proposes adding new API:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":" GET /v1/node_transitions"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_64ba9fc2","line":13,"in_reply_to":"fa69d971_b6a32d00","updated":"2016-01-13 07:10:55.000000000","message":"Done","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"5332c852a614d5b264d92d95da69d212a6b1e97d","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Add new API:"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"GET /v1/node_transitions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_90975f8f","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":24},"updated":"2016-01-11 19:46:47.000000000","message":"If transitions is the way this resource is going to be expressed, we should ensure that both user - and service - transitions are represented and appropriately flagged. Omitting one or the other prevents a client from understanding how nodes in transitional states will progress.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"fcc3cc73afb7692196b7ce154e37d30b3855c126","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Add new API:"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"GET /v1/node_transitions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba63e191_ce20704c","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":24},"in_reply_to":"da6ed579_7002bdb5","updated":"2016-01-19 11:33:04.000000000","message":"OK, I understand what you say. Exactly, I target user-permitted actions. Then, I\u0027m not sure whether we need non-user actions including \"done\" or \"wait\" or something like these. If you and some others need it or you can imagine use cases, I can implement it and it seems not so difficult :)","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Add new API:"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"GET /v1/node_transitions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_ffa4d9b9","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":24},"in_reply_to":"da6ed579_991159af","updated":"2016-01-13 07:10:55.000000000","message":"\"service\" means all of events which will be passed to task.process_event, so that fail/error/clean/resume/done/wait/rebuild/deploy/done ... right? My idea is API provides information which helps \"which operation(in case of CLI, active/deleted/rebuild/inspect/provide/manage/abort) can user do  for the node\". So that, this API provides transitions that users can initiate.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"8e8aebf77fb84d3dfcfdaafc783289aa86c127f1","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Add new API:"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"GET /v1/node_transitions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_7002bdb5","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":24},"in_reply_to":"da6ed579_ffa4d9b9","updated":"2016-01-15 14:42:35.000000000","message":"Ok, so you\u0027re saying that this particular spec is constrained specifically to user-permitted actions. My response is \"It should also provide information on non-user actions\".","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"058a2210c80cc752a784333323a0f00e4d119e78","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Add new API:"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"GET /v1/node_transitions"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_991159af","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":24},"in_reply_to":"fa69d971_90975f8f","updated":"2016-01-12 17:18:50.000000000","message":"That was a question I had in some earlier revision; whether this API was to get node transitions that a user/API could initiate, or whether it was to get all node transitions, even internal ones. You want it all, right? It can be done by adding a Boolean parameter to this API. What would the default be, all or user-only?","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"5332c852a614d5b264d92d95da69d212a6b1e97d","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Parameters:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  + from_state(unicode): Starting state."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_507487fc","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":13},"updated":"2016-01-11 19:46:47.000000000","message":"It _might_... and I say this very cautiously ... be nice to ask the question: \"For this node, what actions can I perform\".","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Parameters:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  + from_state(unicode): Starting state."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_7f78e92b","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":13},"in_reply_to":"da6ed579_39d2ad01","updated":"2016-01-13 07:10:55.000000000","message":"Yes, that is what I want to do. I believe \"I\" means users.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"8e8aebf77fb84d3dfcfdaafc783289aa86c127f1","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Parameters:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  + from_state(unicode): Starting state."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_70f07dc9","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":13},"in_reply_to":"da6ed579_7f78e92b","updated":"2016-01-15 14:42:35.000000000","message":"I was specifically pondering if it\u0027s useful to have a GET /node/NODE_ID/transitions resource. I get that the overall listing of available transitions is nice, but it might be convenient to only ask for transitions relevant to a particular node. This could also return things like power state, maintenance, etc.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"058a2210c80cc752a784333323a0f00e4d119e78","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Parameters:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  + from_state(unicode): Starting state."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_39d2ad01","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":13},"in_reply_to":"fa69d971_507487fc","updated":"2016-01-12 17:18:50.000000000","message":"I think that\u0027s what this spec is addressing but it depends on what you mean by \u0027I\u0027. If that\u0027s the user, then I believe that is the information that Yuiko wants to get from this new API.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"03e1940908b8de9b0185f9bb9d71206eebbe97ef","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  + event(unicode): Event that causes from_state to transition to target_state."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"  + target_state(unicode): Ending state."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"  + sort_key(unicode): Transition field that will be used for sorting."},{"line_number":58,"context_line":"    The default is \"from_state\"."}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_1686b965","line":55,"updated":"2016-01-07 15:41:29.000000000","message":"I don\u0027t think you want the above as parameters, or do you? If you do, are they to be used to filter the list?","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"fcc3cc73afb7692196b7ce154e37d30b3855c126","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  + event(unicode): Event that causes from_state to transition to target_state."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"  + target_state(unicode): Ending state."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"  + sort_key(unicode): Transition field that will be used for sorting."},{"line_number":58,"context_line":"    The default is \"from_state\"."}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba63e191_4ebc806c","line":55,"in_reply_to":"da6ed579_d0cfe953","updated":"2016-01-19 11:33:04.000000000","message":"IMO It makes sense for GUI as well as CLI. It\u0027s useful to implement GUI shows all of transitions and can be filtered by from_state/event/target_state, which will be used as a help page.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"8e8aebf77fb84d3dfcfdaafc783289aa86c127f1","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  + event(unicode): Event that causes from_state to transition to target_state."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"  + target_state(unicode): Ending state."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"  + sort_key(unicode): Transition field that will be used for sorting."},{"line_number":58,"context_line":"    The default is \"from_state\"."}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_d0cfe953","line":55,"in_reply_to":"da6ed579_df60f537","updated":"2016-01-15 14:42:35.000000000","message":"If it\u0027s easy to implement, I\u0027m not worried about including this, however from a GUI perspective I don\u0027t really see a reason to expose this. To humans, the thing that matters is the name of the action.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"5332c852a614d5b264d92d95da69d212a6b1e97d","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  + event(unicode): Event that causes from_state to transition to target_state."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"  + target_state(unicode): Ending state."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"  + sort_key(unicode): Transition field that will be used for sorting."},{"line_number":58,"context_line":"    The default is \"from_state\"."}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_d07f17dd","line":55,"in_reply_to":"fa69d971_1686b965","updated":"2016-01-11 19:46:47.000000000","message":"What\u0027s the use case here? I don\u0027t see a reason for me to ever ask the API \"How do I get to this state\".","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  + event(unicode): Event that causes from_state to transition to target_state."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"  + target_state(unicode): Ending state."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"  + sort_key(unicode): Transition field that will be used for sorting."},{"line_number":58,"context_line":"    The default is \"from_state\"."}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_df60f537","line":55,"in_reply_to":"fa69d971_d07f17dd","updated":"2016-01-13 07:10:55.000000000","message":"This will be used as a filter. Please see L249, there is a transitions-list table. When using \"target_state\" filter, transitions which has target_state that provided as filter will return. So that, when set active as target_state filter, just L252, 255, 259, 261, 263 will be shown. This filter is useful when you want to make the node status specified one.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"5332c852a614d5b264d92d95da69d212a6b1e97d","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        {"},{"line_number":79,"context_line":"          \"from\": \"active\","},{"line_number":80,"context_line":"          \"event\": \"rebuild\","},{"line_number":81,"context_line":"          \"target\": \"active\","},{"line_number":82,"context_line":"        }"},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"          \"from\": \"active\","}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_300b13d8","line":81,"range":{"start_line":81,"start_character":11,"end_line":81,"end_character":17},"updated":"2016-01-11 19:46:47.000000000","message":"All states should be represented here, even those that do not have user actions that can be taken.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"8e8aebf77fb84d3dfcfdaafc783289aa86c127f1","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        {"},{"line_number":79,"context_line":"          \"from\": \"active\","},{"line_number":80,"context_line":"          \"event\": \"rebuild\","},{"line_number":81,"context_line":"          \"target\": \"active\","},{"line_number":82,"context_line":"        }"},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"          \"from\": \"active\","}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_10002165","line":81,"range":{"start_line":81,"start_character":11,"end_line":81,"end_character":17},"in_reply_to":"da6ed579_1f4f6dbe","updated":"2016-01-15 14:42:35.000000000","message":"I disagree.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        {"},{"line_number":79,"context_line":"          \"from\": \"active\","},{"line_number":80,"context_line":"          \"event\": \"rebuild\","},{"line_number":81,"context_line":"          \"target\": \"active\","},{"line_number":82,"context_line":"        }"},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"          \"from\": \"active\","}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_1f4f6dbe","line":81,"range":{"start_line":81,"start_character":11,"end_line":81,"end_character":17},"in_reply_to":"fa69d971_300b13d8","updated":"2016-01-13 07:10:55.000000000","message":"I don\u0027t think so, as I explained the original idea.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"03e1940908b8de9b0185f9bb9d71206eebbe97ef","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        {"},{"line_number":159,"context_line":"          \"from\": \"manageable\","},{"line_number":160,"context_line":"          \"event\": \"provide\","},{"line_number":161,"context_line":"          \"target\": \"available\""},{"line_number":162,"context_line":"        }"},{"line_number":163,"context_line":"      ]"},{"line_number":164,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_166239ae","line":161,"updated":"2016-01-07 15:41:29.000000000","message":"Should these all be from_state and target_state?","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        {"},{"line_number":159,"context_line":"          \"from\": \"manageable\","},{"line_number":160,"context_line":"          \"event\": \"provide\","},{"line_number":161,"context_line":"          \"target\": \"available\""},{"line_number":162,"context_line":"        }"},{"line_number":163,"context_line":"      ]"},{"line_number":164,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_9fd11dd0","line":161,"in_reply_to":"fa69d971_166239ae","updated":"2016-01-13 07:10:55.000000000","message":"Thanks, you\u0027re right. I will fix them.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"03e1940908b8de9b0185f9bb9d71206eebbe97ef","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    - event: Event that causes ``from`` to transition to ``target``."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    - target: Ending state."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Use case:"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_5668b187","line":174,"updated":"2016-01-07 15:41:29.000000000","message":"Should these all be from_state and target_state?","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    - event: Event that causes ``from`` to transition to ``target``."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    - target: Ending state."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Use case:"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_3fe1119b","line":174,"in_reply_to":"fa69d971_5668b187","updated":"2016-01-13 07:10:55.000000000","message":"Done","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"5332c852a614d5b264d92d95da69d212a6b1e97d","unresolved":false,"context_lines":[{"line_number":191,"context_line":"       |Delete                    |"},{"line_number":192,"context_line":"       |Provisioning              |"},{"line_number":193,"context_line":"       |Clean up                  |"},{"line_number":194,"context_line":"       +--------------------------+"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* There is a node-list table, and operators can select an operation from"},{"line_number":197,"context_line":"  pulldown menu(or something like it), and in this time,"}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_70b8ab11","line":194,"updated":"2016-01-11 19:46:47.000000000","message":"The \"Please choose an operation\" text should permit the rendering of a default action, in cases where 85% or more of user actions will use that action. This will require either A) querying the allowable actions per row in the rendered table, or B) Building the state machine in memory during application initialization. The latter is STRONGLY preferred.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":191,"context_line":"       |Delete                    |"},{"line_number":192,"context_line":"       |Provisioning              |"},{"line_number":193,"context_line":"       |Clean up                  |"},{"line_number":194,"context_line":"       +--------------------------+"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* There is a node-list table, and operators can select an operation from"},{"line_number":197,"context_line":"  pulldown menu(or something like it), and in this time,"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_ff98591d","line":194,"in_reply_to":"fa69d971_70b8ab11","updated":"2016-01-13 07:10:55.000000000","message":"It\u0027s just an example and depends on each service, please don\u0027t mind seriously.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"5332c852a614d5b264d92d95da69d212a6b1e97d","unresolved":false,"context_lines":[{"line_number":202,"context_line":"  which the operator selected will be done automatically."},{"line_number":203,"context_line":"  (This is just an example and it depends on each service provider\u0027s policy,"},{"line_number":204,"context_line":"  so that API doesn\u0027t need to guarantee that the node will actually go through"},{"line_number":205,"context_line":"  the required steps without failing.)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":208,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_30055310","line":205,"range":{"start_line":205,"start_character":6,"end_line":205,"end_character":14},"updated":"2016-01-11 19:46:47.000000000","message":"A user interface is likely to want to perform batch operations on multiple nodes.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":202,"context_line":"  which the operator selected will be done automatically."},{"line_number":203,"context_line":"  (This is just an example and it depends on each service provider\u0027s policy,"},{"line_number":204,"context_line":"  so that API doesn\u0027t need to guarantee that the node will actually go through"},{"line_number":205,"context_line":"  the required steps without failing.)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":208,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_82c6a247","line":205,"range":{"start_line":205,"start_character":6,"end_line":205,"end_character":14},"in_reply_to":"fa69d971_30055310","updated":"2016-01-13 07:10:55.000000000","message":"ditto","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ffed0201edbb7d138433464153ca58708e57ecb4","unresolved":false,"context_lines":[{"line_number":231,"context_line":"Add new API GET /v1/node_transitions and bump API microversion."},{"line_number":232,"context_line":"Please see \"Proposed change\"."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Client (CLI) impact"},{"line_number":235,"context_line":"-------------------"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Add new command that executes API GET /v1/node_transitions ."}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_78c4c35e","line":234,"updated":"2016-01-07 16:02:24.000000000","message":"I just remembered that we recently approved the spec for OpenStack client: http://specs.openstack.org/openstack/ironic-specs/specs/approved/ironicclient-osc-plugin.html\n\nIt would be good to also mention here, the openstackclient CLI.\n\nI *think* it is either: \u0027openstack baremetal node transitions show\u0027 or \u0027openstack baremetal node show transitions\u0027. Maybe someone else knows...","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":231,"context_line":"Add new API GET /v1/node_transitions and bump API microversion."},{"line_number":232,"context_line":"Please see \"Proposed change\"."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Client (CLI) impact"},{"line_number":235,"context_line":"-------------------"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"Add new command that executes API GET /v1/node_transitions ."}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_02e152d0","line":234,"in_reply_to":"fa69d971_78c4c35e","updated":"2016-01-13 07:10:55.000000000","message":"Thank you for your advice, I will add it.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"5332c852a614d5b264d92d95da69d212a6b1e97d","unresolved":false,"context_lines":[{"line_number":268,"context_line":" |MANAGEABLE |inspect   |MANAGEABLE  |"},{"line_number":269,"context_line":" |MANAGEABLE |provide   |AVAILABLE   |"},{"line_number":270,"context_line":" |MANAGEABLE |clean     |AVAILABLE   |"},{"line_number":271,"context_line":" +-----------+----------+------------+"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"RPC API impact"},{"line_number":274,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"fa69d971_10960ff0","line":271,"updated":"2016-01-11 19:46:47.000000000","message":"This should include volatile states as well, and some acknowledgement of how it relates to power states and maintenance states.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"8e8aebf77fb84d3dfcfdaafc783289aa86c127f1","unresolved":false,"context_lines":[{"line_number":268,"context_line":" |MANAGEABLE |inspect   |MANAGEABLE  |"},{"line_number":269,"context_line":" |MANAGEABLE |provide   |AVAILABLE   |"},{"line_number":270,"context_line":" |MANAGEABLE |clean     |AVAILABLE   |"},{"line_number":271,"context_line":" +-----------+----------+------------+"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"RPC API impact"},{"line_number":274,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_f058ed8b","line":271,"in_reply_to":"da6ed579_421c2ac1","updated":"2016-01-15 14:42:35.000000000","message":"I disagree. As an individual who is building a GUI for ironic, if I am showing the details of a specific node, I would like to know whether I can push the power button or set it into maintenance mode.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"058a2210c80cc752a784333323a0f00e4d119e78","unresolved":false,"context_lines":[{"line_number":268,"context_line":" |MANAGEABLE |inspect   |MANAGEABLE  |"},{"line_number":269,"context_line":" |MANAGEABLE |provide   |AVAILABLE   |"},{"line_number":270,"context_line":" |MANAGEABLE |clean     |AVAILABLE   |"},{"line_number":271,"context_line":" +-----------+----------+------------+"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"RPC API impact"},{"line_number":274,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_fc1de366","line":271,"in_reply_to":"da6ed579_d3a6d2c0","updated":"2016-01-12 17:18:50.000000000","message":"Provision states are separate from power states and maintenance mode. The provision states/transitions are available via the FSM, but there is nothing that can give relationship between the provision states and power states and maintenance. You\u0027d have to look at the code to see what happens during a transition.\n\nMichael, would you provide an example of what the output might be from the API, that shows \u0027acknowledgement of how it relates to power states and maintenance states.\u0027","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"fcc3cc73afb7692196b7ce154e37d30b3855c126","unresolved":false,"context_lines":[{"line_number":268,"context_line":" |MANAGEABLE |inspect   |MANAGEABLE  |"},{"line_number":269,"context_line":" |MANAGEABLE |provide   |AVAILABLE   |"},{"line_number":270,"context_line":" |MANAGEABLE |clean     |AVAILABLE   |"},{"line_number":271,"context_line":" +-----------+----------+------------+"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"RPC API impact"},{"line_number":274,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ba63e191_3525d3aa","line":271,"in_reply_to":"da6ed579_f058ed8b","updated":"2016-01-19 11:33:04.000000000","message":"Ah, for example, \"power off\" button is disabled, right? Hmm, it sounds useful...I\u0027ve never imagine such a thing. So that...as you say, we need \"the details of a specific node\". Such information would be provided like as is_power_status_change_enabled(provision_state) or is_set_maintainance_mode_enabled(provision_state), not as above table...","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0ff84eaf8f386675640554d9c8a95bca3df32949","unresolved":false,"context_lines":[{"line_number":268,"context_line":" |MANAGEABLE |inspect   |MANAGEABLE  |"},{"line_number":269,"context_line":" |MANAGEABLE |provide   |AVAILABLE   |"},{"line_number":270,"context_line":" |MANAGEABLE |clean     |AVAILABLE   |"},{"line_number":271,"context_line":" +-----------+----------+------------+"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"RPC API impact"},{"line_number":274,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_421c2ac1","line":271,"in_reply_to":"da6ed579_fc1de366","updated":"2016-01-13 07:10:55.000000000","message":"As I wrote above, adding power states and maintenance states makes users confused and I think these information should be written in doc.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":9717,"name":"Michael Krotscheck","email":"krotscheck@gmail.com","username":"krotscheck"},"change_message_id":"dd38abd304700c34bd3af390cd2a6e21d53ad14c","unresolved":false,"context_lines":[{"line_number":268,"context_line":" |MANAGEABLE |inspect   |MANAGEABLE  |"},{"line_number":269,"context_line":" |MANAGEABLE |provide   |AVAILABLE   |"},{"line_number":270,"context_line":" |MANAGEABLE |clean     |AVAILABLE   |"},{"line_number":271,"context_line":" +-----------+----------+------------+"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"RPC API impact"},{"line_number":274,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_d3a6d2c0","line":271,"in_reply_to":"da6ed579_fe30a5a0","updated":"2016-01-12 16:34:36.000000000","message":"The state machine is declared here. http://docs.openstack.org/developer/ironic/_modules/ironic/common/states.html","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"3f8ff711c9d06b7800f926793fd948f4185e8d13","unresolved":false,"context_lines":[{"line_number":268,"context_line":" |MANAGEABLE |inspect   |MANAGEABLE  |"},{"line_number":269,"context_line":" |MANAGEABLE |provide   |AVAILABLE   |"},{"line_number":270,"context_line":" |MANAGEABLE |clean     |AVAILABLE   |"},{"line_number":271,"context_line":" +-----------+----------+------------+"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"RPC API impact"},{"line_number":274,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"da6ed579_fe30a5a0","line":271,"in_reply_to":"fa69d971_10960ff0","updated":"2016-01-12 02:00:14.000000000","message":"It\u0027d be interesting to see how that could be done, because I thought (but may not be right) that the relationship was in code, not in a explicitly defined format/state-machine relationships.","commit_id":"a2f5c313fb376e95c1c3fe13c99256eac8bed665"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"52c64dfbd29de86791557732636bd92ace6704f7","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Parameters:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  + from_state(unicode): Starting state."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  + event(unicode): Event that causes from_state to transition to target_state."},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"da6ed579_9bea720e","line":51,"updated":"2016-01-13 16:03:24.000000000","message":"IDK if it was suggested before and if it makes much sense, but what about adding a node parameter, that will look at current provision_state and list transitions available from this state?","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7ad32f4c5af5e27182a340ccb21b51919cf2646","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Parameters:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  + from_state(unicode): Starting state."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  + event(unicode): Event that causes from_state to transition to target_state."},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba63e191_468d5130","line":51,"in_reply_to":"da6ed579_9bea720e","updated":"2016-01-19 11:33:15.000000000","message":"I was given similar suggestion previously and I rejected it because in that time, I was planning to implement GET /v1/nodes/(node_ident)/states but it was rejected because that URI violates REST principles...tldr, anyway, I agree with your idea. It would be useful for us. WDYT folks?","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8736f2390db89891c3084ba94050bd8e07eb7e5","unresolved":false,"context_lines":[{"line_number":173,"context_line":"      ``target_state``."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    - target_state: Ending state."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Use case:"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"* Operators can change node state from UI (not only horizon, but also any"}],"source_content_type":"text/x-rst","patch_set":20,"id":"da6ed579_1268dbb9","line":176,"updated":"2016-01-18 10:29:20.000000000","message":"What if the transitions between \u0027from_state\u0027 and \u0027target_state\u0027 can not be done via \u0027event\u0027? Should an exception be raised here?\n\nI might be wrong, but if there is an exception should be raised, adding here is reasonable to me.","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"eb63e45c5d9c14717d0ec9b29ad07f65b5a8f8a0","unresolved":false,"context_lines":[{"line_number":173,"context_line":"      ``target_state``."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    - target_state: Ending state."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Use case:"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"* Operators can change node state from UI (not only horizon, but also any"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9a68dd71_ab7eac67","line":176,"in_reply_to":"9a68dd71_0877be02","updated":"2016-01-25 06:45:53.000000000","message":"Thanks for your reply, Yuiko. I am cool with that. But a little nit:\n\nIf these arguments can not be used at the same, there should be some clues in the comment of these optional arguments to tell the user how to make a mix. :)","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c4139462e17edca6bc63bdf7a18e81e241d16d67","unresolved":false,"context_lines":[{"line_number":173,"context_line":"      ``target_state``."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    - target_state: Ending state."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Use case:"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"* Operators can change node state from UI (not only horizon, but also any"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9a68dd71_3e2af8db","line":176,"in_reply_to":"9a68dd71_ab7eac67","updated":"2016-01-25 07:44:18.000000000","message":"Ok, will fix.","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"583f6b9a5805ff2f3fd23ce98fd86e1a709951eb","unresolved":false,"context_lines":[{"line_number":173,"context_line":"      ``target_state``."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    - target_state: Ending state."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Use case:"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"* Operators can change node state from UI (not only horizon, but also any"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9a68dd71_0877be02","line":176,"in_reply_to":"ba63e191_33f29dd3","updated":"2016-01-25 06:16:39.000000000","message":"Thanks, I understand what you say. Yes, maybe it would be useful/helpful, but, yeah, I feel it\u0027s a little bit too much. I\u0027d like to implement without your idea, then, if people hope your idea when they\u0027ve tried to use this API, I will implement later. WDYT?","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"26d34a0ee58c190cfb80db03a878d66540d4361a","unresolved":false,"context_lines":[{"line_number":173,"context_line":"      ``target_state``."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    - target_state: Ending state."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Use case:"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"* Operators can change node state from UI (not only horizon, but also any"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba63e191_33f29dd3","line":176,"in_reply_to":"ba63e191_c68621b9","updated":"2016-01-20 02:49:23.000000000","message":"I have the concern about this usage when specifying the \u0027from_state\u0027, \u0027target_state\u0027 and \u0027event\u0027 at the same time, but the state can not be transited by the \u0027event\u0027.\n\nFor example, from \u0027ACTIVE\u0027 to \u0027ACTIVE\u0027 by \u0027deleted\u0027. TMU, the output with these arguments will return nothing.\n\nAn exception raised here might be not suitable, but I think some log might be helpful to tell the user what is the correct operation, like the hint when listing nodes with an invalid sort key. For transitions, some hints like:\n\n\"ACTIVE can not be transited to ACTIVE by deleted. ACTIVE can be transited to ACTIVE by rebuild, or to AVAILABLE by deleted.\"\n\nMaybe too much, just a personal opinion. :)","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7ad32f4c5af5e27182a340ccb21b51919cf2646","unresolved":false,"context_lines":[{"line_number":173,"context_line":"      ``target_state``."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    - target_state: Ending state."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Use case:"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"* Operators can change node state from UI (not only horizon, but also any"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba63e191_c68621b9","line":176,"in_reply_to":"da6ed579_1268dbb9","updated":"2016-01-19 11:33:15.000000000","message":"No, this API just provide state machine information which will be gotten from https://github.com/openstack/ironic/blob/master/ironic/common/states.py. Sorry, I\u0027m not sure why exception should be added here. Could you please explain?","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"52c64dfbd29de86791557732636bd92ace6704f7","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  so that API doesn\u0027t need to guarantee that the node will actually go through"},{"line_number":206,"context_line":"  the required steps without failing.)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":209,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":210,"context_line":"  This will be realized by providing \"transitions\" info by"},{"line_number":211,"context_line":"  GET /v1/node_transitions API."}],"source_content_type":"text/x-rst","patch_set":20,"id":"da6ed579_e5942de3","line":208,"updated":"2016-01-13 16:03:24.000000000","message":"s/realize/implement","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7ad32f4c5af5e27182a340ccb21b51919cf2646","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  so that API doesn\u0027t need to guarantee that the node will actually go through"},{"line_number":206,"context_line":"  the required steps without failing.)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":209,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":210,"context_line":"  This will be realized by providing \"transitions\" info by"},{"line_number":211,"context_line":"  GET /v1/node_transitions API."}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba63e191_46c1d1e3","line":208,"in_reply_to":"da6ed579_e5942de3","updated":"2016-01-19 11:33:15.000000000","message":"Done","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"52c64dfbd29de86791557732636bd92ace6704f7","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":209,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":210,"context_line":"  This will be realized by providing \"transitions\" info by"},{"line_number":211,"context_line":"  GET /v1/node_transitions API."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":20,"id":"da6ed579_65b7dd86","line":210,"updated":"2016-01-13 16:03:24.000000000","message":"ditto","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7ad32f4c5af5e27182a340ccb21b51919cf2646","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* In order to realize either way (1) or (2), API should provide data"},{"line_number":209,"context_line":"  \"in order to do operation \u0027A\u0027, doing operation \u0027B\u0027 is required.\" also."},{"line_number":210,"context_line":"  This will be realized by providing \"transitions\" info by"},{"line_number":211,"context_line":"  GET /v1/node_transitions API."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba63e191_e6b5657e","line":210,"in_reply_to":"da6ed579_65b7dd86","updated":"2016-01-19 11:33:15.000000000","message":"Done","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"52c64dfbd29de86791557732636bd92ace6704f7","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    - ``--sort-key \u003cfield\u003e`` : Transition field that will be used for sorting."},{"line_number":243,"context_line":"      The default is \"from_state\"."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    - ``--sort-dir \u003cdirection\u003e`` : Sort direction: \"asc\" (the default) or"},{"line_number":246,"context_line":"      \"desc\"."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":20,"id":"da6ed579_a0838355","line":245,"updated":"2016-01-13 16:03:24.000000000","message":"IIUC there should also be --from-state, --event, --target-state keys?","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8736f2390db89891c3084ba94050bd8e07eb7e5","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    - ``--sort-key \u003cfield\u003e`` : Transition field that will be used for sorting."},{"line_number":243,"context_line":"      The default is \"from_state\"."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    - ``--sort-dir \u003cdirection\u003e`` : Sort direction: \"asc\" (the default) or"},{"line_number":246,"context_line":"      \"desc\"."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":20,"id":"da6ed579_d280038e","line":245,"in_reply_to":"da6ed579_a0838355","updated":"2016-01-18 10:29:20.000000000","message":"++","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c7ad32f4c5af5e27182a340ccb21b51919cf2646","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    - ``--sort-key \u003cfield\u003e`` : Transition field that will be used for sorting."},{"line_number":243,"context_line":"      The default is \"from_state\"."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    - ``--sort-dir \u003cdirection\u003e`` : Sort direction: \"asc\" (the default) or"},{"line_number":246,"context_line":"      \"desc\"."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":20,"id":"ba63e191_c622a1b9","line":245,"in_reply_to":"da6ed579_d280038e","updated":"2016-01-19 11:33:15.000000000","message":"Done. I forgot it. thanks.","commit_id":"74018943591dfc4bc2bab6b43edd7b8ef80b3d27"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3e68e43884360935fe38906d40979436ebfb1a83","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This specification proposes adding new API:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":" GET /v1/node_transitions"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"},{"line_number":18,"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":21,"id":"1af94dfe_a897b238","line":15,"updated":"2016-03-17 14:41:23.000000000","message":"I think it\u0027s more natural for URL to use a dash instead of an underscore","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c42b7eaa70e7c08c570716954c235ed1f447f9","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This specification proposes adding new API:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":" GET /v1/node_transitions"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"},{"line_number":18,"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":21,"id":"1a122d0e_78d4a746","line":15,"in_reply_to":"1af94dfe_a897b238","updated":"2016-04-22 11:50:01.000000000","message":"Many of our pre-existing endpoints have underscores in the names.\n\nAt the same time, we\u0027re really talking about node transitions, so I think this should reside inside the node object, so maybe it  could be something like:\n\nget /v1/node/available_transitions\n\nAt the same time, I could see it very useful to be able to ask the API \"What are my options for this specific node?\"  I could see such a returned value from the API as useful for the ironic-webclient, or any other sort of client using CORS.\n\nAll that being said, I think Dmitry has a good point regarding the cli and calling the commands `ironic state-machine` that is if this is just left as a global unfiltered view in to the states.","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3e68e43884360935fe38906d40979436ebfb1a83","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"List transitions."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Parameters:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  + from_state(unicode): Starting state."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"1af94dfe_889c765e","line":49,"updated":"2016-03-17 14:41:23.000000000","message":"are all/some of these optional?","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c42b7eaa70e7c08c570716954c235ed1f447f9","unresolved":false,"context_lines":[{"line_number":232,"context_line":"Add new API GET /v1/node_transitions and bump API microversion."},{"line_number":233,"context_line":"Please see \"Proposed change\"."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Client (CLI) impact"},{"line_number":236,"context_line":"-------------------"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Add new command that executes API GET /v1/node_transitions ."}],"source_content_type":"text/x-rst","patch_set":21,"id":"1a122d0e_780947dd","line":235,"range":{"start_line":235,"start_character":0,"end_line":235,"end_character":19},"updated":"2016-04-22 11:50:01.000000000","message":"I assume these commands will be implemented in such a way that the underlying python API client can leverage this data without using the shell interface?","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3e68e43884360935fe38906d40979436ebfb1a83","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Add new command that executes API GET /v1/node_transitions ."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"  + ironic node-transitions/openstack baremetal node show transitions"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    - ``--sort-key \u003cfield\u003e`` : Transition field that will be used for sorting."},{"line_number":243,"context_line":"      The default is \"from_state\"."}],"source_content_type":"text/x-rst","patch_set":21,"id":"1af94dfe_e8a53aa2","line":240,"updated":"2016-03-17 14:41:23.000000000","message":"these commands look like they are part of \"node\" object, while actually it\u0027s not the case. Maybe we need \u0027ironic state-machine\u0027 or something like that?","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c42b7eaa70e7c08c570716954c235ed1f447f9","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Add new command that executes API GET /v1/node_transitions ."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"  + ironic node-transitions/openstack baremetal node show transitions"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    - ``--sort-key \u003cfield\u003e`` : Transition field that will be used for sorting."},{"line_number":243,"context_line":"      The default is \"from_state\"."}],"source_content_type":"text/x-rst","patch_set":21,"id":"1a122d0e_58556bc4","line":240,"in_reply_to":"1af94dfe_e8a53aa2","updated":"2016-04-22 11:50:01.000000000","message":"\u0027ironic state-machine\u0027 could be good as well.","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3e68e43884360935fe38906d40979436ebfb1a83","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    - ``--sort-dir \u003cdirection\u003e`` : Sort direction: \"asc\" (the default) or"},{"line_number":246,"context_line":"      \"desc\"."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    - ``--from_state \u003cstate\u003e`` : Starting state."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    - ``--event \u003cevent\u003e`` : Event that causes ``from_state`` to transition to"},{"line_number":251,"context_line":"      ``target_state``."}],"source_content_type":"text/x-rst","patch_set":21,"id":"1af94dfe_c8a2fe98","line":248,"updated":"2016-03-17 14:41:23.000000000","message":"should be dash (-) for consistency","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3e68e43884360935fe38906d40979436ebfb1a83","unresolved":false,"context_lines":[{"line_number":250,"context_line":"    - ``--event \u003cevent\u003e`` : Event that causes ``from_state`` to transition to"},{"line_number":251,"context_line":"      ``target_state``."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    - ``--target_state \u003cstate\u003e`` : Ending state."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"::"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"1af94dfe_28ac428b","line":253,"updated":"2016-03-17 14:41:23.000000000","message":"ditto","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94c42b7eaa70e7c08c570716954c235ed1f447f9","unresolved":false,"context_lines":[{"line_number":277,"context_line":" |MANAGEABLE |provide   |AVAILABLE   |"},{"line_number":278,"context_line":" |MANAGEABLE |clean     |AVAILABLE   |"},{"line_number":279,"context_line":" +-----------+----------+------------+"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"RPC API impact"},{"line_number":282,"context_line":"--------------"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"1a122d0e_5803abb8","line":280,"updated":"2016-04-22 11:50:01.000000000","message":"What about the OpenStack Client plugin?","commit_id":"a767df6be0fb36a1b260595e7f7d8ea4b386b59b"}]}
