)]}'
{"specs/approved/mixin-deploy.rst":[{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"1503fe83796ab2eddaa0e69e143b70235fed4b0b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Mix-in deploy"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This change proposes a facilitity to accomodate multiple implementations of"},{"line_number":12,"context_line":"deploy interfaces for a single driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"https://blueprints.launchpad.net/ironic/+spec/mixin-deploy"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa1b9901_b63fd685","line":11,"updated":"2015-08-21 13:10:38.000000000","message":"s/facilitity/facility/ ?\ns/accomodate/accommodate/","commit_id":"fc61b3509a01431cfba0e1c00a5c442b07aae514"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"9c76aa5896e595a6b6aced563a7aeab4264a7901","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Mix-in deploy"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This change proposes a facilitity to accomodate multiple implementations of"},{"line_number":12,"context_line":"deploy interfaces for a single driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"https://blueprints.launchpad.net/ironic/+spec/mixin-deploy"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa1b9901_84e7c0ab","line":11,"in_reply_to":"fa1b9901_b63fd685","updated":"2015-08-24 03:58:08.000000000","message":"Done","commit_id":"fc61b3509a01431cfba0e1c00a5c442b07aae514"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"a3e4e21fefbfdd383928ae20730f3a527f5f4dbe","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  + ``validate()`` - Iterate through ``deploy_interfaces`` and call validate"},{"line_number":66,"context_line":"    on each of the item in ``deploy_interfaces``.  If ``validate()`` goes"},{"line_number":67,"context_line":"    through fine in one of them, return.  If none of the deploy interfaces"},{"line_number":68,"context_line":"    succeeded, a new Exception which contains error messages from all the"},{"line_number":69,"context_line":"    deploy interfaces will be thrown.  This interface for which ``validate()``"},{"line_number":70,"context_line":"    goes through fine is recorded in node\u0027s driver_internal_info."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_5641530a","line":67,"updated":"2015-08-27 15:23:05.000000000","message":"Is there some precedence if valid information is provided e.g. for both deploy_image_to_hdd and boot_from_iscsi_volume, or should an exception be thrown as it is not clear which one is needed?","commit_id":"fc61b3509a01431cfba0e1c00a5c442b07aae514"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"ebc2f08fedce8ac45d717015cbccaa8ebb3c8e5c","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  + ``validate()`` - Iterate through ``deploy_interfaces`` and call validate"},{"line_number":66,"context_line":"    on each of the item in ``deploy_interfaces``.  If ``validate()`` goes"},{"line_number":67,"context_line":"    through fine in one of them, return.  If none of the deploy interfaces"},{"line_number":68,"context_line":"    succeeded, a new Exception which contains error messages from all the"},{"line_number":69,"context_line":"    deploy interfaces will be thrown.  This interface for which ``validate()``"},{"line_number":70,"context_line":"    goes through fine is recorded in node\u0027s driver_internal_info."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_d9120157","line":67,"in_reply_to":"da20952f_5641530a","updated":"2015-08-31 04:57:49.000000000","message":"The precedence might be the order in which the validation is done and in turn might depend on the position of the deploy interface in the list in the code.  I think it\u0027s reasonable to pick up the first one that matches and an exception needn\u0027t be thrown. WDYT ?","commit_id":"fc61b3509a01431cfba0e1c00a5c442b07aae514"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"1503fe83796ab2eddaa0e69e143b70235fed4b0b","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"* We can combine different deploy methods into a single implementation of"},{"line_number":113,"context_line":"  ``DeployInterface``, but this is not a good way to do it. It will end up in"},{"line_number":114,"context_line":"  a same deploy interface implementating mulitple mechanisms to deploy."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* We can avoid the need for ``MixInDeploy`` and add a list of deploy interfaces"},{"line_number":117,"context_line":"  to ``self.deploy`` and change everywhere to treat ``self.deploy`` as either a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa1b9901_76d13e22","line":114,"updated":"2015-08-21 13:10:38.000000000","message":"s/mulitple/multiple/","commit_id":"fc61b3509a01431cfba0e1c00a5c442b07aae514"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"9c76aa5896e595a6b6aced563a7aeab4264a7901","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"* We can combine different deploy methods into a single implementation of"},{"line_number":113,"context_line":"  ``DeployInterface``, but this is not a good way to do it. It will end up in"},{"line_number":114,"context_line":"  a same deploy interface implementating mulitple mechanisms to deploy."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* We can avoid the need for ``MixInDeploy`` and add a list of deploy interfaces"},{"line_number":117,"context_line":"  to ``self.deploy`` and change everywhere to treat ``self.deploy`` as either a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa1b9901_c4edb88f","line":114,"in_reply_to":"fa1b9901_76d13e22","updated":"2015-08-24 03:58:08.000000000","message":"Done","commit_id":"fc61b3509a01431cfba0e1c00a5c442b07aae514"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"a3e4e21fefbfdd383928ae20730f3a527f5f4dbe","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Client (CLI) impact"},{"line_number":136,"context_line":"-------------------"},{"line_number":137,"context_line":"None."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"RPC API impact"},{"line_number":140,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_9bbab4e0","line":137,"updated":"2015-08-27 15:23:05.000000000","message":"Output of ironic node-validate should be changed at least I suppose.","commit_id":"fc61b3509a01431cfba0e1c00a5c442b07aae514"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"ebc2f08fedce8ac45d717015cbccaa8ebb3c8e5c","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Client (CLI) impact"},{"line_number":136,"context_line":"-------------------"},{"line_number":137,"context_line":"None."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"RPC API impact"},{"line_number":140,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_d939a1d8","line":137,"in_reply_to":"da20952f_9bbab4e0","updated":"2015-08-31 04:57:49.000000000","message":"Do you deploy part of output of ironic node-validate should reflect the output of validate() on each of the implementations of DeployInterface in the list ? Yeah, I think it should be.","commit_id":"fc61b3509a01431cfba0e1c00a5c442b07aae514"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"eeb6e54e545083a03756f914c65c918e0bfccad2","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    on each of the item in ``deploy_interfaces``.  If ``validate()`` goes"},{"line_number":67,"context_line":"    through fine in one of them, return.  If none of the deploy interfaces"},{"line_number":68,"context_line":"    succeeded, a new Exception which contains error messages from all the"},{"line_number":69,"context_line":"    deploy interfaces will be thrown.  This interface for which ``validate()``"},{"line_number":70,"context_line":"    goes through fine is recorded in node\u0027s driver_internal_info. If there are"},{"line_number":71,"context_line":"    multiple implementations of ``DeployInterface`` for which ``validate()``"},{"line_number":72,"context_line":"    goes through fine, the first one for which ``validate()`` goes through will"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a2fa921_acd95e85","line":69,"updated":"2015-10-07 09:41:16.000000000","message":"This will group them per deploy_type, right?  That way the operator can see which params need fixing for each deploy_type to work?","commit_id":"f54d426001b4bff12829cf0613089ce43d31a338"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"965a2078f86f48b44de16fd3f31f188785b72600","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    on each of the item in ``deploy_interfaces``.  If ``validate()`` goes"},{"line_number":67,"context_line":"    through fine in one of them, return.  If none of the deploy interfaces"},{"line_number":68,"context_line":"    succeeded, a new Exception which contains error messages from all the"},{"line_number":69,"context_line":"    deploy interfaces will be thrown.  This interface for which ``validate()``"},{"line_number":70,"context_line":"    goes through fine is recorded in node\u0027s driver_internal_info. If there are"},{"line_number":71,"context_line":"    multiple implementations of ``DeployInterface`` for which ``validate()``"},{"line_number":72,"context_line":"    goes through fine, the first one for which ``validate()`` goes through will"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba8a016a_4681eb8e","line":69,"in_reply_to":"7a2fa921_acd95e85","updated":"2015-11-16 13:45:54.000000000","message":"Yes, I will mention it below for get_properties().","commit_id":"f54d426001b4bff12829cf0613089ce43d31a338"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"eeb6e54e545083a03756f914c65c918e0bfccad2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    goes through fine is recorded in node\u0027s driver_internal_info. If there are"},{"line_number":71,"context_line":"    multiple implementations of ``DeployInterface`` for which ``validate()``"},{"line_number":72,"context_line":"    goes through fine, the first one for which ``validate()`` goes through will"},{"line_number":73,"context_line":"    be chosen (which in-turn depends on the position in the list above)."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  + The methods ``deploy``, ``tear_down``, ``prepare``, ``clean_up`` will"},{"line_number":76,"context_line":"    route the call to the deploy interface recorded in node\u0027s"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a2fa921_8c210250","line":73,"updated":"2015-10-07 09:41:16.000000000","message":"So to clarify, the list of deploy_types is ordered.  The preferred, or default, deploy method is the first one listed - as chosen by the driver developer.\n\nIs the only mechanism to select a later deploy mechanism is for the operator to remove a dependent piece of information for a deploy_type to force the selection to proceed to the next one? Should there be a better way for operators to disable a particular deploy mechanism (to match their environment) even if the driver writer includes it?\n\nShould we have a mechanism where the operator can choose which deploy_type should be used? (Just like we do for drivers themselves?  Should this be listed in the ironic.conf config file?)","commit_id":"f54d426001b4bff12829cf0613089ce43d31a338"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"965a2078f86f48b44de16fd3f31f188785b72600","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    goes through fine is recorded in node\u0027s driver_internal_info. If there are"},{"line_number":71,"context_line":"    multiple implementations of ``DeployInterface`` for which ``validate()``"},{"line_number":72,"context_line":"    goes through fine, the first one for which ``validate()`` goes through will"},{"line_number":73,"context_line":"    be chosen (which in-turn depends on the position in the list above)."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"  + The methods ``deploy``, ``tear_down``, ``prepare``, ``clean_up`` will"},{"line_number":76,"context_line":"    route the call to the deploy interface recorded in node\u0027s"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba8a016a_86b0338d","line":73,"in_reply_to":"7a2fa921_8c210250","updated":"2015-11-16 13:45:54.000000000","message":"Yes, list of deploy_interfaces is ordered.  Conductor should try it one after the other.  \n\nI am not proposing to remove deploy_type forcefully in this spec, but as driver composition reform should allow for it - https://review.openstack.org/#/c/188370.  The same concept can be applied in composed driver and behaviour can be same.  The deployer can choose to put in which all mechanisms of deploy to be mixed.  Will mention it in the spec.","commit_id":"f54d426001b4bff12829cf0613089ce43d31a338"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4ba40dcdfcfa391c14b514980c7b04d9baccc337","unresolved":false,"context_lines":[{"line_number":21,"context_line":"mechanisms of deployment which can co-exist (for example deploying instance\u0027s"},{"line_number":22,"context_line":"image to local hdd, booting instance from a remote volume), we need to add"},{"line_number":23,"context_line":"different drivers with different ``self.deploy`` for the two drivers). But"},{"line_number":24,"context_line":"the problem with the that approach is, operator needs to change the driver"},{"line_number":25,"context_line":"for serving different requests of deployment (for example to change the"},{"line_number":26,"context_line":"mode of deploy from deploying to local hdd to boot from remote volume, we"},{"line_number":27,"context_line":"need to switch the node\u0027s driver).  In effect, the bare metal is tied down"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9a8ffd7b_8f9036ee","line":24,"updated":"2015-11-24 19:46:45.000000000","message":"nit: s/the that/that/","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e79e9a2ea101251a08fedcb2bdd0760121e86175","unresolved":false,"context_lines":[{"line_number":21,"context_line":"mechanisms of deployment which can co-exist (for example deploying instance\u0027s"},{"line_number":22,"context_line":"image to local hdd, booting instance from a remote volume), we need to add"},{"line_number":23,"context_line":"different drivers with different ``self.deploy`` for the two drivers). But"},{"line_number":24,"context_line":"the problem with the that approach is, operator needs to change the driver"},{"line_number":25,"context_line":"for serving different requests of deployment (for example to change the"},{"line_number":26,"context_line":"mode of deploy from deploying to local hdd to boot from remote volume, we"},{"line_number":27,"context_line":"need to switch the node\u0027s driver).  In effect, the bare metal is tied down"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a710552_459f8e03","line":24,"in_reply_to":"9a8ffd7b_8f9036ee","updated":"2015-12-15 09:38:28.000000000","message":"Done","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4ba40dcdfcfa391c14b514980c7b04d9baccc337","unresolved":false,"context_lines":[{"line_number":45,"context_line":"* Add a new utility implementation of ``DeployInterface`` called"},{"line_number":46,"context_line":"  ``MixInDeploy``. The constructor of this implementation will accept a list of"},{"line_number":47,"context_line":"  implementations of ``DeployInterface``. The constructor will validate that"},{"line_number":48,"context_line":"  no two implementations with same ``deploy_type`` are mixed."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* Any driver can create a ``MixInDeploy`` from their required deploy mechanisms"},{"line_number":51,"context_line":"  and put it in ``self.deploy``. An argument ``deploy_mechanisms`` need to be"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9a8ffd7b_4bec81c7","line":48,"updated":"2015-11-24 19:46:45.000000000","message":"Why do you want to restrict it to unique deploy_types?","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e79e9a2ea101251a08fedcb2bdd0760121e86175","unresolved":false,"context_lines":[{"line_number":45,"context_line":"* Add a new utility implementation of ``DeployInterface`` called"},{"line_number":46,"context_line":"  ``MixInDeploy``. The constructor of this implementation will accept a list of"},{"line_number":47,"context_line":"  implementations of ``DeployInterface``. The constructor will validate that"},{"line_number":48,"context_line":"  no two implementations with same ``deploy_type`` are mixed."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* Any driver can create a ``MixInDeploy`` from their required deploy mechanisms"},{"line_number":51,"context_line":"  and put it in ``self.deploy``. An argument ``deploy_mechanisms`` need to be"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a710552_a54f5291","line":48,"in_reply_to":"9a8ffd7b_4bec81c7","updated":"2015-12-15 09:38:28.000000000","message":"This is to ensure that the similar type of drivers are not used in mixin. It may not be useful to have pxe_ilo and iscsi_ilo driver in list of drivers as they deploy using similar mechanism and do not have much of difference in the way image being deployed.\ndeploy_types is to ensure that deploy mechanisms are mutually exclusive and do not act in the same way","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4ba40dcdfcfa391c14b514980c7b04d9baccc337","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    be chosen (which in-turn depends on the position in the list above)."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  + The methods ``deploy``, ``tear_down``, ``prepare``, ``clean_up`` will"},{"line_number":75,"context_line":"    route the call to the deploy interface recorded in node\u0027s"},{"line_number":76,"context_line":"    driver_internal_info."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"  + The methods ``prepare_cleaning`` and ``tear_down_cleaning`` will be called"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9a8ffd7b_ce52bfdd","line":75,"updated":"2015-11-24 19:46:45.000000000","message":"and take_over, prepare_cleaning, tear_down_cleaning?\n\nBefore a node is available for deployment, automated/manual clean might be done. Which mechanism would be used? (I don\u0027t think cleaning calls deploy.validate()).","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e79e9a2ea101251a08fedcb2bdd0760121e86175","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    be chosen (which in-turn depends on the position in the list above)."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  + The methods ``deploy``, ``tear_down``, ``prepare``, ``clean_up`` will"},{"line_number":75,"context_line":"    route the call to the deploy interface recorded in node\u0027s"},{"line_number":76,"context_line":"    driver_internal_info."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"  + The methods ``prepare_cleaning`` and ``tear_down_cleaning`` will be called"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a710552_20e59008","line":75,"in_reply_to":"9a8ffd7b_ce52bfdd","updated":"2015-12-15 09:38:28.000000000","message":"take_over would get route to the deploy interface being used and recorded in the driver_internal_info.\n\nprepare_cleaning and tear_down_cleaning will be called for every deploy interface in deploy_mechanisms.","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4ba40dcdfcfa391c14b514980c7b04d9baccc337","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* An example"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  + Imagine ``iscsi_ilo`` driver having the a MixInDeploy class as::"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"      self.deploy \u003d utils.MixInDeploy("},{"line_number":91,"context_line":"           deploy_mechanisms \u003d [ilo.deploy.IloVirtualMediaIscsiDeploy,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9a8ffd7b_8bbfc9cf","line":88,"updated":"2015-11-24 19:46:45.000000000","message":"nit: /the a/","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e79e9a2ea101251a08fedcb2bdd0760121e86175","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* An example"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  + Imagine ``iscsi_ilo`` driver having the a MixInDeploy class as::"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"      self.deploy \u003d utils.MixInDeploy("},{"line_number":91,"context_line":"           deploy_mechanisms \u003d [ilo.deploy.IloVirtualMediaIscsiDeploy,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a710552_20ccb088","line":88,"in_reply_to":"9a8ffd7b_8bbfc9cf","updated":"2015-12-15 09:38:28.000000000","message":"Done","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4ba40dcdfcfa391c14b514980c7b04d9baccc337","unresolved":false,"context_lines":[{"line_number":202,"context_line":"  are mutually exclusive and do not act in the same way.  For example,"},{"line_number":203,"context_line":"  ``ISCSIDeploy`` and ``AgentDeploy`` both deploy the image to the node\u0027s"},{"line_number":204,"context_line":"  local hdd, but ``IscsiBoot`` might boot the node from a remote volume."},{"line_number":205,"context_line":"  ``IscsiBoot`` can be clubbed with ``ISCSIDeploy`` or ``AgentDeploy``."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Driver developers will have to make sure that ``prepare_cleaning`` and"},{"line_number":208,"context_line":"  ``tear_down_cleaning`` of two deploy interfaces used in ``MixInDeploy`` don\u0027t"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9a8ffd7b_8b658946","line":205,"updated":"2015-11-24 19:46:45.000000000","message":"\"clubbed\"? What does that mean?","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e79e9a2ea101251a08fedcb2bdd0760121e86175","unresolved":false,"context_lines":[{"line_number":202,"context_line":"  are mutually exclusive and do not act in the same way.  For example,"},{"line_number":203,"context_line":"  ``ISCSIDeploy`` and ``AgentDeploy`` both deploy the image to the node\u0027s"},{"line_number":204,"context_line":"  local hdd, but ``IscsiBoot`` might boot the node from a remote volume."},{"line_number":205,"context_line":"  ``IscsiBoot`` can be clubbed with ``ISCSIDeploy`` or ``AgentDeploy``."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Driver developers will have to make sure that ``prepare_cleaning`` and"},{"line_number":208,"context_line":"  ``tear_down_cleaning`` of two deploy interfaces used in ``MixInDeploy`` don\u0027t"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a710552_60ecf8c7","line":205,"in_reply_to":"9a8ffd7b_8b658946","updated":"2015-12-15 09:38:28.000000000","message":"Done","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4ba40dcdfcfa391c14b514980c7b04d9baccc337","unresolved":false,"context_lines":[{"line_number":208,"context_line":"  ``tear_down_cleaning`` of two deploy interfaces used in ``MixInDeploy`` don\u0027t"},{"line_number":209,"context_line":"  clash with each other. Here \u0027clash\u0027 means that, the preparation of"},{"line_number":210,"context_line":"  environment done by one implementation of ``DeployInterface`` shouldn\u0027t be"},{"line_number":211,"context_line":"  altered by another implementation of ``DeployInterface`` in ``MixinDeploy``."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9a8ffd7b_2e090b2d","line":211,"updated":"2015-11-24 19:46:45.000000000","message":"Hmm... even getting the list of clean steps from the driver will be affected by this MixIn.","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"e79e9a2ea101251a08fedcb2bdd0760121e86175","unresolved":false,"context_lines":[{"line_number":208,"context_line":"  ``tear_down_cleaning`` of two deploy interfaces used in ``MixInDeploy`` don\u0027t"},{"line_number":209,"context_line":"  clash with each other. Here \u0027clash\u0027 means that, the preparation of"},{"line_number":210,"context_line":"  environment done by one implementation of ``DeployInterface`` shouldn\u0027t be"},{"line_number":211,"context_line":"  altered by another implementation of ``DeployInterface`` in ``MixinDeploy``."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a710552_6b461925","line":211,"in_reply_to":"9a8ffd7b_2e090b2d","updated":"2015-12-15 09:38:28.000000000","message":"Yes. Clean steps of all the specified deploy interfaces needs to be executed. Updated spec for the same.","commit_id":"b513102c7f5aae3eb2cd74af094065aefbf60682"}],"specs/liberty/mixin-deploy.rst":[{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0bb77c0667b097ea8b2e408584be03b8f7e9a3ba","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  and put it in ``self.deploy``. An argument ``deploy_interfaces`` need to be"},{"line_number":53,"context_line":"  passed and it should be an iterable.  For example::"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    self.deploy \u003d utils.MixInDeploy("},{"line_number":56,"context_line":"        deploy_interfaces \u003d [ilo.deploy.IloVirtualMediaIscsiDeploy,"},{"line_number":57,"context_line":"                             ilo.deploy.IloUefiIscsiBootDeploy])"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_4e971a90","line":55,"updated":"2015-08-12 08:27:03.000000000","message":"Ramakrishnan,\n\nI understood the problem this spec tries to solve, and the solution this spec proposes. It is convenient for our customers if several deploy methods can be used without restarting the conductor.\n\nI felt a little bit uncomfortable to use the word \"MixIn\" in this context, because \"MixIn\" makes me associate with Multiple Inheritance in case of Python..\n\nSoftware or program can be implemented in many ways.\n\nSo please take my comment as one of alternative implementations. At least I\u0027d like you to add it into the \"Alternative\" section.\n\nIntuitively I got the first impression that this would be the problem domain of what \"Multimethod or Multiple dispatch [1]\" is trying to solve.\n\n[1] https://en.wikipedia.org/wiki/Multiple_dispatch\n\nIf we create a Dispatch class like https://en.wikipedia.org/wiki/Multiple_dispatch#Python\n\nDispatch class could take the role of ``deploy_type`` and would be further generic.\n\nBest regards,\nNaohiro","commit_id":"fe2c0fffe07bd33608ac49ac4d114e51e2ddab7f"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"c420bcbed0c1751ff791b6a0a0eea1375bf1a608","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  and put it in ``self.deploy``. An argument ``deploy_interfaces`` need to be"},{"line_number":53,"context_line":"  passed and it should be an iterable.  For example::"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    self.deploy \u003d utils.MixInDeploy("},{"line_number":56,"context_line":"        deploy_interfaces \u003d [ilo.deploy.IloVirtualMediaIscsiDeploy,"},{"line_number":57,"context_line":"                             ilo.deploy.IloUefiIscsiBootDeploy])"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa1b9901_4e64b7b7","line":55,"in_reply_to":"1a4dcd0f_4e971a90","updated":"2015-08-21 06:02:19.000000000","message":"The problem this tries to solve looks the one that is solved by multiple dispatch that you mentioned above.  But, I am not sure if we can use this here.  Mainly because the dispatch class is not known to the outside world and the dispatch class has to be figured out based on the input in instance_info.  It has to find out which deploy class and take a good guess if it can\u0027t find a matching deploy class to throw a good error.\n\nI chose MixIn for now because there is already a mechanism for mixing vendor passthrus in Ironic by similar name - https://github.com/openstack/ironic/blob/master/ironic/drivers/utils.py#L26\n\nDo you have suggestions for some other names for the class ? I can add it to alternatives.","commit_id":"fe2c0fffe07bd33608ac49ac4d114e51e2ddab7f"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"9380dee18308f9b648b2f99f42bbe018726b19f4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  and put it in ``self.deploy``. An argument ``deploy_interfaces`` need to be"},{"line_number":53,"context_line":"  passed and it should be an iterable.  For example::"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    self.deploy \u003d utils.MixInDeploy("},{"line_number":56,"context_line":"        deploy_interfaces \u003d [ilo.deploy.IloVirtualMediaIscsiDeploy,"},{"line_number":57,"context_line":"                             ilo.deploy.IloUefiIscsiBootDeploy])"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa1b9901_e77d5ee8","line":55,"in_reply_to":"fa1b9901_4e64b7b7","updated":"2015-08-24 04:53:32.000000000","message":"Ramakrishnan,\n\nIf there is a precedent in the vendor interface, I\u0027m fine to use the word \"MixIn\" for consistency in Ironic world. :-)\n\nThanks.\nNaohiro","commit_id":"fe2c0fffe07bd33608ac49ac4d114e51e2ddab7f"}]}
