Forráskód Böngészése

Merge pull request #51 from Dany9966/api-docs

Adds API Documentation
Nashwan Azhari 6 éve
szülő
commit
0aefc0dfae
52 módosított fájl, 6368 hozzáadás és 0 törlés
  1. 7 0
      README.rst
  2. 17 0
      coriolis/api-refs/api_samples/endpoint/endpoint-get-resp-secret.json
  3. 26 0
      coriolis/api-refs/api_samples/endpoint/endpoint-instance-list-resp.json
  4. 41 0
      coriolis/api-refs/api_samples/endpoint/endpoint-instance-show-resp.json
  5. 58 0
      coriolis/api-refs/api_samples/endpoint/endpoint-list-resp.json
  6. 12 0
      coriolis/api-refs/api_samples/endpoint/endpoint-network-list-resp.json
  7. 10 0
      coriolis/api-refs/api_samples/endpoint/endpoint-storage-list-resp.json
  8. 6 0
      coriolis/api-refs/api_samples/endpoint/endpoint-validate-connection-error-resp.json
  9. 3 0
      coriolis/api-refs/api_samples/endpoint/endpoint-validate-connection-req.json
  10. 6 0
      coriolis/api-refs/api_samples/endpoint/endpoint-validate-connection-resp.json
  11. 31 0
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-create-req.json
  12. 85 0
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-destination-options-list-resp.json
  13. 38 0
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-get-resp.json
  14. 25 0
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-source-options-list-resp.json
  15. 30 0
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-update-req.json
  16. 38 0
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-update-resp.json
  17. 5 0
      coriolis/api-refs/api_samples/migration/migration-cancel-req.json
  18. 8 0
      coriolis/api-refs/api_samples/migration/migration-from-replica-req.json
  19. 26 0
      coriolis/api-refs/api_samples/migration/openstack-migration-create-req.json
  20. 258 0
      coriolis/api-refs/api_samples/migration/openstack-migration-create-resp.json
  21. 219 0
      coriolis/api-refs/api_samples/migration/openstack-migration-from-replica-resp.json
  22. 500 0
      coriolis/api-refs/api_samples/migration/openstack-migration-get-resp.json
  23. 752 0
      coriolis/api-refs/api_samples/migration/openstack-migration-list-detail-resp.json
  24. 173 0
      coriolis/api-refs/api_samples/provider/openstack-connection-provider-schema-get-resp.json
  25. 123 0
      coriolis/api-refs/api_samples/provider/provider-get-resp.json
  26. 26 0
      coriolis/api-refs/api_samples/replica/openstack-replica-create-req.json
  27. 40 0
      coriolis/api-refs/api_samples/replica/openstack-replica-create-resp.json
  28. 71 0
      coriolis/api-refs/api_samples/replica/openstack-replica-disks-delete-resp.json
  29. 279 0
      coriolis/api-refs/api_samples/replica/openstack-replica-execution-get-resp.json
  30. 212 0
      coriolis/api-refs/api_samples/replica/openstack-replica-execution-resp.json
  31. 317 0
      coriolis/api-refs/api_samples/replica/openstack-replica-execution-show-resp.json
  32. 61 0
      coriolis/api-refs/api_samples/replica/openstack-replica-get-resp.json
  33. 3 0
      coriolis/api-refs/api_samples/replica/replica-disks-delete-req.json
  34. 5 0
      coriolis/api-refs/api_samples/replica/replica-execution-cancel-req.json
  35. 34 0
      coriolis/api-refs/api_samples/replica/replica-execution-list-resp.json
  36. 5 0
      coriolis/api-refs/api_samples/replica/replica-execution-req.json
  37. 82 0
      coriolis/api-refs/api_samples/replica/replica-list-resp.json
  38. 10 0
      coriolis/api-refs/api_samples/replica/replica-schedule-create-req.json
  39. 20 0
      coriolis/api-refs/api_samples/replica/replica-schedule-create-resp.json
  40. 54 0
      coriolis/api-refs/api_samples/replica/replica-schedule-list-resp.json
  41. 20 0
      coriolis/api-refs/api_samples/replica/replica-schedule-show-resp.json
  42. 8 0
      coriolis/api-refs/api_samples/replica/replica-schedule-update-req.json
  43. 19 0
      coriolis/api-refs/api_samples/replica/replica-schedule-update-resp.json
  44. 7 0
      coriolis/api-refs/api_samples/replica/replica-update-req.json
  45. 127 0
      coriolis/api-refs/api_samples/replica/replica-update-resp.json
  46. 30 0
      coriolis/api-refs/source/conf.py
  47. 523 0
      coriolis/api-refs/source/endpoint.inc
  48. 12 0
      coriolis/api-refs/source/index.rst
  49. 293 0
      coriolis/api-refs/source/migration.inc
  50. 802 0
      coriolis/api-refs/source/parameters.yaml
  51. 68 0
      coriolis/api-refs/source/provider.inc
  52. 743 0
      coriolis/api-refs/source/replica.inc

+ 7 - 0
README.rst

@@ -149,6 +149,13 @@ Delete a migration job:
 Note: only completed, failed or cancelled jobs can be deleted.
 
 
+API Documentation
+-----------------
+
+To build the API documentation, while in the repository root directory, run:
+::
+    sphinx-build -W -b html coriolis/api-refs/source $DOCS_PATH
+
 API bindings
 ------------
 

+ 17 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-get-resp-secret.json

@@ -0,0 +1,17 @@
+{
+  "endpoint": {
+    "created_at": "2019-07-09T06:58:26.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "b59051a2-bbf3-4fb7-a1eb-539db55339dc",
+    "user_id": "7cf9b4745d514517b3eae440438136bc",
+    "project_id": "ffc16db2011e41f28152897c279b6bcc",
+    "connection_info": {
+      "secret_ref": "http://127.0.0.1:9311/v1/secrets/c8daa436-84a8-4c00-a50b-14cba4122deb"
+    },
+    "type": "openstack",
+    "name": "devstack",
+    "description": null
+  }
+}

+ 26 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-instance-list-resp.json

@@ -0,0 +1,26 @@
+{
+  "instances": [
+    {
+      "num_cpu": 1,
+      "num_cores_per_socket": 1,
+      "memory_mb": 2048,
+      "nested_virtualization": false,
+      "name": "ubuntu-xenial",
+      "id": "3ba07383-6726-4bf8-82d5-d5ce871519bc",
+      "flavor_name": "m1.small",
+      "os_type": "linux",
+      "instance_name": "ubuntu-xenial"
+    },
+    {
+      "num_cpu": 4,
+      "num_cores_per_socket": 1,
+      "memory_mb": 2048,
+      "nested_virtualization": false,
+      "name": "windows",
+      "id": "e93f6d38-9240-4dec-b738-61ca225aba6a",
+      "flavor_name": "windows2012",
+      "os_type": "windows",
+      "instance_name": "windows"
+    }
+  ]
+}

+ 41 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-instance-show-resp.json

@@ -0,0 +1,41 @@
+{
+  "instance": {
+    "num_cpu": 1,
+    "num_cores_per_socket": 1,
+    "memory_mb": 2048,
+    "nested_virtualization": false,
+    "name": "ubuntu-xenial",
+    "id": "3ba07383-6726-4bf8-82d5-d5ce871519bc",
+    "flavor_name": "m1.small",
+    "devices": {
+      "nics": [
+        {
+          "name": "025cbc3d-7779-4686-9ca9-8ce0a5895172",
+          "id": "025cbc3d-7779-4686-9ca9-8ce0a5895172",
+          "mac_address": "fa:16:3e:2b:7b:db",
+          "ip_addresses": [
+            "10.0.0.23"
+          ],
+          "network_id": "1bd79664-8d62-477e-9a12-96595ae1dbe1",
+          "network_name": "private"
+        }
+      ],
+      "disks": [
+        {
+          "format": "raw",
+          "guest_device": "/dev/sda",
+          "size_bytes": 21474836480,
+          "path": "",
+          "id": "1d4a25a6-70a3-4784-ab89-cf7fc205be2d",
+          "storage_backend_identifier": "lvmdriver-1"
+        }
+      ],
+      "cdroms": [],
+      "serial_ports": [],
+      "floppies": [],
+      "controllers": []
+    },
+    "os_type": "linux",
+    "instance_name": "ubuntu-xenial"
+  }
+}

+ 58 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-list-resp.json

@@ -0,0 +1,58 @@
+{
+  "endpoints": [
+    {
+      "created_at": "2019-07-10T12:10:55.000000",
+      "updated_at": null,
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "connection_info": {
+        "username": "admin",
+        "project_name": "admin",
+        "user_domain_id": "default",
+        "allow_untrusted": true,
+        "identity_api_version": 3,
+        "glance_api_version": 2,
+        "auth_url": "http://25.48.0.101/identity/v3",
+        "password": "Passw0rd",
+        "allow_untrusted_swift": true,
+        "project_domain_id": "default"
+      },
+      "type": "openstack",
+      "name": "Endpoint Name Example",
+      "description": "Example Endpoint Description"
+    },
+    {
+      "created_at": "2019-07-09T07:04:13.000000",
+      "updated_at": "2019-07-09T07:05:19.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "connection_info": {
+        "secret_ref": "http://127.0.0.19311/v1/secrets/c09f29eb-fb35-40f9-952a-547297297e4c"
+      },
+      "type": "oci",
+      "name": "oci",
+      "description": null
+    },
+    {
+      "created_at": "2019-07-09T06:5826.000000",
+      "updated_at": null,
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "b59051a2-bbf3-4fb7-a1eb-539db55339dc",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "connection_info": {
+        "secret_ref": "http://127.0.0.1:9311/v1/secrets/c8daa436-84a8-4c00-a50b-14cba4122deb"
+      },
+      "type": "openstack",
+      "name": "devstack",
+      "description": null
+    }
+  ]
+}

+ 12 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-network-list-resp.json

@@ -0,0 +1,12 @@
+{
+  "networks": [
+    {
+      "id": "2734b848-1e4a-4e94-b566-71060d913f80",
+      "name": "shared"
+    },
+    {
+      "id": "a57e180a-5626-459e-b59b-bd5491ebef6d",
+      "name": "public"
+    }
+  ]
+}

+ 10 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-storage-list-resp.json

@@ -0,0 +1,10 @@
+{
+  "storage": {
+    "storage_backends": [
+      {
+        "id": "486bf200-f4b0-4e3b-a0f3-6e7603203624",
+        "name": "lvmdriver-1"
+      }
+    ]
+  }
+}

+ 6 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-validate-connection-error-resp.json

@@ -0,0 +1,6 @@
+{
+  "validate-connection": {
+    "valid": false,
+    "message": "Unable to establish connection to http://openstack.awesome.our:5000/v3/auth/tokens: HTTPConnectionPool(host='openstack.awesome.our', port=5000): Max retries exceeded with url: /v3/auth/tokens (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f54631feeb8>: Failed to establish a new connection: [Errno -2] No address found',))"
+  }
+}

+ 3 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-validate-connection-req.json

@@ -0,0 +1,3 @@
+{
+  "validate-connection": null
+}

+ 6 - 0
coriolis/api-refs/api_samples/endpoint/endpoint-validate-connection-resp.json

@@ -0,0 +1,6 @@
+{
+  "validate-connection": {
+    "valid": true,
+    "message": null
+  }
+}

+ 31 - 0
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-create-req.json

@@ -0,0 +1,31 @@
+{
+  "endpoint": {
+    "connection_info": {
+      "username": "admin",
+      "project_name": "admin",
+      "user_domain_id": "default",
+      "allow_untrusted": true,
+      "identity_api_version": 3,
+      "glance_api_version": 2,
+      "auth_url": "http://25.48.0.101/identity/v3",
+      "password": "Passw0rd",
+      "allow_untrusted_swift": true,
+      "project_domain_id": "default",
+      "region_name": "RegionOne",
+      "nova_region_name": "RegionOne",
+      "neutron_region_name": "RegionOne",
+      "glance_region_name": "RegionOne",
+      "cinder_region_name": "RegionOne",
+      "swift_region_name": "RegionOne",
+      "interface_name": "publicURL",
+      "nova_interface_name": "publicURL",
+      "neutron_interface_name": "publicURL",
+      "glance_interface_name": "publicURL",
+      "cinder_interface_name": "publicURL",
+      "swift_interface_name": "publicURL"
+    },
+    "type": "openstack",
+    "name": "Endpoint Name Example",
+    "description": "Example Endpoint Description"
+  }
+}

+ 85 - 0
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-destination-options-list-resp.json

@@ -0,0 +1,85 @@
+{
+  "destination_options": [
+    {
+      "name": "migr_network",
+      "values": [
+        "shared",
+        "public"
+      ],
+      "config_default": "private"
+    },
+    {
+      "name": "migr_fip_pool_name",
+      "values": ["public"],
+      "config_default": "public"
+    },
+    {
+      "name": "security_groups",
+      "values": ["default""def-grp"],
+      "config_default": []
+    },
+    {
+      "name": "migr_image_map",
+      "values": [
+        {
+          "id": "d41963eb-507a-4763-b50a-2c9eeb96a3de",
+          "name": "xenial-qcow",
+          "os_type": "linux"
+        },
+        {
+          "id": "4e9850d5-b215-49d0-951e-b9a266708706",
+          "name": "windows2012-vhd",
+          "os_type": "windows"
+        }
+      ],
+      "config_default": {
+        "linux": "xenial-qcow",
+        "windows": "windows2012-vhd"
+      }
+    },
+    {
+      "name": "keypair_name",
+      "values": [
+        "kp-windows",
+        "kp-xenial"
+      ]
+    },
+    {
+      "name": "migr_flavor_name",
+      "values": [
+        "m1.tiny",
+        "m1.small",
+        "m1.medium",
+        "m1.large",
+        "m1.nano",
+        "m1.xlarge",
+        "m1.micro",
+        "cirros256",
+        "ds512M",
+        "ds1G",
+        "ds2G",
+        "ds4G",
+        "windows2012"
+      ],
+      "config_default": "m1.small"
+    },
+    {
+      "name": "flavor_name",
+      "values": [
+        "m1.tiny",
+        "m1.small",
+        "m1.medium",
+        "m1.large",
+        "m1.nano",
+        "m1.xlarge",
+        "m1.micro",
+        "cirros256",
+        "ds512M",
+        "ds1G",
+        "ds2G",
+        "ds4G",
+        "windows2012"
+      ]
+    }
+  ]
+}

+ 38 - 0
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-get-resp.json

@@ -0,0 +1,38 @@
+{
+  "endpoint": {
+    "created_at": "2019-07-10T12:10:55.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+    "user_id": "7cf9b4745d514517b3eae440438136bc",
+    "project_id": "ffc16db2011e41f28152897c279b6bcc",
+    "connection_info": {
+      "username": "admin",
+      "project_name": "admin",
+      "user_domain_id": "default",
+      "allow_untrusted": true,
+      "identity_api_version": 3,
+      "glance_api_version": 2,
+      "auth_url": "http://25.48.0.101/identity/v3",
+      "password": "Passw0rd",
+      "allow_untrusted_swift": true,
+      "project_domain_id": "default",
+      "region_name": "RegionOne",
+      "nova_region_name": "RegionOne",
+      "neutron_region_name": "RegionOne",
+      "glance_region_name": "RegionOne",
+      "cinder_region_name": "RegionOne",
+      "swift_region_name": "RegionOne",
+      "interface_name": "publicURL",
+      "nova_interface_name": "publicURL",
+      "neutron_interface_name": "publicURL",
+      "glance_interface_name": "publicURL",
+      "cinder_interface_name": "publicURL",
+      "swift_interface_name": "publicURL"
+    },
+    "type": "openstack",
+    "name": "Endpoint Name Example",
+    "description": "Example Endpoint Description"
+  }
+}

+ 25 - 0
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-source-options-list-resp.json

@@ -0,0 +1,25 @@
+{
+  "source_options": [
+    {
+      "name": "intermediate_volume_format",
+      "values": [
+        "raw",
+        "vmdk",
+        "qcow",
+        "qcow2",
+        "vhd",
+        "vhdx"
+      ],
+      "config_default": "qcow2"
+    },
+    {
+      "name": "volume_backups_container",
+      "values": [
+        "coriolis",
+        "test",
+        "test2"
+      ],
+      "config_default": "coriolis"
+    }
+  ]
+}

+ 30 - 0
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-update-req.json

@@ -0,0 +1,30 @@
+{
+  "endpoint": {
+    "connection_info": {
+      "cinder_interface_name": "publicURL",
+      "swift_interface_name": "publicURL",
+      "auth_url": "http://25.48.0.101/identity/v3",
+      "nova_interface_name": "publicURL",
+      "glance_region_name": "RegionOne",
+      "neutron_region_name": "RegionOne",
+      "cinder_region_name": "RegionOne",
+      "glance_api_version": 2,
+      "glance_interface_name": "publicURL",
+      "interface_name": "publicURL",
+      "allow_untrusted_swift": true,
+      "username": "coriolis",
+      "project_name": "coriolis",
+      "project_domain_id": "default",
+      "region_name": "RegionOne",
+      "swift_region_name": "RegionOne",
+      "nova_region_name": "RegionOne",
+      "password": "Passw0rd",
+      "user_domain_id": "default",
+      "allow_untrusted": false,
+      "identity_api_version": 3,
+      "neutron_interface_name": "publicURL"
+    },
+    "name": "Updated Name",
+    "description": "Updated description"
+  }
+}

+ 38 - 0
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-update-resp.json

@@ -0,0 +1,38 @@
+{
+  "endpoint": {
+    "created_at": "2019-07-31T17:36:46.000000",
+    "updated_at": "2019-08-01T14:26:31.000000",
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "575ba652-ff3a-4cb9-ab03-eb6cbeaae2c4",
+    "user_id": "7cf9b4745d514517b3eae440438136bc",
+    "project_id": "ffc16db2011e41f28152897c279b6bcc",
+    "connection_info": {
+      "cinder_interface_name": "publicURL",
+      "swift_interface_name": "publicURL",
+      "auth_url": "http://25.48.0.101/identity/v3",
+      "nova_interface_name": "publicURL",
+      "glance_region_name": "RegionOne",
+      "neutron_region_name": "RegionOne",
+      "cinder_region_name": "RegionOne",
+      "glance_api_version": 2,
+      "glance_interface_name": "publicURL",
+      "interface_name": "publicURL",
+      "allow_untrusted_swift": true,
+      "username": "coriolis",
+      "project_name": "coriolis",
+      "project_domain_id": "default",
+      "region_name": "RegionOne",
+      "swift_region_name": "RegionOne",
+      "nova_region_name": "RegionOne",
+      "password": "Passw0rd",
+      "user_domain_id": "default",
+      "allow_untrusted": false,
+      "identity_api_version": 3,
+      "neutron_interface_name": "publicURL"
+    },
+    "type": "openstack",
+    "name": "Updated Name",
+    "description": "Updated description"
+  }
+}

