This was first published on https://blog.dbi-services.com/adwc-a-docker-container-to-startstop-oracle-cloud-services (2018-05-03)
Republishing here for new followers. The content is related to the the versions available at the publication date
In the previous post, I’ve explained how to start and stop the Autonomous Data Warehouse Cloud service from PSM (PaaS Service Manager). There’s a setup phase, and a run phase starting with service-start and ending with service-stop. And the setup is specific to an Oracle Cloud account, storing information in the local user home. You may want to run different setups, and even provide an easy way to start/stop an Oracle Cloud service without knowing the user, password and tenant name.
A Docker container is perfect to isolate this.
Here is my quick (aka experimental) Dockerfile:
FROM alpine:latest RUN apk add --update --no-cache python3 curl ENV user=my.cloud.account@me.com ENV password=MyP@ssw0rd ENV tenant=idcs-31bbd63c3cb9466cb8a96f627b6b6116 ENV region=us # get PSM RUN curl -X GET -u ${user}:${password} -H X-ID-TENANT-NAME:${tenant} https://psm.us.oraclecloud.com/paas/core/api/v1.1/cli/${tenant}/client -o psmcli.zip # install PSM RUN pip3 install -U psmcli.zip # setup PSM RUN echo "{\"username\":\"${user}\",\"password\":\"${password}\",\"identityDomain\":\"${tenant}\",\"region\":\"${region}\",\"outputFormat\":\"short\"}" > config-payload &&\ psm setup --config-payload config-payload &&\ rm 421d64918638 # remove file with password # patch PSM for bugs RUN sed -ie 's/core\\[/]//g' ~/.psm/data/ADWC.json # variables which can be overwritten at run time ENV service=ADWC ENV name=MYADWC1 CMD trap 'echo "Stopping service ${service}...";psm ${service} stop-service --service-name ${name} -wc true ; exit 0' SIGINT SIGSTOP SIGKILL; echo "Starting service ${service}...";psm ${service} start-service --service-name ${name} -wc true || exit 1 ; echo "You can access to ${service} console with ADMIN user at:";echo;psm ${service} service -s ${name} -of json | jq -r '.serviceConsole';echo ; while sleep 60 ; do echo "Status of service ${service} at $(date)...";psm ADWC service -s ADWC ; doneWe need curl to download PSM, and pip3 to install it, and python3 to run it. You can set your Oracle Cloud Account credentials as environment variables. Then it fills all required information in a ‘config-payload’ file, runs ‘psm setup’ and removes that file.
At run, it calls a ‘start-service’ and loops while showing the status every minute (you can see them with docker container logs). The INT, STOP and KILL signals call ‘stop-service’. Then, the idea is that while the container exists, the Cloud Service is running. And it is shutdown at the container end of life. There’s no other action to do with the container: it display the console url where you have everything to interact with the service (download client credentials, manage users, go to Machine Learning notebooks,…).
Here is a simple example:
# docker run --rm franck/psm/awdc Starting service MYADWC1... Message: Job submitted successfully for start of service/system Job ID: 25583108 Waiting for the job to complete... (it cannot be cancelled) Command completed with status [SUCCEED]. You can access to MYADWC1 console with ADMIN user at: https://adwc.uscom-east-1.oraclecloud.com/console/index.html?tenant_name=idcs-31bbd63c3cb9466cb8a96f627b6b6116&database_name=MYADWC1 Status of service MYADWC1 at Sun Apr 29 18:20:50 UTC 2018... Service: MYADWC1 Status: Ready Version: 18.1.4.0 Edition: N/A Compute Site: N/A Cloud Storage Container: N/A Created On: 2018-04-19T19:22:18.360+0000 Status of service MYADWC1 at Sun Apr 29 18:21:51 UTC 2018... Service: MYADWC1 Status: Ready Version: 18.1.4.0 Edition: N/A Compute Site: N/A Cloud Storage Container: N/A Created On: 2018-04-19T19:22:18.360+0000 ^C Stopping service MYADWC1... Message: Job submitted successfully for stop of service/system Job ID: 25620930 Waiting for the job to complete... (it cannot be cancelled) Command completed with status [SUCCEED].
After 2 minutes I’ve hit ‘Control-C’ to stop the container. The service has been cleanly shut-down.
Again something practical. One thought: if you can manage such cloud service from within a Docker container, then you can access it from just any Docker container i.e. DevOps people could use this as a start for their architecture blueprint.