Просмотр исходного кода

Merge pull request #171 from Dany9966/update-apirefs

Update API refs
Nashwan Azhari 5 лет назад
Родитель
Сommit
5cf6b8a96c
61 измененных файлов с 3648 добавлено и 404 удалено
  1. 127 0
      coriolis/api-refs/api_samples/diagnostics/diagnostics-get-resp.json
  2. 2 1
      coriolis/api-refs/api_samples/endpoint/endpoint-get-resp-secret.json
  3. 2 2
      coriolis/api-refs/api_samples/endpoint/endpoint-instance-list-resp.json
  4. 1 1
      coriolis/api-refs/api_samples/endpoint/endpoint-instance-show-resp.json
  5. 6 3
      coriolis/api-refs/api_samples/endpoint/endpoint-list-resp.json
  6. 23 2
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-create-req.json
  7. 63 0
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-destination-minion-pool-options-list-resp.json
  8. 11 2
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-get-resp.json
  9. 58 0
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-source-minion-pool-options-list-resp.json
  10. 91 23
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-source-options-list-resp.json
  11. 23 2
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-update-req.json
  12. 23 2
      coriolis/api-refs/api_samples/endpoint/openstack-endpoint-update-resp.json
  13. 2 1
      coriolis/api-refs/api_samples/migration/migration-from-replica-req.json
  14. 16 2
      coriolis/api-refs/api_samples/migration/openstack-migration-create-req.json
  15. 16 1
      coriolis/api-refs/api_samples/migration/openstack-migration-create-resp.json
  16. 6 0
      coriolis/api-refs/api_samples/migration/openstack-migration-from-replica-resp.json
  17. 6 0
      coriolis/api-refs/api_samples/migration/openstack-migration-get-resp.json
  18. 12 0
      coriolis/api-refs/api_samples/migration/openstack-migration-list-detail-resp.json
  19. 3 0
      coriolis/api-refs/api_samples/minion_pool/minion-pool-allocate-req.json
  20. 3 0
      coriolis/api-refs/api_samples/minion_pool/minion-pool-deallocate-req.json
  21. 108 0
      coriolis/api-refs/api_samples/minion_pool/minion-pool-list-resp.json
  22. 3 0
      coriolis/api-refs/api_samples/minion_pool/minion-pool-refresh-req.json
  23. 74 0
      coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-allocate-resp.json
  24. 23 0
      coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-create-req.json
  25. 47 0
      coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-create-resp.json
  26. 95 0
      coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-deallocate-resp.json
  27. 95 0
      coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-refresh-resp.json
  28. 130 0
      coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-show.json
  29. 21 0
      coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-update-req.json
  30. 60 0
      coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-update-resp.json
  31. 212 169
      coriolis/api-refs/api_samples/provider/openstack-connection-provider-schema-get-resp.json
  32. 133 120
      coriolis/api-refs/api_samples/provider/provider-get-resp.json
  33. 7 0
      coriolis/api-refs/api_samples/region/region-create-req.json
  34. 14 0
      coriolis/api-refs/api_samples/region/region-create-resp.json
  35. 30 0
      coriolis/api-refs/api_samples/region/region-list-resp.json
  36. 16 0
      coriolis/api-refs/api_samples/region/region-show-resp.json
  37. 7 0
      coriolis/api-refs/api_samples/region/region-update-req.json
  38. 14 0
      coriolis/api-refs/api_samples/region/region-update-resp.json
  39. 5 1
      coriolis/api-refs/api_samples/replica/openstack-replica-create-req.json
  40. 4 0
      coriolis/api-refs/api_samples/replica/openstack-replica-create-resp.json
  41. 1 0
      coriolis/api-refs/api_samples/replica/openstack-replica-execution-resp.json
  42. 1 0
      coriolis/api-refs/api_samples/replica/openstack-replica-execution-show-resp.json
  43. 4 0
      coriolis/api-refs/api_samples/replica/openstack-replica-get-resp.json
  44. 6 3
      coriolis/api-refs/api_samples/replica/replica-execution-list-resp.json
  45. 4 0
      coriolis/api-refs/api_samples/replica/replica-list-resp.json
  46. 5 1
      coriolis/api-refs/api_samples/replica/replica-update-resp.json
  47. 9 0
      coriolis/api-refs/api_samples/service/service-create-req.json
  48. 95 0
      coriolis/api-refs/api_samples/service/service-create-resp.json
  49. 97 0
      coriolis/api-refs/api_samples/service/service-list-resp.json
  50. 95 0
      coriolis/api-refs/api_samples/service/service-show-resp.json
  51. 6 0
      coriolis/api-refs/api_samples/service/service-update-req.json
  52. 95 0
      coriolis/api-refs/api_samples/service/service-update-resp.json
  53. 38 0
      coriolis/api-refs/source/diagnostics.inc
  54. 138 52
      coriolis/api-refs/source/endpoint.inc
  55. 4 0
      coriolis/api-refs/source/index.rst
  56. 31 2
      coriolis/api-refs/source/migration.inc
  57. 482 0
      coriolis/api-refs/source/minion_pool.inc
  58. 465 3
      coriolis/api-refs/source/parameters.yaml
  59. 216 0
      coriolis/api-refs/source/region.inc
  60. 35 11
      coriolis/api-refs/source/replica.inc
  61. 229 0
      coriolis/api-refs/source/service.inc

+ 127 - 0
coriolis/api-refs/api_samples/diagnostics/diagnostics-get-resp.json

@@ -0,0 +1,127 @@
+{
+    "diagnostics": [
+        {
+            "application": "coriolis-conductor",
+            "packages": [
+                "alembic==1.5.2",
+                "amqp==5.0.5",
+                "argparse==1.4.0",
+                // ...
+            ],
+            "os_info": [
+                "NAME=\"Ubuntu\"",
+                "VERSION=\"18.04.5 LTS (Bionic Beaver)\"",
+                "ID=ubuntu",
+                "ID_LIKE=debian",
+                "PRETTY_NAME=\"Ubuntu 18.04.5 LTS\"",
+                "VERSION_ID=\"18.04\"",
+                "HOME_URL=\"https://www.ubuntu.com/\"",
+                "SUPPORT_URL=\"https://help.ubuntu.com/\"",
+                "BUG_REPORT_URL=\"https://bugs.launchpad.net/ubuntu/\"",
+                "PRIVACY_POLICY_URL=\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\"",
+                "VERSION_CODENAME=bionic",
+                "UBUNTU_CODENAME=bionic",
+                ""
+            ],
+            "hostname": "coriolis-conductor",
+            "ip_addresses": [
+                {
+                    "eth0": {
+                        "ipv4": [
+                            {
+                                "addr": "10.107.9.8",
+                                "netmask": "255.255.254.0",
+                                "broadcast": "10.107.9.255"
+                            }
+                        ],
+                        "ipv6": [
+                            {
+                                "addr": "fe80::250:56ff:feb9:73a%eth0",
+                                "netmask": "ffff:ffff:ffff:ffff::/64"
+                            }
+                        ]
+                    }
+                },
+                {
+                    "docker0": {
+                        "ipv4": [
+                            {
+                                "addr": "172.17.0.1",
+                                "netmask": "255.255.0.0",
+                                "broadcast": "172.17.255.255"
+                            }
+                        ],
+                        "ipv6": [
+                            {
+                                "addr": "fe80::42:61ff:fe79:de6f%docker0",
+                                "netmask": "ffff:ffff:ffff:ffff::/64"
+                            }
+                        ]
+                    }
+                }
+            ]
+        },
+        {
+            "application": "coriolis-replica-cron",
+            "packages": [
+                "alembic==1.5.2",
+                "amqp==5.0.5",
+                "argparse==1.4.0",
+                // ...
+            ],
+            "os_info": [
+                "NAME=\"Ubuntu\"",
+                "VERSION=\"18.04.5 LTS (Bionic Beaver)\"",
+                "ID=ubuntu",
+                "ID_LIKE=debian",
+                "PRETTY_NAME=\"Ubuntu 18.04.5 LTS\"",
+                "VERSION_ID=\"18.04\"",
+                "HOME_URL=\"https://www.ubuntu.com/\"",
+                "SUPPORT_URL=\"https://help.ubuntu.com/\"",
+                "BUG_REPORT_URL=\"https://bugs.launchpad.net/ubuntu/\"",
+                "PRIVACY_POLICY_URL=\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\"",
+                "VERSION_CODENAME=bionic",
+                "UBUNTU_CODENAME=bionic",
+                ""
+            ],
+            "hostname": "coriolis-replica-cron",
+            "ip_addresses": [
+                {
+                    "eth0": {
+                        "ipv4": [
+                            {
+                                "addr": "10.107.9.8",
+                                "netmask": "255.255.254.0",
+                                "broadcast": "10.107.9.255"
+                            }
+                        ],
+                        "ipv6": [
+                            {
+                                "addr": "fe80::250:56ff:feb9:73a%eth0",
+                                "netmask": "ffff:ffff:ffff:ffff::/64"
+                            }
+                        ]
+                    }
+                },
+                {
+                    "docker0": {
+                        "ipv4": [
+                            {
+                                "addr": "172.17.0.1",
+                                "netmask": "255.255.0.0",
+                                "broadcast": "172.17.255.255"
+                            }
+                        ],
+                        "ipv6": [
+                            {
+                                "addr": "fe80::42:61ff:fe79:de6f%docker0",
+                                "netmask": "ffff:ffff:ffff:ffff::/64"
+                            }
+                        ]
+                    }
+                }
+            ]
+        }
+        // ...
+    ]
+}

+ 2 - 1
coriolis/api-refs/api_samples/endpoint/endpoint-get-resp-secret.json

@@ -12,6 +12,7 @@
     },
     "type": "openstack",
     "name": "devstack",
-    "description": null
+    "description": null,
+    "mapped_regions": ["public"]
   }
 }

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

@@ -9,7 +9,7 @@
       "id": "3ba07383-6726-4bf8-82d5-d5ce871519bc",
       "flavor_name": "m1.small",
       "os_type": "linux",
-      "instance_name": "ubuntu-xenial"
+      "firmware_type": "BIOS"
     },
     {
       "num_cpu": 4,
@@ -20,7 +20,7 @@
       "id": "e93f6d38-9240-4dec-b738-61ca225aba6a",
       "flavor_name": "windows2012",
       "os_type": "windows",
-      "instance_name": "windows"
+      "firmware_type": "EFI"
     }
   ]
 }

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

@@ -36,6 +36,6 @@
       "controllers": []
     },
     "os_type": "linux",
-    "instance_name": "ubuntu-xenial"
+    "firmware_type": "BIOS"
   }
 }

+ 6 - 3
coriolis/api-refs/api_samples/endpoint/endpoint-list-resp.json

@@ -22,7 +22,8 @@
       },
       "type": "openstack",
       "name": "Endpoint Name Example",
-      "description": "Example Endpoint Description"
+      "description": "Example Endpoint Description",
+      "mapped_regions": ["public"]
     },
     {
       "created_at": "2019-07-09T07:04:13.000000",
@@ -37,7 +38,8 @@
       },
       "type": "oci",
       "name": "oci",
-      "description": null
+      "description": null,
+      "mapped_regions": []
     },
     {
       "created_at": "2019-07-09T06:5826.000000",
@@ -52,7 +54,8 @@
       },
       "type": "openstack",
       "name": "devstack",
-      "description": null
+      "description": null,
+      "mapped_regions": []
     }
   ]
 }

+ 23 - 2
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-create-req.json

@@ -22,10 +22,31 @@
       "neutron_interface_name": "publicURL",
       "glance_interface_name": "publicURL",
       "cinder_interface_name": "publicURL",
-      "swift_interface_name": "publicURL"
+      "swift_interface_name": "publicURL",
+      "ceph_options": {
+        "ceph_conf_file": [
+          "[global]",
+          "uth_supported = cephx",
+          "keyring = /etc/ceph/$cluster.$name.keyring",
+          "mon host = 10.107.3.219 10.107.3.222 10.107.3.239",
+          "log to syslog = false",
+          "err to syslog = false",
+          "clog to syslog = false",
+          "[client]"
+        ],
+        "ceph_username": "cinder-ceph",
+        "ceph_keyring_file": [
+          "[client.cinder-ceph]",
+          "key = AQCXsL9f7UCQBhAAqiKtO+BrngtjkqfjzyJyfg=="
+        ],
+        "ceph_pool_name": "cinder-ceph",
+        "ceph_cluster_name": "cinder-ceph",
+        "ceph_connection_timeout": 0
+      }
     },
     "type": "openstack",
     "name": "Endpoint Name Example",
-    "description": "Example Endpoint Description"
+    "description": "Example Endpoint Description",
+    "mapped_regions": ["public"]
   }
 }

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