+ 5 - 0
coriolis/api-refs/api_samples/migration/migration-cancel-req.json

@@ -0,0 +1,5 @@
+{
+  "cancel": {
+    "force": false
+  }
+}

+ 8 - 0
coriolis/api-refs/api_samples/migration/migration-from-replica-req.json

@@ -0,0 +1,8 @@
+{
+  "migration": {
+    "clone_disks": true,
+    "force": false,
+    "replica_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+    "skip_os_morphing": false
+  }
+}

+ 26 - 0
coriolis/api-refs/api_samples/migration/openstack-migration-create-req.json

@@ -0,0 +1,26 @@
+{
+  "migration": {
+    "network_map": {
+      "private": "provider-net"
+    },
+    "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+    "instances": ["ubuntu-xenial"],
+    "storage_mappings": {},
+    "destination_environment": {
+      "storage_mappings": {
+        "lvmdriver-1": "lvm-1"
+      },
+      "keypair_name": "new-key",
+      "delete_disks_on_vm_termination": false,
+      "migr_image_map": {
+          "linux": "ubuntu-xenial-img",
+          "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+      },
+      "migr_network": "provider-net",
+      "port_reuse_policy": "keep_mac",
+      "set_dhcp": true
+    },
+    "skip_os_morphing": false,
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3"
+  }
+}

+ 258 - 0
coriolis/api-refs/api_samples/migration/openstack-migration-create-resp.json

@@ -0,0 +1,258 @@
+{
+  "migration": {
+    "created_at": "2019-07-10T07:24:09.000000",
+    "updated_at": "2019-07-10T08:39:05.000000",
+    "deleted_at": null,
+    "deleted": "0",
+    "base_id": "1e31443d-5eb1-403f-9f15-c67a2c372bc3",
+    "user_id": "7cf9b4745d514517b3eae440438136bc",
+    "project_id": "ffc16db2011e41f28152897c279b6bcc",
+    "destination_environment": {
+        "storage_mappings": {
+          "lvmdriver-1": "lvm-1"
+        },
+        "keypair_name": "new-key",
+        "delete_disks_on_vm_termination": false,
+        "migr_image_map": {
+            "linux": "ubuntu-xenial-img",
+            "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+        },
+        "migr_network": "provider-net",
+        "port_reuse_policy": "keep_mac",
+        "set_dhcp": true
+    },
+    "type": "migration",
+    "instances": ["windows"],
+    "reservation_id": null,
+    "notes": "",
+    "origin_endpoint_id": "b59051a2-bbf3-4fb7-a1eb-539db55339dc",
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+    "transfer_result": null,
+    "network_map": {},
+    "storage_mappings": {},
+    "source_environment": {},
+    "id": "1e31443d-5eb1-403f-9f15-c67a2c372bc3",
+    "replica_id": null,
+    "status": "RUNNING",
+    "tasks": [
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "4378b0f9-59af-4421-be99-3f1dd45d800c",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "VALIDATE_MIGRATION_INPUTS",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "4081541f-395a-498a-a452-387171f069bf",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "EXPORT_INSTANCE",
+        "exception_details": null,
+        "depends_on": [
+          "4378b0f9-59af-4421-be99-3f1dd45d800c"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "12e5b7ff-b207-48fc-bae8-1b75385ccace",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "GET_OPTIMAL_FLAVOR",
+        "exception_details": null,
+        "depends_on": [
+          "4081541f-395a-498a-a452-387171f069bf"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "fd496b06-f06b-4625-826d-41d4f799024e",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "IMPORT_INSTANCE",
+        "exception_details": null,
+        "depends_on": [
+          "12e5b7ff-b207-48fc-bae8-1b75385ccace"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "dda2909d-e5b6-4342-955b-e7928181125c",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DEPLOY_DISK_COPY_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "fd496b06-f06b-4625-826d-41d4f799024e"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "911a4f9e-b68b-4350-9fd3-ffcd90f3ca73",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "COPY_DISK_DATA",
+        "exception_details": null,
+        "depends_on": [
+          "dda2909d-e5b6-4342-955b-e7928181125c"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "2c450f5f-5d39-490f-b54c-20b72761040d",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_DISK_COPY_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "911a4f9e-b68b-4350-9fd3-ffcd90f3ca73"
+        ],
+        "on_error": true,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "3f387c03-2c2e-4276-8e4f-2569c01cc71e",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DEPLOY_OS_MORPHING_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "2c450f5f-5d39-490f-b54c-20b72761040d"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "2f2dd3af-631d-457c-ab86-28eba5877113",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "OS_MORPHING",
+        "exception_details": null,
+        "depends_on": [
+          "3f387c03-2c2e-4276-8e4f-2569c01cc71e"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "76f1f6c7-88e6-4dce-802e-5700ae66cd2c",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_OS_MORPHING_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "2f2dd3af-631d-457c-ab86-28eba5877113"
+        ],
+        "on_error": true,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T08:40:02.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "92fec20f-ce24-4dd4-88b0-3455a1d5840d",
+        "execution_id": "0a902cf6-f24a-4af9-92a6-843bbd6f35b1",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "FINALIZE_IMPORT_INSTANCE",
+        "exception_details": null,
+        "depends_on": [
+          "76f1f6c7-88e6-4dce-802e-5700ae66cd2c"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      }
+    ]
+  }
+}

+ 219 - 0
coriolis/api-refs/api_samples/migration/openstack-migration-from-replica-resp.json

@@ -0,0 +1,219 @@
+{
+  "migration": {
+    "created_at": "2019-07-11T13:01:03.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "base_id": "480a4ba6-db63-43cb-a91b-4ef65665cd26",
+    "user_id": "7cf9b4745d514517b3eae440438136bc",
+    "project_id": "ffc16db2011e41f28152897c279b6bcc",
+    "destination_environment": {
+      "storage_mappings": {
+        "lvmdriver-1": "lvm-1"
+      },
+      "keypair_name": "new-key",
+      "delete_disks_on_vm_termination": false,
+      "migr_image_map": {
+        "linux": "ubuntu-xenial-img",
+        "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+      },
+      "migr_network": "provider-net",
+      "port_reuse_policy": "keep_mac",
+      "set_dhcp": true
+    },
+    "type": "migration",
+    "instances": ["ubuntu-xenial"],
+    "reservation_id": null,
+    "notes": null,
+    "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+    "transfer_result": null,
+    "network_map": {},
+    "storage_mappings": {},
+    "source_environment": {},
+    "id": "480a4ba6-db63-43cb-a91b-4ef65665cd26",
+    "replica_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "status": "RUNNING",
+    "tasks": [
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "9a1cfa58-553f-41ba-ac98-e79d2072051a",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "VALIDATE_REPLICA_DEPLOYMENT_INPUTS",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "92061442-f8b9-4087-8d4d-909c24580552",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "GET_OPTIMAL_FLAVOR",
+        "exception_details": null,
+        "depends_on": [
+          "9a1cfa58-553f-41ba-ac98-e79d2072051a"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "2466c7c1-a228-48a0-a805-38903accec46",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "CREATE_REPLICA_DISK_SNAPSHOTS",
+        "exception_details": null,
+        "depends_on": [
+          "9a1cfa58-553f-41ba-ac98-e79d2072051a",
+          "92061442-f8b9-4087-8d4d-909c24580552"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "d0fe46ef-c648-4b31-8937-365827dddf4d",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DEPLOY_REPLICA_INSTANCE",
+        "exception_details": null,
+        "depends_on": [
+          "2466c7c1-a228-48a0-a805-38903accec46"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "c19577f6-6426-4e69-bd91-96627e06e781",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DEPLOY_OS_MORPHING_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "d0fe46ef-c648-4b31-8937-365827dddf4d"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "ca2361aa-b329-4c33-a076-d2207d3c8dce",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "OS_MORPHING",
+        "exception_details": null,
+        "depends_on": [
+          "c19577f6-6426-4e69-bd91-96627e06e781"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "8892d1cf-0120-4e3f-9563-c0ee8cb278e8",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_OS_MORPHING_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "ca2361aa-b329-4c33-a076-d2207d3c8dce"
+        ],
+        "on_error": true,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "86048ea8-9520-4797-877b-66934e1723ac",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "FINALIZE_REPLICA_INSTANCE_DEPLOYMENT",
+        "exception_details": null,
+        "depends_on": [
+          "8892d1cf-0120-4e3f-9563-c0ee8cb278e8"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:01:03.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "375ba627-4a79-4b5f-94a9-221df8971e27",
+        "execution_id": "ff5b257e-aafc-473c-93ee-509832e369da",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_REPLICA_DISK_SNAPSHOTS",
+        "exception_details": null,
+        "depends_on": [
+          "86048ea8-9520-4797-877b-66934e1723ac"
+        ],
+        "on_error": true,
+        "progress_updates": [],
+        "events": []
+      }
+    ]
+  }
+}

+ 500 - 0
coriolis/api-refs/api_samples/migration/openstack-migration-get-resp.json

@@ -0,0 +1,500 @@
+{
+  "migration": {
+    "created_at": "2019-07-10T07:24:09.000000",
+    "updated_at": "2019-07-10T08:39:05.000000",
+    "deleted_at": null,
+    "deleted": "0",
+    "base_id": "1e31443d-5eb1-403f-9f15-c67a2c372bc3",
+    "user_id": "7cf9b4745d514517b3eae440438136bc",
+    "project_id": "ffc16db2011e41f28152897c279b6bcc",
+    "destination_environment": {
+        "storage_mappings": {
+          "lvmdriver-1": "lvm-1"
+        },
+        "keypair_name": "new-key",
+        "delete_disks_on_vm_termination": false,
+        "migr_image_map": {
+            "linux": "ubuntu-xenial-img",
+            "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+        },
+        "migr_network": "provider-net",
+        "port_reuse_policy": "keep_mac",
+        "set_dhcp": true
+    },
+    "type": "migration",
+    "instances": ["windows"],
+    "reservation_id": null,
+    "notes": "",
+    "origin_endpoint_id": "b59051a2-bbf3-4fb7-a1eb-539db55339dc",
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+    "transfer_result": null,
+    "network_map": {},
+    "storage_mappings": {},
+    "source_environment": {},
+    "id": "1e31443d-5eb1-403f-9f15-c67a2c372bc3",
+    "replica_id": null,
+    "status": "COMPLETED",
+    "tasks": [
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T07:24:29.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "d96e46ec-5ba4-4a5c-b320-a3e49ecbefa1",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 11,
+        "status": "COMPLETED",
+        "task_type": "VALIDATE_MIGRATION_INPUTS",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T07:24:28.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "2b61da21-5bb6-49de-a133-75564d8b9515",
+            "task_id": "d96e46ec-5ba4-4a5c-b320-a3e49ecbefa1",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Checking Migration shape name"
+          },
+          {
+            "created_at": "2019-07-10T07:24:14.000000",
+            "updated_at": "2019-07-10T07:24:28.000000",
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "393e8919-5a62-46ba-a4fb-717c2204a5c9",
+            "task_id": "d96e46ec-5ba4-4a5c-b320-a3e49ecbefa1",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Checking Migration Subnet ID"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T07:35:05.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "d06411ae-14c8-45c4-b88f-4e89a7fb5f8b",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 16,
+        "status": "COMPLETED",
+        "task_type": "EXPORT_INSTANCE",
+        "exception_details": null,
+        "depends_on": [
+          "d96e46ec-5ba4-4a5c-b320-a3e49ecbefa1"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T07:24:33.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "0ef15984-e199-4a03-99b9-ee3399e5e01c",
+            "task_id": "d06411ae-14c8-45c4-b88f-4e89a7fb5f8b",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Shutting down instance"
+          },
+          {
+            "created_at": "2019-07-10T07:34:58.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "1e05f34f-d2fa-4935-9420-54817a8ade92",
+            "task_id": "d06411ae-14c8-45c4-b88f-4e89a7fb5f8b",
+            "current_step": 6,
+            "total_steps": null,
+            "message": "Removing instance snapshot"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T07:35:13.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "be6a2540-c14f-4043-9a8e-cf3a5fb7d341",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 23,
+        "status": "COMPLETED",
+        "task_type": "GET_OPTIMAL_FLAVOR",
+        "exception_details": null,
+        "depends_on": [
+          "d06411ae-14c8-45c4-b88f-4e89a7fb5f8b"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T07:35:12.000000",
+            "updated_at": "2019-07-10T07:35:13.000000",
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "d422865d-9216-4a01-9a4d-0391c52e9a4a",
+            "task_id": "be6a2540-c14f-4043-9a8e-cf3a5fb7d341",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Selected flavor: VM.Standard2.2"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T07:35:34.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "e7c00014-9355-4718-bdc9-438eba3f96bc",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 28,
+        "status": "COMPLETED",
+        "task_type": "IMPORT_INSTANCE",
+        "exception_details": null,
+        "depends_on": [
+          "be6a2540-c14f-4043-9a8e-cf3a5fb7d341"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T07:35:17.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "1e0b4339-b6de-40fb-bdc2-f7eaafa8c583",
+            "task_id": "e7c00014-9355-4718-bdc9-438eba3f96bc",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Looking for boot volume with tags: {'coriolis_boot_volume_type': 'BIOS', 'launch_mode': 'pv'} and fw type BIOS"
+          },
+          {
+            "created_at": "2019-07-10T07:35:17.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "ff8f4580-fecb-4c3c-b2c3-262e62d29032",
+            "task_id": "e7c00014-9355-4718-bdc9-438eba3f96bc",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Creating volumes from images"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T07:37:48.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "8b00c6bc-39ea-4c13-923a-870968005798",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 33,
+        "status": "COMPLETED",
+        "task_type": "DEPLOY_DISK_COPY_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "e7c00014-9355-4718-bdc9-438eba3f96bc"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T07:35:38.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "139751d1-92a8-445c-848f-a8da60d239a2",
+            "task_id": "8b00c6bc-39ea-4c13-923a-870968005798",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Launching worker instance"
+          },
+          {
+            "created_at": "2019-07-10T07:37:46.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "19bb283c-8d9a-4f15-9556-cc2134043c41",
+            "task_id": "8b00c6bc-39ea-4c13-923a-870968005798",
+            "current_step": 6,
+            "total_steps": null,
+            "message": "Attaching iscsi volumes"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T08:31:46.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "29b522ae-1d69-4d55-8a06-25fbcb3145af",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 38,
+        "status": "COMPLETED",
+        "task_type": "COPY_DISK_DATA",
+        "exception_details": null,
+        "depends_on": [
+          "8b00c6bc-39ea-4c13-923a-870968005798"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T07:38:56.000000",
+            "updated_at": "2019-07-10T08:31:45.000000",
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "4c1097ad-97ad-46a8-af76-befbfe64d062",
+            "task_id": "29b522ae-1d69-4d55-8a06-25fbcb3145af",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Disk copy progress for 4e9850d5-b215-49d0-951e-b9a266708706: 100%"
+          },
+          {
+            "created_at": "2019-07-10T07:37:50.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "8ecc239f-8b90-47b7-80e3-8fb7a3315e8a",
+            "task_id": "29b522ae-1d69-4d55-8a06-25fbcb3145af",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Waiting for connectivity on 130.61.21.174:22"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T08:35:04.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "0723cf36-3fd8-4a31-b7ed-f3a86e83e0d5",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 46,
+        "status": "COMPLETED",
+        "task_type": "DELETE_DISK_COPY_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "29b522ae-1d69-4d55-8a06-25fbcb3145af"
+        ],
+        "on_error": true,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T08:31:51.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "20e4c5fd-0205-4e6b-8720-dc4fbb92ca25",
+            "task_id": "0723cf36-3fd8-4a31-b7ed-f3a86e83e0d5",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Deleting worker instance"
+          },
+          {
+            "created_at": "2019-07-10T08:31:51.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "3163791e-330a-427e-b766-431a428cf40b",
+            "task_id": "0723cf36-3fd8-4a31-b7ed-f3a86e83e0d5",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Removing worker instance resources"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T08:38:19.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "1588d7a4-e8f4-43eb-9c34-917172e8b5c6",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 51,
+        "status": "COMPLETED",
+        "task_type": "DEPLOY_OS_MORPHING_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "0723cf36-3fd8-4a31-b7ed-f3a86e83e0d5"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T08:37:54.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "208d2320-89d4-456f-b65c-601ec4ede834",
+            "task_id": "1588d7a4-e8f4-43eb-9c34-917172e8b5c6",
+            "current_step": 5,
+            "total_steps": null,
+            "message": "Attaching volumes to migration worker"
+          },
+          {
+            "created_at": "2019-07-10T08:38:15.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "3c22630d-65bd-44fa-9c1b-bb86e5a3cc48",
+            "task_id": "1588d7a4-e8f4-43eb-9c34-917172e8b5c6",
+            "current_step": 6,
+            "total_steps": null,
+            "message": "Attaching iscsi volumes"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T08:39:05.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "fb4f407d-8ff8-4b99-82b0-912a4cd157e3",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 56,
+        "status": "COMPLETED",
+        "task_type": "OS_MORPHING",
+        "exception_details": null,
+        "depends_on": [
+          "1588d7a4-e8f4-43eb-9c34-917172e8b5c6"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T08:38:23.000000",
+            "updated_at": "2019-07-10T08:39:00.000000",
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "15485692-4ca7-4e5d-9b5d-d67818cb676c",
+            "task_id": "fb4f407d-8ff8-4b99-82b0-912a4cd157e3",
+            "current_step": 4,
+            "total_steps": null,
+            "message": "Enabling cloudbase-init"
+          },
+          {
+            "created_at": "2019-07-10T08:38:23.000000",
+            "updated_at": "2019-07-10T08:38:59.000000",
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "756e14b8-54a7-40ce-b743-4d59f34bc407",
+            "task_id": "fb4f407d-8ff8-4b99-82b0-912a4cd157e3",
+            "current_step": 3,
+            "total_steps": null,
+            "message": "Adding cloudbase-init"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T08:42:43.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "51d91e9e-0aa9-4705-bb66-1f5600cd0c69",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 61,
+        "status": "COMPLETED",
+        "task_type": "DELETE_OS_MORPHING_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "fb4f407d-8ff8-4b99-82b0-912a4cd157e3"
+        ],
+        "on_error": true,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T08:39:10.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "52437c05-8aa4-4e37-bf0f-0c353026e04e",
+            "task_id": "51d91e9e-0aa9-4705-bb66-1f5600cd0c69",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Deleting worker instance"
+          },
+          {
+            "created_at": "2019-07-10T08:39:10.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "f33087ef-f19a-4c6a-b25d-7255d0e01992",
+            "task_id": "51d91e9e-0aa9-4705-bb66-1f5600cd0c69",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Removing worker instance resources"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-10T07:24:09.000000",
+        "updated_at": "2019-07-10T08:43:39.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "8627044c-3ad8-4087-8df5-a56f5c897cfe",
+        "execution_id": "20281dd8-b00e-4801-99e4-39d7fae7ed76",
+        "instance": "windows",
+        "host": "coriolis-worker",
+        "process_id": 66,
+        "status": "COMPLETED",
+        "task_type": "FINALIZE_IMPORT_INSTANCE",
+        "exception_details": null,
+        "depends_on": [
+          "51d91e9e-0aa9-4705-bb66-1f5600cd0c69"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-10T08:42:46.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "017c79fb-2f7b-492e-8d54-16e9e78cb6fe",
+            "task_id": "8627044c-3ad8-4087-8df5-a56f5c897cfe",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Launching instance windows"
+          },
+          {
+            "created_at": "2019-07-10T08:42:48.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "187fa3c5-086b-4bbb-b45d-00eb1489b1ca",
+            "task_id": "8627044c-3ad8-4087-8df5-a56f5c897cfe",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Waiting for machine to come online"
+          }
+        ],
+        "events": []
+      }
+    ]
+  }
+}

+ 752 - 0
coriolis/api-refs/api_samples/migration/openstack-migration-list-detail-resp.json

@@ -0,0 +1,752 @@
+{
+  "migrations": [
+    {
+      "created_at": "2019-08-20T12:32:31.000000",
+      "updated_at": "2019-08-20T12:32:42.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "base_id": "65bd70e4-c4ab-4f60-9d78-779c0b58c2ab",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "destination_environment": {
+        "network_map": {
+          "VM Network": "0e83bf34-9cc7-4580-9189-a9d9c3c7abb8"
+        },
+        "storage_mappings": {
+          "backend_mappings": [
+            {
+              "source": "afsan1",
+              "destination": "lvmdriver-1"
+            }
+          ],
+          "disk_mappings": [
+            {
+              "disk_id": "3000",
+              "destination": "lvmdriver-1"
+            }
+          ]
+        }
+      },
+      "type": "migration",
+      "instances": ["CI/openwrt"],
+      "reservation_id": null,
+      "notes": "",
+      "origin_endpoint_id": "ebe5b6cf-3236-43f7-b7b2-dce477a011a4",
+      "destination_endpoint_id": "575ba652-ff3a-4cb9-ab03-eb6cbeaae2c4",
+      "transfer_result": null,
+      "network_map": {
+        "VM Network": "0e83bf34-9cc7-4580-9189-a9d9c3c7abb8"
+      },
+      "storage_mappings": {
+        "backend_mappings": [
+          {
+            "source": "afsan1",
+            "destination": "lvmdriver-1"
+          }
+        ],
+        "disk_mappings": [
+          {
+            "disk_id": "3000",
+            "destination": "lvmdriver-1"
+          }
+        ]
+      },
+      "source_environment": {},
+      "id": "65bd70e4-c4ab-4f60-9d78-779c0b58c2ab",
+      "replica_id": null,
+      "status": "ERROR",
+      "tasks": [
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:42.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "9699adf6-1c35-44a6-924f-acd9ebbee3cf",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 97,
+          "status": "COMPLETED",
+          "task_type": "VALIDATE_MIGRATION_SOURCE_INPUTS",
+          "exception_details": null,
+          "depends_on": null,
+          "on_error": false,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-20T12:32:41.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "2593f886-8335-4f04-a5da-2efe061e9fd1",
+              "task_id": "9699adf6-1c35-44a6-924f-acd9ebbee3cf",
+              "current_step": 2,
+              "total_steps": null,
+              "message": "VMWare tools are not installed in VM \"openwrt\", unable to fetch the IP addresses of the VM's NICs."
+            },
+            {
+              "created_at": "2019-08-20T12:32:37.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "aa198007-d279-46bd-990d-779f96f80cf5",
+              "task_id": "9699adf6-1c35-44a6-924f-acd9ebbee3cf",
+              "current_step": 1,
+              "total_steps": null,
+              "message": "Compiling export info for VM 'CI/openwrt'"
+            }
+          ]
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:47.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "9624309d-19c1-4344-b23c-a0f134081b4b",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 102,
+          "status": "ERROR",
+          "task_type": "VALIDATE_MIGRATION_DESTINATION_INPUTS",
+          "exception_details": "Task canceled",
+          "depends_on": ["9699adf6-1c35-44a6-924f-acd9ebbee3cf"],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:46.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "428a7afe-c1b7-4dd4-a3a4-662ca12f350d",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": null,
+          "process_id": null,
+          "status": "CANCELED",
+          "task_type": "EXPORT_INSTANCE",
+          "exception_details": null,
+          "depends_on": ["9624309d-19c1-4344-b23c-a0f134081b4b"],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:46.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "8a3f2ebb-fa10-4226-b789-1c3614b2ca3b",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": null,
+          "process_id": null,
+          "status": "CANCELED",
+          "task_type": "GET_OPTIMAL_FLAVOR",
+          "exception_details": null,
+          "depends_on": [
+            "428a7afe-c1b7-4dd4-a3a4-662ca12f350d"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:46.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "93517f7f-deba-49b1-ba12-18cea373bc28",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": null,
+          "process_id": null,
+          "status": "CANCELED",
+          "task_type": "IMPORT_INSTANCE",
+          "exception_details": null,
+          "depends_on": ["8a3f2ebb-fa10-4226-b789-1c3614b2ca3b"],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:46.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "846e3c46-e3c8-4951-8763-fc69b055887a",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": null,
+          "process_id": null,
+          "status": "CANCELED",
+          "task_type": "DEPLOY_DISK_COPY_RESOURCES",
+          "exception_details": null,
+          "depends_on": [
+            "93517f7f-deba-49b1-ba12-18cea373bc28"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:46.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "9d6cfbf7-cc78-474c-bf90-13e27d56b27b",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": null,
+          "process_id": null,
+          "status": "CANCELED",
+          "task_type": "COPY_DISK_DATA",
+          "exception_details": null,
+          "depends_on": [
+            "846e3c46-e3c8-4951-8763-fc69b055887a"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:33:00.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "6083ac88-d663-4a73-ba3a-870221d1ca0f",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 107,
+          "status": "COMPLETED",
+          "task_type": "DELETE_DISK_COPY_RESOURCES",
+          "exception_details": null,
+          "depends_on": [
+            "9d6cfbf7-cc78-474c-bf90-13e27d56b27b"
+          ],
+          "on_error": true,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:46.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "d9fe8480-8f36-4645-b907-5c12a42cf634",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": null,
+          "process_id": null,
+          "status": "CANCELED",
+          "task_type": "DEPLOY_OS_MORPHING_RESOURCES",
+          "exception_details": null,
+          "depends_on": [
+            "6083ac88-d663-4a73-ba3a-870221d1ca0f"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:46.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "fa0c4c3c-8099-42a6-9407-f9fb4429c6a7",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": null,
+          "process_id": null,
+          "status": "CANCELED",
+          "task_type": "OS_MORPHING",
+          "exception_details": null,
+          "depends_on": [
+            "d9fe8480-8f36-4645-b907-5c12a42cf634"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:33:00.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "958a205f-afe5-414a-a412-8d90107326c1",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 108,
+          "status": "COMPLETED",
+          "task_type": "DELETE_OS_MORPHING_RESOURCES",
+          "exception_details": null,
+          "depends_on": ["fa0c4c3c-8099-42a6-9407-f9fb4429c6a7"],
+          "on_error": true,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:32:46.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "9632b168-0db7-4445-8c2c-728e415851a0",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": null,
+          "process_id": null,
+          "status": "CANCELED",
+          "task_type": "FINALIZE_IMPORT_INSTANCE",
+          "exception_details": null,
+          "depends_on": ["958a205f-afe5-414a-a412-8d90107326c1"],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-20T12:32:31.000000",
+          "updated_at": "2019-08-20T12:33:00.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "b03ca556-12b2-4583-8111-ef9086ef5acf",
+          "execution_id": "a70f2b8a-6b78-4fc1-a516-63c996cd6424",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 109,
+          "status": "COMPLETED",
+          "task_type": "CLEANUP_FAILED_IMPORT_INSTANCE",
+          "exception_details": null,
+          "depends_on": null,
+          "on_error": true,
+          "events": [],
+          "progress_updates": []
+        }
+      ]
+    },
+    {
+      "created_at": "2019-08-22T08:29:33.000000",
+      "updated_at": "2019-08-22T08:45:22.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "base_id": "9566af98-2c89-4969-ad73-a416e8a8a5ce",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "destination_environment": {
+        "network_map": {
+          "VM Network": "0e83bf34-9cc7-4580-9189-a9d9c3c7abb8"
+        },
+        "storage_mappings": {
+          "backend_mappings": [
+            {
+              "source": "afsan1",
+              "destination": "lvmdriver-1"
+            }
+          ],
+          "disk_mappings": [
+            {
+              "disk_id": "3000",
+              "destination": "lvmdriver-1"
+            }
+          ]
+        },
+        "migr_network": "private"
+      },
+      "type": "migration",
+      "instances": [
+        "CI/openwrt"
+      ],
+      "reservation_id": null,
+      "notes": null,
+      "origin_endpoint_id": "ebe5b6cf-3236-43f7-b7b2-dce477a011a4",
+      "destination_endpoint_id": "575ba652-ff3a-4cb9-ab03-eb6cbeaae2c4",
+      "transfer_result": {
+        "CI/openwrt": {
+          "num_cpu": 1,
+          "num_cores_per_socket": 1,
+          "memory_mb": 1024,
+          "nested_virtualization": false,
+          "name": "openwrt",
+          "id": "00ea28b8-4760-4890-bd79-227b7327a209",
+          "flavor_name": "ds1G",
+          "devices": {
+            "nics": [
+              {
+                "name": "8ea26385-04e5-418b-9ca7-e36c36d6c69b",
+                "id": "8ea26385-04e5-418b-9ca7-e36c36d6c69b",
+                "mac_address": "00:50:56:9c:23:b6",
+                "ip_addresses": [
+                  "10.0.0.34"
+                ],
+                "network_id": "0e83bf34-9cc7-4580-9189-a9d9c3c7abb8",
+                "network_name": "private"
+              }
+            ],
+            "disks": [
+              {
+                "format": "raw",
+                "guest_device": "/dev/vda",
+                "size_bytes": 1073741824,
+                "path": "",
+                "id": "6eb6f752-4ae5-450d-995f-436ecc48f400",
+                "storage_backend_identifier": "lvmdriver-1"
+              }
+            ],
+            "cdroms": [],
+            "serial_ports": [],
+            "floppies": [],
+            "controllers": []
+          },
+          "os_type": "linux"
+        }
+      },
+      "network_map": {
+        "VM Network": "0e83bf34-9cc7-4580-9189-a9d9c3c7abb8"
+      },
+      "storage_mappings": {
+        "backend_mappings": [
+          {
+            "source": "afsan1",
+            "destination": "lvmdriver-1"
+          }
+        ],
+        "disk_mappings": [
+          {
+            "disk_id": "3000",
+            "destination": "lvmdriver-1"
+          }
+        ]
+      },
+      "source_environment": {
+        "vixdisklib_compatibility_version": "6.0"
+      },
+      "id": "9566af98-2c89-4969-ad73-a416e8a8a5ce",
+      "replica_id": "96d71f92-1cbd-48cb-98aa-06ce8cbf89cf",
+      "status": "COMPLETED",
+      "tasks": [
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:29:43.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "fb4e942a-58a6-4099-b2fc-c15206f14b08",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 131,
+          "status": "COMPLETED",
+          "task_type": "VALIDATE_REPLICA_DEPLOYMENT_INPUTS",
+          "exception_details": null,
+          "depends_on": null,
+          "on_error": false,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-22T08:29:38.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "133ad810-6005-4996-9c94-25f22bb449b6",
+              "task_id": "fb4e942a-58a6-4099-b2fc-c15206f14b08",
+              "current_step": 2,
+              "total_steps": null,
+              "message": "Checking disk storage mappings."
+            },
+            {
+              "created_at": "2019-08-22T08:29:38.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "201f1abc-74cf-4e57-ba23-610ee66981ee",
+              "task_id": "fb4e942a-58a6-4099-b2fc-c15206f14b08",
+              "current_step": 6,
+              "total_steps": null,
+              "message": "Checking selected worker VM floating IP pool"
+            }
+          ]
+        },
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:29:47.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "fda835d3-1ac8-4019-9738-5ff0f6a76e9d",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 136,
+          "status": "COMPLETED",
+          "task_type": "GET_OPTIMAL_FLAVOR",
+          "exception_details": null,
+          "depends_on": [
+            "fb4e942a-58a6-4099-b2fc-c15206f14b08"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-22T08:29:46.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "31491af1-c65e-4d2e-861c-e0789eac10a9",
+              "task_id": "fda835d3-1ac8-4019-9738-5ff0f6a76e9d",
+              "current_step": 1,
+              "total_steps": null,
+              "message": "Selected flavor: ds1G"
+            }
+          ]
+        },
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:29:53.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "f86fe7f4-49ad-4e9f-8d25-41612d22b241",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 141,
+          "status": "COMPLETED",
+          "task_type": "CREATE_REPLICA_DISK_SNAPSHOTS_DURING_MIGRATION",
+          "exception_details": null,
+          "depends_on": [
+            "fb4e942a-58a6-4099-b2fc-c15206f14b08",
+            "fda835d3-1ac8-4019-9738-5ff0f6a76e9d"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-22T08:29:50.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "5f0f380f-fe8d-4743-88f6-394d479abb97",
+              "task_id": "f86fe7f4-49ad-4e9f-8d25-41612d22b241",
+              "current_step": 1,
+              "total_steps": null,
+              "message": "Creating replica disk snapshots"
+            }
+          ]
+        },
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:29:57.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "db2569b8-d52d-4422-86cd-9206ce722fa5",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 146,
+          "status": "COMPLETED",
+          "task_type": "DEPLOY_REPLICA_INSTANCE",
+          "exception_details": null,
+          "depends_on": [
+            "f86fe7f4-49ad-4e9f-8d25-41612d22b241"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": []
+        },
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:34:40.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "0d36b79c-054d-4593-b963-3f6f00ac777c",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 151,
+          "status": "COMPLETED",
+          "task_type": "DEPLOY_OS_MORPHING_RESOURCES",
+          "exception_details": null,
+          "depends_on": [
+            "db2569b8-d52d-4422-86cd-9206ce722fa5"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-22T08:34:34.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "14292e66-aec1-4242-901a-6e9c062a6d1c",
+              "task_id": "0d36b79c-054d-4593-b963-3f6f00ac777c",
+              "current_step": 7,
+              "total_steps": null,
+              "message": "Attaching volume 6eb6f752-4ae5-450d-995f-436ecc48f400 to worker instance"
+            },
+            {
+              "created_at": "2019-08-22T08:30:01.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "2119ca78-1016-4fb8-bca6-6e420ac43c9e",
+              "task_id": "0d36b79c-054d-4593-b963-3f6f00ac777c",
+              "current_step": 1,
+              "total_steps": null,
+              "message": "Creating migration worker instance keypair"
+            }
+          ]
+        },
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:44:43.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "dc42b8c1-4ce7-4fed-9a93-273a4ee7dc45",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 156,
+          "status": "COMPLETED",
+          "task_type": "OS_MORPHING",
+          "exception_details": null,
+          "depends_on": [
+            "0d36b79c-054d-4593-b963-3f6f00ac777c"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-22T08:44:23.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "3eedfa56-e7ff-45fd-801b-91e3b76f52f6",
+              "task_id": "dc42b8c1-4ce7-4fed-9a93-273a4ee7dc45",
+              "current_step": 8,
+              "total_steps": null,
+              "message": "Dismounting OS partitions"
+            },
+            {
+              "created_at": "2019-08-22T08:34:45.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "5076a39d-1c61-4ae9-a303-c81f32113f2f",
+              "task_id": "dc42b8c1-4ce7-4fed-9a93-273a4ee7dc45",
+              "current_step": 2,
+              "total_steps": null,
+              "message": "Connecting to SSH host: 22.45.0.53:22"
+            }
+          ]
+        },
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:44:58.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "4029e5df-001f-4bfe-8a86-4dbf54379b58",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 161,
+          "status": "COMPLETED",
+          "task_type": "DELETE_OS_MORPHING_RESOURCES",
+          "exception_details": null,
+          "depends_on": [
+            "dc42b8c1-4ce7-4fed-9a93-273a4ee7dc45"
+          ],
+          "on_error": true,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-22T08:44:48.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "c17fa10e-cf31-46fc-a983-30d7028757f8",
+              "task_id": "4029e5df-001f-4bfe-8a86-4dbf54379b58",
+              "current_step": 1,
+              "total_steps": null,
+              "message": "Removing worker instance resources"
+            }
+          ]
+        },
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:45:15.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "ee78eed3-44ca-4765-8307-e8c5439d982d",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 166,
+          "status": "COMPLETED",
+          "task_type": "FINALIZE_REPLICA_INSTANCE_DEPLOYMENT",
+          "exception_details": null,
+          "depends_on": [
+            "4029e5df-001f-4bfe-8a86-4dbf54379b58"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-22T08:45:02.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "491291f5-1a2a-4d9d-a1d2-c0146720a365",
+              "task_id": "ee78eed3-44ca-4765-8307-e8c5439d982d",
+              "current_step": 3,
+              "total_steps": null,
+              "message": "Ensuring volumes are bootable"
+            },
+            {
+              "created_at": "2019-08-22T08:45:02.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "5bb0dc49-41ce-465f-b892-45e8952d0062",
+              "task_id": "ee78eed3-44ca-4765-8307-e8c5439d982d",
+              "current_step": 4,
+              "total_steps": null,
+              "message": "Setting appropriate os_type: linux for bootable volumes"
+            }
+          ]
+        },
+        {
+          "created_at": "2019-08-22T08:29:33.000000",
+          "updated_at": "2019-08-22T08:45:22.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "aa78e41c-361a-4e12-a405-26c8175b806b",
+          "execution_id": "aec3fb1d-6b08-4c43-af1b-74686fa3d5a7",
+          "instance": "CI/openwrt",
+          "host": "coriolis-worker",
+          "process_id": 171,
+          "status": "COMPLETED",
+          "task_type": "DELETE_REPLICA_DISK_SNAPSHOTS_DURING_MIGRATION",
+          "exception_details": null,
+          "depends_on": [
+            "ee78eed3-44ca-4765-8307-e8c5439d982d"
+          ],
+          "on_error": false,
+          "events": [],
+          "progress_updates": [
+            {
+              "created_at": "2019-08-22T08:45:19.000000",
+              "updated_at": null,
+              "deleted_at": null,
+              "deleted": "0",
+              "id": "bc2a5840-effd-4dba-a5a6-89600757f52e",
+              "task_id": "aa78e41c-361a-4e12-a405-26c8175b806b",
+              "current_step": 1,
+              "total_steps": null,
+              "message": "Removing replica disk snapshots"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

+ 173 - 0
coriolis/api-refs/api_samples/provider/openstack-connection-provider-schema-get-resp.json

@@ -0,0 +1,173 @@
+{
+  "schemas": {
+    "connection_info_schema": {
+      "$schema": "http://cloudbase.it/coriolis/schemas/openstack_connection#",
+      "oneOf": [
+        {
+          "type": "object",
+          "properties": {
+            "identity_api_version": {
+              "type": "integer",
+              "title": "Identity API Version",
+              "description": "Version of the Identity API to use.",
+              "minimum": 2,
+              "maximum": 3,
+              "default": 2
+            },
+            "username": {
+              "type": "string",
+              "title": "Username",
+              "description": "The OpenStack user."
+            },
+            "password": {
+              "type": "string",
+              "title": "Password",
+              "description": "The password for the OpenStack user."
+            },
+            "project_name": {
+              "type": "string",
+              "title": "Project Name",
+              "description": "Name of the project/tenant for the OpenStack user."
+            },
+            "user_domain_name": {
+              "type": "string",
+              "title": "User Domain Name",
+              "description": "The name of the user domain."
+            },
+            "user_domain_id": {
+              "type": "string",
+              "title": "User Domain ID",
+              "description": "The ID of the user domain."
+            },
+            "project_domain_name": {
+              "type": "string",
+              "title": "Project Domain Name",
+              "description": "The name of the project domain."
+            },
+            "project_domain_id": {
+              "type": "string",
+              "title": "Project Domain ID",
+              "description": "The ID of the project domain."
+            },
+            "auth_url": {
+              "type": "string",
+              "title": "Authentication URL",
+              "description": "The full URL of the public endpoint of the authentication service (Keystone) for the OpenStack platform. Must include the port number as well as the API version path element. ('/v2.0' for Keystone v2 and '/v3' for Keystone v3)"
+            },
+            "glance_api_version": {
+              "type": "integer",
+              "title": "Glance API Version",
+              "description": "The API used by the OpenStack Image Service.(Glance)",
+              "minimum": 1,
+              "maximum": 2,
+              "default": 1
+            },
+            "allow_untrusted": {
+              "type": "boolean",
+              "title": "Allow Untrusted",
+              "description": "Whether or not to accept HTTPS connections with self-signed or untrusted certificates when interacting with the APIs of both the authentication service (Keystone) as well the other non-Swift services.",
+              "default": false
+            },
+            "allow_untrusted_swift": {
+              "type": "boolean",
+              "title": "Allow Untrusted Swift",
+              "description": "Whether or not to accept HTTPS connections with self-signed or untrusted certificates when interacting with the API of the OpenStack's Object Storage Service. (Swift or RADOS Gateway) Only used when Replicating from a source OpenStack which has Cinder-backup configured to use Swift.",
+              "default": false
+            },
+            "region_name": {
+              "type": "string",
+              "title": "Region Name",
+              "description": "The name of the OpenStack region to use."
+            },
+            "nova_region_name": {
+              "type": "string",
+              "title": "Nova Region Name",
+              "description": "The region name of the Openstack Compute Service (Nova)."
+            },
+            "neutron_region_name": {
+              "type": "string",
+              "title": "Neutron Region Name",
+              "description": "The region name of the OpenStack Networking Service (Neutron)."
+            },
+            "glance_region_name": {
+              "type": "string",
+              "title": "Glance Region Name",
+              "description": "The region name of the OpenStack Image Service (Glance)."
+            },
+            "cinder_region_name": {
+              "type": "string",
+              "title": "Cinder Region Name",
+              "description": "The region name of the OpenStack Block Storage Service (Cinder)."
+            },
+            "swift_region_name": {
+              "type": "string",
+              "title": "Swift Region Name",
+              "description": "The region name of the Openstack Object Storage Service(Swift or RADOS Gateway) Only used when Replicating from a source OpenStack which has Cinder-backup configured to use Swift/RADOS."
+            },
+            "interface_name": {
+              "type": "string",
+              "title": "Interface Name",
+              "description": "The name of the interface to use for all services. If a specific interface is required for different services, please use the option afferent to each service."
+            },
+            "nova_interface_name": {
+              "type": "string",
+              "title": "Nova Interface Name",
+              "description": "The interface name for the Openstack Compute Service (Nova)."
+            },
+            "neutron_interface_name": {
+              "type": "string",
+              "title": "Neutron Interface Name",
+              "description": "The interface name of the OpenStack Networking Service (Neutron)."
+            },
+            "glance_interface_name": {
+              "type": "string",
+              "title": "Glance Interface Name",
+              "description": "The interface name of the OpenStack Image Service (Glance)."
+            },
+            "cinder_interface_name": {
+              "type": "string",
+              "title": "Cinder Interface Name",
+              "description": "The interface name of the OpenStack Block Storage Service (Cinder)."
+            },
+            "swift_interface_name": {
+              "type": "string",
+              "title": "Swift Interface Name",
+              "description": "The interface name of the Openstack Object Storage Service(Swift or RADOS Gateway) Only used when Replicating from a source OpenStack which has Cinder-backup configured to use Swift/RADOS."
+            }
+          },
+          "required": [
+            "identity_api_version",
+            "username",
+            "password",
+            "project_name",
+            "auth_url"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "secret_ref": {
+              "type": "string",
+              "format": "uri"
+            }
+          },
+          "required": [
+            "secret_ref"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+
+          },
+          "additionalProperties": false
+        },
+        {
+          "type": "null"
+        }
+      ]
+    }
+  }
+}

+ 123 - 0
coriolis/api-refs/api_samples/provider/provider-get-resp.json

@@ -0,0 +1,123 @@
+{
+  "providers": {
+    "openstack": {
+      "types": [
+        1,
+        2,
+        4,
+        8,
+        16,
+        32,
+        128,
+        256,
+        512,
+        2048,
+        4096,
+        8192,
+        16384,
+        32768,
+        65536,
+        131072,
+        262144
+      ]
+    },
+    "oracle_vm": {
+      "types": [
+        1,
+        2,
+        4,
+        8,
+        16,
+        32,
+        128,
+        512,
+        2048,
+        8192,
+        16384,
+        32768,
+        65536,
+        262144
+      ]
+    },
+    "opc": {
+      "types": [
+        1,
+        2,
+        4,
+        8,
+        16,
+        32,
+        128,
+        256,
+        2048
+      ]
+    },
+    "vmware_vsphere": {
+      "types": [
+        2,
+        8,
+        32,
+        1024,
+        2048,
+        4096,
+        65536,
+        131072
+      ]
+    },
+    "aws": {
+      "types": [
+        2,
+        8,
+        32,
+        2048,
+        4096,
+        65536,
+        131072
+      ]
+    },
+    "hyper-v": {
+      "types": [
+        2,
+        8,
+        32,
+        2048,
+        4096
+      ]
+    },
+    "oci": {
+      "types": [
+        1,
+        4,
+        16,
+        128,
+        256,
+        512,
+        8192,
+        16384,
+        262144
+      ]
+    },
+    "azure": {
+      "types": [
+        1,
+        4,
+        16,
+        128,
+        256,
+        512,
+        8192,
+        16384,
+        32768,
+        262144
+      ]
+    },
+    "scvmm": {
+      "types": [
+        1,
+        4,
+        16,
+        128
+      ]
+    }
+  }
+}

+ 26 - 0
coriolis/api-refs/api_samples/replica/openstack-replica-create-req.json

@@ -0,0 +1,26 @@
+{
+  "replica": {
+    "network_map": {},
+    "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+    "instances": ["ubuntu-xenial"],
+    "storage_mappings": {},
+    "destination_environment": {
+      "network_map": {
+        "private": "provider-net"
+      },
+      "storage_mappings": {
+        "lvmdriver-1": "lvm-1"
+      },
+      "keypair_name": "new-key",
+      "delete_disks_on_vm_termination": false,
+      "migr_image_map": {
+          "linux": "ubuntu-xenial-img",
+          "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+      },
+      "migr_network": "provider-net",
+      "port_reuse_policy": "keep_mac",
+      "set_dhcp": true
+    },
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3"
+  }
+}

+ 40 - 0
coriolis/api-refs/api_samples/replica/openstack-replica-create-resp.json

@@ -0,0 +1,40 @@
+{
+  "replica": {
+    "created_at": "2019-07-11T09:49:45.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "base_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "user_id": "7cf9b4745d514517b3eae440438136bc",
+    "project_id": "ffc16db2011e41f28152897c279b6bcc",
+    "destination_environment": {
+      "network_map": {
+        "private": "provider-net"
+      },
+      "storage_mappings": {
+        "lvmdriver-1": "lvm-1"
+      },
+      "keypair_name": "new-key",
+      "delete_disks_on_vm_termination": false,
+      "migr_image_map": {
+          "linux": "ubuntu-xenial-img",
+          "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+      },
+      "migr_network": "provider-net",
+      "port_reuse_policy": "keep_mac",
+      "set_dhcp": true
+    },
+    "type": "replica",
+    "instances": ["ubuntu-xenial"],
+    "reservation_id": null,
+    "notes": null,
+    "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+    "transfer_result": null,
+    "network_map": {},
+    "storage_mappings": {},
+    "source_environment": {},
+    "id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "executions": []
+  }
+}

+ 71 - 0
coriolis/api-refs/api_samples/replica/openstack-replica-disks-delete-resp.json

@@ -0,0 +1,71 @@
+{
+  "execution": {
+    "created_at": "2019-07-11T13:42:34.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "a305b6e0-6e63-409e-8b3e-2b9be8d41e6a",
+    "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "status": "RUNNING",
+    "number": 8,
+    "tasks": [
+      {
+        "created_at": "2019-07-11T13:42:34.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "359d68bf-3b28-434e-8275-99a85e2e71f9",
+        "execution_id": "a305b6e0-6e63-409e-8b3e-2b9be8d41e6a",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_REPLICA_DISKS",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      }
+    ],
+    "action": {
+      "created_at": "2019-07-11T09:49:45.000000",
+      "updated_at": "2019-07-11T13:19:11.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "base_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "destination_environment": {
+        "network_map": {
+          "private": "provider-net"
+        },
+        "storage_mappings": {
+          "lvmdriver-1": "lvm-1"
+        },
+        "keypair_name": "new-key",
+        "delete_disks_on_vm_termination": false,
+        "migr_image_map": {
+            "linux": "ubuntu-xenial-img",
+            "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+        },
+        "migr_network": "provider-net",
+        "port_reuse_policy": "keep_mac",
+        "set_dhcp": true
+      },
+      "type": "replica",
+      "instances": [
+        "ubuntu-xenial"
+      ],
+      "reservation_id": null,
+      "notes": null,
+      "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+      "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+      "transfer_result": null,
+      "network_map": {},
+      "storage_mappings": {},
+      "source_environment": {},
+      "id": "78f89897-fca0-465c-bf0c-b23b36dfd619"
+    }
+  }
+}

+ 279 - 0
coriolis/api-refs/api_samples/replica/openstack-replica-execution-get-resp.json

@@ -0,0 +1,279 @@
+{
+  "execution": {
+    "created_at": "2019-07-11T13:18:43.000000",
+    "updated_at": "2019-07-11T13:19:24.000000",
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+    "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "status": "ERROR",
+    "number": 4,
+    "tasks": [
+      {
+        "created_at": "2019-07-11T13:18:43.000000",
+        "updated_at": "2019-07-11T13:19:02.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "dbe4eb24-367a-46a1-8934-fceb87a9b694",
+        "execution_id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+        "instance": "ubuntu-xenial",
+        "host": "coriolis-worker",
+        "process_id": 55,
+        "status": "COMPLETED",
+        "task_type": "VALIDATE_REPLICA_INPUTS",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-11T13:19:02.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "3de964e8-d61b-4955-b2d7-8a5218007221",
+            "task_id": "dbe4eb24-367a-46a1-8934-fceb87a9b694",
+            "current_step": 4,
+            "total_steps": null,
+            "message": "Checking Linux worker image"
+          },
+          {
+            "created_at": "2019-07-11T13:19:02.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "443b5557-65a2-444f-8e44-bd617a4b140c",
+            "task_id": "dbe4eb24-367a-46a1-8934-fceb87a9b694",
+            "current_step": 3,
+            "total_steps": null,
+            "message": "Checking shape name"
+          },
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:18:43.000000",
+        "updated_at": "2019-07-11T13:19:05.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "ac0b4373-8b03-453b-b231-51c526039ae8",
+        "execution_id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+        "instance": "ubuntu-xenial",
+        "host": "coriolis-worker",
+        "process_id": 60,
+        "status": "COMPLETED",
+        "task_type": "GET_INSTANCE_INFO",
+        "exception_details": null,
+        "depends_on": [
+          "dbe4eb24-367a-46a1-8934-fceb87a9b694"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-11T13:19:05.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "95e7c625-c057-4bc9-9ec4-3ebd30a9f36e",
+            "task_id": "ac0b4373-8b03-453b-b231-51c526039ae8",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Instance \"3ba07383-6726-4bf8-82d5-d5ce871519bc\" was booted off of a volume. Defaulting to OS type: \"linux\""
+          },
+          {
+            "created_at": "2019-07-11T13:19:04.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "9ba35ade-3ebc-45c8-a18a-2c3e32b04bad",
+            "task_id": "ac0b4373-8b03-453b-b231-51c526039ae8",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Retrieving OpenStack instance"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:18:43.000000",
+        "updated_at": "2019-07-11T13:19:11.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "32a87325-7aea-47f1-847f-a33da53f4dff",
+        "execution_id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+        "instance": "ubuntu-xenial",
+        "host": "coriolis-worker",
+        "process_id": 65,
+        "status": "COMPLETED",
+        "task_type": "DEPLOY_REPLICA_DISKS",
+        "exception_details": null,
+        "depends_on": [
+          "ac0b4373-8b03-453b-b231-51c526039ae8"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:18:43.000000",
+        "updated_at": "2019-07-11T13:19:15.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "9e36d393-1b56-4aba-bc43-b7323047e6f6",
+        "execution_id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+        "instance": "ubuntu-xenial",
+        "host": "coriolis-worker",
+        "process_id": 71,
+        "status": "COMPLETED",
+        "task_type": "DEPLOY_REPLICA_SOURCE_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "32a87325-7aea-47f1-847f-a33da53f4dff"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:18:43.000000",
+        "updated_at": "2019-07-11T13:19:18.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "1a91cc54-74b9-46f4-b43e-1e6ecdd0ea50",
+        "execution_id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+        "instance": "ubuntu-xenial",
+        "host": "coriolis-worker",
+        "process_id": 70,
+        "status": "ERROR",
+        "task_type": "DEPLOY_REPLICA_TARGET_RESOURCES",
+        "exception_details": "You have reached your service limit of 1 in this Availability Domain for VM.Standard2.1. Please try launching the instance in a different Availability Domain or Region, or try using a different shape. If you have reached all Service limits, please contact Oracle support to request a limit increase.",
+        "depends_on": [
+          "32a87325-7aea-47f1-847f-a33da53f4dff"
+        ],
+        "on_error": false,
+        "progress_updates": [
+          {
+            "created_at": "2019-07-11T13:19:16.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "a237317e-db72-4b40-951b-3ded991c6ed7",
+            "task_id": "1a91cc54-74b9-46f4-b43e-1e6ecdd0ea50",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Creating coriolis worker"
+          },
+          {
+            "created_at": "2019-07-11T13:19:17.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "dce30938-129e-4c75-941c-1da3b156e2b6",
+            "task_id": "1a91cc54-74b9-46f4-b43e-1e6ecdd0ea50",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Launching worker instance"
+          }
+        ],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:18:43.000000",
+        "updated_at": "2019-07-11T13:19:18.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "1d307621-52b1-4c45-a8c7-fbd6d69f469d",
+        "execution_id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "CANCELED",
+        "task_type": "REPLICATE_DISKS",
+        "exception_details": null,
+        "depends_on": [
+          "9e36d393-1b56-4aba-bc43-b7323047e6f6",
+          "1a91cc54-74b9-46f4-b43e-1e6ecdd0ea50"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:18:43.000000",
+        "updated_at": "2019-07-11T13:19:23.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "607b09ad-6249-432c-8ab2-5a899311d8cb",
+        "execution_id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+        "instance": "ubuntu-xenial",
+        "host": "coriolis-worker",
+        "process_id": 80,
+        "status": "COMPLETED",
+        "task_type": "DELETE_REPLICA_SOURCE_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "1d307621-52b1-4c45-a8c7-fbd6d69f469d"
+        ],
+        "on_error": true,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T13:18:43.000000",
+        "updated_at": "2019-07-11T13:19:24.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "ec36692a-99b0-4054-80cb-c8dcc7faaf6e",
+        "execution_id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+        "instance": "ubuntu-xenial",
+        "host": "coriolis-worker",
+        "process_id": 81,
+        "status": "COMPLETED",
+        "task_type": "DELETE_REPLICA_TARGET_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "1d307621-52b1-4c45-a8c7-fbd6d69f469d"
+        ],
+        "on_error": true,
+        "progress_updates": [],
+        "events": []
+      }
+    ],
+    "action": {
+      "created_at": "2019-07-11T09:49:45.000000",
+      "updated_at": "2019-07-11T13:19:11.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "base_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "destination_environment": {
+        "network_map": {
+          "private": "provider-net"
+        },
+        "storage_mappings": {
+          "lvmdriver-1": "lvm-1"
+        },
+        "keypair_name": "new-key",
+        "delete_disks_on_vm_termination": false,
+        "migr_image_map": {
+            "linux": "ubuntu-xenial-img",
+            "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+        },
+        "migr_network": "provider-net",
+        "port_reuse_policy": "keep_mac",
+        "set_dhcp": true
+      },
+      "type": "replica",
+      "instances": ["ubuntu-xenial"],
+      "reservation_id": null,
+      "notes": null,
+      "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+      "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+      "transfer_result": null,
+      "network_map": {},
+      "storage_mappings": {},
+      "source_environment": {},
+      "id": "78f89897-fca0-465c-bf0c-b23b36dfd619"
+    }
+  }
+}

+ 212 - 0
coriolis/api-refs/api_samples/replica/openstack-replica-execution-resp.json

@@ -0,0 +1,212 @@
+{
+  "execution": {
+    "created_at": "2019-07-11T10:01:43.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+    "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "status": "RUNNING",
+    "number": 2,
+    "tasks": [
+      {
+        "created_at": "2019-07-11T10:01:43.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "b632f320-674b-48a7-8cb0-385a24fc0e15",
+        "execution_id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "VALIDATE_REPLICA_INPUTS",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T10:01:43.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "0a7f3d43-7486-49e7-a606-6411694a8178",
+        "execution_id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "GET_INSTANCE_INFO",
+        "exception_details": null,
+        "depends_on": [
+          "b632f320-674b-48a7-8cb0-385a24fc0e15"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T10:01:43.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "e82de183-da6d-4115-83a1-9bd445a32d57",
+        "execution_id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DEPLOY_REPLICA_DISKS",
+        "exception_details": null,
+        "depends_on": [
+          "0a7f3d43-7486-49e7-a606-6411694a8178"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T10:01:43.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "c2537438-8b8c-4a66-aaf3-1bb98b9b1958",
+        "execution_id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DEPLOY_REPLICA_SOURCE_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "e82de183-da6d-4115-83a1-9bd445a32d57"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T10:01:43.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "00c3380d-26af-4595-b50d-752326389935",
+        "execution_id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DEPLOY_REPLICA_TARGET_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "e82de183-da6d-4115-83a1-9bd445a32d57"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T10:01:43.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "96de030b-3a12-45a5-a306-3a18e938040b",
+        "execution_id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "REPLICATE_DISKS",
+        "exception_details": null,
+        "depends_on": [
+          "c2537438-8b8c-4a66-aaf3-1bb98b9b1958",
+          "00c3380d-26af-4595-b50d-752326389935"
+        ],
+        "on_error": false,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T10:01:43.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "9a32aa7d-70a0-4c0e-a555-925060755f27",
+        "execution_id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_REPLICA_SOURCE_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "96de030b-3a12-45a5-a306-3a18e938040b"
+        ],
+        "on_error": true,
+        "progress_updates": [],
+        "events": []
+      },
+      {
+        "created_at": "2019-07-11T10:01:43.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "3d3bc666-8a6d-465c-afc0-5a0f25269228",
+        "execution_id": "e0bee95f-070a-4222-8b0b-d1abed461dbb",
+        "instance": "ubuntu-xenial",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_REPLICA_TARGET_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "96de030b-3a12-45a5-a306-3a18e938040b"
+        ],
+        "on_error": true,
+        "progress_updates": [],
+        "events": []
+      }
+    ],
+    "action": {
+      "created_at": "2019-07-11T09:49:45.000000",
+      "updated_at": "2019-07-11T09:58:18.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "base_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "destination_environment": {
+        "network_map": {
+          "private": "provider-net"
+        },
+        "storage_mappings": {
+          "lvmdriver-1": "lvm-1"
+        },
+        "keypair_name": "new-key",
+        "delete_disks_on_vm_termination": false,
+        "migr_image_map": {
+            "linux": "ubuntu-xenial-img",
+            "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+        },
+        "migr_network": "provider-net",
+        "port_reuse_policy": "keep_mac",
+        "set_dhcp": true
+      },
+      "type": "replica",
+      "instances": [
+        "ubuntu-xenial"
+      ],
+      "reservation_id": null,
+      "notes": null,
+      "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+      "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+      "transfer_result": null,
+      "network_map": {},
+      "storage_mappings": {},
+      "source_environment": {},
+      "id": "78f89897-fca0-465c-bf0c-b23b36dfd619"
+    }
+  }
+}

+ 317 - 0
coriolis/api-refs/api_samples/replica/openstack-replica-execution-show-resp.json

@@ -0,0 +1,317 @@
+
+{
+  "execution": {
+    "created_at": "2019-07-24T21:04:16.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+    "action_id": "7a7731ab-4802-449d-88d3-5960636affe9",
+    "status": "RUNNING",
+    "number": 1,
+    "tasks": [
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": "2019-07-24T21:04:45.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "0c83740e-3b4b-4f4e-81c4-d8ba7277328d",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": "coriolis-worker",
+        "process_id": 172,
+        "status": "COMPLETED",
+        "task_type": "GET_INSTANCE_INFO",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "events": [],
+        "progress_updates": [
+          {
+            "created_at": "2019-07-24T21:04:41.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "bf42d0de-3e3b-4207-9e38-fa5f69c2a352",
+            "task_id": "0c83740e-3b4b-4f4e-81c4-d8ba7277328d",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Retrieving virtual machine data"
+          },
+          {
+            "created_at": "2019-07-24T21:04:40.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "f4bf42f3-afd9-4dbd-85ac-ff7157a03a57",
+            "task_id": "0c83740e-3b4b-4f4e-81c4-d8ba7277328d",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Connecting to vSphere host"
+          }
+        ]
+      },
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": "2019-07-24T21:04:50.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "2b2c6b79-161f-4d3f-bb9a-d8fba62f328b",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": "coriolis-worker",
+        "process_id": 184,
+        "status": "COMPLETED",
+        "task_type": "VALIDATE_REPLICA_DESTINATION_INPUTS",
+        "exception_details": null,
+        "depends_on": [
+          "0c83740e-3b4b-4f4e-81c4-d8ba7277328d"
+        ],
+        "on_error": false,
+        "events": [],
+        "progress_updates": [
+          {
+            "created_at": "2019-07-24T21:04:49.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "255db471-c72b-4db4-adb0-e2d263f27138",
+            "task_id": "2b2c6b79-161f-4d3f-bb9a-d8fba62f328b",
+            "current_step": 3,
+            "total_steps": null,
+            "message": "Checking configured OSMorphing worker image"
+          },
+          {
+            "created_at": "2019-07-24T21:04:49.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "5496f33a-c4aa-4ce7-ac29-ca5ef4425749",
+            "task_id": "2b2c6b79-161f-4d3f-bb9a-d8fba62f328b",
+            "current_step": 2,
+            "total_steps": null,
+            "message": "Checking configured Linux worker image"
+          }
+        ]
+      },
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": "2019-07-24T21:04:49.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "2fd931f7-4303-4186-bb98-9cdb433d8390",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": "coriolis-worker",
+        "process_id": 177,
+        "status": "COMPLETED",
+        "task_type": "VALIDATE_REPLICA_SOURCE_INPUTS",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "events": [],
+        "progress_updates": [
+          {
+            "created_at": "2019-07-24T21:04:45.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "aebe21e0-b1b1-44c3-ac47-8b0b78bac508",
+            "task_id": "2fd931f7-4303-4186-bb98-9cdb433d8390",
+            "current_step": 3,
+            "total_steps": null,
+            "message": "Compiling export info for VM 'CI/openwrt'"
+          }
+        ]
+      },
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": "2019-07-24T21:04:56.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "f6d48106-7fba-4687-812d-ec8bb6f94c08",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": "coriolis-worker",
+        "process_id": 189,
+        "status": "COMPLETED",
+        "task_type": "DEPLOY_REPLICA_DISKS",
+        "exception_details": null,
+        "depends_on": [
+          "2fd931f7-4303-4186-bb98-9cdb433d8390",
+          "2b2c6b79-161f-4d3f-bb9a-d8fba62f328b"
+        ],
+        "on_error": false,
+        "events": [],
+        "progress_updates": [
+          {
+            "created_at": "2019-07-24T21:04:53.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "21909647-9a09-4c51-8692-682b7f039a88",
+            "task_id": "f6d48106-7fba-4687-812d-ec8bb6f94c08",
+            "current_step": 1,
+            "total_steps": null,
+            "message": "Creating volume"
+          }
+        ]
+      },
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": "2019-07-24T21:04:58.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "b4fcb5a7-d8e1-4e03-9d42-bda15bad1831",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": "coriolis-worker",
+        "process_id": 194,
+        "status": "RUNNING",
+        "task_type": "DEPLOY_REPLICA_SOURCE_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "f6d48106-7fba-4687-812d-ec8bb6f94c08"
+        ],
+        "on_error": false,
+        "events": [],
+        "progress_updates": []
+      },
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": "2019-07-24T21:04:58.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "6452b8bd-e517-41ae-8af5-0f547227cdee",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": "coriolis-worker",
+        "process_id": 195,
+        "status": "RUNNING",
+        "task_type": "DEPLOY_REPLICA_TARGET_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "f6d48106-7fba-4687-812d-ec8bb6f94c08"
+        ],
+        "on_error": false,
+        "events": [],
+        "progress_updates": []
+      },
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "cc9ca1c6-51fd-4d2d-95cf-1dfc9b4bb4f7",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "REPLICATE_DISKS",
+        "exception_details": null,
+        "depends_on": [
+          "b4fcb5a7-d8e1-4e03-9d42-bda15bad1831",
+          "6452b8bd-e517-41ae-8af5-0f547227cdee"
+        ],
+        "on_error": false,
+        "events": [],
+        "progress_updates": []
+      },
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "b5f5f08e-7fef-4f84-a987-aed75d33649a",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_REPLICA_SOURCE_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "cc9ca1c6-51fd-4d2d-95cf-1dfc9b4bb4f7"
+        ],
+        "on_error": true,
+        "events": [],
+        "progress_updates": []
+      },
+      {
+        "created_at": "2019-07-24T21:04:16.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "423c09ba-8686-46f4-86dc-ddb611a8b222",
+        "execution_id": "328a4586-591c-4ce1-b22d-001fc0b59646",
+        "instance": "CI/openwrt",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "DELETE_REPLICA_TARGET_RESOURCES",
+        "exception_details": null,
+        "depends_on": [
+          "cc9ca1c6-51fd-4d2d-95cf-1dfc9b4bb4f7"
+        ],
+        "on_error": true,
+        "events": [],
+        "progress_updates": []
+      }
+    ],
+    "action": {
+      "created_at": "2019-07-24T21:04:16.000000",
+      "updated_at": "2019-07-24T21:04:56.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "base_id": "7a7731ab-4802-449d-88d3-5960636affe9",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "destination_environment": {
+        "network_map": {
+          "VM Network": "93b7cbd8-0ac6-4b4d-a90a-48eb445b869f"
+        },
+        "storage_mappings": {
+          "backend_mappings": [
+            {
+              "source": "afsan1",
+              "destination": "lvmdriver-1"
+            }
+          ],
+          "disk_mappings": [
+            {
+              "disk_id": "3000",
+              "destination": "lvmdriver-1"
+            }
+          ]
+        }
+      },
+      "type": "replica",
+      "instances": ["CI/openwrt"],
+      "reservation_id": null,
+      "notes": "",
+      "origin_endpoint_id": "15a0d68a-40c3-40cd-bcc4-aba390c4c4e1",
+      "destination_endpoint_id": "e19100c7-cc6e-4890-9ce6-4d638b1b5ede",
+      "transfer_result": null,
+      "network_map": {
+        "VM Network": "93b7cbd8-0ac6-4b4d-a90a-48eb445b869f"
+      },
+      "storage_mappings": {
+        "backend_mappings": [
+          {
+            "source": "afsan1",
+            "destination": "lvmdriver-1"
+          }
+        ],
+        "disk_mappings": [
+          {
+            "disk_id": "3000",
+            "destination": "lvmdriver-1"
+          }
+        ]
+      },
+      "source_environment": {},
+      "id": "7a7731ab-4802-449d-88d3-5960636affe9"
+    }
+  }
+}

