Skip to main content

Transferring volumes between projects

There is no direct way to migrate a virtual machine between different projects. However, you can transfer the VM boot volume, and then create a new VM from it. You can transfer both boot and non-boot volumes to projects within different domains.

Limitations

  • You can only transfer volumes with the "Available" status.

  • Transferring volumes that have snapshots breaks the snapshots.

Prerequisites

  • Access to the compute API depends on your provider's settings. You need to obtain from your provider the instruction how to connect to the API.

  • You have login credentials for the source and destination projects.

  • If you want to transfer a boot volume that is attached to a VM, clone this volume first, as described in Cloning volumes.

  • If you want to transfer a non-boot volume that is attached to a VM, detach it first, as described in Attaching and detaching volumes.

To transfer a volume between two projects

  • Log in to the source project by changing the environment variables to the project credentials. For example:
export OS_PROJECT_DOMAIN_NAME=domain1
export OS_USER_DOMAIN_NAME=domain1
export OS_PROJECT_NAME=project1
export OS_USERNAME=user1
export OS_PASSWORD=password
  • List all volumes within your project to find out the ID of the volume you want to transfer:
# openstack --insecure volume list
+--------------------------------------+-------------------+-----------+------+
| ID | Name | Status | Size |
+--------------------------------------+-------------------+-----------+------+
| 2c8386fa-331b-4ba8-9e4c-de690969a4c8 | win10/Boot volume | available | 64 |
+--------------------------------------+-------------------+-----------+------+
  • Create a transfer request by specifying the ID of the chosen volume. For example:
# openstack --insecure volume transfer request create c0d4cf0e-48e3-417d-b6fc-f1fb36571c5f
+------------+--------------------------------------+
| Field | Value |
+------------+--------------------------------------+
| auth_key | 75fcf37d56f40182 |
| created_at | 2022-04-27T09:00:11.776511 |
| id | b9b835a3-ed41-489a-9552-483fae33c549 |
| name | None |
| volume_id | c0d4cf0e-48e3-417d-b6fc-f1fb36571c5f |
+------------+--------------------------------------+

Save the request id and auth-key from the command output, to accept the transfer in the other project.

  • Log in to the destination project by changing the environment variables to the project credentials. For example:
export OS_PROJECT_DOMAIN_NAME=domain1
export OS_USER_DOMAIN_NAME=domain1
export OS_PROJECT_NAME=project2
export OS_USERNAME=user2
export OS_PASSWORD=password
  • Accept the transfer request by specifying the request ID and authorization key. For example:
# openstack --insecure volume transfer request accept --auth-key 75fcf37d56f40182 \
b9b835a3-ed41-489a-9552-483fae33c549

Once the volume is moved to the other project, you can create a virtual machine from it, as described in Creating virtual machines.

Was this page helpful?