@@ -0,0 +1,63 @@
+{
+    "destination_minion_pool_options": [
+        {
+            "name": "migr_network",
+            "values": [
+                "ext-net",
+                "admin-net"
+            ],
+            "config_default": null
+        },
+        {
+            "name": "migr_fip_pool_name",
+            "values": [
+                {
+                    "name": "external-network-private/external-private",
+                    "id": "56471574-bbe8-4739-a103-1918198ca73d/8101d1a8-1e3e-423e-827d-6d7a5b6ba7be"
+                },
+                {
+                    "name": "ext-net/ext-subnet",
+                    "id": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "migr_image",
+            "values": [
+                {
+                    "id": "c729f7b4-bac7-473f-a6e2-827dc01486f4",
+                    "name": "focal",
+                    "os_type": "unknown"
+                },
+                {
+                    "id": "d58f4bdf-bc45-4851-88e8-3cffc19a733a",
+                    "name": "CentOS8",
+                    "os_type": "linux"
+                },
+                {
+                    "id": "64df7925-fc27-4fce-80ed-63d85918064f",
+                    "name": "WS2016",
+                    "os_type": "windows"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "migr_flavor_name",
+            "values": [
+                "m1.small",
+                "m1.medium"
+            ],
+            "config_default": "m1.small"
+        },
+        {
+            "name": "migr_worker_volume_type",
+            "values": [
+                "coriolis-tier",
+                "__DEFAULT__"
+            ],
+            "config_default": null
+        }
+    ]
+}

+ 11 - 2
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-get-resp.json

@@ -29,10 +29,19 @@
       "neutron_interface_name": "publicURL",
       "glance_interface_name": "publicURL",
       "cinder_interface_name": "publicURL",
-      "swift_interface_name": "publicURL"
+      "swift_interface_name": "publicURL",
+      "ceph_options": {
+        "ceph_conf_file": "/etc/ceph/ceph.conf",
+        "ceph_username": "root",
+        "ceph_keyring_file": "/home/ubuntu/keyring_file",
+        "ceph_pool_name": "pool_name",
+        "ceph_cluster_name": "cluster_name",
+        "ceph_connection_timeout": "1200"
+      }
     },
     "type": "openstack",
     "name": "Endpoint Name Example",
-    "description": "Example Endpoint Description"
+    "description": "Example Endpoint Description",
+    "mapped_regions": ["public"]
   }
 }

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

@@ -0,0 +1,58 @@
+{
+    "source_minion_pool_options": [
+        {
+            "name": "migr_network",
+            "values": [
+                "ext-net",
+                "admin-net"
+            ],
+            "config_default": null
+        },
+        {
+            "name": "migr_fip_pool_name",
+            "values": [
+                {
+                    "name": "external-network-private/external-private",
+                    "id": "56471574-bbe8-4739-a103-1918198ca73d/8101d1a8-1e3e-423e-827d-6d7a5b6ba7be"
+                },
+                {
+                    "name": "ext-net/ext-subnet",
+                    "id": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "migr_image",
+            "values": [
+                {
+                    "id": "c729f7b4-bac7-473f-a6e2-827dc01486f4",
+                    "name": "focal",
+                    "os_type": "unknown"
+                },
+                {
+                    "id": "64df7925-fc27-4fce-80ed-63d85918064f",
+                    "name": "WS2016",
+                    "os_type": "windows"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "migr_flavor_name",
+            "values": [
+                "m1.small",
+                "m1.medium"
+            ],
+            "config_default": "m1.small"
+        },
+        {
+            "name": "migr_worker_volume_type",
+            "values": [
+                "coriolis-tier",
+                "__DEFAULT__"
+            ],
+            "config_default": null
+        }
+    ]
+}

+ 91 - 23
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-source-options-list-resp.json

@@ -1,25 +1,93 @@
 {
-  "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"
-    }
-  ]
+    "source_options": [
+        {
+            "name": "export_image",
+            "values": [
+                {
+                    "name": "ws2008",
+                    "id": "5051a788-f133-4a84-af64-fd35e4c36f24"
+                },
+                {
+                    "name": "debian8",
+                    "id": "f298bc1b-a631-47cc-beef-ffd13e572226"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "export_network",
+            "values": [
+                {
+                    "name": "ext-net",
+                    "id": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8"
+                },
+                {
+                    "name": "admin-net",
+                    "id": "ea7d22c7-99ab-423f-b291-47d10a3bdc2e"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "export_flavor_name",
+            "values": [
+                {
+                    "name": "m1.small",
+                    "id": "c1910582-1911-4d00-86a7-b44e2d49ef8b"
+                },
+                {
+                    "name": "m1.medium",
+                    "id": "d7fcfc49-300c-40fb-9f8d-0cc814fd1125"
+                }
+            ],
+            "config_default": "m1.small"
+        },
+        {
+            "name": "export_fip_pool_name",
+            "values": [
+                {
+                    "name": "ext-net/ext-subnet",
+                    "id": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "export_worker_volume_type",
+            "values": [
+                {
+                    "id": "0ee0c11d-de6a-4904-b55c-b2d9137775a2",
+                    "name": "coriolis-tier"
+                },
+                {
+                    "id": "24d7eaab-c930-434b-a519-292e787937d5",
+                    "name": "__DEFAULT__"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "export_interim_volume_type",
+            "values": [
+                {
+                    "id": "0ee0c11d-de6a-4904-b55c-b2d9137775a2",
+                    "name": "coriolis-tier"
+                },
+                {
+                    "id": "24d7eaab-c930-434b-a519-292e787937d5",
+                    "name": "__DEFAULT__"
+                }
+            ],
+            "config_default": null
+        },
+        {
+            "name": "swift_volume_backups_container",
+            "values": [
+                "container",
+                "coriolis",
+                "volumebackups"
+            ],
+            "config_default": "coriolis"
+        }
+    ]
 }

+ 23 - 2
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-update-req.json

@@ -22,9 +22,30 @@
       "user_domain_id": "default",
       "allow_untrusted": false,
       "identity_api_version": 3,
-      "neutron_interface_name": "publicURL"
+      "neutron_interface_name": "publicURL",
+      "ceph_options": {
+        "ceph_conf_file": [
+          "[global]",
+          "uth_supported = cephx",
+          "keyring = /etc/ceph/$cluster.$name.keyring",
+          "mon host = 10.107.3.219 10.107.3.222 10.107.3.239",
+          "log to syslog = false",
+          "err to syslog = false",
+          "clog to syslog = false",
+          "[client]"
+        ],
+        "ceph_username": "cinder-ceph",
+        "ceph_keyring_file": [
+          "[client.cinder-ceph]",
+          "key = AQCXsL9f7UCQBhAAqiKtO+BrngtjkqfjzyJyfg=="
+        ],
+        "ceph_pool_name": "cinder-ceph",
+        "ceph_cluster_name": "cinder-ceph",
+        "ceph_connection_timeout": 0
+      }
     },
     "name": "Updated Name",
-    "description": "Updated description"
+    "description": "Updated description",
+    "mapped_regions": ["public"]
   }
 }

+ 23 - 2
coriolis/api-refs/api_samples/endpoint/openstack-endpoint-update-resp.json

@@ -29,10 +29,31 @@
       "user_domain_id": "default",
       "allow_untrusted": false,
       "identity_api_version": 3,
-      "neutron_interface_name": "publicURL"
+      "neutron_interface_name": "publicURL",
+      "ceph_options": {
+        "ceph_conf_file": [
+          "[global]",
+          "uth_supported = cephx",
+          "keyring = /etc/ceph/$cluster.$name.keyring",
+          "mon host = 10.107.3.219 10.107.3.222 10.107.3.239",
+          "log to syslog = false",
+          "err to syslog = false",
+          "clog to syslog = false",
+          "[client]"
+        ],
+        "ceph_username": "cinder-ceph",
+        "ceph_keyring_file": [
+          "[client.cinder-ceph]",
+          "key = AQCXsL9f7UCQBhAAqiKtO+BrngtjkqfjzyJyfg=="
+        ],
+        "ceph_pool_name": "cinder-ceph",
+        "ceph_cluster_name": "cinder-ceph",
+        "ceph_connection_timeout": 0
+      }
     },
     "type": "openstack",
     "name": "Updated Name",
-    "description": "Updated description"
+    "description": "Updated description",
+    "mapped_regions": ["public"]
   }
 }

+ 2 - 1
coriolis/api-refs/api_samples/migration/migration-from-replica-req.json

@@ -3,6 +3,7 @@
     "clone_disks": true,
     "force": false,
     "replica_id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
-    "skip_os_morphing": false
+    "skip_os_morphing": false,
+    "instance_osmorphing_minion_pool_mappings": {"instance1": "morphing_pool"}
   }
 }

+ 16 - 2
coriolis/api-refs/api_samples/migration/openstack-migration-create-req.json

@@ -4,7 +4,7 @@
       "private": "provider-net"
     },
     "origin_endpoint_id": "5a276274-f964-4c07-aec4-01a7971d9eea",
-    "instances": ["ubuntu-xenial"],
+    "instances": ["ubuntu-xenial", "windows2012r2"],
     "storage_mappings": {},
     "destination_environment": {
       "storage_mappings": {
@@ -21,6 +21,20 @@
       "set_dhcp": true
     },
     "skip_os_morphing": false,
-    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3"
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+    "origin_minion_pool_id": null,
+    "destination_minion_pool_id": "a5e00fd3-42ac-4570-898b-5bbee0ff4acb",
+    "instance_osmorphing_minion_pool_mappings": {},
+    "shutdown_instances": false,
+    "replication_count": 2,
+    "user_scripts": {
+      "global": {
+        "linux": "echo 'bash script to be run for every migrated Linux instance'",
+        "windows": "echo 'powershell script to be run for every migrated Windows instance'"
+      },
+      "instances": {
+        "ubuntu-xenial": "echo 'script to be run only on this instance'"
+      }
+    }
   }
 }

+ 16 - 1
coriolis/api-refs/api_samples/migration/openstack-migration-create-resp.json

@@ -22,7 +22,7 @@
         "set_dhcp": true
     },
     "type": "migration",
-    "instances": ["windows"],
+    "instances": ["ubuntu-xenial", "windows2012r2"],
     "reservation_id": null,
     "notes": "",
     "origin_endpoint_id": "b59051a2-bbf3-4fb7-a1eb-539db55339dc",
@@ -34,6 +34,21 @@
     "id": "1e31443d-5eb1-403f-9f15-c67a2c372bc3",
     "replica_id": null,
     "status": "RUNNING",