+ 61 - 0
coriolis/api-refs/api_samples/replica/openstack-replica-get-resp.json

@@ -0,0 +1,61 @@
+{
+  "replica": {
+    "created_at": "2019-07-11T09:49:45.000000",
+    "updated_at": "2019-07-11T10:07:14.000000",
+    "deleted_at": null,
+    "deleted": "0",
+    "base_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "user_id": "7cf9b4745d514517b3eae440438136bc",
+    "project_id": "ffc16db2011e41f28152897c279b6bcc",
+    "destination_environment": {
+      "network_map": {
+        "private": "provider-net"
+      },
+      "storage_mappings": {
+        "lvmdriver-1": "lvm-1"
+      },
+      "keypair_name": "new-key",
+      "delete_disks_on_vm_termination": false,
+      "migr_image_map": {
+          "linux": "ubuntu-xenial-img",
+          "windows": "63d8f1a4-3192-4edc-b113-0d099b4bc458"
+      },
+      "migr_network": "provider-net",
+      "port_reuse_policy": "keep_mac",
+      "set_dhcp": true
+    },
+    "type": "replica",
+    "instances": ["ubuntu-xenial"],
+    "reservation_id": null,
+    "notes": null,
+    "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+    "transfer_result": null,
+    "network_map": {},
+    "storage_mappings": {},
+    "source_environment": {},
+    "id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "executions": [
+      {
+        "created_at": "2019-07-11T10:06:47.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "4147568c-f1d7-4a2d-bfbc-8d142a3d1c32",
+        "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+        "status": "RUNNING",
+        "number": 3
+      },
+      {
+        "created_at": "2019-07-11T09:57:17.000000",
+        "updated_at": "2019-07-11T09:58:18.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "87faeb7e-97aa-4c2f-a8a2-ba8fa31167a5",
+        "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+        "status": "ERROR",
+        "number": 1
+      }
+    ]
+  }
+}

