This was first published on https://blog.dbi-services.com/oracle-public-cloud-create-a-database-from-command-line (2016-11-07)
Republishing here for new followers. The content is related to the the versions available at the publication date

Oracle Public Cloud: create a database from command line

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 myuser@oracle.com: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 myuser@oracle.com: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 myuser@oracle.com: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": "myuser@oracle.com",
  "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 myuser@oracle.com: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": "myuser@oracle.com",
  "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 myuser@oracle.com: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": "myuser@oracle.com",
  "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