+    "last_execution_status": "UNEXECUTED",
+    "origin_minion_pool_id": null,
+    "destination_minion_pool_id": "a5e00fd3-42ac-4570-898b-5bbee0ff4acb",
+    "instance_osmorphing_minion_pool_mappings": {},
+    "shutdown_instances": false,
+    "replication_count": 2,
+    "user_scripts": {
+      "global": {
+        "linux": "echo 'bash script to be run for every migrated Linux instance'",
+        "windows": "echo 'powershell script to be run for every migrated Windows instance'"
+      },
+      "instances": {
+        "ubuntu-xenial": "echo 'script to be run only on this instance'"
+      }
+    },
     "tasks": [
       {
         "created_at": "2019-07-11T08:40:02.000000",

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

@@ -34,6 +34,12 @@
     "id": "480a4ba6-db63-43cb-a91b-4ef65665cd26",
     "replica_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
     "status": "RUNNING",
+    "last_execution_status": "UNEXECUTED",
+    "origin_minion_pool_id": null,
+    "destination_minion_pool_id": "a5e00fd3-42ac-4570-898b-5bbee0ff4acb",
+    "instance_osmorphing_minion_pool_mappings": {"instance1": "morphing_pool"},
+    "shutdown_instances": false,
+    "replication_count": 2,
     "tasks": [
       {
         "created_at": "2019-07-11T13:01:03.000000",

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

@@ -34,6 +34,12 @@
     "id": "1e31443d-5eb1-403f-9f15-c67a2c372bc3",
     "replica_id": null,
     "status": "COMPLETED",
+    "last_execution_status": "COMPLETED",
+    "origin_minion_pool_id": null,
+    "destination_minion_pool_id": "a5e00fd3-42ac-4570-898b-5bbee0ff4acb",
+    "instance_osmorphing_minion_pool_mappings": {},
+    "shutdown_instances": false,
+    "replication_count": 2,
     "tasks": [
       {
         "created_at": "2019-07-10T07:24:09.000000",

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

@@ -55,6 +55,12 @@
       "id": "65bd70e4-c4ab-4f60-9d78-779c0b58c2ab",
       "replica_id": null,
       "status": "ERROR",
+      "last_execution_status": "COMPLETED",
+      "origin_minion_pool_id": null,
+      "destination_minion_pool_id": "a5e00fd3-42ac-4570-898b-5bbee0ff4acb",
+      "instance_osmorphing_minion_pool_mappings": {},
+      "shutdown_instances": false,
+      "replication_count": 2,
       "tasks": [
         {
           "created_at": "2019-08-20T12:32:31.000000",
@@ -335,6 +341,11 @@
       "base_id": "9566af98-2c89-4969-ad73-a416e8a8a5ce",
       "user_id": "7cf9b4745d514517b3eae440438136bc",
       "project_id": "ffc16db2011e41f28152897c279b6bcc",
+      "last_execution_status": "COMPLETED",
+      "origin_minion_pool_id": null,
+      "destination_minion_pool_id": "a5e00fd3-42ac-4570-898b-5bbee0ff4acb",
+      "instance_osmorphing_minion_pool_mappings": {},
+      "shutdown_instances": false,
       "destination_environment": {
         "network_map": {
           "VM Network": "0e83bf34-9cc7-4580-9189-a9d9c3c7abb8"
@@ -426,6 +437,7 @@
       "id": "9566af98-2c89-4969-ad73-a416e8a8a5ce",
       "replica_id": "96d71f92-1cbd-48cb-98aa-06ce8cbf89cf",
       "status": "COMPLETED",
+      "replication_count": 2,
       "tasks": [
         {
           "created_at": "2019-08-22T08:29:33.000000",

+ 3 - 0
coriolis/api-refs/api_samples/minion_pool/minion-pool-allocate-req.json

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

+ 3 - 0
coriolis/api-refs/api_samples/minion_pool/minion-pool-deallocate-req.json

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

+ 108 - 0
coriolis/api-refs/api_samples/minion_pool/minion-pool-list-resp.json

@@ -0,0 +1,108 @@
+{
+    "minion_pools": [
+        {
+            "id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+            "name": "source_pool",
+            "notes": "",
+            "endpoint_id": "8e9b6b0b-ef3b-4127-ac32-a18a30e67749",
+            "environment_options": {
+                "list_all_destination_networks": false,
+                "migr_worker_use_config_drive": false,
+                "migr_image": "bionic",
+                "migr_network": "admin-net",
+                "migr_flavor_name": "m1.small",
+                "migr_worker_use_fip": true,
+                "migr_worker_boot_from_volume": false,
+                "migr_fip_pool_name": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+            },
+            "os_type": "linux",
+            "maintenance_trust_id": "525a0b79388c43f38d23770a57038780",
+            "platform": "source",
+            "created_at": "2021-01-29T11:18:24.000000",
+            "updated_at": "2021-01-29T11:51:05.000000",
+            "deleted_at": null,
+            "deleted": "0",
+            "shared_resources": {},
+            "status": "ALLOCATED",
+            "minimum_minions": 1,
+            "maximum_minions": 3,
+            "minion_max_idle_time": 600,
+            "minion_retention_strategy": "poweroff",
+            "minion_machines": [
+                {
+                    "id": "ecb4d684-9339-4ad1-9116-96ddb11d5bb6",
+                    "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+                    "project_id": "f801306887294bf0b98ffc05601f22db",
+                    "created_at": "2021-01-29T11:49:38.000000",
+                    "updated_at": "2021-01-29T11:51:05.000000",
+                    "deleted_at": null,
+                    "deleted": "0",
+                    "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                    "allocation_status": "AVAILABLE",
+                    "power_status": "POWERED_ON",
+                    "connection_info": {
+                        "ip": "10.107.5.65",
+                        "port": 22,
+                        "username": "cloudbase",
+                        "password": null,
+                        "pkey": "***"
+                    },
+                    "allocated_action": null,
+                    "last_used_at": "2021-01-29T11:51:05.000000",
+                    "backup_writer_connection_info": {
+                        "backend": "ssh_backup_writer",
+                        "connection_details": {
+                            "ip": "10.107.5.65",
+                            "port": 22,
+                            "username": "cloudbase",
+                            "password": null,
+                            "pkey": "***"
+                        }
+                    },
+                    "provider_properties": {
+                        "instance_id": "13971ab6-f523-4290-958f-6f5d8edf180f",
+                        "keypair_name": "coriolispool540a29dfmachineecb4d68493394ad1911696ddb112fe9eb68keypair",
+                        "port_id": "14c2c8b8-a0c2-481a-8687-b0fbbd62e436",
+                        "data_transfer_mechanism": "SSH",
+                        "secgroup_id": "5750cecb-2354-413e-87ae-14dc50eb2459",
+                        "floating_ip_id": "9f3a3ab2-42d6-4d8a-8f26-71f8bd380ae6",
+                        "pool_identifier": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                        "minion_identifier": "ecb4d684-9339-4ad1-9116-96ddb11d5bb6",
+                        "pool_shared_resources": {},
+                        "pool_os_type": "linux"
+                    }
+                }
+            ]
+        },
+        {
+            "id": "be74a17c-5476-4cf8-93f7-dd58c700de70",
+            "name": "destination_pool",
+            "notes": null,
+            "endpoint_id": "a471879c-8138-4440-ad0a-7c201d4ed7df",
+            "environment_options": {
+                "data_transfer_mechanism": "HTTPS",
+                "migr_flavor_name": "m1.medium",
+                "migr_image": "64df7925-fc27-4fce-80ed-63d85918064f",
+                "migr_network": "admin-net",
+                "migr_worker_boot_from_volume": false,
+                "migr_worker_use_config_drive": false,
+                "migr_worker_use_fip": false,
+                "list_all_destination_networks": true
+            },
+            "os_type": "windows",
+            "maintenance_trust_id": "71718e42267f44c5988beac7260159db",
+            "platform": "destination",
+            "created_at": "2021-01-29T11:55:55.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "shared_resources": null,
+            "status": "DEALLOCATED",
+            "minimum_minions": 1,
+            "maximum_minions": 1,
+            "minion_max_idle_time": 3600,
+            "minion_retention_strategy": "delete",
+            "minion_machines": []
+        }
+    ]
+}

+ 3 - 0
coriolis/api-refs/api_samples/minion_pool/minion-pool-refresh-req.json

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

+ 74 - 0
coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-allocate-resp.json

@@ -0,0 +1,74 @@
+{
+    "minion_pool": {
+        "created_at": "2021-01-29T11:18:24.000000",
+        "updated_at": "2021-01-29T11:49:07.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+        "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+        "project_id": "f801306887294bf0b98ffc05601f22db",
+        "maintenance_trust_id": "525a0b79388c43f38d23770a57038780",
+        "name": "source_pool",
+        "notes": "",
+        "endpoint_id": "8e9b6b0b-ef3b-4127-ac32-a18a30e67749",
+        "os_type": "linux",
+        "platform": "source",
+        "environment_options": {
+            "list_all_destination_networks": false,
+            "migr_worker_use_config_drive": false,
+            "migr_image": "bionic",
+            "migr_network": "admin-net",
+            "migr_flavor_name": "m1.small",
+            "migr_worker_use_fip": true,
+            "migr_worker_boot_from_volume": false,
+            "migr_fip_pool_name": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+        },
+        "status": "IN_MAINTENANCE",
+        "shared_resources": null,
+        "minimum_minions": 1,
+        "maximum_minions": 3,
+        "minion_max_idle_time": 600,
+        "minion_retention_strategy": "poweroff",
+        "minion_machines": [],
+        "events": [
+            // ...
+            {
+                "created_at": "2021-01-29T11:49:07.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "e08c4162-2ff3-4540-8bc4-da17a5105158",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "level": "INFO",
+                "index": 13,
+                "message": "Begun minion pool allocation process"
+            }
+        ],
+        "progress_updates": [
+            {
+                "created_at": "2021-01-29T11:41:01.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "5133f40d-5b14-488d-9e7b-eb091d42341c",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "index": 0,
+                "current_step": 0,
+                "total_steps": 0,
+                "message": "Compiling minion pool options"
+            },
+            {
+                "created_at": "2021-01-29T11:47:27.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "02ed776d-417c-4bfe-b451-a508ffacdb83",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "index": 1,
+                "current_step": 0,
+                "total_steps": 0,
+                "message": "There are no shared minion pool resources requiring teardown for OpenStack"
+            }
+        ]
+    }
+}

+ 23 - 0
coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-create-req.json

@@ -0,0 +1,23 @@
+{
+    "minion_pool": {
+        "name": "source_pool",
+        "endpoint_id": "8e9b6b0b-ef3b-4127-ac32-a18a30e67749",
+        "os_type": "linux",
+        "platform": "source",
+        "minimum_minions": 1,
+        "maximum_minions": 1,
+        "minion_max_idle_time": 1,
+        "minion_retention_strategy": "delete",
+        "notes": "",
+        "skip_allocation": true,
+        "environment_options": {
+            "list_all_destination_networks": false,
+            "migr_worker_use_config_drive": false,
+            "migr_image": "bionic",
+            "migr_network": "admin-net",
+            "migr_flavor_name": "m1.small",
+            "migr_worker_use_fip": true,
+            "migr_worker_boot_from_volume": false
+        }
+    }
+}

+ 47 - 0
coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-create-resp.json

@@ -0,0 +1,47 @@
+{
+    "minion_pool": {
+        "created_at": "2021-01-29T11:18:24.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+        "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+        "project_id": "f801306887294bf0b98ffc05601f22db",
+        "maintenance_trust_id": "525a0b79388c43f38d23770a57038780",
+        "name": "source_pool",
+        "notes": "",
+        "endpoint_id": "8e9b6b0b-ef3b-4127-ac32-a18a30e67749",
+        "os_type": "linux",
+        "platform": "source",
+        "environment_options": {
+            "list_all_destination_networks": false,
+            "migr_worker_use_config_drive": false,
+            "migr_image": "bionic",
+            "migr_network": "admin-net",
+            "migr_flavor_name": "m1.small",
+            "migr_worker_use_fip": true,
+            "migr_worker_boot_from_volume": false
+        },
+        "status": "DEALLOCATED",
+        "shared_resources": null,
+        "minimum_minions": 1,
+        "maximum_minions": 1,
+        "minion_max_idle_time": 1,
+        "minion_retention_strategy": "delete",
+        "minion_machines": [],
+        "events": [
+            {
+                "created_at": "2021-01-29T11:18:24.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "9999e14b-53e1-4528-a59d-0194748c4a87",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "level": "INFO",
+                "index": 0,
+                "message": "Successfully added minion pool to the DB"
+            }
+        ],
+        "progress_updates": []
+    }
+}

+ 95 - 0
coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-deallocate-resp.json

@@ -0,0 +1,95 @@
+{
+    "minion_pool": {
+        "created_at": "2021-01-29T11:18:24.000000",
+        "updated_at": "2021-01-29T12:03:56.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+        "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+        "project_id": "f801306887294bf0b98ffc05601f22db",
+        "maintenance_trust_id": "525a0b79388c43f38d23770a57038780",
+        "name": "source_pool",
+        "notes": "",
+        "endpoint_id": "8e9b6b0b-ef3b-4127-ac32-a18a30e67749",
+        "os_type": "linux",
+        "platform": "source",
+        "environment_options": {
+            "list_all_destination_networks": false,
+            "migr_worker_use_config_drive": false,
+            "migr_image": "bionic",
+            "migr_network": "admin-net",
+            "migr_flavor_name": "m1.small",
+            "migr_worker_use_fip": true,
+            "migr_worker_boot_from_volume": false,
+            "migr_fip_pool_name": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+        },
+        "status": "IN_MAINTENANCE",
+        "shared_resources": {},
+        "minimum_minions": 1,
+        "maximum_minions": 3,
+        "minion_max_idle_time": 600,
+        "minion_retention_strategy": "poweroff",
+        "minion_machines": [
+            {
+                "created_at": "2021-01-29T11:49:38.000000",
+                "updated_at": "2021-01-29T12:02:39.000000",
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "ecb4d684-9339-4ad1-9116-96ddb11d5bb6",
+                "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+                "project_id": "f801306887294bf0b98ffc05601f22db",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "allocation_status": "AVAILABLE",
+                "allocated_action": null,
+                "power_status": "POWERED_ON",
+                "last_used_at": "2021-01-29T11:51:05.000000",
+                "connection_info": {
+                    "ip": "10.107.5.65",
+                    "port": 22,
+                    "username": "cloudbase",
+                    "password": null,
+                    "pkey": "***"
+                },
+                "backup_writer_connection_info": {
+                    "backend": "ssh_backup_writer",
+                    "connection_details": {
+                        "ip": "10.107.5.65",
+                        "port": 22,
+                        "username": "cloudbase",
+                        "password": null,
+                        "pkey": "***"
+                    }
+                },
+                "provider_properties": {
+                    "instance_id": "13971ab6-f523-4290-958f-6f5d8edf180f",
+                    "keypair_name": "coriolispool540a29dfmachineecb4d68493394ad1911696ddb112fe9eb68keypair",
+                    "port_id": "14c2c8b8-a0c2-481a-8687-b0fbbd62e436",
+                    "data_transfer_mechanism": "SSH",
+                    "secgroup_id": "5750cecb-2354-413e-87ae-14dc50eb2459",
+                    "floating_ip_id": "9f3a3ab2-42d6-4d8a-8f26-71f8bd380ae6",
+                    "pool_identifier": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                    "minion_identifier": "ecb4d684-9339-4ad1-9116-96ddb11d5bb6",
+                    "pool_shared_resources": {},
+                    "pool_os_type": "linux"
+                }
+            }
+        ],
+        "events": [
+            // ...
+            {
+                "created_at": "2021-01-29T12:03:56.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "6048989e-f49c-4562-967d-764ae5f9bd69",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "level": "INFO",
+                "index": 29,
+                "message": "Begun minion pool deallocation process"
+            }
+        ],
+        "progress_updates": [
+            // ...
+        ]
+    }
+}

+ 95 - 0
coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-refresh-resp.json

@@ -0,0 +1,95 @@
+{
+    "minion_pool": {
+        "created_at": "2021-01-29T11:18:24.000000",
+        "updated_at": "2021-01-29T11:51:05.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+        "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+        "project_id": "f801306887294bf0b98ffc05601f22db",
+        "maintenance_trust_id": "525a0b79388c43f38d23770a57038780",
+        "name": "source_pool",
+        "notes": "",
+        "endpoint_id": "8e9b6b0b-ef3b-4127-ac32-a18a30e67749",
+        "os_type": "linux",
+        "platform": "source",
+        "environment_options": {
+            "list_all_destination_networks": false,
+            "migr_worker_use_config_drive": false,
+            "migr_image": "bionic",
+            "migr_network": "admin-net",
+            "migr_flavor_name": "m1.small",
+            "migr_worker_use_fip": true,
+            "migr_worker_boot_from_volume": false,
+            "migr_fip_pool_name": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+        },
+        "status": "ALLOCATED",
+        "shared_resources": {},
+        "minimum_minions": 1,
+        "maximum_minions": 3,
+        "minion_max_idle_time": 600,
+        "minion_retention_strategy": "poweroff",
+        "minion_machines": [
+            {
+                "created_at": "2021-01-29T11:49:38.000000",
+                "updated_at": "2021-01-29T12:02:23.000000",
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "ecb4d684-9339-4ad1-9116-96ddb11d5bb6",
+                "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+                "project_id": "f801306887294bf0b98ffc05601f22db",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "allocation_status": "HEALTHCHECKING",
+                "allocated_action": null,
+                "power_status": "POWERED_ON",
+                "last_used_at": "2021-01-29T11:51:05.000000",
+                "connection_info": {
+                    "ip": "10.107.5.65",
+                    "port": 22,
+                    "username": "cloudbase",
+                    "password": null,
+                    "pkey": "***"
+                },
+                "backup_writer_connection_info": {
+                    "backend": "ssh_backup_writer",
+                    "connection_details": {
+                        "ip": "10.107.5.65",
+                        "port": 22,
+                        "username": "cloudbase",
+                        "password": null,
+                        "pkey": "***"
+                    }
+                },
+                "provider_properties": {
+                    "instance_id": "13971ab6-f523-4290-958f-6f5d8edf180f",
+                    "keypair_name": "coriolispool540a29dfmachineecb4d68493394ad1911696ddb112fe9eb68keypair",
+                    "port_id": "14c2c8b8-a0c2-481a-8687-b0fbbd62e436",
+                    "data_transfer_mechanism": "SSH",
+                    "secgroup_id": "5750cecb-2354-413e-87ae-14dc50eb2459",
+                    "floating_ip_id": "9f3a3ab2-42d6-4d8a-8f26-71f8bd380ae6",
+                    "pool_identifier": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                    "minion_identifier": "ecb4d684-9339-4ad1-9116-96ddb11d5bb6",
+                    "pool_shared_resources": {},
+                    "pool_os_type": "linux"
+                }
+            }
+        ],
+        "events": [
+            // ...
+            {
+                "created_at": "2021-01-29T12:02:23.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "cde729b2-b1c6-41d7-907c-7cc39bc5ed7a",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "level": "INFO",
+                "index": 26,
+                "message": "Begun minion pool refreshing process"
+            }
+        ],
+        "progress_updates": [
+            // ...
+        ]
+    }
+}

+ 130 - 0
coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-show.json

@@ -0,0 +1,130 @@
+{
+    "minion_pool": {
+        "created_at": "2021-01-29T11:18:24.000000",
+        "updated_at": "2021-01-29T11:51:05.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+        "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+        "project_id": "f801306887294bf0b98ffc05601f22db",
+        "maintenance_trust_id": "525a0b79388c43f38d23770a57038780",
+        "name": "source_pool",
+        "notes": "",
+        "endpoint_id": "8e9b6b0b-ef3b-4127-ac32-a18a30e67749",
+        "os_type": "linux",
+        "platform": "source",
+        "environment_options": {
+            "list_all_destination_networks": false,
+            "migr_worker_use_config_drive": false,
+            "migr_image": "bionic",
+            "migr_network": "admin-net",
+            "migr_flavor_name": "m1.small",
+            "migr_worker_use_fip": true,
+            "migr_worker_boot_from_volume": false,
+            "migr_fip_pool_name": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+        },
+        "status": "ALLOCATED",
+        "shared_resources": {},
+        "minimum_minions": 1,
+        "maximum_minions": 3,
+        "minion_max_idle_time": 600,
+        "minion_retention_strategy": "poweroff",
+        "minion_machines": [
+            {
+                "created_at": "2021-01-29T11:49:38.000000",
+                "updated_at": "2021-01-29T11:51:05.000000",
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "ecb4d684-9339-4ad1-9116-96ddb11d5bb6",
+                "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+                "project_id": "f801306887294bf0b98ffc05601f22db",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "allocation_status": "AVAILABLE",
+                "allocated_action": null,
+                "power_status": "POWERED_ON",
+                "last_used_at": "2021-01-29T11:51:05.000000",
+                "connection_info": {
+                    "ip": "10.107.5.65",
+                    "port": 22,
+                    "username": "cloudbase",
+                    "password": null,
+                    "pkey": "***"
+                },
+                "backup_writer_connection_info": {
+                    "backend": "ssh_backup_writer",
+                    "connection_details": {
+                        "ip": "10.107.5.65",
+                        "port": 22,
+                        "username": "cloudbase",
+                        "password": null,
+                        "pkey": "***"
+                    }
+                },
+                "provider_properties": {
+                    "instance_id": "13971ab6-f523-4290-958f-6f5d8edf180f",
+                    "keypair_name": "coriolispool540a29dfmachineecb4d68493394ad1911696ddb112fe9eb68keypair",
+                    "port_id": "14c2c8b8-a0c2-481a-8687-b0fbbd62e436",
+                    "data_transfer_mechanism": "SSH",
+                    "secgroup_id": "5750cecb-2354-413e-87ae-14dc50eb2459",
+                    "floating_ip_id": "9f3a3ab2-42d6-4d8a-8f26-71f8bd380ae6",
+                    "pool_identifier": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                    "minion_identifier": "ecb4d684-9339-4ad1-9116-96ddb11d5bb6",
+                    "pool_shared_resources": {},
+                    "pool_os_type": "linux"
+                }
+            }
+        ],
+        "events": [
+            {
+                "created_at": "2021-01-29T11:18:24.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "9999e14b-53e1-4528-a59d-0194748c4a87",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "level": "INFO",
+                "index": 0,
+                "message": "Successfully added minion pool to the DB"
+            },
+            {
+                "created_at": "2021-01-29T11:34:53.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "33309ecf-6ecc-4452-9007-fa25e1499ce6",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "level": "INFO",
+                "index": 1,
+                "message": "Successfully updated minion pool properties"
+            }
+            // ...
+        ],
+        "progress_updates": [
+            {
+                "created_at": "2021-01-29T11:41:01.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "5133f40d-5b14-488d-9e7b-eb091d42341c",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "index": 0,
+                "current_step": 0,
+                "total_steps": 0,
+                "message": "Compiling minion pool options"
+            },
+            {
+                "created_at": "2021-01-29T11:47:27.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "02ed776d-417c-4bfe-b451-a508ffacdb83",
+                "pool_id": "540a29df-94e4-4a65-bf3b-40ea18929c40",
+                "index": 1,
+                "current_step": 0,
+                "total_steps": 0,
+                "message": "There are no shared minion pool resources requiring teardown for OpenStack"
+            }
+            // ...
+        ]
+    }
+}

+ 21 - 0
coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-update-req.json

@@ -0,0 +1,21 @@
+{
+    "minion_pool": {
+        "name": "dest_pool_linux",
+        "minimum_minions": 2,
+        "maximum_minions": 3,
+        "minion_max_idle_time": 600,
+        "minion_retention_strategy": "poweroff",
+        "os_type": "linux",
+        "notes": "Converted from Windows Minion Pool",
+        "environment_options": {
+            "list_all_destination_networks": false,
+            "migr_worker_use_config_drive": false,
+            "migr_image": "bionic",
+            "migr_network": "admin-net",
+            "migr_flavor_name": "m1.small",
+            "migr_worker_use_fip": true,
+            "migr_worker_boot_from_volume": false,
+            "migr_fip_pool_name": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf"
+        }
+    }
+}

+ 60 - 0
coriolis/api-refs/api_samples/minion_pool/openstack-minion-pool-update-resp.json

@@ -0,0 +1,60 @@
+{
+    "minion_pool": {
+        "created_at": "2021-01-29T11:55:55.000000",
+        "updated_at": "2021-01-29T14:46:25.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "be74a17c-5476-4cf8-93f7-dd58c700de70",
+        "user_id": "bdb2d792fc0c48818ef4b1b1240fbb69",
+        "project_id": "f801306887294bf0b98ffc05601f22db",
+        "maintenance_trust_id": "71718e42267f44c5988beac7260159db",
+        "name": "dest_pool_linux",
+        "notes": "Converted from Windows Minion Pool",
+        "endpoint_id": "a471879c-8138-4440-ad0a-7c201d4ed7df",
+        "os_type": "linux",
+        "platform": "destination",
+        "environment_options": {
+            "list_all_destination_networks": false,
+            "migr_worker_use_config_drive": false,
+            "migr_image": "bionic",
+            "migr_network": "admin-net",
+            "migr_flavor_name": "m1.small",
+            "migr_worker_use_fip": true,
+            "migr_worker_boot_from_volume": false,
+            "migr_fip_pool_name": "b2f0b98e-03a1-4f13-92aa-ece55f34ebf8/038a72ea-1413-493b-82da-4c75a9077fbf",
+            "data_transfer_mechanism": "SSH"
+        },
+        "status": "DEALLOCATED",
+        "shared_resources": null,
+        "minimum_minions": 2,
+        "maximum_minions": 3,
+        "minion_max_idle_time": 600,
+        "minion_retention_strategy": "poweroff",
+        "minion_machines": [],
+        "events": [
+            {
+                "created_at": "2021-01-29T11:55:55.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "618beb44-91a3-458b-a0da-ee19638447df",
+                "pool_id": "be74a17c-5476-4cf8-93f7-dd58c700de70",
+                "level": "INFO",
+                "index": 0,
+                "message": "Successfully added minion pool to the DB"
+            },
+            {
+                "created_at": "2021-01-29T14:46:25.000000",
+                "updated_at": null,
+                "deleted_at": null,
+                "deleted": "0",
+                "id": "080cd191-dc2f-4cbc-81b4-5b9d073bf953",
+                "pool_id": "be74a17c-5476-4cf8-93f7-dd58c700de70",
+                "level": "INFO",
+                "index": 1,
+                "message": "Successfully updated minion pool properties"
+            }
+        ],
+        "progress_updates": []
+    }
+}

+ 212 - 169
coriolis/api-refs/api_samples/provider/openstack-connection-provider-schema-get-resp.json

@@ -1,173 +1,216 @@
 {
-  "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"
+    "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."
+                        },
+                        "ceph_options": {
+                            "type": "object",
+                            "title": "Cinder Ceph Options",
+                            "descriptions": "If performing Ceph-based Replicas from a source OpenStack, the Ceph configuration file and credentials for a user with read-only access to the Ceph pool used by Cinder backups/snapshots must be provided. Coriolis must be able to connect to the source OpenStack's Ceph RADOS cluster by being able to reach at least one Ceph-monitor host. For the easiest setup possible, simply using the same credentials used by the Cinder service(s) will work.",
+                            "properties": {
+                                "ceph_conf_file": {
+                                    "type": "string",
+                                    "title": "Ceph Configuration File",
+                                    "description": "Contents of the ceph.conf configuration file containing the list of monitor hosts to connect to. Ideally, this should be the same ceph.conf as used by the Cinder volume/backup service(s). The '[mon] keyring' path options are irrelevant, as the keyring which is passed through the 'Ceph Keyring File' option will be used."
+                                },
+                                "ceph_username": {
+                                    "type": "string",
+                                    "title": "Ceph Username",
+                                    "description": "Ceph user to use when connecting to the source OpenStack's Ceph cluster. The user must have read-only access to the Ceph pool(s) used by the Cinder-backup and Cinder-volume service(s). Ideally, this should be the same user which the Cinder services themselves are using."
+                                },
+                                "ceph_keyring_file": {
+                                    "type": "string",
+                                    "title": "Ceph Keyring File",
+                                    "description": "Ceph keyring file with access key(s) for the user given as the 'Ceph Username' for the cluster described in the given 'Ceph Configuration File'. Ideally, this should be the same keyring file as used by the Cinder service(s)."
+                                },
+                                "ceph_pool_name": {
+                                    "type": "string",
+                                    "title": "Ceph Pool Name",
+                                    "description": "Name of the Ceph pool in which Cinder volume snapshots/backups are stored."
+                                },
+                                "ceph_cluster_name": {
+                                    "type": "string",
+                                    "title": "Ceph Cluster Name",
+                                    "description": "Name of the Ceph cluster in which Cinder volume snapshots/backups are stored."
+                                },
+                                "ceph_connection_timeout": {
+                                    "type": "integer",
+                                    "title": "Ceph Connection Timeout",
+                                    "description": "Integer number of seconds to wait on Ceph connections before timing out."
+                                }
+                            },
+                            "additionalProperties": false,
+                            "required": [
+                                "ceph_conf_file",
+                                "ceph_username",
+                                "ceph_keyring_file",
+                                "ceph_pool_name",
+                                "ceph_cluster_name"
+                            ]
+                        }
+                    },
+                    "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"
+                }
+            ]
         }
-      ]
     }
-  }
 }

+ 133 - 120
coriolis/api-refs/api_samples/provider/provider-get-resp.json

@@ -1,123 +1,136 @@
 {
-  "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
-      ]
+    "providers": {
+        "openstack": {
+            "types": [
+                4,
+                8,
+                16,
+                32,
+                64,
+                128,
+                256,
+                512,
+                4096,
+                16384,
+                32768,
+                65536,
+                131072,
+                262144,
+                524288,
+                1048576
+            ]
+        },
+        "oracle_vm": {
+            "types": [
+                4,
+                8,
+                16,
+                32,
+                64,
+                128,
+                512,
+                4096,
+                16384,
+                32768,
+                65536,
+                131072,
+                262144
+            ]
+        },
+        "opc": {
+            "types": [
+                4,
+                8,
+                16,
+                32,
+                64,
+                128,
+                256,
+                512,
+                4096,
+                16384,
+                65536,
+                131072,
+                262144
+            ]
+        },
+        "vmware_vsphere": {
+            "types": [
+                8,
+                16,
+                32,
+                1024,
+                4096,
+                65536,
+                131072
+            ]
+        },
+        "azure": {
+            "types": [
+                4,
+                8,
+                16,
+                32,
+                64,
+                128,
+                256,
+                512,
+                4096,
+                16384,
+                32768,
+                65536,
+                131072,
+                262144
+            ]
+        },
+        "aws": {
+            "types": [
+                4,
+                8,
+                16,
+                32,
+                64,
+                128,
+                256,
+                512,
+                4096,
+                16384,
+                32768,
+                65536,
+                131072,
+                262144
+            ]
+        },
+        "hyper-v": {
+            "types": [
+                8,
+                16,
+                32,
+                4096,
+                65536
+            ]
+        },
+        "oci": {
+            "types": [
+                4,
+                16,
+                32,
+                64,
+                128,
+                256,
+                512,
+                16384,
+                32768,
+                262144
+            ]
+        },
+        "scvmm": {
+            "types": [
+                4,
+                16,
+                64,
+                128
+            ]
+        }
     }
-  }
 }

+ 7 - 0
coriolis/api-refs/api_samples/region/region-create-req.json

@@ -0,0 +1,7 @@
+{
+    "region": {
+        "name": "region1",
+        "description": "First test region.",
+        "enabled": true
+    }
+}

+ 14 - 0
coriolis/api-refs/api_samples/region/region-create-resp.json

@@ -0,0 +1,14 @@
+{
+    "region": {
+        "created_at": "2021-02-01T10:02:54.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "fc46cadb-5141-4d14-83e1-afe170be0e4c",
+        "name": "region1",
+        "description": "First test region.",
+        "enabled": true,
+        "mapped_services": [],
+        "mapped_endpoints": []
+    }
+}

+ 30 - 0
coriolis/api-refs/api_samples/region/region-list-resp.json

@@ -0,0 +1,30 @@
+{
+    "regions": [
+        {
+            "created_at": "2021-01-28T16:22:34.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "5e31066c-3512-4e8d-9e68-0a5de3d35c5f",
+            "name": "Public",
+            "description": "Default Coriolis Region created by coriolis-docker.",
+            "enabled": true,
+            "mapped_services": [
+                "15194e7e-8d91-406a-a02c-8032ff1fe623"
+            ],
+            "mapped_endpoints": []
+        },
+        {
+            "created_at": "2021-02-01T10:02:54.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "fc46cadb-5141-4d14-83e1-afe170be0e4c",
+            "name": "region1",
+            "description": "First test region.",
+            "enabled": true,
+            "mapped_services": [],
+            "mapped_endpoints": []
+        }
+    ]
+}

+ 16 - 0
coriolis/api-refs/api_samples/region/region-show-resp.json

@@ -0,0 +1,16 @@
+{
+    "region": {
+        "created_at": "2021-01-28T16:22:34.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "5e31066c-3512-4e8d-9e68-0a5de3d35c5f",
+        "name": "Public",
+        "description": "Default Coriolis Region created by coriolis-docker.",
+        "enabled": true,
+        "mapped_services": [
+            "15194e7e-8d91-406a-a02c-8032ff1fe623"
+        ],
+        "mapped_endpoints": []
+    }
+}

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

@@ -0,0 +1,7 @@
+{
+    "region": {
+        "name": "Region-1",
+        "description": "Region Update Example.",
+        "enabled": false
+    }
+}

+ 14 - 0
coriolis/api-refs/api_samples/region/region-update-resp.json

@@ -0,0 +1,14 @@
+{
+    "region": {
+        "created_at": "2021-02-01T10:02:54.000000",
+        "updated_at": "2021-02-01T10:20:58.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "fc46cadb-5141-4d14-83e1-afe170be0e4c",
+        "name": "Region-1",
+        "description": "Region Update Example.",
+        "enabled": false,
+        "mapped_services": [],
+        "mapped_endpoints": []
+    }
+}

+ 5 - 1
coriolis/api-refs/api_samples/replica/openstack-replica-create-req.json

@@ -21,6 +21,10 @@
       "port_reuse_policy": "keep_mac",
       "set_dhcp": true
     },
-    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3"
+    "destination_endpoint_id": "6258fa20-5d1f-44fa-ae12-c94122263fa3",
+    "origin_minion_pool_id": null,
+    "destination_minion_pool_id": "a9b5a0b5-18f6-422e-a014-1659f8a257a4",
+    "instance_osmorphing_minion_pool_mappings": {"ubuntu-xenial": "a9b5a0b5-18f6-422e-a014-1659f8a257a4"},
+    "user_scripts": {"instances": {"ubuntu-xenial": "echo 'anything you need'"}}
   }
 }

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

