)]}'
{"specs/approved/deployment-steps-framework.rst":[{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b44ddb6719257e51d26cf41d03a11323c455286b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"Features like custom RAID configuration, BIOS configuration, and custom"},{"line_number":38,"context_line":"kernel boot parameters are a few use cases that would benefit from a way"},{"line_number":39,"context_line":"of defining deployment steps at deploy time, in ironic."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"It makes sense to provide support for this via deployment steps. This would"},{"line_number":42,"context_line":"be conceptually similar to the cleaning steps supported by ironic already."},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_ea9113f3","line":40,"updated":"2018-03-20 16:03:49.000000000","message":"looks like a deployment step corresponds to a separate features, would this framework provide more fine grained control over the deployment, say, custom partitioning?","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"cb4e1cf625efaa2717a506b8d4c119a215d0d7c1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"Features like custom RAID configuration, BIOS configuration, and custom"},{"line_number":38,"context_line":"kernel boot parameters are a few use cases that would benefit from a way"},{"line_number":39,"context_line":"of defining deployment steps at deploy time, in ironic."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"It makes sense to provide support for this via deployment steps. This would"},{"line_number":42,"context_line":"be conceptually similar to the cleaning steps supported by ironic already."},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_5b0d7333","line":40,"in_reply_to":"df7087c5_ea9113f3","updated":"2018-03-20 16:26:30.000000000","message":"yes, that\u0027s the plan/vision. Not in this spec though.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3f07c3ddd7abe1003350f5d7248917e00c28a7ae","unresolved":false,"context_lines":[{"line_number":39,"context_line":"of defining deployment steps at deploy time, in ironic."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"It makes sense to provide support for this via deployment steps. This would"},{"line_number":42,"context_line":"be conceptually similar to the cleaning steps supported by ironic already."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Proposed change"},{"line_number":45,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_af9ee951","line":42,"updated":"2018-03-19 17:59:22.000000000","message":"I would be tempted to focus more on the per conductor build steps. Each set of nodes controlled by a conductor may have a slightly different set of deploy steps.\n\nIn particular, you might skip some deploy steps... Maybe network boot is the example there?","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"cb4e1cf625efaa2717a506b8d4c119a215d0d7c1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"of defining deployment steps at deploy time, in ironic."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"It makes sense to provide support for this via deployment steps. This would"},{"line_number":42,"context_line":"be conceptually similar to the cleaning steps supported by ironic already."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Proposed change"},{"line_number":45,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_6721be9f","line":42,"in_reply_to":"df7087c5_af9ee951","updated":"2018-03-20 16:26:30.000000000","message":"It isn\u0027t just the conductor. Each node can have different hardware/interfaces so at the lowest level (after we allow configuring of deploy steps), each node may have a different set of deploy steps.\n\nI can update this if you give me the exact words you want added :)","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3f07c3ddd7abe1003350f5d7248917e00c28a7ae","unresolved":false,"context_lines":[{"line_number":55,"context_line":"`OpenStack Dublin PTG`_.)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"This change is internal to ironic. Users will not be able to affect the"},{"line_number":58,"context_line":"deployment process any more than they can do today."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Conceptually, the clean steps model is a simple idea and operators are familiar"},{"line_number":61,"context_line":"with it. Having similar deploy steps provides consistency and it will be easier"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_2fe179d1","line":58,"updated":"2018-03-19 17:59:22.000000000","message":"I thought we were going to make it API visible what current bit of the deploy was happening, and being able to change the priority via config?\n\nHmm, I guess that is covered below? Do we already allow some steps to be changed via config.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"cb4e1cf625efaa2717a506b8d4c119a215d0d7c1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"`OpenStack Dublin PTG`_.)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"This change is internal to ironic. Users will not be able to affect the"},{"line_number":58,"context_line":"deployment process any more than they can do today."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Conceptually, the clean steps model is a simple idea and operators are familiar"},{"line_number":61,"context_line":"with it. Having similar deploy steps provides consistency and it will be easier"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_872ad229","line":58,"in_reply_to":"df7087c5_2fe179d1","updated":"2018-03-20 16:26:30.000000000","message":"No :-( The only thing we agreed on at the PTG was to put in the framework but not allow any ability to configure. See L41 at https://etherpad.openstack.org/p/ironic-rocky-ptg-deploy-steps: \"start with using the deploy steps mechanism internally (without exposing customization to users)\"","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2eea7b6b6b1809e1c977919d65490db9b7053bbc","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* executing the desired configuration steps after each node is deployed."},{"line_number":134,"context_line":"  As these configuration steps are executed post-deploy, most of them need a"},{"line_number":135,"context_line":"  reboot of the node, orchestratation is needed to do these reboots properly,"},{"line_number":136,"context_line":"  and this causes performance issues that are not acceptable in a production"},{"line_number":137,"context_line":"  environment."},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_7ee5e909","line":135,"range":{"start_line":135,"start_character":22,"end_line":135,"end_character":37},"updated":"2018-03-19 15:44:19.000000000","message":"nit: orchestration","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2eea7b6b6b1809e1c977919d65490db9b7053bbc","unresolved":false,"context_lines":[{"line_number":134,"context_line":"  As these configuration steps are executed post-deploy, most of them need a"},{"line_number":135,"context_line":"  reboot of the node, orchestratation is needed to do these reboots properly,"},{"line_number":136,"context_line":"  and this causes performance issues that are not acceptable in a production"},{"line_number":137,"context_line":"  environment."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"* users can create their own images for each use case. But the limitation"},{"line_number":140,"context_line":"  is that the number of images can grow exponentially, and that there is no"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_deb995e9","line":137,"updated":"2018-03-19 15:44:19.000000000","message":"Also, certain configuration needs to be done pre-deploy, like RAID for the boot disk.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3f07c3ddd7abe1003350f5d7248917e00c28a7ae","unresolved":false,"context_lines":[{"line_number":134,"context_line":"  As these configuration steps are executed post-deploy, most of them need a"},{"line_number":135,"context_line":"  reboot of the node, orchestratation is needed to do these reboots properly,"},{"line_number":136,"context_line":"  and this causes performance issues that are not acceptable in a production"},{"line_number":137,"context_line":"  environment."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"* users can create their own images for each use case. But the limitation"},{"line_number":140,"context_line":"  is that the number of images can grow exponentially, and that there is no"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_5e6820b9","line":137,"in_reply_to":"df7087c5_deb995e9","updated":"2018-03-19 17:59:22.000000000","message":"++","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3f07c3ddd7abe1003350f5d7248917e00c28a7ae","unresolved":false,"context_lines":[{"line_number":185,"context_line":"the deployment to fail."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"This change requires a new API version. For older API versions, this"},{"line_number":188,"context_line":"``deploy_step`` field will not be available."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"Client (CLI) impact"},{"line_number":191,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_5edb407c","line":188,"updated":"2018-03-19 17:59:22.000000000","message":"Need to define the fallback behavior with older node, I think? I am guessing we just have an empty list and index?","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"cb4e1cf625efaa2717a506b8d4c119a215d0d7c1","unresolved":false,"context_lines":[{"line_number":185,"context_line":"the deployment to fail."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"This change requires a new API version. For older API versions, this"},{"line_number":188,"context_line":"``deploy_step`` field will not be available."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"Client (CLI) impact"},{"line_number":191,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_8702d26e","line":188,"in_reply_to":"df7087c5_5edb407c","updated":"2018-03-20 16:26:30.000000000","message":"Yes, an older node that hasn\u0027t been deployed yet with the new code, will have default values for deploy_step (None). there won\u0027t be any deploy-related entries in driver_internal_info.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2eea7b6b6b1809e1c977919d65490db9b7053bbc","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"We will need to figure out where the new deploy steps decorator can be"},{"line_number":236,"context_line":"applied and how to:"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"1. provide backwards compatibility during a rolling upgrade"},{"line_number":239,"context_line":"2. support out-of-tree DeployInterfaces that don\u0027t have deploy steps."}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_e9a861dc","line":236,"updated":"2018-03-19 15:44:19.000000000","message":"What does \"where the new deploy steps decorator can be applied\" mean? Which steps we want to split out now? We should decide this before landing this, correct?\n\nOr do you mean which types of interfaces should be able to have deploy steps? As opposed to \"all\" as mentioned above?","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"cb4e1cf625efaa2717a506b8d4c119a215d0d7c1","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"We will need to figure out where the new deploy steps decorator can be"},{"line_number":236,"context_line":"applied and how to:"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"1. provide backwards compatibility during a rolling upgrade"},{"line_number":239,"context_line":"2. support out-of-tree DeployInterfaces that don\u0027t have deploy steps."}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_077b22be","line":236,"in_reply_to":"df7087c5_3ec52c5c","updated":"2018-03-20 16:26:30.000000000","message":"It means that I haven\u0027t figured this part out :-( I will put a TODO here to make it clearer, because this is the messy part. or at least, the part that I\u0027m unclear about. I need to actually look at the code... cuz if we add new interface methods -- how do we deal with backwards compatibility. If we don\u0027t add new interface methods, are the/some existing interface methods sufficient to be standalone deploy steps? I\u0027m hoping the latter...","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3f07c3ddd7abe1003350f5d7248917e00c28a7ae","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"We will need to figure out where the new deploy steps decorator can be"},{"line_number":236,"context_line":"applied and how to:"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"1. provide backwards compatibility during a rolling upgrade"},{"line_number":239,"context_line":"2. support out-of-tree DeployInterfaces that don\u0027t have deploy steps."}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_3ec52c5c","line":236,"in_reply_to":"df7087c5_e9a861dc","updated":"2018-03-19 17:59:22.000000000","message":"Yeah, I fear this set of steps will break the API in nasty ways if we are not careful on defining what the deploy step means. I guess they could just be aribtry tags or something.\n\nMaybe considering the cinder boot case helps here? i.e. we would want to communicate that the copy image via IPA ramdisk step is not required in that case?","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2eea7b6b6b1809e1c977919d65490db9b7053bbc","unresolved":false,"context_lines":[{"line_number":236,"context_line":"applied and how to:"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"1. provide backwards compatibility during a rolling upgrade"},{"line_number":239,"context_line":"2. support out-of-tree DeployInterfaces that don\u0027t have deploy steps."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Nova driver impact"},{"line_number":242,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_1e35cdf7","line":239,"updated":"2018-03-19 15:44:19.000000000","message":"We should probably figure this out before landing this spec. \n\nFor upgrades, I imagine we will do something like, if the agent heartbeats and driver_internal_info[deploy_steps] is empty, proceed the old way. If a deployment is started by a conductor on the new code, the deployment will continue on that conductor, so we shouldn\u0027t need to handle compatibility in that direction.\n\nFor out-of-tree stuff, I think the way I mentioned we handle upgrades above will work. We can emit a deprecation warning if driver_internal_info[deploy_steps] is empty *and* this is an out of tree driver, notifying the operator that the driver should be updated to use deploy steps and deployed *before* upgrading to the Stein release (so that rolling upgrades to Stein work).\n\nThis makes me realize that this feature is a big win for out of tree drivers - it should reduce the amount of boilerplate needed to write one :)\n\nIt also makes me realize that operators will be able to add deploy steps by adding them to an out of tree driver that inherits from the deploy driver they want to use as a base. Which is fine - just want to point it out.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3f07c3ddd7abe1003350f5d7248917e00c28a7ae","unresolved":false,"context_lines":[{"line_number":236,"context_line":"applied and how to:"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"1. provide backwards compatibility during a rolling upgrade"},{"line_number":239,"context_line":"2. support out-of-tree DeployInterfaces that don\u0027t have deploy steps."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Nova driver impact"},{"line_number":242,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_de3510aa","line":239,"in_reply_to":"df7087c5_1e35cdf7","updated":"2018-03-19 17:59:22.000000000","message":"+1 all that. Seems worth calling it out.\n\nAlso if you only create out of tree to create some fancy build step, we can now get that upstream without everyone needing that deploy step.\n\nDo we want to namespace custom deploy steps? Maybe overkill?","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"cb4e1cf625efaa2717a506b8d4c119a215d0d7c1","unresolved":false,"context_lines":[{"line_number":236,"context_line":"applied and how to:"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"1. provide backwards compatibility during a rolling upgrade"},{"line_number":239,"context_line":"2. support out-of-tree DeployInterfaces that don\u0027t have deploy steps."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"Nova driver impact"},{"line_number":242,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_5039d23c","line":239,"in_reply_to":"df7087c5_de3510aa","updated":"2018-03-20 16:26:30.000000000","message":"@John. No. At least, let\u0027s not go there now. Baby steps :)","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2eea7b6b6b1809e1c977919d65490db9b7053bbc","unresolved":false,"context_lines":[{"line_number":246,"context_line":"Ramdisk impact"},{"line_number":247,"context_line":"--------------"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"There should be no impact to the ramdisk (IPA)."},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"Security impact"},{"line_number":252,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_0927d5b8","line":249,"updated":"2018-03-19 15:44:19.000000000","message":"Do we want to eventually be able to collect deploy steps from IPA? I hope we don\u0027t need to, but worth thinking about.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3f07c3ddd7abe1003350f5d7248917e00c28a7ae","unresolved":false,"context_lines":[{"line_number":246,"context_line":"Ramdisk impact"},{"line_number":247,"context_line":"--------------"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"There should be no impact to the ramdisk (IPA)."},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"Security impact"},{"line_number":252,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_1e6ce89a","line":249,"in_reply_to":"df7087c5_0927d5b8","updated":"2018-03-19 17:59:22.000000000","message":"We can collect traits from IPA... at least I was thinking about this when we get traits selecting from a set of options.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"cb4e1cf625efaa2717a506b8d4c119a215d0d7c1","unresolved":false,"context_lines":[{"line_number":246,"context_line":"Ramdisk impact"},{"line_number":247,"context_line":"--------------"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"There should be no impact to the ramdisk (IPA)."},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"Security impact"},{"line_number":252,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_a7303609","line":249,"in_reply_to":"df7087c5_0927d5b8","updated":"2018-03-20 16:26:30.000000000","message":"Yes -- but that isn\u0027t in scope for this spec, which is why there is no impact. I can put a note about the future though.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"cb4e1cf625efaa2717a506b8d4c119a215d0d7c1","unresolved":false,"context_lines":[{"line_number":246,"context_line":"Ramdisk impact"},{"line_number":247,"context_line":"--------------"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"There should be no impact to the ramdisk (IPA)."},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"Security impact"},{"line_number":252,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df7087c5_6a08a327","line":249,"in_reply_to":"df7087c5_1e6ce89a","updated":"2018-03-20 16:26:30.000000000","message":"i think we should leave collection of traits up to the inspector to deal with.","commit_id":"cb6cf544a94eb5756bf46417590b9a2570a1d359"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4df3cad87b26671fe60fbffe072295c1e945e9bd","unresolved":false,"context_lines":[{"line_number":90,"context_line":"An alternative is to have one decorator that allows specifying a function"},{"line_number":91,"context_line":"to be a clean step and/or a deploy step, e.g.::"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":" @step(clean_priority\u003d0, deploy_priority\u003d0, argsinfo\u003dNone)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"However, clean steps are abortable and deploy steps aren\u0027t (yet, see below),"},{"line_number":96,"context_line":"and it is unclear whether other arguments might be added for the deploy step"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_1f0ac425","line":93,"updated":"2018-03-23 21:58:27.000000000","message":"+1 to this","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4df3cad87b26671fe60fbffe072295c1e945e9bd","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Although ironic allows cleaning to be aborted, ironic doesn\u0027t allow the"},{"line_number":102,"context_line":"deployment to be aborted (although there is an `RFE to support abort in"},{"line_number":103,"context_line":"deploy_wait`_). So it is outside the scope of this specification."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"A deploy step can be implemented by any Interface, not just DeployInterface."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_6226c7ba","line":103,"updated":"2018-03-23 21:58:27.000000000","message":"I thought a node being deployed could be aborted by being set to deleted. This seems like an \"easy\" win for ironic in the grand scheme of the universe and shouldn\u0027t really influence other design decisions as such.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d8a3c1831ad15fd3ccaae6f385716a92acfac381","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Although ironic allows cleaning to be aborted, ironic doesn\u0027t allow the"},{"line_number":102,"context_line":"deployment to be aborted (although there is an `RFE to support abort in"},{"line_number":103,"context_line":"deploy_wait`_). So it is outside the scope of this specification."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"A deploy step can be implemented by any Interface, not just DeployInterface."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_2b5a7c4e","line":103,"in_reply_to":"bf659307_6226c7ba","updated":"2018-03-28 21:11:29.000000000","message":"The semantics of \u0027abort\u0027 and \u0027deleted\u0027 are different. When deleted, the node could go through cleaning -\u003e available. The existing aborts (clean \u0026 rescue) go directly to *fail (does not pass go, does not collect $200 (monopoly)).\n\nSo yeah, we should allow abort but that is outside the scope of this spec.\n\nIf we time things right and the deploy abort happens before this is done, we could look at adding a single @step() decorator.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"fa434ff8f872208b8704bf64965eda1d185c26bc","unresolved":false,"context_lines":[{"line_number":135,"context_line":"  reboot of the node, orchestration is needed to do these reboots properly,"},{"line_number":136,"context_line":"  and this causes performance issues that are not acceptable in a production"},{"line_number":137,"context_line":"  environment. This approach also doesn\u0027t address pre-deploy steps such as"},{"line_number":138,"context_line":"  RAID for the boot disk."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"* users can create their own images for each use case. But the limitation"},{"line_number":141,"context_line":"  is that the number of images can grow exponentially, and that there is no"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df7087c5_71bf1cd0","line":138,"updated":"2018-03-21 15:03:20.000000000","message":"I guess what I meant is that we could call out RAID as an example of a configuration step that must be done pre-deploy.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"78f637483e4e52a6bfd17ae176bd7776784ac446","unresolved":false,"context_lines":[{"line_number":135,"context_line":"  reboot of the node, orchestration is needed to do these reboots properly,"},{"line_number":136,"context_line":"  and this causes performance issues that are not acceptable in a production"},{"line_number":137,"context_line":"  environment. This approach also doesn\u0027t address pre-deploy steps such as"},{"line_number":138,"context_line":"  RAID for the boot disk."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"* users can create their own images for each use case. But the limitation"},{"line_number":141,"context_line":"  is that the number of images can grow exponentially, and that there is no"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_d5811d4c","line":138,"in_reply_to":"df7087c5_71bf1cd0","updated":"2018-03-28 14:21:05.000000000","message":"I was thinking we might almost get that out of the box if we do it properly.... at least might. ;)","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4df3cad87b26671fe60fbffe072295c1e945e9bd","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"* use a customizable DeployInterface like the `ansible`_ deploy interface"},{"line_number":145,"context_line":"  (although the `ansible`_ deploy interface is not recommended for production"},{"line_number":146,"context_line":"  use)."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Data model impact"},{"line_number":149,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_625b272e","line":146,"updated":"2018-03-23 21:58:27.000000000","message":"And still may not be able to actually achieve the same level of access to the hardware or settings to have the same effect.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"c976653f5bffa007c3de198468b9ba4102881645","unresolved":false,"context_lines":[{"line_number":242,"context_line":"**TODO** We will need to figure out where the new deploy steps decorator can"},{"line_number":243,"context_line":"be applied. This includes figuring out:"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* which deploy steps we want to split out now"},{"line_number":246,"context_line":"* whether we can use existing interface methods as deploy steps or whether"},{"line_number":247,"context_line":"  we may have to add new interface methods. (Hopefully the former.)"},{"line_number":248,"context_line":"* other gotchas that I haven\u0027t thought of yet"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_0c84b90b","line":245,"updated":"2018-03-26 15:19:53.000000000","message":"Should we figure this out before we land the spec? I feel like we should. Maybe the below option is fine to suss out in code after the spec lands.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"78f637483e4e52a6bfd17ae176bd7776784ac446","unresolved":false,"context_lines":[{"line_number":242,"context_line":"**TODO** We will need to figure out where the new deploy steps decorator can"},{"line_number":243,"context_line":"be applied. This includes figuring out:"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* which deploy steps we want to split out now"},{"line_number":246,"context_line":"* whether we can use existing interface methods as deploy steps or whether"},{"line_number":247,"context_line":"  we may have to add new interface methods. (Hopefully the former.)"},{"line_number":248,"context_line":"* other gotchas that I haven\u0027t thought of yet"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_5550add4","line":245,"in_reply_to":"bf659307_0c84b90b","updated":"2018-03-28 14:21:05.000000000","message":"Somewhat we agreed with configdrive and the actual write-out of the image. But I think that we should begin moving forward and try and figure out local breakpoints to split things apart as time goes on, and then update the spec once we figure that out.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d8a3c1831ad15fd3ccaae6f385716a92acfac381","unresolved":false,"context_lines":[{"line_number":242,"context_line":"**TODO** We will need to figure out where the new deploy steps decorator can"},{"line_number":243,"context_line":"be applied. This includes figuring out:"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* which deploy steps we want to split out now"},{"line_number":246,"context_line":"* whether we can use existing interface methods as deploy steps or whether"},{"line_number":247,"context_line":"  we may have to add new interface methods. (Hopefully the former.)"},{"line_number":248,"context_line":"* other gotchas that I haven\u0027t thought of yet"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_318d02d3","line":245,"in_reply_to":"bf659307_5550add4","updated":"2018-03-28 21:11:29.000000000","message":"Ok, I will update the spec to mention starting with one step just to get the framework in place, and then look at splitting it up. The spec will be updated to reflect the actual deploy steps we end up using.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"fa434ff8f872208b8704bf64965eda1d185c26bc","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* which deploy steps we want to split out now"},{"line_number":246,"context_line":"* whether we can use existing interface methods as deploy steps or whether"},{"line_number":247,"context_line":"  we may have to add new interface methods. (Hopefully the former.)"},{"line_number":248,"context_line":"* other gotchas that I haven\u0027t thought of yet"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"Out-of-tree Interfaces"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df7087c5_b1729448","line":247,"updated":"2018-03-21 15:03:20.000000000","message":"As far as adding new interface methods... we can add an attribute supports_deploy_steps or something to each interface, for the transition period. If that\u0027s false for any interface on the node, we do the old thing. If it\u0027s true for all, we do the new thing. \n\nSubclasses of one of our interfaces might get weird, though. Hrm. Do we care?","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d8a3c1831ad15fd3ccaae6f385716a92acfac381","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* which deploy steps we want to split out now"},{"line_number":246,"context_line":"* whether we can use existing interface methods as deploy steps or whether"},{"line_number":247,"context_line":"  we may have to add new interface methods. (Hopefully the former.)"},{"line_number":248,"context_line":"* other gotchas that I haven\u0027t thought of yet"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"Out-of-tree Interfaces"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_11755e32","line":247,"in_reply_to":"bf659307_02aeebe6","updated":"2018-03-28 21:11:29.000000000","message":"+1\n\nI decided not to mention any of this. Will update the spec after doing some coding on this.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4df3cad87b26671fe60fbffe072295c1e945e9bd","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"* which deploy steps we want to split out now"},{"line_number":246,"context_line":"* whether we can use existing interface methods as deploy steps or whether"},{"line_number":247,"context_line":"  we may have to add new interface methods. (Hopefully the former.)"},{"line_number":248,"context_line":"* other gotchas that I haven\u0027t thought of yet"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"Out-of-tree Interfaces"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_02aeebe6","line":247,"in_reply_to":"df7087c5_b1729448","updated":"2018-03-23 21:58:27.000000000","message":"We should be able to detect if the call is coming through subclassing and determine the right path... at least should. I suspect this is going to be one of those \"lets just hack on code till we get it right kind of things\" at least in terms of getting the spec moving.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4df3cad87b26671fe60fbffe072295c1e945e9bd","unresolved":false,"context_lines":[{"line_number":252,"context_line":"Although the conductor will still support deployment the old way (without"},{"line_number":253,"context_line":"deploy steps), this support will be deprecated and removed based on the"},{"line_number":254,"context_line":"`standard deprecation policy"},{"line_number":255,"context_line":"\u003chttps://governance.openstack.org/tc/reference/tags/assert_follows-standard-deprecation.html\u003e`_."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"For out-of-tree interfaces that don\u0027t have deploy steps, the conductor will"},{"line_number":258,"context_line":"emit (log) a deprecation warning, that the out-of-tree interface should be"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_e2b41738","line":255,"updated":"2018-03-23 21:58:27.000000000","message":"We should only do this if the refactor is relatively clean and easy... at least in terms of removal.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d8a3c1831ad15fd3ccaae6f385716a92acfac381","unresolved":false,"context_lines":[{"line_number":252,"context_line":"Although the conductor will still support deployment the old way (without"},{"line_number":253,"context_line":"deploy steps), this support will be deprecated and removed based on the"},{"line_number":254,"context_line":"`standard deprecation policy"},{"line_number":255,"context_line":"\u003chttps://governance.openstack.org/tc/reference/tags/assert_follows-standard-deprecation.html\u003e`_."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"For out-of-tree interfaces that don\u0027t have deploy steps, the conductor will"},{"line_number":258,"context_line":"emit (log) a deprecation warning, that the out-of-tree interface should be"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_8e7b8f79","line":255,"in_reply_to":"bf659307_e2b41738","updated":"2018-03-28 21:11:29.000000000","message":"by \u0027do this\u0027, do you mean to-deprecate-or-not-to-deprecate, or do you mean to deprecate using-deprecation-policy vs adding-an-additional-cycle-before-deprecating? I\u0027ll assume the latter, and yes :)","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4df3cad87b26671fe60fbffe072295c1e945e9bd","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"Ironic:"},{"line_number":322,"context_line":"  * Add support for deploy steps to base driver"},{"line_number":323,"context_line":"  * rework the existing code into one or more deploy steps"},{"line_number":324,"context_line":"  * Update the conductor to get the deploy steps and execute them"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"``python-ironicclient``:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_02dcab72","line":323,"range":{"start_line":323,"start_character":41,"end_line":323,"end_character":45},"updated":"2018-03-23 21:58:27.000000000","message":"perhaps, if feasible at the current time?\n\nI only bring it up because we kind of agreed in dublin that we should break it into at least two steps, but I can see just doing one for now.\n\nWell, truly, it is kind of already broken up. Preparation to deploy is a step, and then deployment is a step. *hides before things are thrown at her*","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d8a3c1831ad15fd3ccaae6f385716a92acfac381","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"Ironic:"},{"line_number":322,"context_line":"  * Add support for deploy steps to base driver"},{"line_number":323,"context_line":"  * rework the existing code into one or more deploy steps"},{"line_number":324,"context_line":"  * Update the conductor to get the deploy steps and execute them"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"``python-ironicclient``:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf659307_b18592d1","line":323,"range":{"start_line":323,"start_character":41,"end_line":323,"end_character":45},"in_reply_to":"bf659307_02dcab72","updated":"2018-03-28 21:11:29.000000000","message":"you can\u0027t hide from us forever.. :)\n\nI\u0027m going to leave it as-is, since it is described above.","commit_id":"1c71dce1a543eb7aecb20f44decc5963dcf6b640"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"1a191f01be912a903a62bb93dde3d0d1e6d476ea","unresolved":false,"context_lines":[{"line_number":325,"context_line":"Ironic:"},{"line_number":326,"context_line":"  * Add support for deploy steps to base driver"},{"line_number":327,"context_line":"  * rework the existing code into one or more deploy steps"},{"line_number":328,"context_line":"  * Update the conductor to get the deploy steps and execute them"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"``python-ironicclient``:"},{"line_number":331,"context_line":"  * Add support for node.deploy_step"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf659307_c1c014e4","line":328,"updated":"2018-04-03 18:02:09.000000000","message":"nit: should be minimal, but API changes will be required","commit_id":"38e37b9717212b232fe2d247bbc92bab5502cc12"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"1a191f01be912a903a62bb93dde3d0d1e6d476ea","unresolved":false,"context_lines":[{"line_number":366,"context_line":"  * if the agent heartbeats and driver_internal_info[\u0027deploy_steps\u0027] is empty,"},{"line_number":367,"context_line":"    proceed the old way (similar to cold upgrade)"},{"line_number":368,"context_line":"  * a new conductor will not use the deploy steps mechanism if it is pinned to"},{"line_number":369,"context_line":"    the old release (via `pin_release_version` configuration option)."},{"line_number":370,"context_line":"    if a deployment is started by a conductor using deploy steps (new code),"},{"line_number":371,"context_line":"    it means that it is unpinned, and all the conductors are using the new"},{"line_number":372,"context_line":"    code, so the deployment can continue on any conductor that supports the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf659307_b3045316","line":369,"updated":"2018-04-03 18:02:09.000000000","message":"I guess this would be checked via the Node object\u0027s support (or lack thereof) for the deploy_step field?","commit_id":"38e37b9717212b232fe2d247bbc92bab5502cc12"}]}