+ 3 - 0
coriolis/api-refs/api_samples/replica/replica-disks-delete-req.json

@@ -0,0 +1,3 @@
+{
+  "delete-disks": null
+}

+ 5 - 0
coriolis/api-refs/api_samples/replica/replica-execution-cancel-req.json

@@ -0,0 +1,5 @@
+{
+  "cancel": {
+    "force": false
+  }
+}

+ 34 - 0
coriolis/api-refs/api_samples/replica/replica-execution-list-resp.json

@@ -0,0 +1,34 @@
+{
+  "executions": [
+    {
+      "created_at": "2019-07-11T13:18:43.000000",
+      "updated_at": null,
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
+      "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+      "status": "RUNNING",
+      "number": 4
+    },
+    {
+      "created_at": "2019-07-11T10:06:47.000000",
+      "updated_at": "2019-07-11T10:37:17.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "4147568c-f1d7-4a2d-bfbc-8d142a3d1c32",
+      "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+      "status": "COMPLETED",
+      "number": 3
+    },
+    {
+      "created_at": "2019-07-11T09:57:17.000000",
+      "updated_at": "2019-07-11T09:58:18.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "87faeb7e-97aa-4c2f-a8a2-ba8fa31167a5",
+      "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+      "status": "ERROR",
+      "number": 1
+    }
+  ]
+}

