)]}'
{"specs/approved/snapshot-support.rst":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6aa41d6577cf4ddf75fecccad89fd85a5b4a610f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"The proposal is to implement a similar process like deployment, when a node"},{"line_number":31,"context_line":"is requested to do a snapshot, ironic prepares boot configuration then"},{"line_number":32,"context_line":"triggers a netboot to the node, IPA lookups and ironic instructs IPA to"},{"line_number":33,"context_line":"streaming the data of root disk to a remote storage."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The remote storage could be the host where the conductor is running if proper"},{"line_number":36,"context_line":"service like NFS, HTTP, etc is configured. Or another host as long as both"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_2db6bbfb","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":52},"updated":"2020-08-19 14:25:57.000000000","message":"Root devices is a good start, I suspect we should consider expanding this only after we have the base feature in place.","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"c50d0c6e972da975cd975967ef9a79d760932244","unresolved":false,"context_lines":[{"line_number":30,"context_line":"The proposal is to implement a similar process like deployment, when a node"},{"line_number":31,"context_line":"is requested to do a snapshot, ironic prepares boot configuration then"},{"line_number":32,"context_line":"triggers a netboot to the node, IPA lookups and ironic instructs IPA to"},{"line_number":33,"context_line":"streaming the data of root disk to a remote storage."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The remote storage could be the host where the conductor is running if proper"},{"line_number":36,"context_line":"service like NFS, HTTP, etc is configured. Or another host as long as both"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_2a1cd411","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":52},"in_reply_to":"9f560f44_2db6bbfb","updated":"2020-08-20 02:22:21.000000000","message":"This is tightly related with the image supported by ironic, as we only deploy the image to the root device currently.\nIf we are taking snapshots for multiple disks, we\u0027ll first need ironic to support that, otherwise user will have to use other means to restore the same system. How group multiple images together is another thing needs consideration.","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6aa41d6577cf4ddf75fecccad89fd85a5b4a610f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"triggers a netboot to the node, IPA lookups and ironic instructs IPA to"},{"line_number":33,"context_line":"streaming the data of root disk to a remote storage."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The remote storage could be the host where the conductor is running if proper"},{"line_number":36,"context_line":"service like NFS, HTTP, etc is configured. Or another host as long as both"},{"line_number":37,"context_line":"conductor and IPA are able to access. The remote storage will act as an"},{"line_number":38,"context_line":"intermediate storage, when the snapshot is done, conductor will upload the"},{"line_number":39,"context_line":"image to the image service and remove the snapshot in the intermediate"},{"line_number":40,"context_line":"storage."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_ed3683b4","line":40,"range":{"start_line":35,"start_character":0,"end_line":40,"end_character":8},"updated":"2020-08-19 14:25:57.000000000","message":"I like the intermediate nature of this. I think it is reasonable, although I also wonder if we should just wire in direct http put support so webdav targets and swift could potentially be recipients of the data. Then again, the files are likely too large.","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"045f5576269e9ac38686f802e90d940598e78e2c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"* snapshot wait -\u003e snapshot failed (on abort)"},{"line_number":70,"context_line":"* snapshoting -\u003e snapshot failed (on fail)"},{"line_number":71,"context_line":"* snapshoting -\u003e active (on done)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"REST API impact"},{"line_number":75,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_6a99ac77","line":72,"updated":"2020-08-20 02:25:49.000000000","message":"we probably need a transition from snapshot failed to active, a failed snapshoting shouldn\u0027t make the instance unable to use.\n\nsnapshot failed -\u003e active (on ?abort?)","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6aa41d6577cf4ddf75fecccad89fd85a5b4a610f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"-----------------"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Adds an optional interface ``snapshot_interface``, initially implements"},{"line_number":113,"context_line":"``fake``, ``no-snapshot``, and ``agent``."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Nova driver impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_ad548bcb","line":113,"updated":"2020-08-19 14:25:57.000000000","message":"I\u0027m kind of wonder if this just falls into the deploy interface? At the same time separate makes some sense.","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"5cd2fde4ccc3f9c706e25ac4228d4860c4911322","unresolved":false,"context_lines":[{"line_number":110,"context_line":"-----------------"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Adds an optional interface ``snapshot_interface``, initially implements"},{"line_number":113,"context_line":"``fake``, ``no-snapshot``, and ``agent``."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Nova driver impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_703ec829","line":113,"in_reply_to":"9f560f44_ad548bcb","updated":"2020-08-19 15:12:42.000000000","message":"Well, we have rescue but it has own interface, maybe I would know the answer if I know why it\u0027s designed that way :)","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6aa41d6577cf4ddf75fecccad89fd85a5b4a610f","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Implements a snapshot extension in the ironic-python-agent, initially using"},{"line_number":128,"context_line":"``qemu-img`` for streaming disk data to the remote storage in the format of"},{"line_number":129,"context_line":"QCOW. Other tools also available but can be discussed later."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Security impact"},{"line_number":132,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_6d739381","line":129,"updated":"2020-08-19 14:25:57.000000000","message":"I think this is actually a very good idea in that we offload whitespace removal and compression to the node itself as it is streaming to the target, which really means we need some sort of filesystem access for a destination.","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6aa41d6577cf4ddf75fecccad89fd85a5b4a610f","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Other contributors:"},{"line_number":175,"context_line":"  \u003cIRC handle, email address, None\u003e"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Work Items"},{"line_number":178,"context_line":"----------"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_0d12d709","line":176,"updated":"2020-08-19 14:25:57.000000000","message":"I will gladly review!","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6aa41d6577cf4ddf75fecccad89fd85a5b4a610f","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"Will be covered by unit tests. snapshot is a time consuming operation, it\u0027s"},{"line_number":192,"context_line":"unlikely we want to have tempest tests on it."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"Upgrades and Backwards Compatibility"},{"line_number":196,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f560f44_edbb23e2","line":193,"updated":"2020-08-19 14:25:57.000000000","message":"At least not enabled by default... or maybe API fake interface level testing just so the API contract is assured.","commit_id":"8255fd7b6e95b6f742b60b578691cf7a584c4b5f"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":67,"context_line":"* snapshoting -\u003e snapshot failed (on fail) On error"},{"line_number":68,"context_line":"* snapshoting -\u003e snapshot wait (on wait) Wait for ramdisk alive"},{"line_number":69,"context_line":"* snapshot wait -\u003e snapshoting (on resume) Image streaming and uploading"},{"line_number":70,"context_line":"* snapshot wait -\u003e snapshot failed (on abort) On error"},{"line_number":71,"context_line":"* snapshoting -\u003e active (on done) Snapshot complete"},{"line_number":72,"context_line":"* snapshot failed -\u003e active (on abort) Abort a failed snapshot"},{"line_number":73,"context_line":"* snapshot failed -\u003e snapshoting (on snapshot) Retrigger a failed snapshot"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_128e3e78","line":70,"updated":"2020-08-22 02:16:24.000000000","message":"snapshot wait -\u003e snapshot failed (on fail) On timeout","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"\"openstacksdk\""},{"line_number":98,"context_line":"~~~~~~~~~~~~~~"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Changes, if any, to the `OpenStack SDK"},{"line_number":101,"context_line":"\u003chttps://docs.openstack.org/openstacksdk/latest/\u003e`_, `baremetal"},{"line_number":102,"context_line":"\u003chttps://opendev.org/openstack/openstacksdk/src/branch/master/openstack/baremetal\u003e`_"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_f2df4a63","line":99,"updated":"2020-08-22 02:16:24.000000000","message":"if the new verb can\u0027t be recognized at openstacksdk, it will need enahancement to be useful by other services (e.g. nova)","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"a62de2ccb49dcb0334af987c86bc62d47b2520da","unresolved":false,"context_lines":[{"line_number":105,"context_line":"RPC API impact"},{"line_number":106,"context_line":"--------------"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"None"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Driver API impact"},{"line_number":111,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_92a7eebc","line":108,"updated":"2020-08-22 02:46:17.000000000","message":"a new rpc api do_node_snapshot","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Implements a ``snapshot`` extension in the ironic-python-agent, initially"},{"line_number":150,"context_line":"using ``qemu-img`` for streaming disk data to the remote storage in the format"},{"line_number":151,"context_line":"of QCOW. Other tools also available but can be discussed later."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"The snapshot extension is defined as:"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_d2c5e68f","line":151,"range":{"start_line":151,"start_character":40,"end_line":151,"end_character":63},"updated":"2020-08-22 02:16:24.000000000","message":"needs investigation","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    \"url\": \"http://example.com/a830ebe1-67d4-448f-aa10-5bb33f3f3c02.qcow2\""},{"line_number":176,"context_line":"  }"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"When direct deploy interface is used with http server, the http service could"},{"line_number":179,"context_line":"be utilized after proper configuration."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"or a iSCSI connection, for example::"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_72cdfab5","line":179,"range":{"start_line":178,"start_character":0,"end_line":179,"end_character":39},"updated":"2020-08-22 02:16:24.000000000","message":"qemu-img doesn\u0027t support pipe, the remote storage has to be mounted to the ramdisk to be useful.\nFor a webdav connection, mount.davfs is required, this doesn\u0027t appear better than NFS, will change to NFS for prototyping.","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":191,"context_line":"  }"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"The iSCSI storage could be an external storage service or probably started by"},{"line_number":194,"context_line":"conductor with a file backend."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"Only ``type`` is defined at the moment, other arguments needs to be settled"},{"line_number":197,"context_line":"down."}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_72f4daf1","line":194,"range":{"start_line":194,"start_character":17,"end_line":194,"end_character":29},"updated":"2020-08-22 02:16:24.000000000","message":"The conundrum is we don\u0027t know how large the storage should be defined, and it seeems for file backend, the volume can\u0027t be dynamically extended.","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":203,"context_line":"The transfer of instance image from the target bare metal to image service"},{"line_number":204,"context_line":"could have security risk since the data could be tampered or retrieved during"},{"line_number":205,"context_line":"this process."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Other end user impact"},{"line_number":209,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_d2dcc675","line":206,"updated":"2020-08-22 02:16:24.000000000","message":"If the the storage service is provided by the conductor host, it could be under security attack before this feature is introduced.","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":208,"context_line":"Other end user impact"},{"line_number":209,"context_line":"---------------------"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"None"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Scalability impact"},{"line_number":214,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_323c2292","line":211,"updated":"2020-08-22 02:16:24.000000000","message":"if the storage is provided by the conductor host instead of a shared storage, a snapshot operation should fail if the node is taken by another conductor, or we need to record where is the storage to allow short time disturbance.","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":218,"context_line":"Performance Impact"},{"line_number":219,"context_line":"------------------"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"None"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Other deployer impact"},{"line_number":224,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_b2d95284","line":221,"updated":"2020-08-22 02:16:24.000000000","message":"Will have new periodic tasks to guard snapshot related states.","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"b3ff66aee1847b5824e5e8ca83694ac369d70614","unresolved":false,"context_lines":[{"line_number":228,"context_line":"Developer impact"},{"line_number":229,"context_line":"----------------"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"None"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f560f44_d24a0625","line":231,"updated":"2020-08-22 02:16:24.000000000","message":"New interface will have impact on developers, we should be able to provide backwards compatibility by default.","commit_id":"78c7f58f4746ed01c3157edb8267a575f61e3fb4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"The problem is obvious, we are lacking the ability of snapshot, and from the"},{"line_number":24,"context_line":"nova side it\u0027s just a NotImplemented."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_8ea0d893","line":24,"updated":"2020-09-01 12:24:37.000000000","message":"Would be great to turn this into a full user story, like \"As an operator I want ...\", and not just \"... create a snapshot.\", but what you\u0027re going to achieve in the end.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"The problem is obvious, we are lacking the ability of snapshot, and from the"},{"line_number":24,"context_line":"nova side it\u0027s just a NotImplemented."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_8e18cb84","line":24,"in_reply_to":"9f560f44_8ea0d893","updated":"2020-09-02 09:14:24.000000000","message":"Done","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"triggers a netboot to the node, IPA lookups and ironic instructs IPA to"},{"line_number":33,"context_line":"streaming the data of root disk to a remote storage."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The remote storage could be the host where the conductor is running if proper"},{"line_number":36,"context_line":"service like NFS, HTTP, etc is configured. Or another host as long as both"},{"line_number":37,"context_line":"conductor and IPA are able to access. The remote storage will act as an"},{"line_number":38,"context_line":"intermediate storage, when the streaming is done, conductor will upload the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_6e9d8456","line":35,"updated":"2020-09-01 12:24:37.000000000","message":"Let\u0027s add some details on which storage methods we\u0027ll support in the first version and how exactly it will work. I\u0027d honestly start with HTTP only.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"triggers a netboot to the node, IPA lookups and ironic instructs IPA to"},{"line_number":33,"context_line":"streaming the data of root disk to a remote storage."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The remote storage could be the host where the conductor is running if proper"},{"line_number":36,"context_line":"service like NFS, HTTP, etc is configured. Or another host as long as both"},{"line_number":37,"context_line":"conductor and IPA are able to access. The remote storage will act as an"},{"line_number":38,"context_line":"intermediate storage, when the streaming is done, conductor will upload the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_949f3a64","line":35,"in_reply_to":"9f560f44_6e9d8456","updated":"2020-09-02 09:14:24.000000000","message":"Done","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Add following states to the state machine:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* snapshot wait"},{"line_number":61,"context_line":"* snapshoting"},{"line_number":62,"context_line":"* snapshot failed"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"With following transitions:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_ceaad06f","line":61,"updated":"2020-09-01 12:24:37.000000000","message":"\"snapshotting\" (with double \"t\")","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Add following states to the state machine:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* snapshot wait"},{"line_number":61,"context_line":"* snapshoting"},{"line_number":62,"context_line":"* snapshot failed"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"With following transitions:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_549da264","line":61,"in_reply_to":"9f560f44_ceaad06f","updated":"2020-09-02 09:14:24.000000000","message":"Done","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"* active -\u003e snapshoting (on snapshot) Prepare boot and network"},{"line_number":67,"context_line":"* snapshoting -\u003e snapshot failed (on fail) On error"},{"line_number":68,"context_line":"* snapshoting -\u003e snapshot wait (on wait) Wait for ramdisk alive"},{"line_number":69,"context_line":"* snapshot wait -\u003e snapshoting (on resume) Image streaming and uploading"},{"line_number":70,"context_line":"* snapshot wait -\u003e snapshot failed (on fail) On timeout"},{"line_number":71,"context_line":"* snapshoting -\u003e active (on done) Snapshot complete"},{"line_number":72,"context_line":"* snapshot failed -\u003e active (on abort) Abort a failed snapshot"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_aea79ca7","line":69,"updated":"2020-09-01 12:24:37.000000000","message":"Let\u0027s add abort here to stop snapshotting and move the node to \u0027snapshot failed\u0027","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"* snapshot wait -\u003e snapshoting (on resume) Image streaming and uploading"},{"line_number":70,"context_line":"* snapshot wait -\u003e snapshot failed (on fail) On timeout"},{"line_number":71,"context_line":"* snapshoting -\u003e active (on done) Snapshot complete"},{"line_number":72,"context_line":"* snapshot failed -\u003e active (on abort) Abort a failed snapshot"},{"line_number":73,"context_line":"* snapshot failed -\u003e snapshoting (on snapshot) Retrigger a failed snapshot"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_0eb688dd","line":72,"updated":"2020-09-01 12:24:37.000000000","message":"\"unsnapshot\" sounds weird, but I agree that \"abort\" is not appropriate since we use it to stop actions already. In another RFE of mine I suggested \"recover\" (https://storyboard.openstack.org/#!/story/2007646) but it hasn\u0027t yet been approved.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"16e8a6b1ad74c58196d4869a0f8289eb40228e60","unresolved":false,"context_lines":[{"line_number":69,"context_line":"* snapshot wait -\u003e snapshoting (on resume) Image streaming and uploading"},{"line_number":70,"context_line":"* snapshot wait -\u003e snapshot failed (on fail) On timeout"},{"line_number":71,"context_line":"* snapshoting -\u003e active (on done) Snapshot complete"},{"line_number":72,"context_line":"* snapshot failed -\u003e active (on abort) Abort a failed snapshot"},{"line_number":73,"context_line":"* snapshot failed -\u003e snapshoting (on snapshot) Retrigger a failed snapshot"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_923929a5","line":72,"range":{"start_line":72,"start_character":32,"end_line":72,"end_character":37},"updated":"2020-08-31 15:08:14.000000000","message":"Maybe unsnapshot is a more appropriate verb here.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"50559ea992f48f389f44d8f97072c323132ec24b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"* snapshot wait -\u003e snapshoting (on resume) Image streaming and uploading"},{"line_number":70,"context_line":"* snapshot wait -\u003e snapshot failed (on fail) On timeout"},{"line_number":71,"context_line":"* snapshoting -\u003e active (on done) Snapshot complete"},{"line_number":72,"context_line":"* snapshot failed -\u003e active (on abort) Abort a failed snapshot"},{"line_number":73,"context_line":"* snapshot failed -\u003e snapshoting (on snapshot) Retrigger a failed snapshot"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_fdd0242e","line":72,"in_reply_to":"9f560f44_0eb688dd","updated":"2020-09-01 15:35:16.000000000","message":"Oh I was there, I feel trying to unit various *-fail\" to a stable state with one word is hard, unless we have explicit definition on what kind of transitions should be handled by recover and the verb apply, e.g. deleted doesn\u0027t sounds like a recover.\nIn the scope of this rfe, recover or restore sounds reasonable.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"* PUT /v1/nodes/{node_ident}/states/provision"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"  When the requested version is permitted, and node is in the active state,"},{"line_number":84,"context_line":"  start to do a snapshot. Some fields might be required, e.g. ``image_id``."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_eeba34be","line":84,"updated":"2020-09-01 12:24:37.000000000","message":"Could you elaborate? This is an API change, we have to be specific.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"* PUT /v1/nodes/{node_ident}/states/provision"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"  When the requested version is permitted, and node is in the active state,"},{"line_number":84,"context_line":"  start to do a snapshot. Some fields might be required, e.g. ``image_id``."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_54d92220","line":84,"in_reply_to":"9f560f44_eeba34be","updated":"2020-09-02 09:14:24.000000000","message":"Done","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":97,"context_line":"\"openstacksdk\""},{"line_number":98,"context_line":"~~~~~~~~~~~~~~"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"openstacksdk will be enhanced to know the snapshot API version."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"RPC API impact"},{"line_number":103,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_4eb080de","line":100,"updated":"2020-09-01 12:24:37.000000000","message":"nit: and to implement the action itself?","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"\"openstacksdk\""},{"line_number":98,"context_line":"~~~~~~~~~~~~~~"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"openstacksdk will be enhanced to know the snapshot API version."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"RPC API impact"},{"line_number":103,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_94045a80","line":100,"in_reply_to":"9f560f44_4eb080de","updated":"2020-09-02 09:14:24.000000000","message":"Not sure it\u0027s required, last time I peeked it seems the sdk just passes the provision state to ironicclient.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        interface_type \u003d \"snapshot\""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        @abc.abstractmethod"},{"line_number":121,"context_line":"        def snapshot(self, task):"},{"line_number":122,"context_line":"            \"\"\"Perform a snapshot to the task\u0027s node."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"            :param task: A TaskManager instance containing the node to act on."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_2eb54cce","line":121,"updated":"2020-09-01 12:24:37.000000000","message":"How will connection information by passed?","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        interface_type \u003d \"snapshot\""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        @abc.abstractmethod"},{"line_number":121,"context_line":"        def snapshot(self, task):"},{"line_number":122,"context_line":"            \"\"\"Perform a snapshot to the task\u0027s node."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"            :param task: A TaskManager instance containing the node to act on."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_b436be50","line":121,"in_reply_to":"9f560f44_2eb54cce","updated":"2020-09-02 09:14:24.000000000","message":"The connection information is not passed from API, but should be generated or retrieved here and save it into internal_info before return.\nFor the HTTP, we may just need a new configuration option to specify a subdirectory for snapshot images.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        @abc.abstractmethod"},{"line_number":130,"context_line":"        def continue_snapshot(self, task):"},{"line_number":131,"context_line":"            \"\"\"Continue snapshot for async operation."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            :param task: A TaskManager instance containing the node to act on."},{"line_number":134,"context_line":"            \"\"\""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_8ec9f85b","line":131,"updated":"2020-09-01 12:24:37.000000000","message":"Do we need \"snapshot steps\"? Just kidding :) Although...","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"c879461fc198c6a57f3e8b92a97937f6733fb802","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        @abc.abstractmethod"},{"line_number":130,"context_line":"        def continue_snapshot(self, task):"},{"line_number":131,"context_line":"            \"\"\"Continue snapshot for async operation."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            :param task: A TaskManager instance containing the node to act on."},{"line_number":134,"context_line":"            \"\"\""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_040309c0","line":131,"in_reply_to":"9f560f44_8ec9f85b","updated":"2020-09-01 13:32:06.000000000","message":"I actually think this is a not-bad idea. It would potentially make forensic-style imaging a configuration change instead of a code change.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        @abc.abstractmethod"},{"line_number":130,"context_line":"        def continue_snapshot(self, task):"},{"line_number":131,"context_line":"            \"\"\"Continue snapshot for async operation."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            :param task: A TaskManager instance containing the node to act on."},{"line_number":134,"context_line":"            \"\"\""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_d40c1296","line":131,"in_reply_to":"9f560f44_8ec9f85b","updated":"2020-09-02 09:14:24.000000000","message":"it\u0027s a bit heavy at the moment :)","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"247f4fb5df6637b40a5c906f033909a76add91cf","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            \"\"\""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The ``iscsi`` implementation works like a reverse deployment, ironic instructs"},{"line_number":145,"context_line":"IPA to expose the root disk, and mount the target to the conductor host, then"},{"line_number":146,"context_line":"perform a ``qemu-img convert`` in the reverse direction, dumping disk data to"},{"line_number":147,"context_line":"a local image file. Though the ``iscsi`` deploy interface has some issues, but"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_1f788229","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":28},"updated":"2020-08-31 14:30:18.000000000","message":"We\u0027ve agreed to deprecate and eventually remove the iscsi deployment. Let\u0027s only keep the \"agent\" implementation.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            \"\"\""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The ``iscsi`` implementation works like a reverse deployment, ironic instructs"},{"line_number":145,"context_line":"IPA to expose the root disk, and mount the target to the conductor host, then"},{"line_number":146,"context_line":"perform a ``qemu-img convert`` in the reverse direction, dumping disk data to"},{"line_number":147,"context_line":"a local image file. Though the ``iscsi`` deploy interface has some issues, but"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_f41dd677","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":28},"in_reply_to":"9f560f44_1f788229","updated":"2020-09-02 09:14:24.000000000","message":"Done","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"247f4fb5df6637b40a5c906f033909a76add91cf","unresolved":false,"context_lines":[{"line_number":145,"context_line":"IPA to expose the root disk, and mount the target to the conductor host, then"},{"line_number":146,"context_line":"perform a ``qemu-img convert`` in the reverse direction, dumping disk data to"},{"line_number":147,"context_line":"a local image file. Though the ``iscsi`` deploy interface has some issues, but"},{"line_number":148,"context_line":"it has benefits in the snapshot: no local or external storage is required. The"},{"line_number":149,"context_line":"change is also simpler than the ``agent`` implementation."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"For the ``agent`` implementation, ironic needs to be preconfigured with the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_df9baa63","line":148,"range":{"start_line":148,"start_character":32,"end_line":148,"end_character":73},"updated":"2020-08-31 14:30:18.000000000","message":"Well, you do have a local file. Similarly, you can configure a WebDAV directory to accept the file from the agent.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"897056a69c426de687794f1d087c1bc13fd56832","unresolved":false,"context_lines":[{"line_number":145,"context_line":"IPA to expose the root disk, and mount the target to the conductor host, then"},{"line_number":146,"context_line":"perform a ``qemu-img convert`` in the reverse direction, dumping disk data to"},{"line_number":147,"context_line":"a local image file. Though the ``iscsi`` deploy interface has some issues, but"},{"line_number":148,"context_line":"it has benefits in the snapshot: no local or external storage is required. The"},{"line_number":149,"context_line":"change is also simpler than the ``agent`` implementation."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"For the ``agent`` implementation, ironic needs to be preconfigured with the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_f28065c2","line":148,"range":{"start_line":148,"start_character":32,"end_line":148,"end_character":73},"in_reply_to":"9f560f44_12c6b94a","updated":"2020-08-31 15:25:08.000000000","message":"Sure, I am confident it is working :)\nbut more considerations are required, like how do we handle the configdrive :(\nAnyway, will remove the iscsi driver on next update.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6417b977891038bd285c7e46f46c306287964ffb","unresolved":false,"context_lines":[{"line_number":145,"context_line":"IPA to expose the root disk, and mount the target to the conductor host, then"},{"line_number":146,"context_line":"perform a ``qemu-img convert`` in the reverse direction, dumping disk data to"},{"line_number":147,"context_line":"a local image file. Though the ``iscsi`` deploy interface has some issues, but"},{"line_number":148,"context_line":"it has benefits in the snapshot: no local or external storage is required. The"},{"line_number":149,"context_line":"change is also simpler than the ``agent`` implementation."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"For the ``agent`` implementation, ironic needs to be preconfigured with the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_d2f561ef","line":148,"range":{"start_line":148,"start_character":32,"end_line":148,"end_character":73},"in_reply_to":"9f560f44_5f02fa0c","updated":"2020-08-31 15:03:32.000000000","message":"Well, you can upload raw image and convert it on the conductor side (which is the same thing iscsi does).","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"00c37729c69781574e0293569e4a827166ee730c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"IPA to expose the root disk, and mount the target to the conductor host, then"},{"line_number":146,"context_line":"perform a ``qemu-img convert`` in the reverse direction, dumping disk data to"},{"line_number":147,"context_line":"a local image file. Though the ``iscsi`` deploy interface has some issues, but"},{"line_number":148,"context_line":"it has benefits in the snapshot: no local or external storage is required. The"},{"line_number":149,"context_line":"change is also simpler than the ``agent`` implementation."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"For the ``agent`` implementation, ironic needs to be preconfigured with the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_12c6b94a","line":148,"range":{"start_line":148,"start_character":32,"end_line":148,"end_character":73},"in_reply_to":"9f560f44_d25c41ef","updated":"2020-08-31 15:15:20.000000000","message":"I\u0027d suggest we can one simple way working, then look how to improve it.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"16e8a6b1ad74c58196d4869a0f8289eb40228e60","unresolved":false,"context_lines":[{"line_number":145,"context_line":"IPA to expose the root disk, and mount the target to the conductor host, then"},{"line_number":146,"context_line":"perform a ``qemu-img convert`` in the reverse direction, dumping disk data to"},{"line_number":147,"context_line":"a local image file. Though the ``iscsi`` deploy interface has some issues, but"},{"line_number":148,"context_line":"it has benefits in the snapshot: no local or external storage is required. The"},{"line_number":149,"context_line":"change is also simpler than the ``agent`` implementation."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"For the ``agent`` implementation, ironic needs to be preconfigured with the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_d25c41ef","line":148,"range":{"start_line":148,"start_character":32,"end_line":148,"end_character":73},"in_reply_to":"9f560f44_d2f561ef","updated":"2020-08-31 15:08:14.000000000","message":"Yep, this will work, not in an ideal way though :/","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"138579dd5e5eb41ecdc93b68fcc0aa49f6834cff","unresolved":false,"context_lines":[{"line_number":145,"context_line":"IPA to expose the root disk, and mount the target to the conductor host, then"},{"line_number":146,"context_line":"perform a ``qemu-img convert`` in the reverse direction, dumping disk data to"},{"line_number":147,"context_line":"a local image file. Though the ``iscsi`` deploy interface has some issues, but"},{"line_number":148,"context_line":"it has benefits in the snapshot: no local or external storage is required. The"},{"line_number":149,"context_line":"change is also simpler than the ``agent`` implementation."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"For the ``agent`` implementation, ironic needs to be preconfigured with the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_5f02fa0c","line":148,"range":{"start_line":148,"start_character":32,"end_line":148,"end_character":73},"in_reply_to":"9f560f44_df9baa63","updated":"2020-08-31 15:00:55.000000000","message":"I have tried webdav, but qemu-img convert to http://example.com/image.qcow2 doesn\u0027t work :(\nI do hope there is a way to get rid of iscsi indeed.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"4ecc4f57370eea05a37251faacdf794f9060dd26","unresolved":false,"context_lines":[{"line_number":153,"context_line":"IPA when the first heartbeat is received. IPA mounts the volume with provided"},{"line_number":154,"context_line":"connection information and converts root disk device to image file on the"},{"line_number":155,"context_line":"volume."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"No matter which implementation is used, ironic will upload the image data to"},{"line_number":158,"context_line":"the image service with the specified ``image_id`` and remove the intermediate"},{"line_number":159,"context_line":"image."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_b8b6353d","line":156,"updated":"2020-08-25 01:17:58.000000000","message":"Tested at a 1000M network, the root disk is 1TB, the agent implementation costs 83 min to take a snapshot to the conductor host, iscsi needs 3 hours. It didn\u0027t show a great performance difference as expected. But undoubtedly agent has much less network consumption.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"247f4fb5df6637b40a5c906f033909a76add91cf","unresolved":false,"context_lines":[{"line_number":153,"context_line":"IPA when the first heartbeat is received. IPA mounts the volume with provided"},{"line_number":154,"context_line":"connection information and converts root disk device to image file on the"},{"line_number":155,"context_line":"volume."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"No matter which implementation is used, ironic will upload the image data to"},{"line_number":158,"context_line":"the image service with the specified ``image_id`` and remove the intermediate"},{"line_number":159,"context_line":"image."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_9f91324a","line":156,"in_reply_to":"9f560f44_b8b6353d","updated":"2020-08-31 14:30:18.000000000","message":"One more reason to avoid iscsi.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"df36943d146a389c1e074fbbbf7222b0a66bb924","unresolved":false,"context_lines":[{"line_number":162,"context_line":"Nova driver impact"},{"line_number":163,"context_line":"------------------"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Nova driver will need to implement the driver interface ``snapshot`` to"},{"line_number":166,"context_line":"integrate with ironic. But before the integration the feature can be consumed"},{"line_number":167,"context_line":"by ironic standalone."},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_5fee7ab4","line":165,"updated":"2020-08-31 14:35:52.000000000","message":"Even if you\u0027re not planning on implementing this feature for Nova, the nova-\u003eironic driver should be updated to understand that the various \"snapshot\" states. are not failures.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"138579dd5e5eb41ecdc93b68fcc0aa49f6834cff","unresolved":false,"context_lines":[{"line_number":162,"context_line":"Nova driver impact"},{"line_number":163,"context_line":"------------------"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Nova driver will need to implement the driver interface ``snapshot`` to"},{"line_number":166,"context_line":"integrate with ironic. But before the integration the feature can be consumed"},{"line_number":167,"context_line":"by ironic standalone."},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_32ac9ded","line":165,"in_reply_to":"9f560f44_5fee7ab4","updated":"2020-08-31 15:00:55.000000000","message":"Currently just tried a couple of times on an active instance, I will double check the issue you raised, thanks!","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"e7ee3a3df1b3f921e341940fa8c42af4a5ffe194","unresolved":false,"context_lines":[{"line_number":162,"context_line":"Nova driver impact"},{"line_number":163,"context_line":"------------------"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Nova driver will need to implement the driver interface ``snapshot`` to"},{"line_number":166,"context_line":"integrate with ironic. But before the integration the feature can be consumed"},{"line_number":167,"context_line":"by ironic standalone."},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_e8fb5144","line":165,"in_reply_to":"9f560f44_5fee7ab4","updated":"2020-09-01 03:25:57.000000000","message":"snapshot is similar to rescue and not participate in the provisioning process, we probably need to add snapshot* states to _UNPROVISION_STATES and handle deleted. What makes me confused is RESCUING is in the _UNPROVISION_STATES but we have no transitions from there.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            \"\"\"Stream disk data to the storage using specified method."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"            :param connection_info: dict, connection information of remote"},{"line_number":188,"context_line":"                                    storage that be used to save the image"},{"line_number":189,"context_line":"            :param method: string, the tool used for streaming image,"},{"line_number":190,"context_line":"                           e.g. qemu-img"},{"line_number":191,"context_line":"            :param args: dict, streaming arguments related to method,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_6ec6244c","line":188,"updated":"2020-09-01 12:24:37.000000000","message":"Maybe split in more specific params? At least connection_type seems required, \"address\" probably too.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            :param connection_info: dict, connection information of remote"},{"line_number":188,"context_line":"                                    storage that be used to save the image"},{"line_number":189,"context_line":"            :param method: string, the tool used for streaming image,"},{"line_number":190,"context_line":"                           e.g. qemu-img"},{"line_number":191,"context_line":"            :param args: dict, streaming arguments related to method,"},{"line_number":192,"context_line":"                         e.g. compression, sparsing"},{"line_number":193,"context_line":"            \"\"\""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_cec3f037","line":190,"updated":"2020-09-01 12:24:37.000000000","message":"Sounds like an implementation details, why do we want to expose it? I guess we\u0027ll pick a tool based on connection type?","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            :param method: string, the tool used for streaming image,"},{"line_number":190,"context_line":"                           e.g. qemu-img"},{"line_number":191,"context_line":"            :param args: dict, streaming arguments related to method,"},{"line_number":192,"context_line":"                         e.g. compression, sparsing"},{"line_number":193,"context_line":"            \"\"\""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_aec03c2c","line":192,"updated":"2020-09-01 12:24:37.000000000","message":"I\u0027d prefer more details here and possiblity separate arguments.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    \"image_name\": \"a830ebe1-67d4-448f-aa10-5bb33f3f3c02-snapshot.qcow2\""},{"line_number":203,"context_line":"  }"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"or a shared iSCSI connection, for example::"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"  {"},{"line_number":208,"context_line":"    \"connection_type\": \"iscsi\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_0edb2821","line":205,"updated":"2020-09-01 12:24:37.000000000","message":"Do you want to support all this right in the first version? Let\u0027s maybe have a complete list of supported types and parameters since they form an API contract.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    \"image_name\": \"a830ebe1-67d4-448f-aa10-5bb33f3f3c02-snapshot.qcow2\""},{"line_number":203,"context_line":"  }"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"or a shared iSCSI connection, for example::"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"  {"},{"line_number":208,"context_line":"    \"connection_type\": \"iscsi\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_c87f5664","line":205,"in_reply_to":"9f560f44_0edb2821","updated":"2020-09-02 09:14:24.000000000","message":"Haven\u0027t planned to support iscsi target yet, originally provided here to illustrate what it looks like, but it appears making things complicated, will remove it.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"00c37729c69781574e0293569e4a827166ee730c","unresolved":false,"context_lines":[{"line_number":217,"context_line":"The iSCSI storage could be an external storage service accessible by conductor"},{"line_number":218,"context_line":"and ramdisk, or simply a block device exposed by the conductor host."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"The connection_info provided here is merely for demostration."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_92df690b","line":220,"updated":"2020-08-31 15:15:20.000000000","message":"Where will it come from? It\u0027s not exactly clear from this spec.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"897056a69c426de687794f1d087c1bc13fd56832","unresolved":false,"context_lines":[{"line_number":217,"context_line":"The iSCSI storage could be an external storage service accessible by conductor"},{"line_number":218,"context_line":"and ramdisk, or simply a block device exposed by the conductor host."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"The connection_info provided here is merely for demostration."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_d2ec4191","line":220,"in_reply_to":"9f560f44_92df690b","updated":"2020-08-31 15:25:08.000000000","message":"The connection_info should be passed from conductor to IPA, which is exactly the biggest missing puzzle in this spec.\nDuring prototyping, I have tested webdav and nfs, information about how to connect them is either we need configuration option to tell conductor, or something conductor could retrieve/create. I find it\u0027s difficult to design a consistent schema for various connections.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d6bb2de81dd2d5a182533487eb3f8f3c864084e3","unresolved":false,"context_lines":[{"line_number":281,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"Will be covered by unit tests. snapshot is a time consuming operation,"},{"line_number":284,"context_line":"so tempest tests will have cover on the basic interface level."},{"line_number":285,"context_line":""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_eedfd409","line":284,"updated":"2020-09-01 12:24:37.000000000","message":"We default to 4G disks in the CI, will it really take too long? I\u0027d prefer to avoid such a feature without integration testing.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"245acc6833d7ae7de195da1f282434bb700fd55f","unresolved":false,"context_lines":[{"line_number":281,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"Will be covered by unit tests. snapshot is a time consuming operation,"},{"line_number":284,"context_line":"so tempest tests will have cover on the basic interface level."},{"line_number":285,"context_line":""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f560f44_488b4667","line":284,"in_reply_to":"9f560f44_eedfd409","updated":"2020-09-02 09:14:24.000000000","message":"make sense, I forget CI has much less disk size.","commit_id":"03b3d944fa22dfc4d5b50acc5f138d45026c1c00"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"20838ebf6a1c0704d257f1a363e0507700a0388c","unresolved":false,"context_lines":[{"line_number":199,"context_line":"Ramdisk impact"},{"line_number":200,"context_line":"--------------"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"For the ``agent`` implementation, a ``snapshot`` extension will be added to"},{"line_number":203,"context_line":"the ironic-python-agent, when the WebDAV directory could be mounted,"},{"line_number":204,"context_line":"``qemu-img`` is used for streaming disk data to the URL."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"As the root device could be quite large and even larger than the available"},{"line_number":207,"context_line":"space of conductor host, ``dd`` is not recommended."}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f65232a_5cf31574","line":204,"range":{"start_line":202,"start_character":0,"end_line":204,"end_character":56},"updated":"2020-11-17 16:19:25.000000000","message":"From the PTG, we feel like we might want to discuss this because we\u0027re concerned about using webdav but at the same we think most people won\u0027t have enough ram to perform the operation in the first place.\n\n- So typed above *before* the PTG, but never clicked save. Doh!\n\nAnyway, I discussed this with Dmitry, and we\u0027re both a bit uncomfortable with webdav filesystem, but we can\u0027t think anything better :)","commit_id":"4baf15d5aa43dfc45771227a116cb8d552cc5906"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"fbab4a0a21391fe37c399925641454895d68e42b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"Ramdisk impact"},{"line_number":200,"context_line":"--------------"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"For the ``agent`` implementation, a ``snapshot`` extension will be added to"},{"line_number":203,"context_line":"the ironic-python-agent, when the WebDAV directory could be mounted,"},{"line_number":204,"context_line":"``qemu-img`` is used for streaming disk data to the URL."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"As the root device could be quite large and even larger than the available"},{"line_number":207,"context_line":"space of conductor host, ``dd`` is not recommended."}],"source_content_type":"text/x-rst","patch_set":4,"id":"41180b01_f21caee2","line":204,"range":{"start_line":202,"start_character":0,"end_line":204,"end_character":56},"in_reply_to":"3f65232a_5cf31574","updated":"2020-11-23 11:30:01.000000000","message":"Yeah, we may figure out new ideas with time goes.","commit_id":"4baf15d5aa43dfc45771227a116cb8d552cc5906"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"20838ebf6a1c0704d257f1a363e0507700a0388c","unresolved":false,"context_lines":[{"line_number":204,"context_line":"``qemu-img`` is used for streaming disk data to the URL."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"As the root device could be quite large and even larger than the available"},{"line_number":207,"context_line":"space of conductor host, ``dd`` is not recommended."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"The snapshot extension will be defined as:"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f65232a_dc83a5a8","line":207,"updated":"2020-11-17 16:19:25.000000000","message":"We likely need to detail what the root disk and how it is defined.","commit_id":"4baf15d5aa43dfc45771227a116cb8d552cc5906"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"fbab4a0a21391fe37c399925641454895d68e42b","unresolved":false,"context_lines":[{"line_number":204,"context_line":"``qemu-img`` is used for streaming disk data to the URL."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"As the root device could be quite large and even larger than the available"},{"line_number":207,"context_line":"space of conductor host, ``dd`` is not recommended."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"The snapshot extension will be defined as:"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1af2979c_22cc6402","line":207,"in_reply_to":"3f65232a_dc83a5a8","updated":"2020-11-23 11:30:01.000000000","message":"Done","commit_id":"4baf15d5aa43dfc45771227a116cb8d552cc5906"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"20838ebf6a1c0704d257f1a363e0507700a0388c","unresolved":false,"context_lines":[{"line_number":312,"context_line":"Upgrades and Backwards Compatibility"},{"line_number":313,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"Should be backwards compatible."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_83a91391","line":315,"range":{"start_line":315,"start_character":0,"end_line":315,"end_character":31},"updated":"2020-11-17 16:19:25.000000000","message":"It may just be better to say no issues are anticipated with backwards or forward compatability.","commit_id":"4baf15d5aa43dfc45771227a116cb8d552cc5906"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"fbab4a0a21391fe37c399925641454895d68e42b","unresolved":false,"context_lines":[{"line_number":312,"context_line":"Upgrades and Backwards Compatibility"},{"line_number":313,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"Should be backwards compatible."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1ef70ee0_ee7e9031","line":315,"range":{"start_line":315,"start_character":0,"end_line":315,"end_character":31},"in_reply_to":"1f621f24_83a91391","updated":"2020-11-23 11:30:01.000000000","message":"Done","commit_id":"4baf15d5aa43dfc45771227a116cb8d552cc5906"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eabc96b949fdf85f507a1bd0cdfec4892933d30e","unresolved":true,"context_lines":[{"line_number":75,"context_line":"With following transitions:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* active -\u003e snapshoting (on snapshot) Prepare boot and network"},{"line_number":78,"context_line":"* snapshoting -\u003e snapshot failed (on fail) On error"},{"line_number":79,"context_line":"* snapshoting -\u003e snapshot wait (on wait) Wait for ramdisk alive"},{"line_number":80,"context_line":"* snapshot wait -\u003e snapshoting (on resume) Image streaming and uploading"},{"line_number":81,"context_line":"* snapshot wait -\u003e snapshot failed (on fail) On timeout"}],"source_content_type":"text/x-rst","patch_set":7,"id":"fae5f6ec_f07d92f6","line":78,"range":{"start_line":78,"start_character":2,"end_line":78,"end_character":13},"updated":"2020-12-08 09:04:03.000000000","message":"nit: snapshotting (rest of the doc too)","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"a6fa714f80832d25e4b9b12a17a2698e4abe6430","unresolved":false,"context_lines":[{"line_number":75,"context_line":"With following transitions:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* active -\u003e snapshoting (on snapshot) Prepare boot and network"},{"line_number":78,"context_line":"* snapshoting -\u003e snapshot failed (on fail) On error"},{"line_number":79,"context_line":"* snapshoting -\u003e snapshot wait (on wait) Wait for ramdisk alive"},{"line_number":80,"context_line":"* snapshot wait -\u003e snapshoting (on resume) Image streaming and uploading"},{"line_number":81,"context_line":"* snapshot wait -\u003e snapshot failed (on fail) On timeout"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ad34e507_f33e419f","line":78,"range":{"start_line":78,"start_character":2,"end_line":78,"end_character":13},"in_reply_to":"fae5f6ec_f07d92f6","updated":"2020-12-28 11:29:59.000000000","message":"Done","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4a5ef315ece740202d2175f24992437903532f8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"  When the requested version is permitted, and node is in the active state,"},{"line_number":99,"context_line":"  start to do a snapshot. An ``image_id`` argument is required, which"},{"line_number":100,"context_line":"  refers to the image in the Image service. The image is precreated before"},{"line_number":101,"context_line":"  snapshot and acts as a holder for receiving image data."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  Example request::"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"28ff0859_baf24fe4","line":101,"updated":"2020-12-03 16:13:59.000000000","message":"So, no standalone support?","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d657f3a8eb7154e4281df51a5afa088335e5b734","unresolved":false,"context_lines":[{"line_number":98,"context_line":"  When the requested version is permitted, and node is in the active state,"},{"line_number":99,"context_line":"  start to do a snapshot. An ``image_id`` argument is required, which"},{"line_number":100,"context_line":"  refers to the image in the Image service. The image is precreated before"},{"line_number":101,"context_line":"  snapshot and acts as a holder for receiving image data."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  Example request::"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"cbaaed12_96b2c3df","line":101,"in_reply_to":"28ff0859_baf24fe4","updated":"2020-12-03 16:34:05.000000000","message":"image_ref sounds like a better name in consideration of standalone, i could follow up with this, in case minor updates required.","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4a5ef315ece740202d2175f24992437903532f8","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    {"},{"line_number":106,"context_line":"      \"target\": \"snapshot\","},{"line_number":107,"context_line":"      \"image_id\": \"66498c26-a9b5-496c-97a8-5bc08f256155\""},{"line_number":108,"context_line":"    }"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  When integrated with Compute service, the ``image_id`` is an argument"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1784880d_76025d23","line":107,"updated":"2020-12-03 16:13:59.000000000","message":"If you expect standalone support (e.g. via HTTP PUT), image_ref may be a better name.","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d657f3a8eb7154e4281df51a5afa088335e5b734","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    {"},{"line_number":106,"context_line":"      \"target\": \"snapshot\","},{"line_number":107,"context_line":"      \"image_id\": \"66498c26-a9b5-496c-97a8-5bc08f256155\""},{"line_number":108,"context_line":"    }"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  When integrated with Compute service, the ``image_id`` is an argument"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dfb9b9fd_22f92106","line":107,"in_reply_to":"1784880d_76025d23","updated":"2020-12-03 16:34:05.000000000","message":"this brought an interesting question, for standalone, we have cached the image at conductor, is it enough to just move it locally?","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"a6fa714f80832d25e4b9b12a17a2698e4abe6430","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    {"},{"line_number":106,"context_line":"      \"target\": \"snapshot\","},{"line_number":107,"context_line":"      \"image_id\": \"66498c26-a9b5-496c-97a8-5bc08f256155\""},{"line_number":108,"context_line":"    }"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  When integrated with Compute service, the ``image_id`` is an argument"}],"source_content_type":"text/x-rst","patch_set":7,"id":"6b56c3fd_6ef7f210","line":107,"in_reply_to":"dfb9b9fd_22f92106","updated":"2020-12-28 11:29:59.000000000","message":"Changed to image_ref to cover potential standalone use case.","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4a5ef315ece740202d2175f24992437903532f8","unresolved":false,"context_lines":[{"line_number":172,"context_line":"For the ``agent`` implementation, conductor host needs a WebDAV service to"},{"line_number":173,"context_line":"receive image data from the IPA. When the first heartbeat is received,"},{"line_number":174,"context_line":"ironic conductor sends command ``snapshot.stream_image`` with an URL to the"},{"line_number":175,"context_line":"IPA to start the snapshotting. IPA find the root device and use proper methods"},{"line_number":176,"context_line":"to dump disk data to the remote storage. The criterial for choosing the root"},{"line_number":177,"context_line":"device is same with deployment, on the time of this writing, the root device"},{"line_number":178,"context_line":"is the first available block device not less than 4GiB, or the first matched"}],"source_content_type":"text/x-rst","patch_set":7,"id":"2d541737_7fa6ba20","line":175,"updated":"2020-12-03 16:13:59.000000000","message":"Is it an asynchronous command? If yes, you provide no way to inform ironic about the success of the operation.","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"d657f3a8eb7154e4281df51a5afa088335e5b734","unresolved":false,"context_lines":[{"line_number":172,"context_line":"For the ``agent`` implementation, conductor host needs a WebDAV service to"},{"line_number":173,"context_line":"receive image data from the IPA. When the first heartbeat is received,"},{"line_number":174,"context_line":"ironic conductor sends command ``snapshot.stream_image`` with an URL to the"},{"line_number":175,"context_line":"IPA to start the snapshotting. IPA find the root device and use proper methods"},{"line_number":176,"context_line":"to dump disk data to the remote storage. The criterial for choosing the root"},{"line_number":177,"context_line":"device is same with deployment, on the time of this writing, the root device"},{"line_number":178,"context_line":"is the first available block device not less than 4GiB, or the first matched"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5fcbc853_43695337","line":175,"in_reply_to":"2d541737_7fa6ba20","updated":"2020-12-03 16:34:05.000000000","message":"it\u0027s asynchronous, i think we can just keep the same way as cleaning, by querying execution result on each heartbeat.","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"638d46287f9761ba602a5f9fa99575ce7dc61349","unresolved":true,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    class SnapshotExtension(base.BaseAgentExtension):"},{"line_number":216,"context_line":"        @base.async_command(\u0027stream_image\u0027)"},{"line_number":217,"context_line":"        def stream_image(self, url, image_name):"},{"line_number":218,"context_line":"            \"\"\"Stream disk data to the storage using provided information."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"            :param url: string, the remote storage in URL format."}],"source_content_type":"text/x-rst","patch_set":7,"id":"487a59a2_50f45c81","line":217,"range":{"start_line":217,"start_character":31,"end_line":217,"end_character":34},"updated":"2020-11-25 05:55:31.000000000","message":"Connection info is simplified, I think we can handle most cases according to scheme.","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"59b8e67e51cf8c66e7972b312ab987934808a5c3","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    class SnapshotExtension(base.BaseAgentExtension):"},{"line_number":216,"context_line":"        @base.async_command(\u0027stream_image\u0027)"},{"line_number":217,"context_line":"        def stream_image(self, url, image_name):"},{"line_number":218,"context_line":"            \"\"\"Stream disk data to the storage using provided information."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"            :param url: string, the remote storage in URL format."}],"source_content_type":"text/x-rst","patch_set":7,"id":"51cadeb3_88820881","line":217,"range":{"start_line":217,"start_character":31,"end_line":217,"end_character":34},"in_reply_to":"487a59a2_50f45c81","updated":"2020-12-03 15:08:34.000000000","message":"++","commit_id":"fdaf38e0be65f6ffe2381e4818c57c504efa01c3"}]}
