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
andauth-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.