By Franck Pachot

.
You love the Oracle Public Cloud with its simple Web interface? Great. But what if you want to automate a database creation from command line?
Easy with the CURL and REST API.

JSON

First, you need to create a JSON file with all the information for your service.
Everything is documented: https://apicatalog.oraclecloud.com/ui/views/apicollection/oracle-public/database/1.1/serviceinstances


$ cat createrequestbody.json
 
{
  "description": "Mon Nov  7 21:03:39 CET 2016",
  "edition": "EE_HP",
  "level": "PAAS",
  "serviceName": "CDB122",
  "shape": "oc3",
  "subscriptionType": "MONTHLY",
  "version": "12.2.0.1",
  "vmPublicKeyText": "ssh-dss AAAAB3NzaC1kc3MAAACBAMrw5Au0hHP1BT/W3gcSg+Fwq36LdfzroubjS6g8RSvcaeltk1O/uQwJV73MCsBDgs4PaAuDekZTW5w6kN8ESd6r6BGLm/sETHNiRzOWWap3ds18iiaLJWcMbKRlZUWLdfhGemryWZaQIFrSNkfE5YkFz4V4m5d4EwKpLzIthKh3AAAAFQDtjTsaF7nydePPJPDqYERu8QlcMQAAAIBjl8NxEmE7nud7b4xuLkuJKnwlf2urHrOZGcQapNUZAjuehe6/8VhPB4GebZb52GlyYOuELDP6e9PXyFRxTfTPff22JE5tPM8vTjCmFEKhBspl43YurJxwvDtvgTNKk5Zp5MBXMDjQ8KNHXlpnRrfh45acHI8gs0KlH51+e7j+6AAAAIA/Q8rVC4g+MBepJGKed2ar0JzralZo7Q8vsZfQ889Y3wkaBJl2/SRaaW1JNmkB20eZIEbRkh9e/ex07ryKg65dgUzU4/2dE2CSxplG0vSf/xp7hYr/bJzR1SZXMKbAdZ2wg+SGaTlKWAAS9xhvKGw1jVWdVgacYJOPl343bMKkuw==",
  "parameters": [
    {
      "type": "db",
      "usableStorage": "15",
      "adminPassword": "P4ss#ord",
      "sid": "CDB122",
      "pdbName": "PDB1",
      "failoverDatabase": "no",
      "backupDestination": "NONE"
    }
  ]
}

You can see that you have exactly the same information as from the GUI.

Create Instance