+ 5 - 0
coriolis/api-refs/api_samples/replica/replica-execution-req.json

@@ -0,0 +1,5 @@
+{
+  "execution": {
+    "shutdown_instances": false
+  }
+}

+ 82 - 0
coriolis/api-refs/api_samples/replica/replica-list-resp.json

@@ -0,0 +1,82 @@
+{
+  "replicas": [
+    {
+      "created_at": "2019-07-23T17:01:03.000000",
+      "updated_at": "2019-07-23T17:18:53.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "base_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "destination_environment": {
+        "network_map": {
+          "VM Network": "0a6b9c01-9ff8-4afa-afba-fa2058fe6cd2"
+        },
+        "storage_mappings": {
+          "backend_mappings": [
+            {
+              "source": "dg2vd1",
+              "destination": "lvmdriver-1"
+            }
+          ],
+          "disk_mappings": [
+            {
+              "disk_id": "3000",
+              "destination": "lvmdriver-1"
+            }
+          ]
+        }
+      },
+      "type": "replica",
+      "instances": [
+        "CI/coriolis-test-vms/openwrt-no-cbt-clone"
+      ],
+      "reservation_id": null,
+      "notes": "",
+      "origin_endpoint_id": "15a0d68a-40c3-40cd-bcc4-aba390c4c4e1",
+      "destination_endpoint_id": "e19100c7-cc6e-4890-9ce6-4d638b1b5ede",
+      "transfer_result": null,
+      "network_map": {
+        "VM Network": "0a6b9c01-9ff8-4afa-afba-fa2058fe6cd2"
+      },
+      "storage_mappings": {
+        "backend_mappings": [
+          {
+            "source": "dg2vd1",
+            "destination": "lvmdriver-1"
+          }
+        ],
+        "disk_mappings": [
+          {
+            "disk_id": "3000",
+            "destination": "lvmdriver-1"
+          }
+        ]
+      },
+      "source_environment": {},
+      "id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+      "executions": [
+        {
+          "created_at": "2019-07-23T17:01:03.000000",
+          "updated_at": "2019-07-23T17:07:09.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "84951ec8-9b0d-4d68-b1eb-b0c143213c75",
+          "action_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+          "status": "COMPLETED",
+          "number": 1
+        },
+        {
+          "created_at": "2019-07-23T17:18:38.000000",
+          "updated_at": "2019-07-23T17:18:53.000000",
+          "deleted_at": null,
+          "deleted": "0",
+          "id": "9d64e152-1fcc-4ef1-8b09-60a7fabd97a9",
+          "action_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+          "status": "COMPLETED",
+          "number": 2
+        }
+      ]
+    }
+  ]
+}

+ 10 - 0
coriolis/api-refs/api_samples/replica/replica-schedule-create-req.json

@@ -0,0 +1,10 @@
+{
+  "enabled": true,
+  "shutdown_instance": false,
+  "schedule": {
+    "month": 7,
+    "hour": 20,
+    "minute": 30,
+    "dom": 23
+  }
+}

+ 20 - 0
coriolis/api-refs/api_samples/replica/replica-schedule-create-resp.json

@@ -0,0 +1,20 @@
+{
+  "schedule": {
+    "created_at": "2019-07-23T17:33:00.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "e5bf8e7d-4653-4994-bb2a-467a1df475b1",
+    "replica_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+    "schedule": {
+      "month": 7,
+      "hour": 20,
+      "minute": 30,
+      "dom": 23
+    },
+    "expiration_date": null,
+    "enabled": true,
+    "shutdown_instance": false,
+    "trust_id": "cfebd7de4dbf48369b6345dba7610e6d"
+  }
+}

+ 54 - 0
coriolis/api-refs/api_samples/replica/replica-schedule-list-resp.json

@@ -0,0 +1,54 @@
+{
+  "schedules": [
+    {
+      "created_at": "2019-07-23T17:28:35.000000",
+      "updated_at": null,
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "20f17188-8053-4e10-bf1b-f60c1d3b8022",
+      "replica_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+      "schedule": {
+        "hour": 19,
+        "minute": 30
+      },
+      "expiration_date": null,
+      "enabled": true,
+      "shutdown_instance": false,
+      "trust_id": "16120b7803864466bc445d8d43af1980"
+    },
+    {
+      "created_at": "2019-07-23T17:29:12.000000",
+      "updated_at": null,
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "bbe24b53-8c42-4dc2-a65f-66270c2f68dd",
+      "replica_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+      "schedule": {
+        "hour": 20,
+        "minute": 30
+      },
+      "expiration_date": null,
+      "enabled": true,
+      "shutdown_instance": false,
+      "trust_id": "e11a61a320ca4e15bae39beda9c4a2ad"
+    },
+    {
+      "created_at": "2019-07-23T17:33:00.000000",
+      "updated_at": null,
+      "deleted_at": null,
+      "deleted": "0",
+      "id": "e5bf8e7d-4653-4994-bb2a-467a1df475b1",
+      "replica_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+      "schedule": {
+        "month": 7,
+        "hour": 20,
+        "minute": 30,
+        "dom": 23
+      },
+      "expiration_date": null,
+      "enabled": true,
+      "shutdown_instance": false,
+      "trust_id": "cfebd7de4dbf48369b6345dba7610e6d"
+    }
+  ]
+}