@@ -35,6 +35,10 @@
     "storage_mappings": {},
     "source_environment": {},
     "id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "origin_minion_pool_id": null,
+    "destination_minion_pool_id": "a9b5a0b5-18f6-422e-a014-1659f8a257a4",
+    "instance_osmorphing_minion_pool_mappings": {"ubuntu-xenial": "a9b5a0b5-18f6-422e-a014-1659f8a257a4"},
+    "user_scripts": {"instances": {"ubuntu-xenial": "echo 'anything you need'"}},
     "executions": []
   }
 }

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

@@ -8,6 +8,7 @@
     "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
     "status": "RUNNING",
     "number": 2,
+    "type": "replica_execution",
     "tasks": [
       {
         "created_at": "2019-07-11T10:01:43.000000",

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

@@ -9,6 +9,7 @@
     "action_id": "7a7731ab-4802-449d-88d3-5960636affe9",
     "status": "RUNNING",
     "number": 1,
+    "type": "replica_execution",
     "tasks": [
       {
         "created_at": "2019-07-24T21:04:16.000000",

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

@@ -35,6 +35,10 @@
     "storage_mappings": {},
     "source_environment": {},
     "id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
+    "last_execution_status": "COMPLETED",
+    "origin_minion_pool_id": null,
+    "destination_minion_pool_id": null,
+    "instance_osmorphing_minion_pool_mappings": {},
     "executions": [
       {
         "created_at": "2019-07-11T10:06:47.000000",

+ 6 - 3
coriolis/api-refs/api_samples/replica/replica-execution-list-resp.json

@@ -8,7 +8,8 @@
       "id": "220070fe-baa3-4d9c-baa7-8b95775475b8",
       "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
       "status": "RUNNING",
-      "number": 4
+      "number": 4,
+      "type": "replica_execution"
     },
     {
       "created_at": "2019-07-11T10:06:47.000000",
@@ -18,7 +19,8 @@
       "id": "4147568c-f1d7-4a2d-bfbc-8d142a3d1c32",
       "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
       "status": "COMPLETED",
-      "number": 3
+      "number": 3,
+      "type": "replica_update"
     },
     {
       "created_at": "2019-07-11T09:57:17.000000",
@@ -28,7 +30,8 @@
       "id": "87faeb7e-97aa-4c2f-a8a2-ba8fa31167a5",
       "action_id": "78f89897-fca0-465c-bf0c-b23b36dfd619",
       "status": "ERROR",
-      "number": 1
+      "number": 1,
+      "type": "replica_execution"
     }
   ]
 }

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

@@ -55,6 +55,10 @@
       },
       "source_environment": {},
       "id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+      "last_execution_status": "COMPLETED",
+      "origin_minion_pool_id": null,
+      "destination_minion_pool_id": null,
+      "instance_osmorphing_minion_pool_mappings": {},
       "executions": [
         {
           "created_at": "2019-07-23T17:01:03.000000",

+ 5 - 1
coriolis/api-refs/api_samples/replica/replica-update-resp.json

@@ -121,7 +121,11 @@
         ]
       },
       "source_environment": {},
-      "id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22"
+      "id": "0460aa4d-6b16-4c98-bd56-27ee186e4a22",
+      "origin_minion_pool_id": null,
+      "destination_minion_pool_id": "a9b5a0b5-18f6-422e-a014-1659f8a257a4",
+      "instance_osmorphing_minion_pool_mappings": {"ubuntu-xenial": "a9b5a0b5-18f6-422e-a014-1659f8a257a4"},
+      "user_scripts": {"instances": {"ubuntu-xenial": "echo 'anything you need'"}},
     }
   }
 }