Then, you run the following CURL command (having the cacert.pem certificate in the current directory:


$ curl --include --request POST --cacert ./cacert.pem --user [email protected]:P4ss#ord --header "X-ID-TENANT-NAME:opcoct" --header "Content-Type:application/json" --data @createrequestbody.json https://dbcs.emea.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/opcoct
 
HTTP/2 202
server: Oracle-Application-Server-11g
location: https://dbcs.emea.oraclecloud.com:443/paas/service/dbcs/api/v1.1/instances/opcoct/status/create/job/2738110
content-language: en
access-control-allow-origin: *
access-control-allow-headers: Content-Type, api_key, Authorization
retry-after: 60
access-control-allow-methods: GET, POST, DELETE, PUT, OPTIONS, HEAD
x-oracle-dms-ecid: 005GBi63mCP3n315RvWByd0003Ri0004Zg
x-oracle-dms-ecid: 005GBi63mCP3n315RvWByd0003Ri0004Zg
service-uri: https://dbcs.emea.oraclecloud.com:443/paas/service/dbcs/api/v1.1/instances/opcoct/CDB122
x-frame-options: DENY
content-type: application/json
vary: user-agent
date: Mon, 07 Nov 2016 20:03:59 GMT

Here “opcoct” is my identity domain id. You find it in the header X-ID-TENANT-NAME and the URL.
The [email protected]:P4ss#ord is the user and password in the domain.

From the GUI you can see that the creation has started:

CaptureDBAASREST01

DBaaS instance information

Here is the information for the database service


$ curl --include --request GET --cacert ./cacert.pem --user [email protected]:P4ss#ord --header "X-ID-TENANT-NAME:opcoct" https://dbcs.emea.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/opcoct/CDB122
 
HTTP/2 200
server: Oracle-Application-Server-11g
content-language: en
service-uri: https://dbcs.emea.oraclecloud.com:443/paas/service/dbcs/api/v1.1/instances/opcoct/CDB122
access-control-allow-headers: Content-Type, api_key, Authorization
access-control-allow-methods: GET, POST, DELETE, PUT, OPTIONS, HEAD
x-oracle-dms-ecid: 005GBiK7U4I3z015Rvl3id00071a0000yo
x-oracle-dms-ecid: 005GBiK7U4I3z015Rvl3id00071a0000yo
access-control-allow-origin: *
x-frame-options: DENY
content-type: application/json
vary: user-agent
date: Mon, 07 Nov 2016 20:07:52 GMT
content-length: 1244
 
{
  "service_name": "CDB122",
  "version": "12.2.0.1",
  "status": "In Progress",
  "description": "Mon Nov  7 21:03:39 CET 2016",
  "identity_domain": "opcoct",
  "creation_time": "2016-11-07T20:03:59.524+0000",
  "last_modified_time": "2016-11-07T20:03:59.505+0000",
  "created_by": "[email protected]",
  "sm_plugin_version": "16.4.3-541",
  "service_uri": "https:\/\/dbcs.emea.oraclecloud.com:443\/paas\/service\/dbcs\/api\/v1.1\/instances\/opcoct\/CDB122",
  "num_nodes": 1,
  "level": "PAAS",
  "edition": "EE_HP",
  "shape": "oc3",
  "subscriptionType": "MONTHLY",
  "creation_job_id": "2738110",
  "num_ip_reservations": 1,
  "backup_destination": "NONE",
  "failover_database": false,
  "rac_database": false,
  "sid": "CDB122",
  "pdbName": "PDB1",
  "demoPdb": "",
  "listenerPort": 1521,
  "timezone": "UTC",
  "is_clone": false,
  "clone_supported_version": "16.3.1",
  "active_jobs": [
    {
      "active_job_operation": "start-db-compute-resources",
      "active_job_id": 2738113,
      "active_job_messages": []
    },
    {
      "active_job_operation": "create-dbaas-service",
      "active_job_id": 2738110,
      "active_job_messages": []
    }
  ],
  "compute_site_name": "EM003_Z19",
  "jaas_instances_using_service": ""
}

The status is ‘in progress’. Let’s look at the compute service.

Compute instance information

From the compute service, you can see if there is already an IP address assigned here


$ curl --include --request GET --cacert ./cacert.pem --user [email protected]:P4ss#ord --header "X-ID-TENANT-NAME:opcoct" https://dbcs.emea.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/opcoct/CDB122/servers
 
HTTP/2 200
server: Oracle-Application-Server-11g
content-language: en
access-control-allow-headers: Content-Type, api_key, Authorization
access-control-allow-methods: GET, POST, DELETE, PUT, OPTIONS, HEAD
x-oracle-dms-ecid: 005GBiMizXo3z015Rvl3id00071a0004p_
x-oracle-dms-ecid: 005GBiMizXo3z015Rvl3id00071a0004p_
access-control-allow-origin: *
x-frame-options: DENY
content-type: application/json
vary: user-agent
date: Mon, 07 Nov 2016 20:08:35 GMT
content-length: 430
 
[{
  "status": "Running",
  "creation_job_id": "2738110",
  "creation_time": "2016-11-07T20:03:59.524+0000",
  "created_by": "[email protected]",
  "shape": "oc3",
  "sid": "CDB122",
  "pdbName": "PDB1",
  "listenerPort": 1521,
  "connect_descriptor": "CDB122:1521\/PDB1",
  "connect_descriptor_with_public_ip": "null:1521\/PDB1",
  "initialPrimary": true,
  "storageAllocated": 142336,
  "reservedIP": "",
  "hostname": "CDB122"
}]

No IP address yet. I have the job id (2738110) so that I can check it later.

Job information


$ curl --include --request GET --cacert ./cacert.pem --user [email protected]:P4ss#ord --header "X-ID-TENANT-NAME:opcoct" https://dbcs.emea.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/opcoct/status/create/job/2738110
 
HTTP/2 202
server: Oracle-Application-Server-11g
location: https://dbcs.emea.oraclecloud.com:443/paas/service/dbcs/api/v1.1/instances/opcoct/status/create/job/2738110
content-language: en
access-control-allow-origin: *
access-control-allow-headers: Content-Type, api_key, Authorization
retry-after: 60
access-control-allow-methods: GET, POST, DELETE, PUT, OPTIONS, HEAD
x-oracle-dms-ecid: 005GBiOeMbz3n315RvWByd0003Ri00048d
x-oracle-dms-ecid: 005GBiOeMbz3n315RvWByd0003Ri00048d
service-uri: https://dbcs.emea.oraclecloud.com:443/paas/service/dbcs/api/v1.1/instances/opcoct/CDB122
x-frame-options: DENY
content-type: application/json
vary: user-agent
date: Mon, 07 Nov 2016 20:09:08 GMT
 
{
  "service_name": "CDB122",
  "version": "12.2.0.1",
  "status": "In Progress",
  "description": "Mon Nov  7 21:03:39 CET 2016",
  "identity_domain": "opcoct",
  "creation_time": "2016-11-07T20:03:59.524+0000",
  "last_modified_time": "2016-11-07T20:03:59.505+0000",
  "created_by": "[email protected]",
  "sm_plugin_version": "16.4.3-541",
  "service_uri": "https:\/\/dbcs.emea.oraclecloud.com:443\/paas\/service\/dbcs\/api\/v1.1\/instances\/opcoct\/CDB122",
  "message": ["Starting Compute resources..."],
  "job_start_date": "Mon Nov 07 20:04:01 GMT 2016",
  "job_status": "InProgress",
  "job_operation": "create-dbaas-service",
  "job_request_params": {
    "edition": "EE_HP",
    "vmPublicKeyText": "ssh-dss AAAAB3NzaC1kc3MAAACBAMrw5Au0hHP1BT/W3gcSg+Fwq36LdfzroubjS6g8RSvcaeltk1O/uQwJV73MCsBDgs4PaAuDekZTW5w6kN8ESd6r6BGLm/sETHNiRzOWWap3ds18iiaLJWcMbKRlZUWLdfhGemryWZaQIFrSNkfE5YkFz4V4m5d4EwKpLzIthKh3AAAAFQDtjTsaF7nydePPJPDqYERu8QlcMQAAAIBjl8NxEmE7nud7b4xuLkuJKnwlf2urHrOZGcQapNUZAjuehe6/8VhPB4GebZb52GlyYOuELDP6e9PXyFRxTfTPff22JE5tPM8vTjCmFEKhBspl43YurJxwvDtvgTNKk5Zp5MBXMDjQ8KNHXlpnRrfh45acHI8gs0KlH51+e7j+6AAAAIA/Q8rVC4g+MBepJGKed2ar0JzralZo7Q8vsZfQ889Y3wkaBJl2/SRaaW1JNmkB20eZIEbRkh9e/ex07ryKg65dgUzU4/2dE2CSxplG0vSf/xp7hYr/bJzR1SZXMKbAdZ2wg+SGaTlKWAAS9xhvKGw1jVWdVgacYJOPl343bMKkuw==",
    "count": "2",
    "provisioningTimeout": "180",
    "subscriptionType": "MONTHLY",
    "createStorageContainerIfMissing": "false",
    "dbConsolePort": "1158",
    "listenerPort": "1521",
    "serviceName": "CDB122",
    "namespace": "dbaas",
    "version": "12.2.0.1",
    "timezone": "UTC",
    "pdbName": "PDB1",
    "level": "PAAS",
    "tenant": "opcoct",
    "serviceInstance": "CDB122",
    "description": "Mon Nov  7 21:03:39 CET 2016",
    "failoverDatabase": "false",
    "emExpressPort": "5500",
    "ncharset": "AL16UTF16",
    "trial": "false",
    "sid": "CDB122",
    "noRollback": "false",
    "operationName": "create-dbaas-service",
    "goldenGate": "false",
    "backupDestination": "NONE",
    "ibkup": "false",
    "charset": "AL32UTF8",
    "serviceVersion": "12.2.0.1",
    "shape": "oc3",
    "identity_domain_id": "opcoct",
    "serviceType": "dbaas",
    "usableStorage": "15",
    "disasterRecovery": "false",
    "server_base_uri": "https:\/\/dbcs.emea.oraclecloud.com:443\/paas\/service\/dbcs\/",
    "computeSiteName": "EM003_Z19",
    "isRac": "false"
  }
}

REST Endpoint

Here, my test is on the EMEA datacenter and this is why the URL starts with https://dbcs.emea.oraclecloud.com
If you don’t know, you can check on My Cloud Services where you have all information:
CaptureDBAASREST02