SVM migrations endpoint overview
Overview
You can use this API to migrate an SVM from a source cluster to a destination cluster. During the migration, you can pause, resume, or abort the operation, and retrieve the migration status and transfer status of volumes in the SVM. The migrations APIs are only accessible from the destination cluster.
Precondition
The cluster peering relationship should be created between the source and destination clusters prior to using this API.
SVM migration APIs
The following APIs are used to manage SVM migration:
-
POST /api/svm/migrations
-
PATCH /api/svm/migrations/{uuid}
-
GET /api/svm/migrations/
-
GET /api/svm/migrations/{uuid}
-
GET /api/svm/migrations/{svm_migration.uuid}/volumes
-
GET /api/svm/migrations/{svm_migration.uuid}/volumes/{volume.uuid}
-
DELETE /api/svm/migrations/{uuid}
Starting a migration
To start a migration operation, issue a POST request to /svm/migrations. Parameters are provided in the body of the POST request to specify the source cluster and the source SVM.
Monitoring the status of the SVM migration
You can use GET /svm/migrations to retrieve the status of the SVM migration and GET /svm/migrations/{svm_migration.uuid}/volumes to retrieve the transfer status of the volumes in the SVM migration.
Possible errors before starting the migration
Configurations in the POST /svm/migrations request are validated before the SVM migration starts. If an invalid configuration is found or the migration pre-checks fail, an HTTP error code in the 4xx range is returned. No SVM migration operation is started.
Polling the migration operation
After a succesful POST /svm/migrations request is issued, an HTTP error code of 202 is returned along with a migration UUID and link in the body of the response. The SVM migration continues asynchronously and is monitored using the migration UUID and the GET /svm/migrations/{uuid} API.
Errors duing the migration operation
If a failure occurs during the SVM migration, the GET /svm/migrations response provides details of the error along with any error code fields.
Pausing the migration operation
You can use PATCH /svm/migrations/{uuid} with the action "pause" to pause the SVM migration to update the SVM configuration on the source SVM.
Resuming the migration operation
You can use PATCH /svm/migrations{uuid} with the action "resume" to resume the SVM migration from a paused state. You can modify the throttle value when you resume the SVM migration. To set the throttle value to unlimited, specify the throttle value as 0.
Aborting the migration operation
You can use DELETE /svm/migrations/{uuid} to delete the SVM on the destination cluster if the SVM migration has failed or is paused. Use the DELETE /svm/migrations/{uuid} request to remove the SVM on the source cluster; this might be used when communication between the source and destination cluster is reduced.
Retrieving the migration status
You can use GET /svm/migrations/{uuid} to retrieve the current status of your migration.
Retrieving the volume transfer status
You can use GET /svm/migrations/{svm_migration.uuid}/volumes to retrieve the current transfer status of all volumes in the migrating SVM.
Retrieving the volume transfer status of a specific volume
You can use GET /svm/migrations/{svm_migrations.uuid}/volumes/{volume.uuid} to retrieve the transfer status of a specific volume in the migrating SVM.
Examples
Starting a Migration
# API /api/svm/migrations
POST body included from file
svm_migration_post_body.txt: { "source": { "svm": { "name": "vs1" }, "cluster": { "name": "siteB" } } } curl -X POST https://<mgmt-ip>/api/svm/migrations -H "Content-Type: application+hal/json" -d "@svm_migration_post_body.txt"
Inline POST body
curl -X POST https://<mgmt-ip>/api/svm/migrations -H "Content-Type: application+hal/json" -d '{"source": {"svm": {"name": "vs1"}, "cluster": {"name": "siteB"}}}'
POST Response
Date: Wed, 25 Aug 2021 19:04:47 GMT Server: libzapid-httpd X-Content-Type-Options: nosniff Cache-Control: no-cache,no-store,must-revalidate Location: /api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5 Content-Length: 189 Content-Type: application/hal+json Keep-Alive: timeout=5, max=100 Connection: Keep-Alive { "job": { "uuid": "5184a3e1-05d7-11ec-a40f-005056bba9a5", "_links": { "self": { "href": "/api/cluster/jobs/5184a3e1-05d7-11ec-a40f-005056bba9a5" } } } }
Retrieving POST Job status
Use the link provided in the response to the POST request to fetch the status of the start operation
Request
curl -X GET https://<mgmt-ip>/api/cluster/jobs/5184a3e1-05d7-11ec-a40f-005056bba9a5
Response
Date: Wed, 25 Aug 2021 19:05:04 GMT Server: libzapid-httpd X-Content-Type-Options: nosniff Cache-Control: no-cache,no-store,must-revalidate Content-Type: application/hal+json Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 224 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive { "uuid": "5184a3e1-05d7-11ec-a40f-005056bba9a5", "description": "POST /api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5", "state": "success", "message": "success", "code": 0, "start_time": "2021-08-25T15:04:48-04:00", "end_time": "2021-08-25T15:04:57-04:00", "_links": { "self": { "href": "/api/cluster/jobs/5184a3e1-05d7-11ec-a40f-005056bba9a5" } } }
Retrieving all migrations
The location header in the POST operation provides the uuid of the migrate operation that was started using POST. Also, you can list all the migrate operations using the collection GET.
Request
curl -X GET https://<mgmt-ip>/api/svm/migrations
Response
Date: Wed, 25 Aug 2021 19:05:11 GMT Server: libzapid-httpd X-Content-Type-Options: nosniff Cache-Control: no-cache,no-store,must-revalidate Content-Type: application/hal+json Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 170 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive { "records": [ { "uuid": "517c5e74-05d7-11ec-a40f-005056bba9a5", "_links": { "self": { "href": "/api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5" } } } ], "num_records": 1, "_links": { "self": { "href": "/api/svm/migrations/" } } }
Retrieving a specific migration
Request
curl -X GET https://<mgmt-ip>/api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5
Response
Date: Wed, 25 Aug 2021 19:05:33 GMT Server: libzapid-httpd X-Content-Type-Options: nosniff Cache-Control: no-cache,no-store,must-revalidate Content-Type: application/hal+json Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 379 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive { "uuid": "517c5e74-05d7-11ec-a40f-005056bba9a5", "state": "setup_configuration", "start_time": "2021-08-25T15:04:49-04:00", "current_operation": "start", "source": { "svm": { "uuid": "424b6002-fb1a-11eb-9383-005056bbcf32", "name": "vs1", "_links": { "self": { "href": "/api/svm/svms/424b6002-fb1a-11eb-9383-005056bbcf32" } } }, "cluster": { "uuid": "b54babec-fb14-11eb-9383-005056bbcf32", "name": "siteB", "_links": { "self": { "href": "/api/cluster/peers/b54babec-fb14-11eb-9383-005056bbcf32" } } } }, "destination": { "ipspace": { "uuid": "f305cf0b-fb14-11eb-829d-005056bba9a5", "name": "Default" } }, "auto_cutover": false, "auto_source_cleanup": false, "throttle": 0, "_links": { "self": { "href": "/api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5" } } }
Pausing a migration
To pause the migration use the PATCH request on the migration UUID.
Request
curl -X PATCH https://<mgmt-ip>/api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5?action=pause
Response
Date: Wed, 25 Aug 2021 19:06:11 GMT Server: libzapid-httpd X-Content-Type-Options: nosniff Cache-Control: no-cache,no-store,must-revalidate Content-Length: 189 Content-Type: application/hal+json Keep-Alive: timeout=5, max=100 Connection: Keep-Alive { "job": { "uuid": "82dea7c7-05d7-11ec-a40f-005056bba9a5", "_links": { "self": { "href": "/api/cluster/jobs/82dea7c7-05d7-11ec-a40f-005056bba9a5" } } } }
Monitoring PATCH job status
Use the link provided in the response of the PATCH request to fetch the information of the patch job.
Request
curl -X GET https://<mgmt-ip>/api/cluster/jobs/82dea7c7-05d7-11ec-a40f-005056bba9a5
Response
Date: Wed, 25 Aug 2021 21:40:06 GMT Server: libzapid-httpd X-Content-Type-Options: nosniff Cache-Control: no-cache,no-store,must-revalidate Content-Type: application/hal+json Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 222 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive { "uuid": "82dea7c7-05d7-11ec-a40f-005056bba9a5", "description": "PATCH /api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5", "state": "success", "message": "success", "code": 0, "start_time": "2021-08-25T15:06:11-04:00", "end_time": "2021-08-25T15:06:11-04:00", "_links": { "self": { "href": "/api/cluster/jobs/82dea7c7-05d7-11ec-a40f-005056bba9a5" } } }
Aborting a migration
To abort the migration use the DELETE request on the migration UUID.
Request
curl -X DELETE https://<mgmt-ip>/api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5
Response
Date: Wed, 25 Aug 2021 22:57:23 GMT Server: libzapid-httpd X-Content-Type-Options: nosniff Cache-Control: no-cache,no-store,must-revalidate Content-Length: 189 Content-Type: application/hal+json Keep-Alive: timeout=5, max=100 Connection: Keep-Alive { "job": { "uuid": "cf870f19-05f7-11ec-a40f-005056bba9a5", "_links": { "self": { "href": "/api/cluster/jobs/cf870f19-05f7-11ec-a40f-005056bba9a5" } } } }
Monitoring DELETE job status
Use the link provided in the response of the PATCH request to fetch the information of the patch job.
Request
curl -X GET https://<mgmt-ip>/api/cluster/jobs/cf870f19-05f7-11ec-a40f-005056bba9a5
Response
Date: Wed, 25 Aug 2021 23:05:47 GMT Server: libzapid-httpd X-Content-Type-Options: nosniff Cache-Control: no-cache,no-store,must-revalidate Content-Type: application/hal+json Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 228 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive { "uuid": "cf870f19-05f7-11ec-a40f-005056bba9a5", "description": "DELETE /api/svm/migrations/517c5e74-05d7-11ec-a40f-005056bba9a5", "state": "success", "message": "success", "code": 0, "start_time": "2021-08-25T18:57:23-04:00", "end_time": "2021-08-25T18:57:24-04:00", "_links": { "self": { "href": "/api/cluster/jobs/cf870f19-05f7-11ec-a40f-005056bba9a5" } } }