+ 9 - 0
coriolis/api-refs/api_samples/service/service-create-req.json

@@ -0,0 +1,9 @@
+{
+    "service": {
+        "host": "coriolis-worker-ONbgH1NV",
+        "binary": "coriolis-worker",
+        "topic": "coriolis_worker",
+        "mapped_regions": ["5e31066c-3512-4e8d-9e68-0a5de3d35c5f"],
+        "enabled": false
+    }
+}

+ 95 - 0
coriolis/api-refs/api_samples/service/service-create-resp.json

@@ -0,0 +1,95 @@
+{
+    "service": {
+        "created_at": "2021-02-01T11:19:44.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "07c3343b-970d-437a-b670-e88e78dab3fc",
+        "host": "coriolis-worker-ONbgH1NV",
+        "binary": "coriolis-worker",
+        "topic": "coriolis_worker",
+        "enabled": false,
+        "status": "UP",
+        "providers": {
+            "openstack": {
+                "types": [
+                    4,
+                    8,
+                    16,
+                    32,
+                    64,
+                    128,
+                    256,
+                    512,
+                    4096,
+                    16384,
+                    32768,
+                    65536,
+                    131072,
+                    262144,
+                    524288,
+                    1048576
+                ]
+            },
+            // ...
+        },
+        "specs": {
+            "application": "coriolis-worker",
+            "packages": [
+                "adal==1.2.6",
+                "alembic==1.5.2"
+                // ...
+            ],
+            "os_info": [
+                "NAME=\"Ubuntu\"",
+                "VERSION=\"18.04.5 LTS (Bionic Beaver)\"",
+                "ID=ubuntu",
+                "ID_LIKE=debian",
+                "PRETTY_NAME=\"Ubuntu 18.04.5 LTS\"",
+                "VERSION_ID=\"18.04\"",
+                "HOME_URL=\"https://www.ubuntu.com/\"",
+                "SUPPORT_URL=\"https://help.ubuntu.com/\"",
+                "BUG_REPORT_URL=\"https://bugs.launchpad.net/ubuntu/\"",
+                "PRIVACY_POLICY_URL=\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\"",
+                "VERSION_CODENAME=bionic",
+                "UBUNTU_CODENAME=bionic",
+                ""
+            ],
+            "hostname": "coriolis-worker-ONbgH1NV",
+            "ip_addresses": [
+                {
+                    "eth0": {
+                        "ipv4": [
+                            {
+                                "addr": "10.107.9.58",
+                                "netmask": "255.255.254.0",
+                                "broadcast": "10.107.9.255"
+                            }
+                        ],
+                        "ipv6": [
+                            {
+                                "addr": "fe80::250:56ff:fe89:91f4%eth0",
+                                "netmask": "ffff:ffff:ffff:ffff::/64"
+                            }
+                        ]
+                    }
+                },
+                {
+                    "docker0": {
+                        "ipv4": [
+                            {
+                                "addr": "172.17.0.1",
+                                "netmask": "255.255.0.0",
+                                "broadcast": "172.17.255.255"
+                            }
+                        ],
+                        "ipv6": null
+                    }
+                }
+            ]
+        },
+        "mapped_regions": [
+            "5e31066c-3512-4e8d-9e68-0a5de3d35c5f"
+        ]
+    }
+}

+ 97 - 0
coriolis/api-refs/api_samples/service/service-list-resp.json

@@ -0,0 +1,97 @@
+{
+    "services": [
+        {
+            "created_at": "2021-02-01T11:19:44.000000",
+            "updated_at": null,
+            "deleted_at": null,
+            "deleted": "0",
+            "id": "07c3343b-970d-437a-b670-e88e78dab3fc",
+            "host": "coriolis-worker-ONbgH1NV",
+            "binary": "coriolis-worker",
+            "topic": "coriolis_worker",
+            "enabled": false,
+            "status": "UP",
+            "providers": {
+                "openstack": {
+                    "types": [
+                        4,
+                        8,
+                        16,
+                        32,
+                        64,
+                        128,
+                        256,
+                        512,
+                        4096,
+                        16384,
+                        32768,
+                        65536,
+                        131072,
+                        262144,
+                        524288,
+                        1048576
+                    ]
+                },
+                // ...
+            },
+            "specs": {
+                "application": "coriolis-worker",
+                "packages": [
+                    "adal==1.2.6",
+                    "alembic==1.5.2",
+                    // ...
+                ],
+                "os_info": [
+                    "NAME=\"Ubuntu\"",
+                    "VERSION=\"18.04.5 LTS (Bionic Beaver)\"",
+                    "ID=ubuntu",
+                    "ID_LIKE=debian",
+                    "PRETTY_NAME=\"Ubuntu 18.04.5 LTS\"",
+                    "VERSION_ID=\"18.04\"",
+                    "HOME_URL=\"https://www.ubuntu.com/\"",
+                    "SUPPORT_URL=\"https://help.ubuntu.com/\"",
+                    "BUG_REPORT_URL=\"https://bugs.launchpad.net/ubuntu/\"",
+                    "PRIVACY_POLICY_URL=\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\"",
+                    "VERSION_CODENAME=bionic",
+                    "UBUNTU_CODENAME=bionic",
+                    ""
+                ],
+                "hostname": "coriolis-worker-ONbgH1NV",
+                "ip_addresses": [
+                    {
+                        "eth0": {
+                            "ipv4": [
+                                {
+                                    "addr": "10.107.9.58",
+                                    "netmask": "255.255.254.0",
+                                    "broadcast": "10.107.9.255"
+                                }
+                            ],
+                            "ipv6": [
+                                {
+                                    "addr": "fe80::250:56ff:fe89:91f4%eth0",
+                                    "netmask": "ffff:ffff:ffff:ffff::/64"
+                                }
+                            ]
+                        }
+                    },
+                    {
+                        "docker0": {
+                            "ipv4": [
+                                {
+                                    "addr": "172.17.0.1",
+                                    "netmask": "255.255.0.0",
+                                    "broadcast": "172.17.255.255"
+                                }
+                            ],
+                            "ipv6": null
+                        }
+                    }
+                ]
+            },
+            "mapped_regions": [
+                "5e31066c-3512-4e8d-9e68-0a5de3d35c5f"
+            ]
+        }
+    ]
+}

+ 95 - 0
coriolis/api-refs/api_samples/service/service-show-resp.json

@@ -0,0 +1,95 @@
+{
+    "service": {
+        "created_at": "2021-02-01T11:19:44.000000",
+        "updated_at": null,
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "07c3343b-970d-437a-b670-e88e78dab3fc",
+        "host": "coriolis-worker-ONbgH1NV",
+        "binary": "coriolis-worker",
+        "topic": "coriolis_worker",
+        "enabled": false,
+        "status": "UP",
+        "providers": {
+            "openstack": {
+                "types": [
+                    4,
+                    8,
+                    16,
+                    32,
+                    64,
+                    128,
+                    256,
+                    512,
+                    4096,
+                    16384,
+                    32768,
+                    65536,
+                    131072,
+                    262144,
+                    524288,
+                    1048576
+                ]
+            },
+            // ...
+        },
+        "specs": {
+            "application": "coriolis-worker",
+            "packages": [
+                "adal==1.2.6",
+                "alembic==1.5.2",
+                // ...
+            ],
+            "os_info": [
+                "NAME=\"Ubuntu\"",
+                "VERSION=\"18.04.5 LTS (Bionic Beaver)\"",
+                "ID=ubuntu",
+                "ID_LIKE=debian",
+                "PRETTY_NAME=\"Ubuntu 18.04.5 LTS\"",
+                "VERSION_ID=\"18.04\"",
+                "HOME_URL=\"https://www.ubuntu.com/\"",
+                "SUPPORT_URL=\"https://help.ubuntu.com/\"",
+                "BUG_REPORT_URL=\"https://bugs.launchpad.net/ubuntu/\"",
+                "PRIVACY_POLICY_URL=\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\"",
+                "VERSION_CODENAME=bionic",
+                "UBUNTU_CODENAME=bionic",
+                ""
+            ],
+            "hostname": "coriolis-worker-ONbgH1NV",
+            "ip_addresses": [
+                {
+                    "eth0": {
+                        "ipv4": [
+                            {
+                                "addr": "10.107.9.58",
+                                "netmask": "255.255.254.0",
+                                "broadcast": "10.107.9.255"
+                            }
+                        ],
+                        "ipv6": [
+                            {
+                                "addr": "fe80::250:56ff:fe89:91f4%eth0",
+                                "netmask": "ffff:ffff:ffff:ffff::/64"
+                            }
+                        ]
+                    }
+                },
+                {
+                    "docker0": {
+                        "ipv4": [
+                            {
+                                "addr": "172.17.0.1",
+                                "netmask": "255.255.0.0",
+                                "broadcast": "172.17.255.255"
+                            }
+                        ],
+                        "ipv6": null
+                    }
+                }
+            ]
+        },
+        "mapped_regions": [
+            "5e31066c-3512-4e8d-9e68-0a5de3d35c5f"
+        ]
+    }
+}

+ 6 - 0
coriolis/api-refs/api_samples/service/service-update-req.json

@@ -0,0 +1,6 @@
+{
+    "service": {
+        "enabled": true,
+        "mapped_regions": ["5e31066c-3512-4e8d-9e68-0a5de3d35c5f"]
+    }
+}

+ 95 - 0
coriolis/api-refs/api_samples/service/service-update-resp.json

@@ -0,0 +1,95 @@
+{
+    "service": {
+        "created_at": "2021-02-01T11:19:44.000000",
+        "updated_at": "2021-02-01T11:42:04.000000",
+        "deleted_at": null,
+        "deleted": "0",
+        "id": "07c3343b-970d-437a-b670-e88e78dab3fc",
+        "host": "coriolis-worker-ONbgH1NV",
+        "binary": "coriolis-worker",
+        "topic": "coriolis_worker",
+        "enabled": true,
+        "status": "UP",
+        "providers": {
+            "openstack": {
+                "types": [
+                    4,
+                    8,
+                    16,
+                    32,
+                    64,
+                    128,
+                    256,
+                    512,
+                    4096,
+                    16384,
+                    32768,
+                    65536,
+                    131072,
+                    262144,
+                    524288,
+                    1048576
+                ]
+            },
+            // ...
+        },
+        "specs": {
+            "application": "coriolis-worker",
+            "packages": [
+                "adal==1.2.6",
+                "alembic==1.5.2",
+                // ...
+            ],
+            "os_info": [
+                "NAME=\"Ubuntu\"",
+                "VERSION=\"18.04.5 LTS (Bionic Beaver)\"",
+                "ID=ubuntu",
+                "ID_LIKE=debian",
+                "PRETTY_NAME=\"Ubuntu 18.04.5 LTS\"",
+                "VERSION_ID=\"18.04\"",
+                "HOME_URL=\"https://www.ubuntu.com/\"",
+                "SUPPORT_URL=\"https://help.ubuntu.com/\"",
+                "BUG_REPORT_URL=\"https://bugs.launchpad.net/ubuntu/\"",
+                "PRIVACY_POLICY_URL=\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\"",
+                "VERSION_CODENAME=bionic",
+                "UBUNTU_CODENAME=bionic",
+                ""
+            ],
+            "hostname": "coriolis-worker-ONbgH1NV",
+            "ip_addresses": [
+                {
+                    "eth0": {
+                        "ipv4": [
+                            {
+                                "addr": "10.107.9.58",
+                                "netmask": "255.255.254.0",
+                                "broadcast": "10.107.9.255"
+                            }
+                        ],
+                        "ipv6": [
+                            {
+                                "addr": "fe80::250:56ff:fe89:91f4%eth0",
+                                "netmask": "ffff:ffff:ffff:ffff::/64"
+                            }
+                        ]
+                    }
+                },
+                {
+                    "docker0": {
+                        "ipv4": [
+                            {
+                                "addr": "172.17.0.1",
+                                "netmask": "255.255.0.0",
+                                "broadcast": "172.17.255.255"
+                            }
+                        ],
+                        "ipv6": null
+                    }
+                }
+            ]
+        },
+        "mapped_regions": [
+            "5e31066c-3512-4e8d-9e68-0a5de3d35c5f"
+        ]
+    }
+}

+ 38 - 0
coriolis/api-refs/source/diagnostics.inc

@@ -0,0 +1,38 @@
+.. -*- rst -*-
+
+===========
+Diagnostics
+===========
+
+Gets diagnostic info about the Coriolis appliance.
+
+
+List Diagnostics
+================
+
+.. rest_method:: GET /diagnostics
+
+Lists diagnostic data from all Coriolis services.
+
+Normal response codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403)
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - diagnostics : diagnostics_array
+  - application : diagnostic_application
+  - os_info : diagnostic_os_info
+  - hostname : diagnostic_hostname
+  - ip_addresses : diagnostic_ip_addresses
+  - packages : diagnostic_packages
+
+**Example of a Diagnostics List**
+
+  .. literalinclude:: ../api_samples/diagnostics/diagnostics-get-resp.json
+    :language: javascript
+