+ 20 - 0
coriolis/api-refs/api_samples/replica/replica-schedule-show-resp.json

@@ -0,0 +1,20 @@
+{
+  "schedule": {
+    "created_at": "2019-07-23T17:33:00.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "e5bf8e7d-4653-4994-bb2a-467a1df475b1",
+    "replica_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+    "schedule": {
+      "month": 7,
+      "hour": 20,
+      "minute": 30,
+      "dom": 23
+    },
+    "expiration_date": null,
+    "enabled": true,
+    "shutdown_instance": false,
+    "trust_id": "cfebd7de4dbf48369b6345dba7610e6d"
+  }
+}

+ 8 - 0
coriolis/api-refs/api_samples/replica/replica-schedule-update-req.json

@@ -0,0 +1,8 @@
+{
+  "shutdown_instance": true,
+  "schedule": {
+    "dow": 0,
+    "minute": 30,
+    "hour": 20
+  }
+}

+ 19 - 0
coriolis/api-refs/api_samples/replica/replica-schedule-update-resp.json

@@ -0,0 +1,19 @@
+{
+  "schedule": {
+    "created_at": "2019-07-23T17:28:35.000000",
+    "updated_at": "2019-07-23T17:39:24.000000",
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "20f17188-8053-4e10-bf1b-f60c1d3b8022",
+    "replica_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+    "schedule": {
+      "dow": 0,
+      "minute": 30,
+      "hour": 20
+    },
+    "expiration_date": null,
+    "enabled": true,
+    "shutdown_instance": true,
+    "trust_id": "16120b7803864466bc445d8d43af1980"
+  }
+}

+ 7 - 0
coriolis/api-refs/api_samples/replica/replica-update-req.json

@@ -0,0 +1,7 @@
+{
+  "replica": {
+    "network_map": {
+      "VM Network": "0a6b9c01-9ff8-4afa-afba-fa2058fe6cd2"
+    }
+  }
+}

+ 127 - 0
coriolis/api-refs/api_samples/replica/replica-update-resp.json

@@ -0,0 +1,127 @@
+{
+  "execution": {
+    "created_at": "2019-07-23T17:18:38.000000",
+    "updated_at": null,
+    "deleted_at": null,
+    "deleted": "0",
+    "id": "9d64e152-1fcc-4ef1-8b09-60a7fabd97a9",
+    "action_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+    "status": "RUNNING",
+    "number": 2,
+    "tasks": [
+      {
+        "created_at": "2019-07-23T17:18:38.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "6aeef794-f954-49fd-8259-58503f24a238",
+        "execution_id": "9d64e152-1fcc-4ef1-8b09-60a7fabd97a9",
+        "instance": "CI/coriolis-test-vms/openwrt-no-cbt-clone",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "GET_INSTANCE_INFO",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "events": [],
+        "progress_updates": []
+      },
+      {
+        "created_at": "2019-07-23T17:18:38.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "b668eef0-92bd-418c-aee5-19d9fede659e",
+        "execution_id": "9d64e152-1fcc-4ef1-8b09-60a7fabd97a9",
+        "instance": "CI/coriolis-test-vms/openwrt-no-cbt-clone",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "UPDATE_SOURCE_REPLICA",
+        "exception_details": null,
+        "depends_on": null,
+        "on_error": false,
+        "events": [],
+        "progress_updates": []
+      },
+      {
+        "created_at": "2019-07-23T17:18:38.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "99b89bf0-1fa5-4e5c-b8a8-5d0fc548f4d8",
+        "execution_id": "9d64e152-1fcc-4ef1-8b09-60a7fabd97a9",
+        "instance": "CI/coriolis-test-vms/openwrt-no-cbt-clone",
+        "host": null,
+        "process_id": null,
+        "status": "PENDING",
+        "task_type": "UPDATE_DESTINATION_REPLICA",
+        "exception_details": null,
+        "depends_on": [
+          "6aeef794-f954-49fd-8259-58503f24a238",
+          "b668eef0-92bd-418c-aee5-19d9fede659e"
+        ],
+        "on_error": false,
+        "events": [],
+        "progress_updates": []
+      }
+    ],
+    "action": {
+      "created_at": "2019-07-23T17:01:03.000000",
+      "updated_at": "2019-07-23T17:07:09.000000",
+      "deleted_at": null,
+      "deleted": "0",
+      "base_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+      "user_id": "7cf9b4745d514517b3eae440438136bc",
+      "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "destination_environment": {
+        "network_map": {
+          "VM Network": "93b7cbd8-0ac6-4b4d-a90a-48eb445b869f"
+        },
+        "storage_mappings": {
+          "backend_mappings": [
+            {
+              "source": "dg2vd1",
+              "destination": "lvmdriver-1"
+            }
+          ],
+          "disk_mappings": [
+            {
+              "disk_id": "3000",
+              "destination": "lvmdriver-1"
+            }
+          ]
+        }
+      },
+      "type": "replica",
+      "instances": [
+        "CI/coriolis-test-vms/openwrt-no-cbt-clone"
+      ],
+      "reservation_id": null,
+      "notes": "",
+      "origin_endpoint_id": "15a0d68a-40c3-40cd-bcc4-aba390c4c4e1",
+      "destination_endpoint_id": "e19100c7-cc6e-4890-9ce6-4d638b1b5ede",
+      "transfer_result": null,
+      "network_map": {
+        "VM Network": "93b7cbd8-0ac6-4b4d-a90a-48eb445b869f"
+      },
+      "storage_mappings": {
+        "backend_mappings": [
+          {
+            "source": "dg2vd1",
+            "destination": "lvmdriver-1"
+          }
+        ],
+        "disk_mappings": [
+          {
+            "disk_id": "3000",
+            "destination": "lvmdriver-1"
+          }
+        ]
+      },
+      "source_environment": {},
+      "id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22"
+    }
+  }
+}

+ 30 - 0
coriolis/api-refs/source/conf.py

@@ -0,0 +1,30 @@
+
+extensions = [
+    'openstackdocstheme',
+    'os_api_ref'
+]
+
+source_suffix = '.rst'
+
+master_doc = 'index'
+
+project = u'Coriolis API Reference'
+copyright = u'2018-present, Cloudbase Solutions S.R.L'
+
+repository_name = 'cloudbase/coriolis'
+bug_project = 'coriolis'
+bug_tag = 'api-ref'
+
+pygments_style = 'sphinx'
+
+html_theme = 'openstackdocs'
+
+html_theme_options = {
+    "sidebar_mode": "toc",
+}
+
+html_last_updated_fmt = '%Y-%m-%d %H:%M'
+
+latex_documents = [
+    ('index'),
+]

+ 523 - 0
coriolis/api-refs/source/endpoint.inc

@@ -0,0 +1,523 @@
+.. -*- rst -*-
+
+=========
+Endpoints
+=========
+
+Lists, creates, updates, shows details for, and deletes cloud endpoints.
+
+
+List Endpoints
+==============
+
+.. rest_method:: GET /endpoints
+
+Lists all endpoints.
+
+Normal response codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403)
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - endpoints : endpoints_array
+  - created_at : endpoint_created_at
+  - updated_at : endpoint_updated_at
+  - deleted_at : endpoint_deleted_at
+  - deleted : endpoint_deleted
+  - id : endpoint_id
+  - user_id : user_id
+  - project_id : project_id
+  - connection_info: connection_info
+  - type : endpoint_type
+  - name : endpoint_name
+  - description : endpoint_description
+
+**Example of Endpoint List Response**
+
+  .. literalinclude:: ../api_samples/endpoint/endpoint-list-resp.json
+     :language: javascript
+
+Show Endpoint
+=============
+
+.. rest_method:: GET /endpoints/{endpoint_id}
+
+Shows details about an endpoint.
+
+**Preconditions**
+
+The endpoint must exist
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - endpoint_id: endpoint_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - endpoint : endpoint_object
+  - created_at : endpoint_created_at
+  - updated_at : endpoint_updated_at
+  - deleted_at : endpoint_deleted_at
+  - deleted : endpoint_deleted
+  - id : endpoint_id
+  - user_id : user_id
+  - project_id : project_id
+  - connection_info: connection_info
+  - type : endpoint_id
+  - name : endpoint_created_at
+  - description : endpoint_description
+
+**Example of Endpoint Show Response**
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-get-resp.json
+     :language: javascript
+
+.. note:: If the endpoint was created using the Web-UI, the connection_info property will be saved as a Barbican Secret, which will be returned like in the example below
+
+**Example of Secret Endpoint Show Response**
+  .. literalinclude:: ../api_samples/endpoint/endpoint-get-resp-secret.json
+     :language: javascript
+
+
+Update Endpoint
+===============
+
+.. rest_method:: PUT /endpoints/{endpoint_id}
+
+**Preconditions**
+
+The endpoint must exist.
+
+Updates an already existing endpoint, modifying its name, description or
+connection info.
+
+Error response codes:   unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - endpoint : endpoint_object
+   - endpoint_id : endpoint_id_path
+   - name: endpoint_name
+   - description : endpoint_description
+   - connection_info : connection_info
+
+**Example of Endpoint Update Request**
+
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-update-req.json
+     :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+
+  - created_at : endpoint_created_at
+  - updated_at : endpoint_updated_at
+  - deleted_at : endpoint_deleted_at
+  - deleted : endpoint_deleted
+  - id : endpoint_id
+  - user_id : user_id
+  - project_id : project_id
+  - connection_info: connection_info
+  - type : endpoint_id
+  - name : endpoint_created_at
+  - description : endpoint_description
+
+**Example of Endpoint Update Response**
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-update-resp.json
+     :language: javascript
+
+Delete Endpoint
+===============
+
+.. rest_method:: DELETE endpoints/{endpoint_id}
+
+Deletes an endpoint.
+
+**Preconditions**
+
+The endpoint must exist.
+
+Normal response codes: 200
+
+Error response codes: itemNotFound(404),unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - endpoint_id : endpoint_id_path
+
+Response
+--------
+
+There is no response body for a successful deletion of an endpoint.
+
+Get Endpoint Instances
+======================
+
+.. rest_method:: GET /endpoints/{endpoint_id}/instances
+
+Lists the instances of an endpoint.
+
+**Preconditions**
+
+The endpoint must exist and the platform must support listing instances.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - endpoint_id : endpoint_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - instances : instance_array
+  - limit : instance_limit
+  - name : instance_identifier
+  - num_cpu : instance_num_cpu
+  - num_cores_per_socket : instance_cores_per_socket
+  - nested_virtualization : instance_nested_virtualization
+  - memory_mb : instance_memory_mb
+  - instance_name : instance_name
+  - id : instance_id
+  - os_type : instance_os_type
+  - flavor_name : instance_flavor
+
+**Example Instance List on Openstack Endpoint**
+  .. literalinclude:: ../api_samples/endpoint/endpoint-instance-list-resp.json
+     :language: javascript
+
+Get Endpoint Instance
+=====================
+
+.. rest_method:: GET /endpoints/{endpoint_id}/instances/{instance_name_base64}
+
+Shows details for a specific instance for an endpoint.
+
+The returned instance information will mandatorily contain the below-listed response fields for all
+Coriolis Provider Plugins, while allowing for the plugins to expose extra fields at will.
+
+**Preconditions**
+
+The endpoint must exist and the platform must support listing instances.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - endpoint_id : endpoint_id_path
+   - instance_name_base64 : instance_name_base64_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - instance : instance_object
+  - name : instance_identifier
+  - id : instance_id
+  - os_type : instance_os_type
+  - memory_mb : instance_memory_mb
+  - instance_name : instance_name
+  - num_cpu: instance_num_cpu
+  - num_cores_per_socket : instance_cores_per_socket
+  - nested_virtualization : instance_nested_virtualization
+  - flavor_name : instance_flavor
+  - devices : instance_devices
+
+**Example Instance Show On Openstack Endpoint**
+
+  .. literalinclude:: ../api_samples/endpoint/endpoint-instance-show-resp.json
+     :language: javascript
+
+Get Endpoint Destination Options
+================================
+
+.. rest_method:: GET /endpoints/{endpoint_id}/destination-options
+
+Shows possible options for destination parameters
+
+The returned destination endpoint information will mandatorily contain the below-listed response fields for all
+Coriolis Provider Plugins.
+
+**Preconditions**
+
+The endpoint must exist and the platform must support listing options.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - endpoint_id : endpoint_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - destination_options : destination_options
+  - values : option_values
+  - config_default : option_config_default
+  - name : option_name
+
+**Example Destination Endpoint List On Openstack Endpoint**
+
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-destination-options-list-resp.json
+     :language: javascript
+
+Get Endpoint Source Options
+===========================
+
+.. rest_method:: GET /endpoints/{endpoint_id}/source-options
+
+Shows possible options for source parameters
+
+The returned source endpoint information will mandatorily contain the below-listed response fields for Coriolis Provider Plugins that support listing source options.
+
+**Preconditions**
+
+The endpoint must exist and must support listing options.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - endpoint_id : endpoint_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - source_options : source_options
+  - values : option_values
+  - config_default : option_config_default
+  - name : option_name
+
+**Example Source Endpoint List On Openstack Endpoint**
+
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-source-options-list-resp.json
+     :language: javascript
+
+Get Endpoint Networks
+=====================
+
+.. rest_method:: GET /endpoints/{endpoint_id}/networks
+
+Lists all available networks on a given destination endpoint.
+
+**Preconditions**
+The endpoint must exist and the platform must support listing networks.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - endpoint_id : endpoint_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - networks : networks_array
+  - name : network_name
+  - id : network_id
+
+**Example Get Endpoint Networks**
+
+  .. literalinclude:: ../api_samples/endpoint/endpoint-network-list-resp.json
+     :language: javascript
+
+
+Get Endpoint Storage
+====================
+
+.. rest_method:: GET endpoints/{endpoint_id}/storage
+
+Lists all available storage backends on a given destination endpoint.
+
+**Preconditions**
+The endpoint must exist.
+
+Normal Response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - endpoint_id : endpoint_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - storage_backends : storage_backends
+  - name : storage_name
+  - id : storage_id
+
+**Example Get Endpoint Storage**
+  .. literalinclude:: ../api_samples/endpoint/endpoint-storage-list-resp.json
+      :language: javascript
+
+Create Endpoint
+===============
+
+.. rest_method:: POST /endpoints/
+
+Creates a cloud endpoint.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - connection_info : connection_info
+  - type : provider_type
+  - name : endpoint_name
+  - description : endpoint_description
+
+**Example of Endpoint Create Request**
+
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-create-req.json
+     :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - endpoint : endpoint_object
+  - name : endpoint_created_at
+  - description : endpoint_description
+  - id : endpoint_id
+  - connection_info: connection_info
+  - deleted : endpoint_deleted
+  - deleted_at : endpoint_deleted_at
+  - created_at : endpoint_created_at
+  - updated_at : endpoint_updated_at
+  - type : endpoint_type
+  - user_id : user_id
+  - project_id : project_id
+
+**Example of Endpoint Create Response**
+
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-get-resp.json
+      :language: javascript
+
+
+Endpoint Actions
+================
+
+Validate Endpoint Connection
+============================
+
+.. rest_method:: POST /endpoints/{endpoint_id}/actions
+
+Validates connection to endpoint.
+
+**Preconditions**
+
+The endpoint must exist.
+
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - validate_connection : validate_connection
+  - endpoint_id : endpoint_id_path
+
+**Example of Endpoint Validate Connection Request**
+  .. literalinclude:: ../api_samples/endpoint/endpoint-validate-connection-req.json
+      :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - validate_connection : validate_connection
+  - valid : valid_connection
+  - message : validation_message
+
+**Example of Endpoint Validate Connection Response**
+  .. literalinclude:: ../api_samples/endpoint/endpoint-validate-connection-resp.json
+     :language: javascript
+
+.. note:: In case the endpoint validation fails, an error message will be returned, as in the example below
+
+**Example of Failed Endpoint Validation Response**
+  .. literalinclude:: ../api_samples/endpoint/endpoint-validate-connection-error-resp.json
+     :language: javascript

+ 12 - 0
coriolis/api-refs/source/index.rst

@@ -0,0 +1,12 @@
+========
+Coriolis
+========
+
+This is a reference for the Coriolis API.
+
+.. rest_expand_all::
+
+.. include:: endpoint.inc
+.. include:: migration.inc
+.. include:: provider.inc
+.. include:: replica.inc

+ 293 - 0
coriolis/api-refs/source/migration.inc

