)]}'
{"doc/source/admin/boot-from-volume.rst":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7da97929275e93490d2f5c548a91927ce743e99d","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"A ``user`` storage interface is available that can be utilized without a"},{"line_number":100,"context_line":"Block Storage Service installation. This interface contains the logic that"},{"line_number":101,"context_line":"allows the Bare Metal Service to determine if there is a storage volume"},{"line_number":102,"context_line":"has been reqeuested and to act accordingly. This is in contrast to the"},{"line_number":103,"context_line":"``noop`` interface which does not contain logic to determine if the node"},{"line_number":104,"context_line":"should or could boot from a a remote volume."}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf659307_5f22d1ba","line":101,"range":{"start_line":101,"start_character":46,"end_line":101,"end_character":54},"updated":"2018-04-12 12:24:25.000000000","message":"not sure if we need this?","commit_id":"742fcb2cc28d020203f5c15da7fbacdb771e305b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7da97929275e93490d2f5c548a91927ce743e99d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"A ``user`` storage interface is available that can be utilized without a"},{"line_number":100,"context_line":"Block Storage Service installation. This interface contains the logic that"},{"line_number":101,"context_line":"allows the Bare Metal Service to determine if there is a storage volume"},{"line_number":102,"context_line":"has been reqeuested and to act accordingly. This is in contrast to the"},{"line_number":103,"context_line":"``noop`` interface which does not contain logic to determine if the node"},{"line_number":104,"context_line":"should or could boot from a a remote volume."},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf659307_2af9ddc6","line":102,"range":{"start_line":102,"start_character":27,"end_line":102,"end_character":42},"updated":"2018-04-12 12:24:25.000000000","message":"I am a bit confused reading this. If I got it right, user storage interface will never try to manage the storage (e.g. request or attach the volume) like the cinder interface supposedly does, so the user is expected to deal with that. \n\nMay be worth noting a bit more details here on how the user storage works?","commit_id":"742fcb2cc28d020203f5c15da7fbacdb771e305b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7da97929275e93490d2f5c548a91927ce743e99d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"A ``user`` storage interface is available that can be utilized without a"},{"line_number":100,"context_line":"Block Storage Service installation. This interface contains the logic that"},{"line_number":101,"context_line":"allows the Bare Metal Service to determine if there is a storage volume"},{"line_number":102,"context_line":"has been reqeuested and to act accordingly. This is in contrast to the"},{"line_number":103,"context_line":"``noop`` interface which does not contain logic to determine if the node"},{"line_number":104,"context_line":"should or could boot from a a remote volume."},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf659307_7f3795ff","line":102,"range":{"start_line":102,"start_character":9,"end_line":102,"end_character":19},"updated":"2018-04-12 12:24:25.000000000","message":"typo","commit_id":"742fcb2cc28d020203f5c15da7fbacdb771e305b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7da97929275e93490d2f5c548a91927ce743e99d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"allows the Bare Metal Service to determine if there is a storage volume"},{"line_number":102,"context_line":"has been reqeuested and to act accordingly. This is in contrast to the"},{"line_number":103,"context_line":"``noop`` interface which does not contain logic to determine if the node"},{"line_number":104,"context_line":"should or could boot from a a remote volume."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"It must be noted that minimal configuration or value validation occurs"},{"line_number":107,"context_line":"with the ``user`` storage interface. The ``cinder`` storage interface"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf659307_1f28d994","line":104,"range":{"start_line":104,"start_character":26,"end_line":104,"end_character":27},"updated":"2018-04-12 12:24:25.000000000","message":"typo","commit_id":"742fcb2cc28d020203f5c15da7fbacdb771e305b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4bd00c6772b83ef5d4e1e80ec52027c6d73ef22","unresolved":false,"context_lines":[{"line_number":96,"context_line":"Use Witout Cinder"},{"line_number":97,"context_line":"-----------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"In Rocky, a ``user`` storage interface is available that can be utilized"},{"line_number":100,"context_line":"without a Block Storage Service installation."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Under normal circumstances with the ``cinder`` storage interface"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_ce929e57","line":99,"updated":"2018-04-24 10:01:19.000000000","message":"bikeshedding, but maybe call it \"external\"?","commit_id":"916fad8ecff21b4beb6d93d9c6bf2854e677ab7b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a713b25a23f29ffecf8157164a5fb181abbd0819","unresolved":false,"context_lines":[{"line_number":96,"context_line":"Use Witout Cinder"},{"line_number":97,"context_line":"-----------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"In Rocky, a ``user`` storage interface is available that can be utilized"},{"line_number":100,"context_line":"without a Block Storage Service installation."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Under normal circumstances with the ``cinder`` storage interface"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_d208b8da","line":99,"in_reply_to":"9f6a8fd7_ce929e57","updated":"2018-04-27 02:56:22.000000000","message":"I think that could work. I only called it user from a standpoint of \"hey, a user would need to be the orchestrator\" but yeah... external could work. I\u0027m not convinced because of connotation of external. External could be a script trigger hook to some. I don\u0027t know.","commit_id":"916fad8ecff21b4beb6d93d9c6bf2854e677ab7b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4bd00c6772b83ef5d4e1e80ec52027c6d73ef22","unresolved":false,"context_lines":[{"line_number":100,"context_line":"without a Block Storage Service installation."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Under normal circumstances with the ``cinder`` storage interface"},{"line_number":103,"context_line":"interacts with the Block Storage Service to orchustrate and manage"},{"line_number":104,"context_line":"attachment and detachment of volumes from the underlying block service"},{"line_number":105,"context_line":"system."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_6e9d9264","line":103,"updated":"2018-04-24 10:01:19.000000000","message":"typo: orchestrate","commit_id":"916fad8ecff21b4beb6d93d9c6bf2854e677ab7b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4bd00c6772b83ef5d4e1e80ec52027c6d73ef22","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"The ``user`` storage interface contains the logic to allow the Bare"},{"line_number":108,"context_line":"Metal service to determine if the Bare Metal node has been requested with"},{"line_number":109,"context_line":"a remote storage volume for booting."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"This is in contrast to the default ``noop`` storage interface which does"},{"line_number":112,"context_line":"not contain logic to determine if the node should or could boot from a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_8e982675","line":109,"updated":"2018-04-24 10:01:19.000000000","message":"nit: to be honest, this paragraph does not seem to add anything useful to what is said above. maybe merge it with the next paragraph and start with \"Unlike the default ``noop`` storage interface...\"","commit_id":"916fad8ecff21b4beb6d93d9c6bf2854e677ab7b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a713b25a23f29ffecf8157164a5fb181abbd0819","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"The ``user`` storage interface contains the logic to allow the Bare"},{"line_number":108,"context_line":"Metal service to determine if the Bare Metal node has been requested with"},{"line_number":109,"context_line":"a remote storage volume for booting."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"This is in contrast to the default ``noop`` storage interface which does"},{"line_number":112,"context_line":"not contain logic to determine if the node should or could boot from a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_9287a010","line":109,"in_reply_to":"9f6a8fd7_8e982675","updated":"2018-04-27 02:56:22.000000000","message":"I like the idea of merging it, and that might have been what I was thinking originally. I wanted to contrast the differences.","commit_id":"916fad8ecff21b4beb6d93d9c6bf2854e677ab7b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4bd00c6772b83ef5d4e1e80ec52027c6d73ef22","unresolved":false,"context_lines":[{"line_number":135,"context_line":"Ensure that no image_source is defined::"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    openstack baremetal node unset \\"},{"line_number":138,"context_line":"    --instance-info image_source $NODE_UUID"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Deploy the node::"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_2e8d5a31","line":138,"updated":"2018-04-24 10:01:19.000000000","message":"nit: indentation","commit_id":"916fad8ecff21b4beb6d93d9c6bf2854e677ab7b"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"aa9488001754c5283931351c572af1d6ac4e8b99","unresolved":false,"context_lines":[{"line_number":93,"context_line":"          node. As the ``boot-index`` is per-node in sequential order,"},{"line_number":94,"context_line":"          only one boot volume is permitted for each node."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Use Witout Cinder"},{"line_number":97,"context_line":"-----------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"In Rocky, an ``external`` storage interface is available that can be utilized"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_df940547","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":10},"updated":"2018-05-08 14:36:47.000000000","message":"without","commit_id":"be71f8fc7ec3720098acc305ff2f33b2a5f8c299"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"aa9488001754c5283931351c572af1d6ac4e8b99","unresolved":false,"context_lines":[{"line_number":99,"context_line":"In Rocky, an ``external`` storage interface is available that can be utilized"},{"line_number":100,"context_line":"without a Block Storage Service installation."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Under normal circumstances with the ``cinder`` storage interface"},{"line_number":103,"context_line":"interacts with the Block Storage Service to orchestrate and manage"},{"line_number":104,"context_line":"attachment and detachment of volumes from the underlying block service"},{"line_number":105,"context_line":"system."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_7f8db12f","line":102,"range":{"start_line":102,"start_character":27,"end_line":102,"end_character":35},"updated":"2018-05-08 14:36:47.000000000","message":"s/with the/the","commit_id":"be71f8fc7ec3720098acc305ff2f33b2a5f8c299"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"aa9488001754c5283931351c572af1d6ac4e8b99","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        --property auth_username\u003d\"ABC\" \\"},{"line_number":131,"context_line":"        --property auth_password\u003d\"XYZ\" \\"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Ensure that no image_source is defined::"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    openstack baremetal node unset \\"},{"line_number":136,"context_line":"        --instance-info image_source $NODE_UUID"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Deploy the node::"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_9ff3ed9e","line":136,"range":{"start_line":133,"start_character":0,"end_line":136,"end_character":47},"updated":"2018-05-08 14:36:47.000000000","message":"Do we want to mention writing out to a empty SAN with an image?","commit_id":"be71f8fc7ec3720098acc305ff2f33b2a5f8c299"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"47fccf528cb22ba9d218d44062de9515fd400225","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        --property auth_username\u003d\"ABC\" \\"},{"line_number":131,"context_line":"        --property auth_password\u003d\"XYZ\" \\"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Ensure that no image_source is defined::"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    openstack baremetal node unset \\"},{"line_number":136,"context_line":"        --instance-info image_source $NODE_UUID"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Deploy the node::"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_ecb22f94","line":136,"range":{"start_line":133,"start_character":0,"end_line":136,"end_character":47},"in_reply_to":"5f7c97a3_9ff3ed9e","updated":"2018-05-11 14:18:32.000000000","message":"We don\u0027t support that yet... I guess for a standalone user it might be good to grok that the image needs to be there, but then again most documentation in the public universe on booting from a san with iscsi indicates that you need to ensure that you have an actual OS image in that block device.","commit_id":"be71f8fc7ec3720098acc305ff2f33b2a5f8c299"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5abbc271941aa88210276e31e175543a0b3a3d83","unresolved":false,"context_lines":[{"line_number":96,"context_line":"Use Without Cinder"},{"line_number":97,"context_line":"------------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"In Rocky, an ``external`` storage interface is available that can be utilized"},{"line_number":100,"context_line":"without a Block Storage Service installation."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Under normal circumstances the ``cinder`` storage interface"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_43d48947","line":99,"updated":"2018-06-07 17:19:37.000000000","message":"nit: the Rocky release (for those not familiar with our code names)","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dead7bc270978c9d4b1fd6bda2d7fa62249e9d24","unresolved":false,"context_lines":[{"line_number":96,"context_line":"Use Without Cinder"},{"line_number":97,"context_line":"------------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"In Rocky, an ``external`` storage interface is available that can be utilized"},{"line_number":100,"context_line":"without a Block Storage Service installation."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Under normal circumstances the ``cinder`` storage interface"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_ac22ce50","line":99,"in_reply_to":"5f7c97a3_43d48947","updated":"2018-06-12 18:31:51.000000000","message":"Done","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"}],"ironic/drivers/modules/storage/external.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5abbc271941aa88210276e31e175543a0b3a3d83","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class ExternalStorage(base.StorageInterface):"},{"line_number":25,"context_line":"    \"\"\"Externally driven Storage Interface.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _fail_validation(self, task, reason,"},{"line_number":28,"context_line":"                         exception\u003dexception.InvalidParameterValue):"},{"line_number":29,"context_line":"        msg \u003d (_(\"Failed to validate external storage interface for node \""},{"line_number":30,"context_line":"                 \"%(node)s. %(reason)s\") %"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_63e50538","line":27,"updated":"2018-06-07 17:19:37.000000000","message":"nit: this method is used only once, and can be inlined in validate()","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dead7bc270978c9d4b1fd6bda2d7fa62249e9d24","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class ExternalStorage(base.StorageInterface):"},{"line_number":25,"context_line":"    \"\"\"Externally driven Storage Interface.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _fail_validation(self, task, reason,"},{"line_number":28,"context_line":"                         exception\u003dexception.InvalidParameterValue):"},{"line_number":29,"context_line":"        msg \u003d (_(\"Failed to validate external storage interface for node \""},{"line_number":30,"context_line":"                 \"%(node)s. %(reason)s\") %"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_8cc11251","line":27,"in_reply_to":"5f7c97a3_63e50538","updated":"2018-06-12 18:31:51.000000000","message":"Done","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5abbc271941aa88210276e31e175543a0b3a3d83","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def validate(self, task):"},{"line_number":36,"context_line":"        if not self.should_write_image(task):"},{"line_number":37,"context_line":"            if not CONF.pxe.ipxe_enabled:"},{"line_number":38,"context_line":"                msg \u003d _(\"The [pxe]/ipxe_enabled option must \""},{"line_number":39,"context_line":"                        \"be set to True to support network \""},{"line_number":40,"context_line":"                        \"booting to an iSCSI volume.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_83e06128","line":37,"updated":"2018-06-07 17:19:37.000000000","message":"nit: the conditions can be joined","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dead7bc270978c9d4b1fd6bda2d7fa62249e9d24","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def validate(self, task):"},{"line_number":36,"context_line":"        if not self.should_write_image(task):"},{"line_number":37,"context_line":"            if not CONF.pxe.ipxe_enabled:"},{"line_number":38,"context_line":"                msg \u003d _(\"The [pxe]/ipxe_enabled option must \""},{"line_number":39,"context_line":"                        \"be set to True to support network \""},{"line_number":40,"context_line":"                        \"booting to an iSCSI volume.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_acd08e20","line":37,"in_reply_to":"5f7c97a3_83e06128","updated":"2018-06-12 18:31:51.000000000","message":"Done","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5abbc271941aa88210276e31e175543a0b3a3d83","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            if not CONF.pxe.ipxe_enabled:"},{"line_number":38,"context_line":"                msg \u003d _(\"The [pxe]/ipxe_enabled option must \""},{"line_number":39,"context_line":"                        \"be set to True to support network \""},{"line_number":40,"context_line":"                        \"booting to an iSCSI volume.\")"},{"line_number":41,"context_line":"                self._fail_validation(task, msg)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get_properties(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_23d14d58","line":40,"updated":"2018-06-07 17:19:37.000000000","message":"Do we want to check that we have an iSCSI volume indeed or is it done by a boot interface?","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dead7bc270978c9d4b1fd6bda2d7fa62249e9d24","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            if not CONF.pxe.ipxe_enabled:"},{"line_number":38,"context_line":"                msg \u003d _(\"The [pxe]/ipxe_enabled option must \""},{"line_number":39,"context_line":"                        \"be set to True to support network \""},{"line_number":40,"context_line":"                        \"booting to an iSCSI volume.\")"},{"line_number":41,"context_line":"                self._fail_validation(task, msg)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get_properties(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_2cbd5ed7","line":40,"in_reply_to":"5f7c97a3_23d14d58","updated":"2018-06-12 18:31:51.000000000","message":"Given the completely opt-in nature, I\u0027m unsure there is anything additional we should check here if there is a volume. That and and we kind of check with should_write_image.","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ee53b16c2de8ee80041c384b690655ea350c4b16","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            raise exception(msg)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        if (not self.should_write_image(task)"},{"line_number":37,"context_line":"            and not CONF.pxe.ipxe_enabled):"},{"line_number":38,"context_line":"                msg \u003d _(\"The [pxe]/ipxe_enabled option must \""},{"line_number":39,"context_line":"                        \"be set to True to support network \""},{"line_number":40,"context_line":"                        \"booting to an iSCSI volume.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_7a553a4f","line":37,"updated":"2018-06-26 07:38:58.000000000","message":"I\u0027m not sure if ipxe_enabled should be validated here since it depends on a boot interface whether iPXE is required. However, this should be discussed elsewhere because there is a similar issue in \u0027cinder\u0027 storage interface[1]. \n\n[1] https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/storage/cinder.py#L85","commit_id":"5795c57985e65cd96c3a71e1329e578a1e947449"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6d638614e03405bb151ee12ad67a3a2b6149b991","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            raise exception(msg)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        if (not self.should_write_image(task)"},{"line_number":37,"context_line":"            and not CONF.pxe.ipxe_enabled):"},{"line_number":38,"context_line":"                msg \u003d _(\"The [pxe]/ipxe_enabled option must \""},{"line_number":39,"context_line":"                        \"be set to True to support network \""},{"line_number":40,"context_line":"                        \"booting to an iSCSI volume.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_f375f598","line":37,"updated":"2018-06-26 09:31:03.000000000","message":"yeah, it looks like we\u0027re assuming the PXE boot.","commit_id":"5795c57985e65cd96c3a71e1329e578a1e947449"}],"ironic/drivers/modules/storage/user.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4bd00c6772b83ef5d4e1e80ec52027c6d73ef22","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        raise exception(msg)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def validate(self, task):"},{"line_number":36,"context_line":"        if not self.should_write_image(task):"},{"line_number":37,"context_line":"            if not CONF.pxe.ipxe_enabled:"},{"line_number":38,"context_line":"                msg \u003d _(\"The [pxe]/ipxe_enabled option must \""},{"line_number":39,"context_line":"                        \"be set to True to support network \""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_ae972a48","line":36,"updated":"2018-04-24 10:01:19.000000000","message":"mmm, if should_write_image is true, won\u0027t we still boot from iPXE? I thought it\u0027s only about whether to write stuff to the remote share...","commit_id":"916fad8ecff21b4beb6d93d9c6bf2854e677ab7b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a713b25a23f29ffecf8157164a5fb181abbd0819","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        raise exception(msg)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def validate(self, task):"},{"line_number":36,"context_line":"        if not self.should_write_image(task):"},{"line_number":37,"context_line":"            if not CONF.pxe.ipxe_enabled:"},{"line_number":38,"context_line":"                msg \u003d _(\"The [pxe]/ipxe_enabled option must \""},{"line_number":39,"context_line":"                        \"be set to True to support network \""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_d263d8b0","line":36,"in_reply_to":"9f6a8fd7_ae972a48","updated":"2018-04-27 02:56:22.000000000","message":"We shouldn\u0027t need to undergo BFV validation of any sort, so there really is no need. Really, there is no reason to try and perform any the validation if we don\u0027t think we have information to BFV.","commit_id":"916fad8ecff21b4beb6d93d9c6bf2854e677ab7b"}],"ironic/tests/unit/drivers/modules/storage/test_user.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5abbc271941aa88210276e31e175543a0b3a3d83","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super(UserInterfaceTestCase, self).setUp()"},{"line_number":29,"context_line":"        self.config(ipxe_enabled\u003dTrue,"},{"line_number":30,"context_line":"                    group\u003d\u0027pxe\u0027)"},{"line_number":31,"context_line":"        self.config(enabled_drivers\u003d[\u0027fake\u0027])"},{"line_number":32,"context_line":"        self.config(enabled_storage_interfaces\u003d[\u0027noop\u0027, \u0027external\u0027])"},{"line_number":33,"context_line":"        mgr_utils.mock_the_extension_manager()"},{"line_number":34,"context_line":"        self.interface \u003d external.ExternalStorage()"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a3db1d7b","line":31,"updated":"2018-06-07 17:19:37.000000000","message":"This should be removed, we\u0027re about to remove this driver","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dead7bc270978c9d4b1fd6bda2d7fa62249e9d24","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super(UserInterfaceTestCase, self).setUp()"},{"line_number":29,"context_line":"        self.config(ipxe_enabled\u003dTrue,"},{"line_number":30,"context_line":"                    group\u003d\u0027pxe\u0027)"},{"line_number":31,"context_line":"        self.config(enabled_drivers\u003d[\u0027fake\u0027])"},{"line_number":32,"context_line":"        self.config(enabled_storage_interfaces\u003d[\u0027noop\u0027, \u0027external\u0027])"},{"line_number":33,"context_line":"        mgr_utils.mock_the_extension_manager()"},{"line_number":34,"context_line":"        self.interface \u003d external.ExternalStorage()"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_2c8b1e1f","line":31,"in_reply_to":"5f7c97a3_a3db1d7b","updated":"2018-06-12 18:31:51.000000000","message":"Done","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5abbc271941aa88210276e31e175543a0b3a3d83","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                    group\u003d\u0027pxe\u0027)"},{"line_number":31,"context_line":"        self.config(enabled_drivers\u003d[\u0027fake\u0027])"},{"line_number":32,"context_line":"        self.config(enabled_storage_interfaces\u003d[\u0027noop\u0027, \u0027external\u0027])"},{"line_number":33,"context_line":"        mgr_utils.mock_the_extension_manager()"},{"line_number":34,"context_line":"        self.interface \u003d external.ExternalStorage()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @mock.patch.object(external, \u0027LOG\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_c3d65954","line":33,"updated":"2018-06-07 17:19:37.000000000","message":"This is gone (and not needed)","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dead7bc270978c9d4b1fd6bda2d7fa62249e9d24","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                    group\u003d\u0027pxe\u0027)"},{"line_number":31,"context_line":"        self.config(enabled_drivers\u003d[\u0027fake\u0027])"},{"line_number":32,"context_line":"        self.config(enabled_storage_interfaces\u003d[\u0027noop\u0027, \u0027external\u0027])"},{"line_number":33,"context_line":"        mgr_utils.mock_the_extension_manager()"},{"line_number":34,"context_line":"        self.interface \u003d external.ExternalStorage()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @mock.patch.object(external, \u0027LOG\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_8c96f248","line":33,"in_reply_to":"5f7c97a3_c3d65954","updated":"2018-06-12 18:31:51.000000000","message":"Done","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"}],"releasenotes/notes/adds-external-storage-interface-9b7c0a0a2afd3176.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5abbc271941aa88210276e31e175543a0b3a3d83","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds ``external`` storage interface which is short for"},{"line_number":5,"context_line":"    \"externally managed\". This adds logic to allow ironic to"},{"line_number":6,"context_line":"    identify when a BFV scenario is being requested based upon"},{"line_number":7,"context_line":"    the configuration set for ``volume targets``."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_e3f11503","line":5,"updated":"2018-06-07 17:19:37.000000000","message":"nit: the Bare Metal service","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dead7bc270978c9d4b1fd6bda2d7fa62249e9d24","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds ``external`` storage interface which is short for"},{"line_number":5,"context_line":"    \"externally managed\". This adds logic to allow ironic to"},{"line_number":6,"context_line":"    identify when a BFV scenario is being requested based upon"},{"line_number":7,"context_line":"    the configuration set for ``volume targets``."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_8ca35243","line":5,"in_reply_to":"5f7c97a3_e3f11503","updated":"2018-06-12 18:31:51.000000000","message":"Done","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5abbc271941aa88210276e31e175543a0b3a3d83","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds ``external`` storage interface which is short for"},{"line_number":5,"context_line":"    \"externally managed\". This adds logic to allow ironic to"},{"line_number":6,"context_line":"    identify when a BFV scenario is being requested based upon"},{"line_number":7,"context_line":"    the configuration set for ``volume targets``."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The user must create the entry, and no syncronizaiton with a Block Storage"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_03f531ed","line":6,"updated":"2018-06-07 17:19:37.000000000","message":"nit: expand BFV?","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dead7bc270978c9d4b1fd6bda2d7fa62249e9d24","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds ``external`` storage interface which is short for"},{"line_number":5,"context_line":"    \"externally managed\". This adds logic to allow ironic to"},{"line_number":6,"context_line":"    identify when a BFV scenario is being requested based upon"},{"line_number":7,"context_line":"    the configuration set for ``volume targets``."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The user must create the entry, and no syncronizaiton with a Block Storage"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_2c647e21","line":6,"in_reply_to":"5f7c97a3_03f531ed","updated":"2018-06-12 18:31:51.000000000","message":"Done","commit_id":"f5a83445a1acbbeedc30f13b9a41b4d46f565056"}],"releasenotes/notes/adds-user-driven-storage-interface-9b7c0a0a2afd3176.yaml":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7da97929275e93490d2f5c548a91927ce743e99d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a ``user`` storage interface which is short for \"user driven\"."},{"line_number":5,"context_line":"    adds logic to allow ironic to identify when a BFV scenario is being requested"},{"line_number":6,"context_line":"    based upon the configuration set for ``volume targets``."},{"line_number":7,"context_line":"    "}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bf659307_ca52a113","line":4,"range":{"start_line":4,"start_character":9,"end_line":4,"end_character":10},"updated":"2018-04-12 12:24:25.000000000","message":"not sure if article is needed here?","commit_id":"742fcb2cc28d020203f5c15da7fbacdb771e305b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7da97929275e93490d2f5c548a91927ce743e99d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds a ``user`` storage interface which is short for \"user driven\"."},{"line_number":5,"context_line":"    adds logic to allow ironic to identify when a BFV scenario is being requested"},{"line_number":6,"context_line":"    based upon the configuration set for ``volume targets``."},{"line_number":7,"context_line":"    "},{"line_number":8,"context_line":"    The user must create the entry, and no syncronizaiton with a Block Storage"},{"line_number":9,"context_line":"    Service will occur."},{"line_number":10,"context_line":"    `Documentation \u003chttps://docs.openstack.org/ironic/latest/admin/boot-from-volume.html#use-without-cinder\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bf659307_0a441946","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":4},"updated":"2018-04-12 12:24:25.000000000","message":"nit: white spaces","commit_id":"742fcb2cc28d020203f5c15da7fbacdb771e305b"}]}