+ 138 - 52
coriolis/api-refs/source/endpoint.inc

@@ -36,6 +36,7 @@ Response
   - type : endpoint_type
   - name : endpoint_name
   - description : endpoint_description
+  - mapped_regions : endpoint_mapped_regions
 
 **Example of Endpoint List Response**
 
@@ -82,6 +83,7 @@ Response
   - type : endpoint_id
   - name : endpoint_created_at
   - description : endpoint_description
+  - mapped_regions : endpoint_mapped_regions
 
 **Example of Endpoint Show Response**
   .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-get-resp.json
@@ -93,6 +95,57 @@ Response
   .. literalinclude:: ../api_samples/endpoint/endpoint-get-resp-secret.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
+  - mapped_regions : endpoint_mapped_regions
+
+**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
+  - mapped_regions : endpoint_mapped_regions
+
+
+**Example of Endpoint Create Response**
+
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-get-resp.json
+      :language: javascript
 
 Update Endpoint
 ===============
@@ -119,6 +172,7 @@ Request
    - name: endpoint_name
    - description : endpoint_description
    - connection_info : connection_info
+   - mapped_regions : endpoint_mapped_regions
 
 **Example of Endpoint Update Request**
 
@@ -158,7 +212,7 @@ Deletes an endpoint.
 
 The endpoint must exist.
 
-Normal response codes: 200
+Normal response codes: 204
 
 Error response codes: itemNotFound(404),unauthorized(401),
 forbidden(403)
@@ -210,10 +264,10 @@ Response
   - 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
+  - firmware_type : instance_firmware_type
 
 **Example Instance List on Openstack Endpoint**
   .. literalinclude:: ../api_samples/endpoint/endpoint-instance-list-resp.json
@@ -256,12 +310,12 @@ Response
   - 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
+  - firmware_type : instance_firmware_type
 
 **Example Instance Show On Openstack Endpoint**
 
@@ -421,55 +475,6 @@ Response
   .. 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
 ================
@@ -521,3 +526,84 @@ Response
 **Example of Failed Endpoint Validation Response**
   .. literalinclude:: ../api_samples/endpoint/endpoint-validate-connection-error-resp.json
      :language: javascript
+
+
+Endpoint Minion Pool Options
+============================
+
+Get Endpoint Destination Minion Pool Options
+============================================
+
+.. rest_method:: GET /endpoints/{endpoint_id}/destination-minion-pool-options
+
+Shows possible options for destination minion pool parameters
+
+**Preconditions**
+
+The endpoint must exist and the platform must support listing minion pool 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_minion_pool_options : destination_minion_pool_options
+  - values : option_values
+  - config_default : option_config_default
+  - name : option_name
+
+**Example Endpoint Destination Minion Pool Options List On Openstack Endpoint**
+
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-destination-minion-pool-options-list-resp.json
+     :language: javascript
+
+
+Get Endpoint Source Minion Pool Options
+=======================================
+
+.. rest_method:: GET /endpoints/{endpoint_id}/source-minion-pool-options
+
+Shows possible options for source minion pool parameters
+
+**Preconditions**
+
+The endpoint must exist and the platform must support listing minion pool 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_minion_pool_options : source_minion_pool_options
+  - values : option_values
+  - config_default : option_config_default
+  - name : option_name
+
+**Example Endpoint Source Minion Pool Options List On Openstack Endpoint**
+
+  .. literalinclude:: ../api_samples/endpoint/openstack-endpoint-source-minion-pool-options-list-resp.json
+     :language: javascript

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

@@ -6,7 +6,11 @@ This is a reference for the Coriolis API.
 
 .. rest_expand_all::
 
+.. include:: diagnostics.inc
 .. include:: endpoint.inc
 .. include:: migration.inc
+.. include:: minion_pool.inc
 .. include:: provider.inc
+.. include:: region.inc
 .. include:: replica.inc
+.. include:: service.inc

+ 31 - 2
coriolis/api-refs/source/migration.inc

@@ -45,6 +45,12 @@ Response
   - tasks : migration_tasks
   - network_map : network_map
   - storage_mappings : storage_map
+  - last_execution_status : migration_last_execution_status
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
+  - shutdown_instances : migration_shutdown_instances
+  - replication_count : replication_count
 
 **Example of a Migration List**
 
@@ -101,6 +107,12 @@ Response
   - destination_endpoint_id : migration_destination_endpoint_id
   - network_map : network_map
   - storage_mappings : storage_map
+  - last_execution_status : migration_last_execution_status
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
+  - shutdown_instances : migration_shutdown_instances
+  - replication_count : replication_count
 
 **Example of a Migration Show Response**
   .. literalinclude:: ../api_samples/migration/openstack-migration-get-resp.json
@@ -131,6 +143,12 @@ Request
   - destination_endpoint_id : migration_destination_endpoint_id
   - origin_endpoint_id : migration_origin_endpoint_id
   - instances : migration_instances
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
+  - shutdown_instances : migration_shutdown_instances
+  - replication_count : replication_count
+  - user_scripts : user_scripts
 
 **Example Migration Create Request**
   .. literalinclude:: ../api_samples/migration/openstack-migration-create-req.json
@@ -163,6 +181,12 @@ Response
   - destination_endpoint_id : migration_destination_endpoint_id
   - network_map : network_map
   - storage_mappings : storage_map
+  - last_execution_status : migration_last_execution_status
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
+  - shutdown_instances : migration_shutdown_instances
+  - replication_count : replication_count
 
 **Example Migration Create Response**
   .. literalinclude:: ../api_samples/migration/openstack-migration-create-resp.json
@@ -191,6 +215,7 @@ Request
     - force : migration_force
     - clone_disks : migration_clone_disks
     - skip_os_morphing : skip_os_morphing
+    - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
 
 **Example of Migration Create From Replica Request**
   .. literalinclude:: ../api_samples/migration/migration-from-replica-req.json
@@ -223,7 +248,11 @@ Response
   - destination_endpoint_id : migration_destination_endpoint_id
   - network_map : network_map
   - storage_mappings : storage_map
-
+  - last_execution_status : migration_last_execution_status
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
+  - shutdown_instances : migration_shutdown_instances
 
 **Example of Migration Create From Replica Response**
   .. literalinclude:: ../api_samples/migration/openstack-migration-from-replica-resp.json
@@ -239,7 +268,7 @@ Deletes an non-running migration.
 
 The migration must exist and not be running.
 
-Normal response codes: 200
+Normal response codes: 204
 
 Error response codes:
 unauthorized(401), forbidden(403), itemNotFound(404)

+ 482 - 0
coriolis/api-refs/source/minion_pool.inc

@@ -0,0 +1,482 @@
+.. -*- rst -*-
+
+============
+Minion Pools
+============
+
+Lists, creates, updates, shows details for and deletes minion pools. It also allocates, deallocates and refreshes information for minion machines for minion pools.
+
+
+List Minion Pools
+=================
+
+.. rest_method:: GET /minion_pools
+
+List details for all minion pools.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pools : minion_pools_array
+  - id : minion_pool_id
+  - name : minion_pool_name
+  - notes : minion_pool_notes
+  - endpoint_id : minion_pool_endpoint_id
+  - environment_options : minion_pool_environment_options
+  - os_type : minion_pool_os_type
+  - maintenance_trust_id : minion_pool_maintenance_trust_id
+  - platform : minion_pool_platform
+  - created_at : minion_pool_created_at
+  - updated_at : minion_pool_updated_at
+  - deleted_at : minion_pool_deleted_at
+  - deleted : minion_pool_deleted
+  - shared_resources : minion_pool_shared_resources
+  - status : minion_pool_status
+  - minimum_minions : minimum_minions
+  - maximum_minions : maximum_minions
+  - minion_max_idle_time : minion_max_idle_time
+  - minion_retention_strategy : minion_pool_retention_strategy
+  - minion_machines : minion_pool_machines
+
+**Example of Minion Pool List Response**
+
+.. literalinclude:: ../api_samples/minion_pool/minion-pool-list-resp.json
+    :language: javascript
+
+
+Show Minion Pool
+================
+
+.. rest_method:: GET /minion_pools/{minion_pool_id}
+
+Shows details about a minion pool.
+
+**Preconditions**
+
+The minion pool must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool_id : minion_pool_id_path
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool : minion_pool_object
+  - id : minion_pool_id
+  - name : minion_pool_name
+  - notes : minion_pool_notes
+  - endpoint_id : minion_pool_endpoint_id
+  - environment_options : minion_pool_environment_options
+  - os_type : minion_pool_os_type
+  - maintenance_trust_id : minion_pool_maintenance_trust_id
+  - platform : minion_pool_platform
+  - created_at : minion_pool_created_at
+  - updated_at : minion_pool_updated_at
+  - deleted_at : minion_pool_deleted_at
+  - deleted : minion_pool_deleted
+  - shared_resources : minion_pool_shared_resources
+  - status : minion_pool_status
+  - minimum_minions : minimum_minions
+  - maximum_minions : maximum_minions
+  - minion_max_idle_time : minion_max_idle_time
+  - minion_retention_strategy : minion_pool_retention_strategy
+  - minion_machines : minion_pool_machines
+  - user_id : user_id
+  - project_id : project_id
+  - events : minion_pool_events
+  - progress_updates : minion_pool_progress_updates
+
+**Example of Minion Pool Show Response**
+
+  .. literalinclude:: ../api_samples/minion_pool/openstack-minion-pool-show.json
+      :language: javascript
+
+Create Minion Pool
+==================
+
+.. rest_method:: POST /minion_pools
+
+Creates a minion pool.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool : minion_pool_object
+  - name : minion_pool_name
+  - notes : minion_pool_notes
+  - endpoint_id : minion_pool_endpoint_id
+  - environment_options : minion_pool_environment_options
+  - os_type : minion_pool_os_type
+  - platform : minion_pool_platform
+  - minimum_minions : minimum_minions
+  - maximum_minions : maximum_minions
+  - minion_max_idle_time : minion_max_idle_time
+  - minion_retention_strategy : minion_pool_retention_strategy
+  - skip_allocation : minion_pool_skip_allocation
+
+**Example of Minion Pool Create Request**
+
+  .. literalinclude:: ../api_samples/minion_pool/openstack-minion-pool-create-req.json
+      :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool : minion_pool_object
+  - id : minion_pool_id
+  - name : minion_pool_name
+  - notes : minion_pool_notes
+  - endpoint_id : minion_pool_endpoint_id
+  - environment_options : minion_pool_environment_options
+  - os_type : minion_pool_os_type
+  - maintenance_trust_id : minion_pool_maintenance_trust_id
+  - platform : minion_pool_platform
+  - created_at : minion_pool_created_at
+  - updated_at : minion_pool_updated_at
+  - deleted_at : minion_pool_deleted_at
+  - deleted : minion_pool_deleted
+  - shared_resources : minion_pool_shared_resources
+  - status : minion_pool_status
+  - minimum_minions : minimum_minions
+  - maximum_minions : maximum_minions
+  - minion_max_idle_time : minion_max_idle_time
+  - minion_retention_strategy : minion_pool_retention_strategy
+  - minion_machines : minion_pool_machines
+  - user_id : user_id
+  - project_id : project_id
+  - events : minion_pool_events
+  - progress_updates : minion_pool_progress_updates
+
+**Example of Minion Pool Create Response**
+
+  .. literalinclude:: ../api_samples/minion_pool/openstack-minion-pool-create-resp.json
+      :language: javascript
+
+Update Minion Pool
+==================
+
+.. rest_method:: PUT /minion_pools/{minion_pool_id}
+
+Updates a minion pool.
+
+**Preconditions**
+
+The minion pool must exist and be in DEALLOCATED state.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+  .. rest_parameters:: parameters.yaml
+
+    - minion_pool_id : minion_pool_id_path
+    - minion_pool : minion_pool_object
+    - name : minion_pool_name
+    - notes : minion_pool_notes
+    - endpoint_id : minion_pool_endpoint_id
+    - environment_options : minion_pool_environment_options
+    - os_type : minion_pool_os_type
+    - platform : minion_pool_platform
+    - minimum_minions : minimum_minions
+    - maximum_minions : maximum_minions
+    - minion_max_idle_time : minion_max_idle_time
+    - minion_retention_strategy : minion_pool_retention_strategy
+    - notes : minion_pool_notes
+
+**Example of Minion Pool Update Request**
+
+.. literalinclude:: ../api_samples/minion_pool/openstack-minion-pool-update-req.json
+    :language: javascript
+
+Response
+--------
+
+  .. rest_parameters:: parameters.yaml
+
+    - minion_pool : minion_pool_object
+    - id : minion_pool_id
+    - name : minion_pool_name
+    - notes : minion_pool_notes
+    - endpoint_id : minion_pool_endpoint_id
+    - environment_options : minion_pool_environment_options
+    - os_type : minion_pool_os_type
+    - maintenance_trust_id : minion_pool_maintenance_trust_id
+    - platform : minion_pool_platform
+    - created_at : minion_pool_created_at
+    - updated_at : minion_pool_updated_at
+    - deleted_at : minion_pool_deleted_at
+    - deleted : minion_pool_deleted
+    - shared_resources : minion_pool_shared_resources
+    - status : minion_pool_status
+    - minimum_minions : minimum_minions
+    - maximum_minions : maximum_minions
+    - minion_max_idle_time : minion_max_idle_time
+    - minion_retention_strategy : minion_pool_retention_strategy
+    - minion_machines : minion_pool_machines
+    - user_id : user_id
+    - project_id : project_id
+    - events : minion_pool_events
+    - progress_updates : minion_pool_progress_updates
+
+**Example of Minion Pool Update Response**
+
+.. literalinclude:: ../api_samples/minion_pool/openstack-minion-pool-update-resp.json
+    :language: javascript
+
+Delete Minion Pool
+==================
+
+.. rest_method:: DELETE /minion_pools/{minion_pool_id}
+
+Deletes a Minion Pool.
+
+**Preconditions**
+
+The Minion Pool must exist and be in DEALLOCATED state.
+
+Normal response codes: 204
+
+Error response codes: unauthorized(401), forbidden(403),
+itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+   - minion_pool_id : minion_pool_id_path
+
+Response
+--------
+
+There is no response body for a successful deletion.
+
+
+Minion Pool Actions
+===================
+
+Minion Pool Allocate
+====================
+
+.. rest_method:: POST /minion_pools/{minion_pool_id}/actions
+
+Allocates Minion Machines for a Minion Pool.
+
+**Preconditions**
+
+The minion pool must exist and be in DEALLOCATED state.
+
+
+Normal response codes: 200
+
+Error response codes:
+unauthorized(401), forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool_id : minion_pool_id_path
+  - allocate : minion_pool_allocate
+
+**Example of Minion Pool Allocation Request**
+
+  .. literalinclude:: ../api_samples/minion_pool/minion-pool-allocate-req.json
+      :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool : minion_pool_object
+  - id : minion_pool_id
+  - name : minion_pool_name
+  - notes : minion_pool_notes
+  - endpoint_id : minion_pool_endpoint_id
+  - environment_options : minion_pool_environment_options
+  - os_type : minion_pool_os_type
+  - maintenance_trust_id : minion_pool_maintenance_trust_id
+  - platform : minion_pool_platform
+  - created_at : minion_pool_created_at
+  - updated_at : minion_pool_updated_at
+  - deleted_at : minion_pool_deleted_at
+  - deleted : minion_pool_deleted
+  - shared_resources : minion_pool_shared_resources
+  - status : minion_pool_status
+  - minimum_minions : minimum_minions
+  - maximum_minions : maximum_minions
+  - minion_max_idle_time : minion_max_idle_time
+  - minion_retention_strategy : minion_pool_retention_strategy
+  - minion_machines : minion_pool_machines
+  - user_id : user_id
+  - project_id : project_id
+  - events : minion_pool_events
+  - progress_updates : minion_pool_progress_updates
+
+**Example of Minion Pool Allocation Response**
+
+  .. literalinclude:: ../api_samples/minion_pool/openstack-minion-pool-allocate-resp.json
+      :language: javascript
+
+Minion Pool Deallocate
+======================
+
+.. rest_method:: POST /minion_pools/{minion_pool_id}/actions
+
+Deallocates Minion Machines for a Minion Pool.
+
+**Preconditions**
+
+The minion pool must exist and be in ALLOCATED or ERROR state.
+
+
+Normal response codes: 200
+
+Error response codes:
+unauthorized(401), forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool_id : minion_pool_id_path
+  - deallocate : minion_pool_deallocate
+
+**Example of Minion Pool Deallocation Request**
+
+  .. literalinclude:: ../api_samples/minion_pool/minion-pool-deallocate-req.json
+      :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool : minion_pool_object
+  - id : minion_pool_id
+  - name : minion_pool_name
+  - notes : minion_pool_notes
+  - endpoint_id : minion_pool_endpoint_id
+  - environment_options : minion_pool_environment_options
+  - os_type : minion_pool_os_type
+  - maintenance_trust_id : minion_pool_maintenance_trust_id
+  - platform : minion_pool_platform
+  - created_at : minion_pool_created_at
+  - updated_at : minion_pool_updated_at
+  - deleted_at : minion_pool_deleted_at
+  - deleted : minion_pool_deleted
+  - shared_resources : minion_pool_shared_resources
+  - status : minion_pool_status
+  - minimum_minions : minimum_minions
+  - maximum_minions : maximum_minions
+  - minion_max_idle_time : minion_max_idle_time
+  - minion_retention_strategy : minion_pool_retention_strategy
+  - minion_machines : minion_pool_machines
+  - user_id : user_id
+  - project_id : project_id
+  - events : minion_pool_events
+  - progress_updates : minion_pool_progress_updates
+
+**Example of Minion Pool Deallocation Response**
+
+  .. literalinclude:: ../api_samples/minion_pool/openstack-minion-pool-deallocate-resp.json
+      :language: javascript
+
+Minion Pool Refresh
+======================
+
+.. rest_method:: POST /minion_pools/{minion_pool_id}/actions
+
+Refreshes Minion Machines for a Minion Pool.
+
+**Preconditions**
+
+The minion pool must exist and be in ALLOCATED state.
+
+
+Normal response codes: 200
+
+Error response codes:
+unauthorized(401), forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool_id : minion_pool_id_path
+  - refresh : minion_pool_refresh
+
+**Example of Minion Pool Refresh Request**
+
+  .. literalinclude:: ../api_samples/minion_pool/minion-pool-refresh-req.json
+      :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+  - minion_pool : minion_pool_object
+  - id : minion_pool_id
+  - name : minion_pool_name
+  - notes : minion_pool_notes
+  - endpoint_id : minion_pool_endpoint_id
+  - environment_options : minion_pool_environment_options
+  - os_type : minion_pool_os_type
+  - maintenance_trust_id : minion_pool_maintenance_trust_id
+  - platform : minion_pool_platform
+  - created_at : minion_pool_created_at
+  - updated_at : minion_pool_updated_at
+  - deleted_at : minion_pool_deleted_at
+  - deleted : minion_pool_deleted
+  - shared_resources : minion_pool_shared_resources
+  - status : minion_pool_status
+  - minimum_minions : minimum_minions
+  - maximum_minions : maximum_minions
+  - minion_max_idle_time : minion_max_idle_time
+  - minion_retention_strategy : minion_pool_retention_strategy
+  - minion_machines : minion_pool_machines
+  - user_id : user_id
+  - project_id : project_id
+  - events : minion_pool_events
+  - progress_updates : minion_pool_progress_updates
+
+**Example of Minion Pool Refresh Response**
+
+  .. literalinclude:: ../api_samples/minion_pool/openstack-minion-pool-refresh-resp.json
+      :language: javascript