@@ -0,0 +1,293 @@
+.. -*- rst -*-
+
+==========
+Migrations
+==========
+
+Lists, creates, cancels, shows details for, and deletes Coriolis migrations.
+
+
+List Migrations
+===============
+
+.. rest_method:: GET /migrations/detail
+
+Lists all migrations.
+
+Normal response codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403)
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - migrations : migrations_array
+  - id : migration_id
+  - deleted : migration_deleted
+  - deleted_at : migration_deleted_at
+  - instances : migration_instances
+  - notes : migration_notes
+  - status : migration_status
+  - user_id : user_id
+  - destination_environment : destination_environment
+  - source_environment : source_environment
+  - type : migration_type
+  - origin_endpoint_id : migration_origin_endpoint_id
+  - created_at : migration_created_at
+  - updated_at : migration_updated_at
+  - project_id : project_id
+  - replica_id : migration_replica_id
+  - base_id : base_id
+  - destination_endpoint_id : migration_destination_endpoint_id
+  - tasks : migration_tasks
+  - network_map : network_map
+  - storage_mappings : storage_map
+
+**Example of a Migration List**
+
+  .. literalinclude:: ../api_samples/migration/openstack-migration-list-detail-resp.json
+    :language: javascript
+
+
+Show Migration
+==============
+
+.. rest_method:: GET /migrations/{migration_id}
+
+Shows details about a migration.
+
+**Preconditions**
+
+The migration must exist.
+
+Normal response codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - migration_id : migration_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - migration : migration_object
+  - id : migration_id
+  - deleted : migration_deleted
+  - deleted_at : migration_deleted_at
+  - instances : migration_instances
+  - notes : migration_notes
+  - status : migration_status
+  - tasks : migration_tasks
+  - user_id : user_id
+  - destination_environment : destination_environment
+  - source_environment : source_environment
+  - type : migration_type
+  - origin_endpoint_id : migration_origin_endpoint_id
+  - created_at : migration_created_at
+  - updated_at : migration_updated_at
+  - project_id : project_id
+  - replica_id : migration_replica_id
+  - base_id : base_id
+  - destination_endpoint_id : migration_destination_endpoint_id
+  - network_map : network_map
+  - storage_mappings : storage_map
+
+**Example of a Migration Show Response**
+  .. literalinclude:: ../api_samples/migration/openstack-migration-get-resp.json
+     :language: javascript
+
+Create Migration
+================
+
+.. rest_method:: POST /migrations
+
+Creates a normal migration.
+
+Normal response codes: 200
+
+forbidden(403) Error response codes:   unauthorized(401),
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - migration : migration_object
+  - network_map : network_map
+  - storage_mappings : storage_map
+  - destination_environment : destination_environment
+  - source_environment : source_environment
+  - skip_os_morphing : skip_os_morphing
+  - destination_endpoint_id : migration_destination_endpoint_id
+  - origin_endpoint_id : migration_origin_endpoint_id
+  - instances : migration_instances
+
+**Example Migration Create Request**
+  .. literalinclude:: ../api_samples/migration/openstack-migration-create-req.json
+    :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - migration : migration_object
+  - id : migration_id
+  - deleted : migration_deleted
+  - deleted_at : migration_deleted_at
+  - instances : migration_instances
+  - notes : migration_notes
+  - status : migration_notes
+  - tasks : migration_tasks
+  - user_id : user_id
+  - destination_environment : destination_environment
+  - source_environment : source_environment
+  - type : migration_type
+  - info : migration_info
+  - origin_endpoint_id : migration_origin_endpoint_id
+  - created_at : migration_created_at
+  - updated_at : migration_updated_at
+  - project_id : project_id
+  - replica_id : migration_replica_id
+  - base_id : base_id
+  - destination_endpoint_id : migration_destination_endpoint_id
+  - network_map : network_map
+  - storage_mappings : storage_map
+
+**Example Migration Create Response**
+  .. literalinclude:: ../api_samples/migration/openstack-migration-create-resp.json
+    :language: javascript
+
+Create Migration From Replica
+=============================
+
+.. rest_method:: POST /migrations
+
+Creates migration from a successful replica execution.
+
+Normal response codes: 200
+
+Error response codes:
+unauthorized(401), forbidden(403), itemNotFound(404)
+
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - migration : migration_object
+    - replica_id : replica_id
+    - force : migration_force
+    - clone_disks : migration_clone_disks
+    - skip_os_morphing : skip_os_morphing
+
+**Example of Migration Create From Replica Request**
+  .. literalinclude:: ../api_samples/migration/migration-from-replica-req.json
+     :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - migration : migration_object
+  - id : migration_id
+  - deleted : migration_deleted
+  - deleted_at : migration_deleted_at
+  - instances : migration_instances
+  - notes : migration_notes
+  - status : migration_notes
+  - tasks : migration_tasks
+  - user_id : user_id
+  - destination_environment : destination_environment
+  - source_environtment : source_environment
+  - type : migration_type
+  - info : migration_info
+  - origin_endpoint_id : migration_origin_endpoint_id
+  - created_at : migration_created_at
+  - updated_at : migration_updated_at
+  - project_id : project_id
+  - replica_id : migration_replica_id
+  - base_id : base_id
+  - destination_endpoint_id : migration_destination_endpoint_id
+  - network_map : network_map
+  - storage_mappings : storage_map
+
+
+**Example of Migration Create From Replica Response**
+  .. literalinclude:: ../api_samples/migration/openstack-migration-from-replica-resp.json
+     :language: javascript
+
+Delete Migration
+================
+.. rest_method:: DELETE migrations/{migration_id}
+
+Deletes an non-running migration.
+
+**Preconditions**
+
+The migration must exist and not be running.
+
+Normal response codes: 200
+
+Error response codes:
+unauthorized(401), forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - migration_id : migration_id_path
+
+Response
+--------
+
+There is no response body for a successful deletion of an migration.
+
+
+Cancel Migration
+================
+
+.. rest_method:: POST /migrations/{migration_id}/actions
+
+Cancels a running migration.
+
+**Preconditions**
+
+The migration must exist and must be running.
+
+Normal response codes: 200
+
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - migration_id : migration_id_path
+  - force : migration_cancel_force
+  - cancel : migration_cancel
+
+**Example of A Migration Cancellation Request**
+  .. literalinclude:: ../api_samples/migration/migration-cancel-req.json
+     :language: javascript
+
+Response
+--------
+
+There is no response to a successful migration cancellation.

+ 802 - 0
coriolis/api-refs/source/parameters.yaml

@@ -0,0 +1,802 @@
+# path variables
+endpoint_id_path:
+  description: |
+    The id of the endpoint.
+  in: path
+  required: true
+  type: uuid
+execution_id_path:
+  description: |
+    The id of the replica execution.
+  in: path
+  required: true
+  type: uuid
+instance_name_base64_path:
+  description: |
+    The name of the instance in base64
+  in: path
+  required: true
+  type: string
+migration_id_path:
+  description: |
+    The id of the migration
+  in: path
+  required: true
+  type: uuid
+platform:
+  description: |
+    The type of cloud service platform.
+  in: path
+  type: string
+  required: true
+provider_id:
+  description: |
+    The ID of cloud service provider.
+  in: path
+  type: integer
+  required: true
+replica_id_path:
+  description: |
+    The id of the replica.
+  in: path
+  type: uuid
+  required: true
+replica_schedule_id_path:
+  description: |
+    The ID of the replica schedule.
+  in: path
+  type: uuid
+  required: true
+replica_tasks_execution_id_path:
+  description: |
+     The id of the replica execution.
+  in: path
+  type: uuid
+  required: true
+# query variables
+instance_limit:
+  description: |
+    Returns a number of items up to a limit value.
+  in: query
+  required: false
+  type: integer
+# body variables
+base_id:
+  description: |
+    The id of the migration in the mariadb database.
+  in: body
+  type: string
+  required: true
+connection_info:
+  description: >
+    A JSON encoded or a barbican secret ref containing password, username and
+    other cloud-specific information for connection to an endpoint.
+  in: body
+  type: object
+  required: true
+connection_info_schema:
+  description: |
+    Object containing the connection info schema of the platform.
+  in: body
+  type: object
+  required: false
+destination_environment:
+  description: |
+    JSON containing the options of how the instance will be
+    configured on the destination cloud differently from the
+    source cloud, such as network mapping.
+  in: body
+  type: object
+  required: true
+destination_environment_schema:
+  description: |
+    Object containing the destination environment schema of the platform.
+  in: body
+  type: object
+  required: false
+destination_options:
+  description: |
+    An array that contains the parameter options possible for
+    a migration or replica with the endpoint as destination.
+  in: body
+  type: object
+  required: true
+endpoint_created_at:
+  description: |
+    ISO 8601 formatted date of endpoint creation.
+  in: body
+  type: string
+  required: true
+endpoint_deleted:
+  description: |
+    Integer representing whether endpoint is deleted or not. (0 or 1)
+  in: body
+  type: integer
+  required: true
+endpoint_deleted_at:
+  description: |
+    ISO 8601 formatted date of endpoint deletion.
+  in: body
+  type: string
+  required: true
+endpoint_description:
+  description: |
+    The description of the endpoint.
+  in: body
+  type: string
+  required: true
+endpoint_id:
+  description: |
+    The id of a cloud endpoint.
+  in: body
+  type: uuid
+  required: true
+endpoint_name:
+  description: |
+    The name of the endpoint.
+  in: body
+  type: string
+  required: true
+endpoint_object:
+  description: |
+    An endpoint object containing name, id, type, and connection information.
+  in: body
+  type: object
+  required: true
+endpoint_type:
+  description: |
+    The type of cloud service platform.
+  in: body
+  type: string
+  required: true
+endpoint_updated_at:
+  description: |
+    ISO 8601 formatted date of when the endpoint was last updated.
+  in: body
+  type: string
+  required: true
+endpoints_array:
+  description: |
+    Array of endpoint objects.
+  in: body
+  type: array
+  required: true
+instance_array:
+  description: |
+    Array of instance objects
+  in: body
+  type: array
+  required: true
+instance_cores_per_socket:
+  description: |
+    Number of cores per socket used by the instance.
+  in: body
+  type: integer
+  required: false
+instance_devices:
+  description: |
+    Object containing information about instance devices like NICs, disks, etc.
+  in: body
+  type: object
+  required: true
+instance_flavor:
+  description: |
+    Name or ID of the flavor used by the instance.
+  in: body
+  type: string
+  required: true
+instance_id:
+  description: |
+    The id of the instance.
+  in: body
+  type: uuid
+  required: true
+instance_identifier:
+  description: |
+    The unique identifier of a virtual machine.
+  in: body
+  type: string
+  required: true
+instance_memory_mb:
+  description: |
+    The memory of the instance in MB.
+  in: body
+  type: integer
+  required: true
+instance_name:
+  description: |
+    The name of an instance.
+  in: body
+  type: string
+  required: true
+instance_nested_virtualization:
+  description: |
+    Whether the instance is run on a nested virtualization environment.
+  in: body
+  type: boolean
+  required: false
+instance_num_cpu:
+  description: |
+    The numbers of CPUs of an instance.
+  in: body
+  type: string
+  required: true
+instance_object:
+  description: |
+    Object containing information about the requested instance.
+  in: body
+  type: object
+  required: true
+instance_os_type:
+  description: |
+    The OS type of an instance.
+  in: body
+  type: string
+  required: true
+migration_cancel:
+  description: |
+    Object containing information about the type of migration cancellation.
+  in: body
+  type: string
+  required: true
+migration_cancel_force:
+  description: |
+    Boolean representing whether the migration cancellation is forced.
+  in: body
+  type: boolean
+  required: true
+migration_clone_disks:
+  description: |
+    Boolean representing whether the migration is started from replicated disks.
+  in: body
+  type: boolean
+  required: true
+migration_created_at:
+  description: |
+    Timestamp of migration creation.
+  in: body
+  type: string
+  required: true
+migration_deleted:
+  description: |
+    Whether a migration is deleted or not.
+    1 for deleted
+    0 for not deleted
+  in: body
+  type: integer
+  required: true
+migration_deleted_at:
+  description: |
+    The timestamp of deletion for a migration.
+  in: body
+  type: object
+  required: true
+migration_destination_endpoint_id:
+  description: |
+    The id of the migration destination cloud endpoint.
+  in: body
+  type: uuid
+  required: true
+migration_force:
+  description: |
+    Boolean representing whether the migration is forced or not.
+  in: body
+  type: boolean
+  required: true
+migration_id:
+  description: |
+    The id of a coriolis migration.
+  in: body
+  type: uuid
+  required: true
+migration_info:
+  description: |
+    Information about the instance that is migrated.
+  in: body
+  type: object
+  required: true
+migration_instances:
+  description: |
+    An array of all instance identifiers to be migrated.
+  in: body
+  type: array
+  required: true
+migration_notes:
+  description: |
+    Notes about the migration.
+  in: body
+  type: object
+  required: true
+migration_object:
+  description: |
+    Object containing migration details.
+  in: body
+  type: object
+  required: true
+migration_origin_endpoint_id:
+  description: |
+    The id of the migration source cloud endpoint.
+  in: body
+  type: uuid
+  required: true
+migration_replica_id:
+  description: |
+    id of the replica if the migration is created from one.
+  in: body
+  type: uuid
+  required: true
+migration_status:
+  description: |
+    Migration status, can either be ``RUNNING``, ``ERROR`` or ``COMPLETED``.
+  in: body
+  type: string
+  required: true
+migration_tasks:
+  description: |
+    The array of tasks that the migration is going through,
+    contains id,instance name, status, and other details about
+    each task.
+  in: body
+  type: array
+  required: true
+migration_type:
+  description: |
+    The type of migration, can also be a replica.
+  in: body
+  type: string
+  required: true
+migration_updated_at:
+  description: |
+    Timestamp of last migration update.
+  in: body
+  type: string
+  required: true
+migrations_array:
+  description: |
+    Array of migration objects.
+  in: body
+  type: array
+  required: true
+network_id:
+  description: |
+    The unique identifier of a network.
+  in: body
+  type: uuid
+  required: true
+network_map:
+  description: |
+    Object containing the network mapping.
+  in: body
+  type: object
+  required: true
+network_name:
+  description: |
+    The name of a network.
+  type: string
+  in: body
+  required: true
+networks_array:
+  description: |
+    An array of ``network`` objects.
+  type: string
+  in: body
+  required: true
+option_config_default:
+  description: |
+    The default option for the destination parameter.
+  in: body
+  type: string
+  required: true
+option_name:
+  description: |
+    The name of the destination parameter.
+  in: body
+  type: string
+  required: true
+option_values:
+  description: |
+    An array of possible values for the respective destination parameter.
+  in: body
+  type: array
+  required: true
+project_id:
+  description: |
+    Coriolis supports multiple projects, this is the respective project's id.
+  in: body
+  type: uuid
+  required: true
+provider_schemas:
+  description: |
+    Object containing the requested provider schema.
+  in: body
+  type: object
+  required: true
+provider_type:
+  description: |
+    The type of cloud service provider.
+  in: body
+  type: array
+  required: true
+provider_types:
+  description: |
+    Array containing the provider types that a platform currently supports.
+  in: body
+  type: array
+  required: true
+providers:
+  description: |
+    Array that contains all the available types of cloud service providers
+  in: body
+  type: array
+  required: true
+replica_action_id:
+  description: |
+    Id of the replica excution.
+  in: body
+  type: uuid
+  required: true
+replica_created_at:
+  description: |
+    Timestamp of replica creation.
+  in: body
+  type: string
+  required: true
+replica_delete_disks:
+  description: |
+    An object that describes delete disk replica action.
+  in: body
+  type: object
+  required: true
+replica_deleted:
+  description: |
+    Value representing whether the replica is deleted or not
+  in: body
+  type: integer
+  required: true
+replica_deleted_at:
+  description: |
+    Timestamp of replica deletion if applicable.
+  in: body
+  type: string
+  required: true
+replica_destination_endpoint_id:
+  description: |
+    The id of the destination cloud endpoint for the replica action.
+  in: body
+  type: uuid
+  required: true
+replica_destination_environment:
+  description: |
+    The configuration on the destination cloud provider for the replica.
+  in: body
+  type: string
+  required: false
+replica_execution:
+  description: |
+    An ``execution`` object.
+  in: body
+  type: object
+  required: true
+replica_execution_action:
+  description: |
+    An ``action`` object regarding the specific operation.
+  in: body
+  type: array
+  required: true
+replica_execution_array:
+  description: |
+    An array of ``execution`` objects.
+  in: body
+  type: array
+  required: true
+replica_execution_created_at:
+  description: |
+    Timestamp of creation time of the replica execution.
+  in: body
+  type: integer
+  required: true
+replica_execution_deleted:
+  description: |
+    Integer representing whether the execution is deleted or not.
+  in: body
+  type: integer
+  required: true
+replica_execution_deleted_at:
+  description: |
+    Timestamp of deletion time, if applicable for the replica execution.
+  in: body
+  type: integer
+  required: true
+replica_execution_force:
+  description: |
+    A boolean which describes whether to force the cancellation of a replica
+    execution.
+  in: body
+  type: boolean
+  required: true
+replica_execution_id:
+  description: |
+    The id of the replica execution.
+  in: body
+  type: array
+  required: true
+replica_execution_number:
+  description: |
+    Integer representing n'th execution of the replica.
+  in: body
+  type: integer
+  required: true
+replica_execution_object:
+  description: |
+    An ``execution`` object
+  in: body
+  type: boolean
+  required: true
+replica_execution_status:
+  description: >
+    The status of the replica execution, can either be ``RUNNING`` , ``ERROR``
+    or ``COMPLETED``
+  in: body
+  type: string
+  required: true
+replica_execution_tasks:
+  description: |
+    An array of all the tasks regarding a specific replica execution.
+  in: body
+  type: array
+  required: true
+replica_execution_updated_at:
+  description: |
+    Timestamp of last replica execution update.
+  in: body
+  type: string
+  required: true
+replica_id:
+  description: |
+    The id of the replica.
+  in: body
+  type: uuid
+  required: true
+replica_instances:
+  description: |
+    Name array of the  instances to be replicated.
+  in: body
+  type: array
+  required: true
+replica_network_map:
+  description: |
+    Object containing the network mapping.
+  in: body
+  type: object
+  required: false
+replica_notes:
+  description: |
+    Notes about the replica.
+  in: body
+  type: string
+  required: true
+replica_object:
+  description: |
+    Object containing information about a replica.
+  in: body
+  type: object
+  required: true
+replica_origin_endpoint_id:
+  description: |
+    The id of the origin cloud endpoint for the replica action.
+  in: body
+  type: uuid
+  required: true
+replica_schedule:
+  description: |
+    Object containing the schedule information(month, day of month, etc.).
+  in: body
+  type: object
+  required: true
+replica_schedule_created_at:
+  description: |
+    Timestamp of replica schedule creation.
+  in: body
+  type: string
+  required: true
+replica_schedule_day_of_month:
+  description: |
+    The day of the month at which to run.
+  in: body
+  type: integer
+  required: false
+replica_schedule_day_of_week:
+  description: |
+    The day of week in which to run.
+  in: body
+  type: integer
+  required: false
+replica_schedule_deleted:
+  description: |
+    Value representing whether the replica schedule is deleted or not
+  in: body
+  type: string
+  required: true
+replica_schedule_deleted_at:
+  description: |
+    Timestamp of replica schedule deletion if applicable.
+  in: body
+  type: string
+  required: true
+replica_schedule_enabled:
+  description: |
+    Whether the schedule is enabled or not.
+  in: body
+  type: boolean
+  required: true
+replica_schedule_expiration:
+  description: |
+    ISO8601 formatted date which sets the replica schedule expiration date.
+  in: body
+  type: string
+  required: true
+replica_schedule_expiration_request:
+  description: |
+    ISO8601 formatted date which sets the replica schedule expiration date.
+  in: body
+  type: string
+  required: false
+replica_schedule_hour:
+  description: |
+    The hour of the day at which to run.
+  in: body
+  type: integer
+  required: false
+replica_schedule_id:
+  description: |
+    The ID of the replica schedule.
+  in: body
+  type: uuid
+  required: true
+replica_schedule_minute:
+  description: |
+    The minute of the hour at which to run.
+  in: body
+  type: integer
+  required: false
+replica_schedule_month:
+  description: |
+    The month in which to run.
+  in: body
+  type: integer
+  required: false
+replica_schedule_updated_at:
+  description: |
+    Timestamp of last replica schedule update.
+  in: body
+  type: string
+  required: true
+replica_schedules:
+  description: |
+    Array of replica schedules.
+  in: body
+  type: array
+  required: true
+replica_shutdown_instances:
+  description: |
+    A boolean which describes whether the execution to shutdown the source
+    instance for the replication process.
+  in: body
+  type: boolean
+  required: true
+replica_source_environment:
+  description: |
+    The configuration on the source cloud provider for the replica.
+  in: body
+  type: object
+  required: false
+replica_storage_map:
+  description: |
+    Object containing storage backend mapping.
+  in: body
+  type: object
+  required: false
+replica_type:
+  description: |
+    Type of coriolis action, in this case,  a replica.
+  in: body
+  type: string
+  required: true
+replica_update_notes:
+  description: |
+    Notes about the replica.
+  in: body
+  type: string
+  required: false
+replica_updated_at:
+  description: |
+    Timestamp of last replica update.
+  in: body
+  type: string
+  required: true
+replicas_array:
+  description: |
+    Array of replica objects.
+  in: body
+  type: array
+  required: true
+schemas:
+  description: |
+    Object containing the platform's requested schema.
+  in: body
+  type: object
+  required: true
+skip_os_morphing:
+  description: |
+    Boolean whether to skip os morphing or not.
+  in: body
+  type: boolean
+  required: true
+source_environment:
+  description: |
+    JSON containing the options specific to the source cloud of the instance.
+  in: body
+  type: object
+  required: true
+source_environment_schema:
+  description: |
+    Object containing the source environment schema of the platform.
+  in: body
+  type: object
+  required: false
+source_options:
+  description: |
+    An array that contains the parameter options possible for
+    a migration or replica with the endpoint as source.
+  in: body
+  type: object
+  required: true
+storage_backends:
+  description: |
+    Array containing storage backends available to an endpoint.
+  in: body
+  type: array
+  required: true
+storage_id:
+  description: |
+    The unique identifier of a storage backend
+  in: body
+  type: string
+  required: true
+storage_map:
+  description: |
+    Object containing storage backend mapping.
+  in: body
+  type: object
+  required: true
+storage_name:
+  description: |
+    Name of the storage backend
+  in: body
+  type: string
+  required: true
+user_id:
+  description: |
+    Coriolis supports multiple users, this is the respective user's id.
+  in: body
+  type: uuid
+  required: true
+valid_connection:
+  description: |
+    A boolean value representing whether the endpoint connection is valid.
+  in: body
+  type: boolean
+  required: true
+validate_connection:
+  description: |
+    An object that contains the validate connection action for the
+    endpoint connection.
+  in: body
+  type: object
+  required: true
+validation_message:
+  description: |
+    The error message in case of endpoint validation failure.
+  in: body
+  type: string
+  required: true

