mnjstwins
12/9/2016 - 6:33 PM

Work with Digital Ocean from InterSystems Caché

Work with Digital Ocean from InterSystems Caché

<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25" zv="Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2015.2 (Build 664U)" ts="2016-04-05 13:01:04">
<Class name="DO.Utils">
<Super>%CSP.REST</Super>
<TimeChanged>64013,44584.975713</TimeChanged>
<TimeCreated>64013,41190.502637</TimeCreated>

<Parameter name="KEY">
<Description>
Your API token</Description>
<Default>1</Default>
</Parameter>

<Parameter name="IDLIST">
<Description>
Comma-separated list of droplet id's</Description>
<Default>111111,222222</Default>
</Parameter>

<Parameter name="SSLConfig">
<Description>
SSL configuration name</Description>
<Default>DO</Default>
</Parameter>

<XData name="UrlMap">
<XMLNamespace>http://www.intersystems.com/urlmap</XMLNamespace>
<Data><![CDATA[
<Routes>

<Route Url="/action/:dropletid/:action" Method="GET" Call="Action"/>
</Routes>
]]></Data>
</XData>

<Method name="Info">
<Description>
Do ##class(DO.Utils).Info()</Description>
<ClassMethod>1</ClassMethod>
<Implementation><![CDATA[
	Set Request = ##class(%Net.HttpRequest).%New()
	Set Request.Server = "api.digitalocean.com"
	Set Request.Https = 1
	Set Request.SSLConfiguration = ..#SSLConfig
	Do Request.SetHeader("Authorization","Bearer " _ ..#KEY)
	Set Request.Location = "/v2/droplets"
	Do Request.SetParam("page",2)
	Do Request.Get("",2)
]]></Implementation>
</Method>

<Method name="Action">
<Description>
Do ##class(DO.Utils).Action()</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>Id=-1,Action="reboot"</FormalSpec>
<Implementation><![CDATA[
	Return:((Action'="reboot") && (Action'="power_cycle")) $$$ERROR($$$GeneralError, "Availible actions are ""reboot"" or ""power_cycle""")
	Return:(..#IDLIST '[ Id) $$$ERROR($$$GeneralError, "This is not an approved ID")
	
	Set Request = ##class(%Net.HttpRequest).%New()
	Set Request.Server = "api.digitalocean.com"
	Set Request.Https = 1
	Set Request.SSLConfiguration = ..#SSLConfig
	Set Request.ContentType = "application/json"
	Do Request.SetHeader("Authorization","Bearer " _ ..#KEY)
	Set Request.Location = "/v2/droplets/" _ Id _ "/actions"
	
	Set Body = ##class(%ZEN.proxyObject).%New()
	Set Body.type = Action
	Do ##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONStreamFromObject(Request.EntityBody, Body)	
	
	Set st =  Request.Post("")
	Return:$$$ISERR(st) st
	Set Data = Request.HttpResponse.Data
	Write Data.Read($$$MaxCacheInt)
	Return $$$OK
]]></Implementation>
</Method>
</Class>
</Export>