+ 465 - 3
coriolis/api-refs/source/parameters.yaml

@@ -23,6 +23,12 @@ migration_id_path:
   in: path
   required: true
   type: uuid
+minion_pool_id_path:
+  description: |
+    The ID of the minion pool.
+  in: path
+  type: uuid
+  required: true
 platform:
   description: |
     The type of cloud service platform.
@@ -35,6 +41,12 @@ provider_id:
   in: path
   type: integer
   required: true
+region_id_path:
+  description: |
+    The ID of the region.
+  in: path
+  type: uuid
+  required: true
 replica_id_path:
   description: |
     The id of the replica.
@@ -53,6 +65,12 @@ replica_tasks_execution_id_path:
   in: path
   type: uuid
   required: true
+service_id_path:
+  description: |
+    The ID of the service.
+  in: path
+  type: uuid
+  required: true
 # query variables
 instance_limit:
   description: |
@@ -94,6 +112,18 @@ destination_environment_schema:
   in: body
   type: object
   required: false
+destination_minion_pool_id:
+  description: |
+    Pre-existing minion pool ID on the destination platform.
+  in: body
+  type: string
+  required: true
+destination_minion_pool_options:
+  description: |
+    Array that contains the parameter options possible for a minion pool with the endpoint as destination.
+  in: body
+  type: array
+  required: true
 destination_options:
   description: |
     An array that contains the parameter options possible for
@@ -101,6 +131,42 @@ destination_options:
   in: body
   type: object
   required: true
+diagnostic_application:
+  description: |
+    Name of the Coriolis service.
+  in: body
+  type: string
+  required: true
+diagnostic_hostname:
+  description: |
+    The hostname of the Coriolis service container.
+  in: body
+  type: string
+  required: true
+diagnostic_ip_addresses:
+  description: |
+    IP addresses of all the interfaces attached to the Coriolis appliance.
+  in: body
+  type: object
+  required: true
+diagnostic_os_info:
+  description: |
+    The Coriolis appliance's host OS information.
+  in: body
+  type: array
+  required: true
+diagnostic_packages:
+  description: |
+    The list of PIP packages installed on the Coriolis service container.
+  in: body
+  type: array
+  required: true
+diagnostics_array:
+  description: |
+    Array of diagnostics objects.
+  in: body
+  type: array
+  required: true
 endpoint_created_at:
   description: |
     ISO 8601 formatted date of endpoint creation.
@@ -131,6 +197,12 @@ endpoint_id:
   in: body
   type: uuid
   required: true
+endpoint_mapped_regions:
+  description: |
+    List containing the Coriolis regions this endpoint is available to.
+  in: body
+  type: array
+  required: true
 endpoint_name:
   description: |
     The name of the endpoint.
@@ -179,6 +251,12 @@ instance_devices:
   in: body
   type: object
   required: true
+instance_firmware_type:
+  description: |
+    The type of firmware of the VM.
+  in: body
+  type: string
+  required: false
 instance_flavor:
   description: |
     Name or ID of the flavor used by the instance.
@@ -233,6 +311,18 @@ instance_os_type:
   in: body
   type: string
   required: true
+instance_osmorphing_minion_pool_mappings:
+  description: |
+    Mapping between migrated instance name and their respective morphing minion pool IDs.
+  in: body
+  type: object
+  required: true
+maximum_minions:
+  description: |
+    Maximum number of minion machines allowed to be allocated for the minion pool.
+  in: body
+  type: integer
+  required: false
 migration_cancel:
   description: |
     Object containing information about the type of migration cancellation.
@@ -301,6 +391,12 @@ migration_instances:
   in: body
   type: array
   required: true
+migration_last_execution_status:
+  description: |
+    Last execution status of the current migration.
+  in: body
+  type: string
+  required: true
 migration_notes:
   description: |
     Notes about the migration.
@@ -325,6 +421,13 @@ migration_replica_id:
   in: body
   type: uuid
   required: true
+migration_shutdown_instances:
+  description: |
+    A boolean which describes whether the execution to shutdown the source
+    instance for the migration process.
+  in: body
+  type: boolean
+  required: true
 migration_status:
   description: |
     Migration status, can either be ``RUNNING``, ``ERROR`` or ``COMPLETED``.
@@ -357,6 +460,167 @@ migrations_array:
   in: body
   type: array
   required: true
+minimum_minions:
+  description: |
+    Minimum number of minion machines to be allocated for the minion pool.
+  in: body
+  type: integer
+  required: false
+minion_max_idle_time:
+  description: |
+    Number of seconds for the minion machines of a minion_pool to be allowed in idle state before executing its retention strategy.
+  in: body
+  type: integer
+  required: false
+minion_pool_allocate:
+  description: |
+    An object that describes minion pool allocation action.
+  in: body
+  type: object
+  required: true
+minion_pool_created_at:
+  description: |
+    Timestamp of minion pool creation.
+  in: body
+  type: string
+  required: true
+minion_pool_deallocate:
+  description: |
+    An object that describes minion pool deallocation action.
+  in: body
+  type: object
+  required: true
+minion_pool_deleted:
+  description: |
+    Whether a minion pool is deleted or not.
+    1 for deleted
+    0 for not deleted
+  in: body
+  type: string
+  required: true
+minion_pool_deleted_at:
+  description: |
+    Timestamp of minion pool deletion.
+  in: body
+  type: string
+  required: true
+minion_pool_endpoint_id:
+  description: |
+    The ID of the minion pool endpoint.
+  in: body
+  type: uuid
+  required: true
+minion_pool_environment_options:
+  description: |
+    The configuration for the minion machines of the minion pool.
+  in: body
+  type: object
+  required: true
+minion_pool_events:
+  description: |
+    Array of events occuring on the minion pool.
+  in: body
+  type: array
+  required: true
+minion_pool_id:
+  description: |
+    The ID of the minion pool.
+  in: body
+  type: uuid
+  required: true
+minion_pool_machines:
+  description: |
+    Array of minion machine objects allocated in a minion_pool.
+  in: body
+  type: array
+  required: true
+minion_pool_maintenance_trust_id:
+  description: |
+    Maintenance trust_id of the minion pool.
+  in: body
+  type: uuid
+  required: true
+minion_pool_name:
+  description: |
+    The name of the minion pool.
+  in: body
+  type: string
+  required: true
+minion_pool_notes:
+  description: |
+    Notes about the minion pool.
+  in: body
+  type: string
+  required: false
+minion_pool_object:
+  description: |
+    Object containing information about a minion pool.
+  in: body
+  type: object
+  required: true
+minion_pool_os_type:
+  description: |
+    The OS type for the minion machines of this minion pool.
+  in: body
+  type: string
+  required: true
+minion_pool_platform:
+  description: |
+    The platform of the minion pool. Can either be 'source' or 'destination'.
+  in: body
+  type: string
+  required: true
+minion_pool_progress_updates:
+  description: |
+    Array of progress updates for minion machines of a minion pool.
+  in: body
+  type: array
+  required: true
+minion_pool_refresh:
+  description: |
+    An object describing minion pool refresh action.
+  in: body
+  type: object
+  required: true
+minion_pool_retention_strategy:
+  description: |
+    The retention strategy used for the minion machines of the minion pool. Can either be 'delete' or 'poweroff'.
+  in: body
+  type: string
+  required: false
+minion_pool_shared_resources:
+  description: |
+    Mapping of shared resources and their respective IDs for the minion machines of the minion pool.
+  in: body
+  type: object
+  required: true
+minion_pool_skip_allocation:
+  description: |
+    Boolean indicating whether or not to skip allocating machines upon minion pool creation.
+  in: body
+  type: boolean
+  required: false
+minion_pool_status:
+  description: |
+    The status of the minion pool. Accepted values: 'UNKNOWN', 'ERROR',
+    'DEALLOCATED', 'VALIATING_INPUTS', 'ALLOCATING_SHARED_RESOURCES',
+    'ALLOCATING_MACHINES', 'DEALLOCATING_MACHINES',
+    'DEALLOCATING_SHARED_RESOURCES', 'ALLOCATED', 'IN_MAINTENANCE'.
+  in: body
+  type: string
+  required: true
+minion_pool_updated_at:
+  description: |
+    Timestamp of minion pool update.
+  in: body
+  type: string
+  required: true
+minion_pools_array:
+  description: |
+    The array of minion pools.
+  in: body
+  type: array
+  required: true
 network_id:
   description: |
     The unique identifier of a network.
@@ -383,22 +647,28 @@ networks_array:
   required: true
 option_config_default:
   description: |
-    The default option for the destination parameter.
+    The default option for the parameter.
   in: body
   type: string
   required: true
 option_name:
   description: |
-    The name of the destination parameter.
+    The name of the parameter.
   in: body
   type: string
   required: true
 option_values:
   description: |
-    An array of possible values for the respective destination parameter.
+    An array of possible values for the respective parameter.
   in: body
   type: array
   required: true
+origin_minion_pool_id:
+  description: |
+    Pre-existing minion pool ID on the source platform.
+  in: body
+  type: string
+  required: true
 project_id:
   description: |
     Coriolis supports multiple projects, this is the respective project's id.
@@ -429,6 +699,78 @@ providers:
   in: body
   type: array
   required: true
+region_created_at:
+  description: |
+    Timestamp of region creation.
+  in: body
+  type: string
+  required: true
+region_deleted:
+  description: |
+    Value representing whether the region is deleted or not.
+  in: body
+  type: integer
+  required: true
+region_deleted_at:
+  description: |
+    Timestamp of region deletion.
+  in: body
+  type: string
+  required: true
+region_description:
+  description: |
+    Details about the region.
+  in: body
+  type: string
+  required: false
+region_enabled:
+  description: |
+    Boolean value representing whether the region is enabled or not.
+  in: body
+  type: boolean
+  required: true
+region_id:
+  description: |
+    The ID of the region.
+  in: body
+  type: uuid
+  required: true
+region_mapped_endpoints:
+  description: |
+    Array of cloud endpoint IDs that are mapped to this region.
+  in: body
+  type: array
+  required: true
+region_mapped_services:
+  description: |
+    Array of service IDs that are mapped to this region.
+  in: body
+  type: array
+  required: true
+region_name:
+  description: |
+    The name of the region.
+  in: body
+  type: string
+  required: true
+region_object:
+  description: |
+    Object containing details about a region.
+  in: body
+  type: object
+  required: true
+region_updated_at:
+  description: |
+    Timestamp of last region update.
+  in: body
+  type: string
+  required: true
+regions_array:
+  description: |
+    Array of region objects.
+  in: body
+  type: array
+  required: true
 replica_action_id:
   description: |
     Id of the replica excution.