+ 68 - 0
coriolis/api-refs/source/provider.inc

@@ -0,0 +1,68 @@
+.. -*- rst -*-
+
+===================
+Provider Operations
+===================
+
+Lists all the possible types of cloud service connections (providers) and the required schemas.
+
+List Providers
+=====================
+
+.. rest_method:: GET /providers
+
+Lists all providers.
+
+Normal response codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403)
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - providers : providers
+  - types : provider_types
+
+**Example of List Providers**
+  .. literalinclude:: ../api_samples/provider/provider-get-resp.json
+     :language: javascript
+
+List Provider Schemas
+=====================
+
+.. rest_method:: GET /providers/{platform}/schemas/{provider_type}
+
+Lists a provider schema by given platform and provider type.
+
+**Preconditions**
+The platform must support the provider type requested.
+
+Normal response codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - platform : platform
+    - provider_type : provider_id
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - schemas : provider_schemas
+  - connection_info_schema : connection_info_schema
+  - destination_environment_schema : destination_environment_schema
+  - source_environment_schema : source_environment_schema
+
+**Example of List Providers Schemas Response**
+  .. literalinclude:: ../api_samples/provider/openstack-connection-provider-schema-get-resp.json
+     :language: javascript

+ 743 - 0
coriolis/api-refs/source/replica.inc

@@ -0,0 +1,743 @@
+.. -*- rst -*-
+
+========
+Replicas
+========
+
+Lists, creates, updates, shows details for, and deletes cloud replicas.
+
+
+List Replicas
+=============
+
+.. rest_method:: GET /replicas/detail
+
+List details for all replicas.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - replicas : replicas_array
+  - id : replica_id
+  - deleted : replica_deleted
+  - deleted_at : replica_deleted_at
+  - executions : replica_execution_array
+  - instances : replica_instances
+  - notes : replica_notes
+  - user_id : user_id
+  - destination_environment : destination_environment
+  - source_environment : source_environment
+  - type : replica_type
+  - origin_endpoint_id : replica_origin_endpoint_id
+  - created_at : replica_created_at
+  - updated_at : replica_updated_at
+  - project_id : project_id
+  - base_id : base_id
+  - destination_endpoint_id : replica_destination_endpoint_id
+  - network_map : network_map
+  - storage_mappings : storage_map
+
+**Example of Replica List Response**
+
+.. literalinclude:: ../api_samples/replica/replica-list-resp.json
+   :language: javascript
+
+
+Show Replica
+============
+
+.. rest_method:: GET /replicas/{replica_id}
+
+Shows details about a replica.
+
+**Preconditions**
+
+The replica must exist.
+
+
+Error response codes:   unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - replica_id : replica_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - rpelica : replica_object
+  - id : replica_id
+  - deleted : replica_deleted
+  - deleted_at : replica_deleted_at
+  - executions : replica_execution_array
+  - instances : replica_instances
+  - notes : replica_notes
+  - user_id : user_id
+  - destination_environment : destination_environment
+  - source_environment : source_environment
+  - type : replica_type
+  - origin_endpoint_id : replica_origin_endpoint_id
+  - created_at : replica_created_at
+  - updated_at : replica_updated_at
+  - project_id : project_id
+  - base_id : base_id
+  - destination_endpoint_id : replica_destination_endpoint_id
+  - network_map : network_map
+  - storage_mappings : storage_map
+
+**Example of Replica Show Response**
+
+  .. literalinclude:: ../api_samples/replica/openstack-replica-get-resp.json
+     :language: javascript
+
+Create Replica
+==============
+
+.. rest_method:: POST /replicas
+
+Creates a replica.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - replica : replica_object
+   - destination_environment : replica_destination_environment
+   - source_environment : replica_source_environment
+   - destination_endpoint_id : replica_destination_endpoint_id
+   - origin_endpoint_id : replica_origin_endpoint_id
+   - instances : replica_instances
+   - network_map : network_map
+   - storage_mappings : storage_map
+
+**Example of Replica Create Request**
+
+  .. literalinclude:: ../api_samples/replica/openstack-replica-create-req.json
+      :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - replica : replica_object
+  - id : replica_id
+  - deleted : replica_deleted
+  - deleted_at : replica_deleted_at
+  - executions : replica_execution_array
+  - instances : replica_instances
+  - notes : replica_notes
+  - user_id : user_id
+  - destination_environment : destination_environment
+  - source_environment : source_environment
+  - type : replica_type
+  - origin_endpoint_id : replica_origin_endpoint_id
+  - created_at : replica_created_at
+  - updated_at : replica_updated_at
+  - project_id : project_id
+  - base_id : base_id
+  - destination_endpoint_id : replica_destination_endpoint_id
+  - network_map : network_map
+  - storage_mappings : storage_map
+
+**Example of Replica Create Response**
+
+.. literalinclude:: ../api_samples/replica/openstack-replica-create-resp.json
+    :language: javascript
+
+Update Replica
+==============
+
+.. rest_method:: PUT /replicas/{replica_id}
+
+Updates a replica.
+
+**Preconditions**
+The replica must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+  .. rest_parameters:: parameters.yaml
+
+      - replica_id : replica_id_path
+      - destination_environment : replica_destination_environment
+      - source_environment : replica_source_environment
+      - network_map : replica_network_map
+      - notes : replica_update_notes
+      - storage_mappings : replica_storage_map
+
+**Example of Replica Update Request**
+
+.. literalinclude:: ../api_samples/replica/replica-update-req.json
+    :language: javascript
+
+Response
+--------
+
+  .. rest_parameters:: parameters.yaml
+
+      - execution : replica_execution_object
+      - number : replica_execution_number
+      - action_id : replica_id
+      - deleted : replica_execution_deleted
+      - deleted_at : replica_execution_deleted_at
+      - created_at : replica_execution_created_at
+      - updated_at : replica_execution_updated_at
+      - status : replica_execution_status
+      - tasks : replica_execution_tasks
+      - action : replica_execution_action
+      - id : replica_execution_id
+
+**Example of Replica Update Response**
+
+.. literalinclude:: ../api_samples/replica/replica-update-resp.json
+    :language: javascript
+
+
+Delete Replica
+==============
+
+.. rest_method:: DELETE /replicas/{replica_id}
+
+Deletes a replica.
+
+**Preconditions**
+
+The replica must exist and not have a running execution or migration.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - replica_id : replica_id_path
+
+Response
+--------
+
+There is no response body for a successful deletion.
+
+Create Replica Execution
+========================
+
+.. rest_method:: POST /replicas/{replica_id}/executions
+
+Executes a replica.
+
+**Preconditions**
+
+The replica must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - shutdown_instances : replica_shutdown_instances
+    - replica_id : replica_id_path
+
+**Example Replica Execution Create Request**
+
+.. literalinclude:: ../api_samples/replica/replica-execution-req.json
+    :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - execution : replica_execution
+  - id : replica_execution_id
+  - action_id : replica_id
+  - deleted : replica_deleted
+  - deleted_at : replica_execution_deleted_at
+  - created_at : replica_execution_created_at
+  - updated_at : replica_execution_updated_at
+  - status : replica_execution_status
+  - number : replica_execution_number
+  - tasks : replica_execution_tasks
+
+**Example Replica Execution Response**
+
+  .. literalinclude:: ../api_samples/replica/openstack-replica-execution-resp.json
+   :language: javascript
+
+List Replica Executions
+=======================
+
+.. rest_method:: GET /replicas/{replica_id}/executions
+
+List a replica's executions.
+
+**Preconditions**
+The replica must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - replica_id : replica_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - executions : replica_execution_array
+  - updated_at : replica_updated_at
+  - action_id : replica_id
+  - deleted : replica_execution_deleted
+  - deleted_at : replica_execution_deleted_at
+  - created_at : replica_execution_created_at
+  - number : replica_execution_number
+  - status : replica_execution_status
+  - id : replica_execution_id
+
+**Example Replica Execute Response**
+
+  .. literalinclude:: ../api_samples/replica/replica-execution-list-resp.json
+     :language: javascript
+
+Show Replica Execution
+======================
+
+.. rest_method:: GET /replicas/{replica_id}/executions/{execution_id}
+
+Show a replica's execution.
+
+**Preconditions**
+The replica execution must exist.
+
+Normal response codes: 200
+
+Error response codes:
+unauthorized(401), forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - replica_id : replica_id_path
+  - execution_id : execution_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - execution : replica_execution_object
+  - number : replica_execution_number
+  - action_id : replica_id
+  - deleted : replica_execution_deleted
+  - deleted_at : replica_execution_deleted_at
+  - created_at : replica_execution_created_at
+  - updated_at : replica_execution_updated_at
+  - status : replica_execution_status
+  - tasks : replica_execution_tasks
+  - action : replica_execution_action
+  - id : replica_execution_id
+
+
+**Example of Replica Executions Show Response**
+  .. literalinclude:: ../api_samples/replica/openstack-replica-execution-show-resp.json
+     :language: javascript
+
+Replica Actions
+===============
+
+
+Delete Replica Disks
+====================
+
+.. rest_method:: POST replicas/{replica_id}/actions
+
+Deletes a replicas disks on the destination environment.
+
+**Preconditions**
+
+The replica execution must have at least one successful execution.
+
+
+Normal response codes: 200
+
+Error response codes:
+unauthorized(401), forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - delete_disks : replica_delete_disks
+    - replica_id : replica_id_path
+
+**Example of Replica Execution Cancel Request**
+
+  .. literalinclude:: ../api_samples/replica/replica-disks-delete-req.json
+     :language: javascript
+
+Response
+--------
+
+The last execution of the requested replica is returned.
+
+**Example of Delete Replica Disks Response**
+
+  .. literalinclude:: ../api_samples/replica/openstack-replica-execution-show-resp.json
+     :language: javascript
+
+Replica Execution Actions
+=========================
+
+Cancel Replica Execution
+========================
+
+.. rest_method:: POST /replicas/{replica_id}/executions/{execution_id}
+
+Cancels an ongoing replica execution.
+
+**Preconditions**
+
+The replica must exist and its execution must be ongoing.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - force : replica_execution_force
+    - replica_id : replica_id_path
+    - execution_id : execution_id_path
+
+**Example of Replica Execution Cancel Request**
+
+  .. literalinclude:: ../api_samples/replica/replica-execution-cancel-req.json
+     :language: javascript
+
+Response
+--------
+
+There is no response to a successful replicas execution cancellation.
+
+Delete Replica Execution
+========================
+.. rest_method:: DELETE replicas/{replica_id}/executions/{replica_tasks_execution_id}
+
+Deletes an replica execution.
+
+**Preconditions**
+
+The replica execution must not be running.
+
+Normal response codes: 200
+
+Error response codes:
+unauthorized(401), forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - replica_id : replica_id_path
+    - replica_tasks_execution_id : replica_tasks_execution_id_path
+
+Response
+--------
+
+There is no response body for a successful deletion of an replica execution.
+
+
+Replica Scheduling
+==================
+
+Replica Schedule List
+=====================
+
+.. rest_method:: GET /replicas/{replica_id}/schedules
+
+List schedules for a replica.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+  .. rest_parameters:: parameters.yaml
+
+    - replica_id : replica_id_path
+
+Response
+--------
+
+  .. rest_parameters:: parameters.yaml
+
+    - schedules : replica_schedules
+    - id : replica_schedule_id
+    - deleted : replica_schedule_deleted
+    - deleted_at : replica_schedule_deleted_at
+    - created_at : replica_schedule_created_at
+    - updated_at : replica_schedule_updated_at
+    - replica_id : replica_id
+    - enabled : replica_schedule_enabled
+    - shutdown_instance : replica_shutdown_instances
+    - schedule : replica_schedule
+    - minute : replica_schedule_minute
+    - hour : replica_schedule_hour
+    - dom : replica_schedule_day_of_month
+    - month : replica_schedule_month
+    - dow : replica_schedule_day_of_week
+    - expiration_date : replica_schedule_expiration
+
+**Example of Replica Schedule List Response**
+
+.. literalinclude:: ../api_samples/replica/replica-schedule-list-resp.json
+     :language: javascript
+
+
+Replica Schedule Show
+=====================
+
+.. rest_method:: GET /replicas/{replica_id}/schedules/{schedule_id}
+
+Shows a replica schedule.
+
+**Preconditions**
+The replica schedule must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+  .. rest_parameters:: parameters.yaml
+
+    - replica_id : replica_id_path
+    - schedule_id : replica_schedule_id_path
+
+Response
+--------
+
+  .. rest_parameters:: parameters.yaml
+
+    - id : replica_schedule_id
+    - deleted : replica_schedule_deleted
+    - deleted_at : replica_schedule_deleted_at
+    - created_at : replica_schedule_created_at
+    - updated_at : replica_schedule_updated_at
+    - replica_id : replica_id
+    - enabled : replica_schedule_enabled
+    - shutdown_instance : replica_shutdown_instances
+    - schedule : replica_schedule
+    - minute : replica_schedule_minute
+    - hour : replica_schedule_hour
+    - dom : replica_schedule_day_of_month
+    - month : replica_schedule_month
+    - dow : replica_schedule_day_of_week
+    - expiration_date : replica_schedule_expiration
+
+**Example Replica Schedule Show Response**
+
+.. literalinclude:: ../api_samples/replica/replica-schedule-show-resp.json
+    :language: javascript
+
+Replica Schedule Create
+=======================
+
+.. rest_method:: POST /replicas/{replica_id}/schedules
+
+Creates a replica schedule.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - replica_id : replica_id_path
+  - enabled : replica_schedule_enabled
+  - shutdown_instance : replica_shutdown_instances
+  - schedule : replica_schedule
+  - minute : replica_schedule_minute
+  - hour : replica_schedule_hour
+  - dom : replica_schedule_day_of_month
+  - month : replica_schedule_month
+  - dow : replica_schedule_day_of_week
+  - expiration_date : replica_schedule_expiration_request
+
+**Example of Replica Schedule Create Request**
+
+.. literalinclude:: ../api_samples/replica/replica-schedule-create-req.json
+    :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - schedule : replica_schedule
+  - id : replica_schedule_id
+  - deleted : replica_schedule_deleted
+  - deleted_at : replica_schedule_deleted_at
+  - created_at : replica_schedule_created_at
+  - updated_at : replica_schedule_updated_at
+  - replica_id : replica_id
+  - enabled : replica_schedule_enabled
+  - shutdown_instance : replica_shutdown_instances
+  - schedule : replica_schedule
+  - minute : replica_schedule_minute
+  - hour : replica_schedule_hour
+  - dom : replica_schedule_day_of_month
+  - month : replica_schedule_month
+  - dow : replica_schedule_day_of_week
+  - expiration_date : replica_schedule_expiration
+
+**Example of Replica Schedule Create Response**
+
+.. literalinclude:: ../api_samples/replica/replica-schedule-create-resp.json
+    :language: javascript
+
+Replica Schedule Update
+=======================
+
+.. rest_method:: PUT /replicas/{replica_id}/schedules/{schedule_id}
+
+Updates a replica schedule.
+
+**Preconditions**
+The replica schedule must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+  .. rest_parameters:: parameters.yaml
+
+    - replica_id : replica_id_path
+    - schedule_id : replica_schedule_id_path
+    - shutdown_instance : replica_shutdown_instances
+    - schedule : replica_schedule
+    - minute : replica_schedule_minute
+    - hour : replica_schedule_hour
+    - dom : replica_schedule_day_of_month
+    - month : replica_schedule_month
+    - dow : replica_schedule_day_of_week
+    - expiration_date : replica_schedule_expiration_request
+
+**Example of Replica Schedule Update Request**
+
+.. literalinclude:: ../api_samples/replica/replica-schedule-update-req.json
+    :language: javascript
+
+Response
+--------
+
+  .. rest_parameters:: parameters.yaml
+
+    - id : replica_schedule_id
+    - deleted : replica_schedule_deleted
+    - deleted_at : replica_schedule_deleted_at
+    - created_at : replica_schedule_created_at
+    - updated_at : replica_schedule_updated_at
+    - replica_id : replica_id
+    - enabled : replica_schedule_enabled
+    - shutdown_instance : replica_shutdown_instances
+    - schedule : replica_schedule
+    - minute : replica_schedule_minute
+    - hour : replica_schedule_hour
+    - dom : replica_schedule_day_of_month
+    - month : replica_schedule_month
+    - dow : replica_schedule_day_of_week
+    - expiration_date : replica_schedule_expiration
+
+**Example of Replica Schedule Update Response**
+
+.. literalinclude:: ../api_samples/replica/replica-schedule-update-resp.json
+    :language: javascript
+
+Replica Schedule Delete
+=======================
+
+.. rest_method:: DELETE /replicas/{replica_id}/schedules/{schedule_id}
+
+Deletes a replica schedule.
+
+**Preconditions**
+The replica schedule must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+  .. rest_parameters:: parameters.yaml
+
+    - replica_id : replica_id_path
+    - schedule_id : replica_schedule_id
+
+Response
+--------
+
+There is no response body for a successful deletion of a replica schedule.