In this blog post, we will see how to manage Oracle Public Cloud Big Data service Compute Edition with REST API. Scheduling the start/stop/restart of a metered PaaS in the Oracle cloud can be interesting for managing your cloud credits consumptions.
We need first consult the official documentation, to understand how the API is composed. https://docs.oracle.com/en/cloud/paas/big-data-compute-cloud/csbdp/QuickStart.html
Use the following URL composition for accessing to REST endpoint:
https://region-prefix.oraclecloud.com/resource-path
According to Oracle documentation, the following information should be taken into account.
Connection Information:
- Identity Domain: axxxxxx
- REstFull URL: https://psm.europe.oraclecloud.com/
- username -password
Terminology:
- {instanceName} = Name of the BDCS-CE service (= Cluster Name)
- {identityDomainId} = “X-ID-TENANT-NAME: axxxxxx”
- {function} = start, stop, restart
- {allServiceHosts} = the entire cluster VMs (all instances which composed the cluster)
- “Accept: <value>” = Media Type (default value = application/json)
Before starting an automation script to manage your Big Data cluster, execute single GET/POST commands to understand how the API is working.
GET request: View all Service BDCS-CE instances
/paas/api/v1.1/instancemgmt/{identityDomainId}/services/BDCSCE/instances
curl -i -X GET \
        -u "username:password" \
        -H "X-ID-TENANT-NAME: axxxxxx" \
        -H "Accept: application/json" \
        "https://psm.europe.oraclecloud.com/paas/api/v1.1/instancemgmt/axxxxxx/services/BDCSCE/instances"
Result:
HTTP/1.1 200 OK
Server: Oracle-Application-Server-11g
Strict-Transport-Security: max-age=31536000;includeSubDomains
Content-Language: en
...
{"services":{"cluster-iot":{"...
According to the HTTP status code, the command was successful.
GET request: View a specific Service BDCS-CE instances
Add the instance name to get the status of a specific cluster. Note that a BDCS-CE instance is your Big Data cluster.
/paas/api/v1.1/instancemgmt/{identityDomainId}/services/BDCSCE/instances/{instanceName}
curl -i -X GET \
        -u "username:password" \
        -H "X-ID-TENANT-NAME: axxxxxx" \
        -H "Accept: application/json" \
        "https://psm.europe.oraclecloud.com/paas/api/v1.1/instancemgmt/axxxxxx/services/BDCSCE/instances/cluster-iot"
Then use the same requests structure to start/stop/restart your Big Data cluster.
POST request: Start / Stop / Restart Service Instances BDCS-CE: cluster-iot
/paas/api/v1.1/instancemgmt/{identityDomainId}/services/BDCSCE/instances/{instanceName}/hosts/{function}
As it’s specified in the documentation, you need to change the media type to application/vnd.com.oracle.oracloud.provisioning.Service+json and use a body parameter to specify which hosts you want to manage. In our case, we want to manage all cluster hosts.
curl -i -X POST -u "username:password" \
-H "X-ID-TENANT-NAME: axxxxxx" \
-H "Content-Type: application/vnd.com.oracle.oracloud.provisioning.Service+json" \
-d '{"allServiceHosts":"true"}' "https://psm.europe.oraclecloud.com/paas/api/v1.1/instancemgmt/axxxxxx/services/BDCSCE/instances/cluster-iot/hosts/stop"
You can now, start to develop an automation script to manage your Oracle Big Data Compute Edition cluster.
Python prerequistes:
Install Python-PIP before:
dbi@host:~/$ sudo apt-get install python-pip
Install Requests module with PIP:
dbi@host:~/$ sudo pip install requests
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = "Mehdi Bada"
__company__= dbi services sa
__version__ = "1.0"
__maintainer__ = "Mehdi Bada"
__email__ = ""
__status__ = "Dev"
"""
import os, sys, getopt
import requests
import simplejson
import json
# Variables defintion.
identityDomainId="axxxxxx"
instanceName="cluster-iot"
server = "https://psm.europe.oraclecloud.com"
commands = ['start', 'stop', 'restart']
def usage():
    print "\nScript Usage \n"
    print "Usage:", sys.argv[0], "-c [start|stop|restart] | -h \n"
if len(sys.argv) < 3:
    usage()
    sys.exit(2)
try:
    opts, args = getopt.getopt(sys.argv[1:], "ch", ["command", "help"])
except getopt.GetoptError:
    usage()
    sys.exit(2)
for opt, arg in opts:
    if opt in ("-h", "--help"):
        usage()
        sys.exit()
    elif opt in ("-c", "--command"):
        icommand=sys.argv[2]
        if icommand in commands:
                icommand=sys.argv[2]
        else:
                usage()
                sys.exit(2)
url = server + "/paas/api/v1.1/instancemgmt/%s/services/BDCSCE/instances/%s/hosts/%s" % (identityDomainId,instanceName,icommand)
payload = "{\"allServiceHosts\":\"true\"}"
headers = {
    'x-id-tenant-name': "%s" %(identityDomainId),
    'accept': "application/vnd.com.oracle.oracloud.provisioning.Service+json",
    'content-type': "application/json",
    'authorization': " ",
    }
response = requests.request("POST", url, data=payload, headers=headers)
# Print the status code of the response.
print("\n")
print(response.status_code)
# Json Parsing
content=response.content
j = simplejson.loads(content)
print (j['details']['message'])
Usage:
dbi@host:~/$ ./bdcsce_start_stop_test.py -h Script Usage Usage: ./bdcsce_start_stop_test.py -c [start|stop|restart] | -h
Oracle REST API is not very well documented, that why multiple tests should be performed before understanding how it works.
Cet article Managing Oracle Big Data Cloud – CE with REST API est apparu en premier sur Blog dbi services.