@@ -545,6 +887,12 @@ replica_execution_tasks:
   in: body
   type: array
   required: true
+replica_execution_type:
+  description: |
+    The type of the replica execution. Can either be 'replica_execution', 'replica_update' or 'replica_disks_delete'
+  in: body
+  type: string
+  required: true
 replica_execution_updated_at:
   description: |
     Timestamp of last replica execution update.
@@ -563,6 +911,12 @@ replica_instances:
   in: body
   type: array
   required: true
+replica_last_execution_status:
+  description: |
+    Last execution status of the current replica.
+  in: body
+  type: string
+  required: true
 replica_network_map:
   description: |
     Object containing the network mapping.
@@ -720,12 +1074,108 @@ replicas_array:
   in: body
   type: array
   required: true
+replication_count:
+  description: |
+    The number of disk syncs performed during a migration.
+  in: body
+  type: integer
+  required: true
 schemas:
   description: |
     Object containing the platform's requested schema.
   in: body
   type: object
   required: true
+service_binary:
+  description: |
+    The name of the service binary.
+  in: body
+  type: string
+  required: true
+service_created_at:
+  description: |
+    Timestamp of service creation.
+  in: body
+  type: string
+  required: true
+service_deleted:
+  description: |
+    Value representing whether the service is deleted or not.
+  in: body
+  type: string
+  required: true
+service_deleted_at:
+  description: |
+    Timestamp of service deletion.
+  in: body
+  type: string
+  required: true
+service_enabled:
+  description: |
+    Boolean representing whether the service is enabled or not.
+  in: body
+  type: boolean
+  required: true
+service_host:
+  description: |
+    The hostname of the service.
+  in: body
+  type: string
+  required: true
+service_id:
+  description: |
+    The ID of the service.
+  in: body
+  type: uuid
+  required: true
+service_mapped_regions:
+  description: |
+    Array of regions mapped to this service.
+  in: body
+  type: array
+  required: false
+service_object:
+  description: |
+    Object containing information about the service.
+  in: body
+  type: object
+  required: true
+service_providers:
+  description: |
+    Object containing mappings of provider names and provider types available to this service.
+  in: body
+  type: object
+  required: true
+service_specs:
+  description: |
+    Object containing miscellaneous specifications about the service.
+  in: body
+  type: object
+  required: true
+service_status:
+  description: |
+    The status of the service. Possible values: "UP", "DOWN", "UNKNOWN".
+  in: body
+  type: string
+  required: true
+service_topic:
+  description: |
+    The name of the service's messaging topic.
+  in: body
+  type: string
+  required: true
+service_updated_at:
+  description: |
+    Timestamp of last service update.
+  in: body
+  type: string
+  required: true
+services_array:
+  description: |
+    Array of service objects.
+  in: body
+  type: array
+  required: true
 skip_os_morphing:
   description: |
     Boolean whether to skip os morphing or not.
@@ -744,6 +1194,12 @@ source_environment_schema:
   in: body
   type: object
   required: false
+source_minion_pool_options:
+  description: |
+    Array that contains the paramter options possible for a minion pool with the endpoint as source.
+  in: body
+  type: array
+  required: true
 source_options:
   description: |
     An array that contains the parameter options possible for
@@ -781,6 +1237,12 @@ user_id:
   in: body
   type: uuid
   required: true
+user_scripts:
+  description: |
+    Mapping between instances selected for migration and custom scripts to be run during OSMorphing stage.
+  in: body
+  type: object
+  required: false
 valid_connection:
   description: |
     A boolean value representing whether the endpoint connection is valid.

+ 216 - 0
coriolis/api-refs/source/region.inc

@@ -0,0 +1,216 @@
+.. -*- rst -*-
+
+=======
+Regions
+=======
+
+Lists, creates, updates, shows details for, and deletes regions.
+
+
+List Regions
+============
+
+.. rest_method:: GET /regions
+
+Lists all regions.
+
+Normal response codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403)
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+    - regions : regions_array
+    - created_at : region_created_at
+    - updated_at : region_updated_at
+    - deleted_at : region_deleted_at
+    - deleted : region_deleted
+    - id : region_id
+    - name : region_name
+    - description : region_description
+    - enabled : region_enabled
+    - mapped_services : region_mapped_services
+    - mapped_endpoints : region_mapped_endpoints
+
+**Example of Region List Response**
+
+    .. literalinclude:: ../api_samples/region/region-list-resp.json
+        :language: javascript
+
+Show Region
+===========
+
+.. rest_method:: GET /regions/{region_id}
+
+Shows details about a region.
+
+**Preconditions**
+
+The region must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - region_id : region_id_path
+
+Response
+--------
+.. rest_parameters:: parameters.yaml
+
+    - region: region_object
+    - created_at : region_created_at
+    - updated_at : region_updated_at
+    - deleted_at : region_deleted_at
+    - deleted : region_deleted
+    - id : region_id
+    - name : region_name
+    - description : region_description
+    - enabled : region_enabled
+    - mapped_services : region_mapped_services
+    - mapped_endpoints : region_mapped_endpoints
+
+**Example of Region Show Response**
+
+    .. literalinclude:: ../api_samples/region/region-show-resp.json
+        :language: javascript
+
+Create Region
+=============
+
+.. rest_method:: POST /regions
+
+Creates a region.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - region : region_object
+    - name : region_name
+    - description : region_description
+    - enabled : region_enabled
+
+**Example of Region Create Request**
+
+    .. literalinclude:: ../api_samples/region/region-create-req.json
+        :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+    - region: region_object
+    - created_at : region_created_at
+    - updated_at : region_updated_at
+    - deleted_at : region_deleted_at
+    - deleted : region_deleted
+    - id : region_id
+    - name : region_name
+    - description : region_description
+    - enabled : region_enabled
+    - mapped_services : region_mapped_services
+    - mapped_endpoints : region_mapped_endpoints
+
+**Example of Region Create Response**
+
+    .. literalinclude:: ../api_samples/region/region-create-resp.json
+        :language: javascript
+
+Update Region
+=============
+
+.. rest_method:: PUT /regions/{region_id}
+
+Updates the already existing region, modifying its name, description or availability.
+
+**Preconditions**
+
+The region must exist.
+
+Normal Response Codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - region_id : region_id_path
+    - region : region_object
+    - name : region_name
+    - description : region_description
+    - enabled : region_enabled
+
+**Example of Region Update Request**
+
+    .. literalinclude:: ../api_samples/region/region-update-req.json
+        :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+    - region: region_object
+    - created_at : region_created_at
+    - updated_at : region_updated_at
+    - deleted_at : region_deleted_at
+    - deleted : region_deleted
+    - id : region_id
+    - name : region_name
+    - description : region_description
+    - enabled : region_enabled
+    - mapped_services : region_mapped_services
+    - mapped_endpoints : region_mapped_endpoints
+
+**Example of Region Update Response**
+
+    .. literalinclude:: ../api_samples/region/region-update-resp.json
+        :language: javascript
+
+Delete Region
+=============
+
+.. rest_method:: DELETE /regions/{region_id}
+
+Deletes a region.
+
+**Preconditions**
+
+The region must exist.
+
+Normal response codes: 204
+
+Error response codes: itemNotFound(404),unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - region_id : region_id_path
+
+Response
+--------
+
+There is no response body for a successful deletion of a region.

+ 35 - 11
coriolis/api-refs/source/replica.inc

@@ -43,6 +43,10 @@ Response
   - destination_endpoint_id : replica_destination_endpoint_id
   - network_map : network_map
   - storage_mappings : storage_map
+  - last_execution_status : replica_last_execution_status
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
 
 **Example of Replica List Response**
 
@@ -96,6 +100,10 @@ Response
   - destination_endpoint_id : replica_destination_endpoint_id
   - network_map : network_map
   - storage_mappings : storage_map
+  - last_execution_status : replica_last_execution_status
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
 
 **Example of Replica Show Response**
 
@@ -119,14 +127,18 @@ 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
+  - 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
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
+  - user_scripts : user_scripts
 
 **Example of Replica Create Request**
 
@@ -157,6 +169,10 @@ Response
   - destination_endpoint_id : replica_destination_endpoint_id
   - network_map : network_map
   - storage_mappings : storage_map
+  - origin_minion_pool_id : origin_minion_pool_id
+  - destination_minion_pool_id : destination_minion_pool_id
+  - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
+  - user_scripts : user_scripts
 
 **Example of Replica Create Response**
 
@@ -211,6 +227,10 @@ Response
       - tasks : replica_execution_tasks
       - action : replica_execution_action
       - id : replica_execution_id
+      - origin_minion_pool_id : origin_minion_pool_id
+      - destination_minion_pool_id : destination_minion_pool_id
+      - instance_osmorphing_minion_pool_mappings : instance_osmorphing_minion_pool_mappings
+      - user_scripts : user_scripts
 
 **Example of Replica Update Response**
 
@@ -229,7 +249,7 @@ Deletes a replica.
 
 The replica must exist and not have a running execution or migration.
 
-Normal response codes: 200
+Normal response codes: 204
 
 Error response codes: unauthorized(401), forbidden(403),
 itemNotFound(404)
@@ -289,6 +309,8 @@ Response
   - status : replica_execution_status
   - number : replica_execution_number
   - tasks : replica_execution_tasks
+  - action : replica_execution_action
+  - type : replica_execution_type
 
 **Example Replica Execution Response**
 
@@ -331,6 +353,7 @@ Response
   - number : replica_execution_number
   - status : replica_execution_status
   - id : replica_execution_id
+  - type : replica_execution_type
 
 **Example Replica Execute Response**
 
@@ -376,6 +399,7 @@ Response
   - tasks : replica_execution_tasks
   - action : replica_execution_action
   - id : replica_execution_id
+  - type : replica_execution_type
 
 
 **Example of Replica Executions Show Response**
@@ -474,7 +498,7 @@ Deletes an replica execution.
 
 The replica execution must not be running.
 
-Normal response codes: 200
+Normal response codes: 204
 
 Error response codes:
 unauthorized(401), forbidden(403), itemNotFound(404)
@@ -724,7 +748,7 @@ Deletes a replica schedule.
 **Preconditions**
 The replica schedule must exist.
 
-Normal response codes: 200
+Normal response codes: 204
 
 Error response codes: unauthorized(401),
 forbidden(403)

+ 229 - 0
coriolis/api-refs/source/service.inc

@@ -0,0 +1,229 @@
+.. -*- rst -*-
+
+========
+Services
+========
+
+Lists, creates, updates, shows details for, and deletes services.
+
+
+List Services
+=============
+
+.. rest_method:: GET /services
+
+Lists all services.
+
+Normal response codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403)
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+    - services : services_array
+    - created_at : service_created_at
+    - updated_at : service_updated_at
+    - deleted_at : service_deleted_at
+    - deleted : service_deleted
+    - id : service_id
+    - host : service_host
+    - binary : service_binary
+    - topic : service_topic
+    - enabled : service_enabled
+    - status : service_status
+    - providers : service_providers
+    - specs : service_specs
+    - mapped_regions : service_mapped_regions
+
+**Example of Service List Response**
+
+    .. literalinclude:: ../api_samples/service/service-list-resp.json
+        :language: javascript
+
+Show service
+============
+
+.. rest_method:: GET /services/{service_id}
+
+Shows details about a service.
+
+**Preconditions**
+
+The service must exist.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - service_id : service_id_path
+
+Response
+--------
+.. rest_parameters:: parameters.yaml
+
+    - service : service_object
+    - created_at : service_created_at
+    - updated_at : service_updated_at
+    - deleted_at : service_deleted_at
+    - deleted : service_deleted
+    - id : service_id
+    - host : service_host
+    - binary : service_binary
+    - topic : service_topic
+    - enabled : service_enabled
+    - status : service_status
+    - providers : service_providers
+    - specs : service_specs
+    - mapped_regions : service_mapped_regions
+
+**Example of Service Show Response**
+
+    .. literalinclude:: ../api_samples/service/service-show-resp.json
+        :language: javascript
+
+Create Service
+==============
+
+.. rest_method:: POST /services
+
+Creates a service.
+
+Normal response codes: 200
+
+Error response codes: unauthorized(401), forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - service : service_object
+    - host : service_host
+    - binary : service_binary
+    - topic : service_topic
+    - enabled : service_enabled
+    - mapped_regions : service_mapped_regions
+
+**Example of Service Create Request**
+
+    .. literalinclude:: ../api_samples/service/service-create-req.json
+        :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+    - service : service_object
+    - created_at : service_created_at
+    - updated_at : service_updated_at
+    - deleted_at : service_deleted_at
+    - deleted : service_deleted
+    - id : service_id
+    - host : service_host
+    - binary : service_binary
+    - topic : service_topic
+    - enabled : service_enabled
+    - status : service_status
+    - providers : service_providers
+    - specs : service_specs
+    - mapped_regions : service_mapped_regions
+
+**Example of Service Create Response**
+
+    .. literalinclude:: ../api_samples/service/service-create-resp.json
+        :language: javascript
+
+Update service
+==============
+
+.. rest_method:: PUT /services/{service_id}
+
+Updates the already existing service, modifying the mapped regions or availability.
+
+**Preconditions**
+
+The service must exist.
+
+Normal Response Codes: 200
+
+Error response codes:   unauthorized(401),
+forbidden(403), itemNotFound(404)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - service_id : service_id_path
+    - service : service_object
+    - mapped_regions : service_mapped_regions
+    - enabled : service_enabled
+
+**Example of Service Update Request**
+
+    .. literalinclude:: ../api_samples/service/service-update-req.json
+        :language: javascript
+
+Response
+--------
+
+.. rest_parameters:: parameters.yaml
+
+    - service : service_object
+    - created_at : service_created_at
+    - updated_at : service_updated_at
+    - deleted_at : service_deleted_at
+    - deleted : service_deleted
+    - id : service_id
+    - host : service_host
+    - binary : service_binary
+    - topic : service_topic
+    - enabled : service_enabled
+    - status : service_status
+    - providers : service_providers
+    - specs : service_specs
+    - mapped_regions : service_mapped_regions
+
+**Example of service Update Response**
+
+    .. literalinclude:: ../api_samples/service/service-update-resp.json
+        :language: javascript
+
+Delete service
+==============
+
+.. rest_method:: DELETE /services/{service_id}
+
+Deletes a service.
+
+**Preconditions**
+
+The service must exist.
+
+Normal response codes: 204
+
+Error response codes: itemNotFound(404),unauthorized(401),
+forbidden(403)
+
+Request
+-------
+
+.. rest_parameters:: parameters.yaml
+
+    - service_id : service_id_path
+
+Response
+--------
+
+There is no response body for a successful deletion of a service.