create droplets

This commit is contained in:
Henry Ault 2015-04-29 19:24:24 -07:00
parent c53723140a
commit 6c0a645c92
2 changed files with 121 additions and 39 deletions

View File

@ -13,17 +13,21 @@
++ droplet ++ droplet
$: id=@ name=@t memory=@ud vcpus=@ud disk=@ud locked=? $: id=@ name=@t memory=@ud vcpus=@ud disk=@ud locked=?
created=@t status=@t backup-ids=(list ,@t) snapshot-ids=(list ,@t) created=@t status=@t backup-ids=(list ,@t) snapshot-ids=(list ,@t)
features=(list ,@t) region=[name=@t slug=@t sizes=(list ,@t)] image=img size=json features=(list ,@t) region=[name=@t slug=@t sizes=(list ,@t)] image=img
size-slug=@t networks=ntwrks kernel=json next-backup-window=json size=json size-slug=@t networks=ntwrks kernel=kern
next-backup-window=json
== ==
++ kern ,~ ++ kern ,[id=@ud name=@t version=@t]
++ img ++ img
$: id=@ud name=@t distribution=@t slug=@t public=? regions=(list ,@t) $: id=@ud name=@t distribution=@t slug=@t public=? regions=(list ,@t)
created-at=@t type=@t min-disk-size=@ud created-at=@t type=@t min-disk-size=@ud
== ==
++ ntwrks ,[v4=v v6=v] ++ ntwrks ,[v4=(list v) v6=(list v)]
++ v ,[ip-address=@t netmask=@t gateway=@t type=@t] ++ v ,[ip-address=@t netmask=@t gateway=@t type=@t]
++ regn ,~ ++ size
$: memory=@ud price-monthly=@ud price-hourly=@ud disk=@ud vcpus=@ud
slug=@t transfer=@ud available=? regions=(list ,@t)
==
++ axle ,[ke=keys toke=tokens drops=droplet] ++ axle ,[ke=keys toke=tokens drops=droplet]
++ keys ,[authc=(unit ,@t) client-secret=(unit ,@t)] ++ keys ,[authc=(unit ,@t) client-secret=(unit ,@t)]
++ tokens ,[access=@t refresh=@t] ++ tokens ,[access=@t refresh=@t]
@ -44,42 +48,38 @@ $% [%thou p=httr]
-- --
|% |%
++ parse-id ++ parse-img
=> jo => jo
%- ot :~ id/ni name/so distribution/so slug/so public/bo %- ot
regions/(ar so) created-at/so type/so min-disk-size/ni :~ id/ni name/so distribution/so slug/so public/bo
regions/(ar so) 'created_at'^so type/so 'min_disk_size'^ni
== ==
++ parse-ntwrks ++ parse-ntwrks
=> jo => jo
%- ot %- ot
:+ v4/(ot ip-address/so netmask/so gateway/so type/so ~) :+ v4/(ar (ot 'ip_address'^so netmask/so gateway/so type/so ~))
v6/(ot ip-address/so netmask/so gateway/so type/so ~) v6/(ar (ot 'ip_address'^so netmask/so gateway/so type/so ~))
~ ~
++ parse-size
=> jo
%- ot
:~ memory/ni 'price_monthly'^ni 'price_hourly'^ni disk/ni
slug/so transfer/ni available/bo regions/(ar so)
==
++ create-body
|= $: name=@t region=@t size=@t image=@t :: ssh-keys=(list json)
::backups=? ipv6=? user-data=@t private-networking=?
==
%- jobe
:~ name/s/name region/s/region size/s/size image/s/image
:: 'ssh_keys'^a/ssh-keys backups/b/backups ipv6/b/ipv6
:: 'user_data'^s/user-data 'private_networking'^b/private-networking
==
-- --
!: !:
|_ [hid=hide vat=axle] |_ [hid=hide vat=axle]
:: ::
++ receive-list ++ auth-queries
|= [ost=bone pour-path=path resp=sign]
~& resp
=+ parsed=(rash q:(need r.p.+.resp) apex:poja)
=+ dar=(need ((ot droplets/(ar some) ~):jo parsed))
=+ ^- drop=droplet
~| 'bad json'
%- need
%. `json`-.dar =+ jo
%^ ot id/ni name/so
:^ memory/ni vcpus/ni disk/ni
:^ locked/bo 'created_at'^so status/so
:^ 'backup_ids'^(ar so) 'snapshot_ids'^(ar so) features/(ar so)
:^ region/(ot name/so slug/so sizes/(ar so) ~) image/parse-id size/some
:^ 'size_slug'^so networks/parse-ntwrks kernel/some ::(ot id/ni name/so version/so ~)
:- 'next_backup_window'^some ~
~& drop
:_ +>.$
[ost %give %nice ~]~
::
++ auth-queries
:~ 'grant_type'^'authorization_code' :~ 'grant_type'^'authorization_code'
'code'^(need authc.ke.vat) 'code'^(need authc.ke.vat)
:- 'client_id' :- 'client_id'
@ -89,7 +89,7 @@ $% [%thou p=httr]
++ httpreq ++ httpreq
|= $: ost=bone pour-path=wire |= $: ost=bone pour-path=wire
domain=(list cord) end-point=path domain=(list cord) end-point=path
req-type=$?(%get %post) headers=math req-type=$?(%get [%post json]) headers=math
queries=quay queries=quay
== ==
^- move ^- move
@ -102,7 +102,9 @@ $% [%thou p=httr]
q-strings=queries :: ++quay q-strings=queries :: ++quay
=+ ^- request=hiss :: cast to hiss =+ ^- request=hiss :: cast to hiss
:- parsed-url :- parsed-url
[req-type headers ~] :: post ?@ req-type
[%get headers ~]
[%post headers ~ (tact (pojo +.req-type))]
:^ ost %pass pour-path :^ ost %pass pour-path
:+ %e %them :+ %e %them
`(unit hiss)`[~ request] `(unit hiss)`[~ request]
@ -133,7 +135,7 @@ $% [%thou p=httr]
:_ [ost %give %nice ~]~ :_ [ost %give %nice ~]~
%^ httpreq ost /auth %^ httpreq ost /auth
:^ ~[%digitalocean %cloud] `path`/v1/oauth/token :^ ~[%digitalocean %cloud] `path`/v1/oauth/token
%post [%post ~]
:- ~ `quay`['client_secret'^(need client-secret.ke.vat) auth-queries] :- ~ `quay`['client_secret'^(need client-secret.ke.vat) auth-queries]
:: ::
++ receive-auth ++ receive-auth
@ -150,16 +152,27 @@ $% [%thou p=httr]
:: ::
++ poke-json ++ poke-json
|= [ost=bone you=ship act=json] |= [ost=bone you=ship act=json]
=+ do=(need (so:jo act)) =+ do=(need ((ot action/so ~):jo act))
?+ do !! ?+ do !!
%list %list
:_ +>.$ :_ +>.$
:+ [(list-droplets ost)] :+ [(list-droplets ost)]
[ost %give %nice ~] [ost %give %nice ~]
~ ~
%suth-else %create
:_ +>.$ :_ +>.$
[ost %give %nice ~]~ =+ ^= deets
%- need
%. act
=> jo
%- ot
:~ name/so region/so size/so image/so ssh/(ar so) backups/(mu bo)
'ipv6'^(mu bo) 'priv_networking'^(mu bo) 'user_data'^(mu so)
==
~& deets
:::+ [(create-droplet ost)]
[ost %give %nice ~]~
::~
== ==
:: ::
++ list-droplets ++ list-droplets
@ -173,6 +186,42 @@ $% [%thou p=httr]
== ==
(httpreq lis) (httpreq lis)
:: ::
++ receive-list
|= [ost=bone pour-path=path resp=sign]
~& resp
=+ parsed=(rash q:(need r.p.+.resp) apex:poja)
=+ dar=(need ((ot droplets/(ar some) ~):jo parsed))
=+ ^- drop=droplet
~| bad-json/-.dar
%- need
%. `json`-.dar =+ jo
%- ot
:~ id/ni name/so
memory/ni vcpus/ni disk/ni
locked/bo 'created_at'^so status/so
'backup_ids'^(ar so) 'snapshot_ids'^(ar so) features/(ar so)
region/(ot name/so slug/so sizes/(ar so) ~) image/parse-img size/some
'size_slug'^so networks/parse-ntwrks kernel/(ot id/ni name/so version/so ~)
'next_backup_window'^some
==
~& drop
:_ +>.$
[ost %give %nice ~]~
::
++ create-droplet
|= os=bone
~& 'reached'
=+ ^= create :*
os /create
~[%digitalocean %api] /v2/droplets
:- %post
(create-body 'test2' 'nyc3' '512mb' 'ubuntu-14-04-x64')
%^ mo ['Content-Type' 'application/json' ~]
['Authorization' (cat 3 'Bearer ' access.toke.vat) ~] ~
~
==
(httpreq create)
::
++ pour ++ pour
|= [ost=bone pour-path=path resp=sign] |= [ost=bone pour-path=path resp=sign]
^- [(list move) _+>.$] ^- [(list move) _+>.$]
@ -182,5 +231,9 @@ $% [%thou p=httr]
:: ::
%list %list
(receive-list ost pour-path resp) (receive-list ost pour-path resp)
%create
~& created/resp
:_ +>.$
[ost %give %nice ~]~
== ==
-- --

View File

@ -25,7 +25,24 @@ Page = recl({
getList: function(){ getList: function(){
urb.send({appl: "do", urb.send({appl: "do",
data: "list", data: {action:"list"},
mark: "json"})
},
createDroplet: function(){
urb.send({appl: "do",
data: {
action:'create',
name:$('#name').val(),
region:$('#region').val(),
size:$('#size').val(),
image:$('#image').val(),
ssh:[$('#ssh').val()],
backups:null,//$('#backups').val(),
ipv6:null,//$('#ipv6').val(),
priv_networking:null,//$('#priv-networking').val(),
user_data:null//$('#user-data').val()
},
mark: "json"}) mark: "json"})
}, },
@ -42,7 +59,19 @@ Page = recl({
input({id:"appsecret"}, input({id:"appsecret"},
b({onClick:this.sendSecret}, "Send Secret")) b({onClick:this.sendSecret}, "Send Secret"))
]), ]),
b({onClick:this.getList}, "Get List") b({onClick:this.getList}, "Get List"),
div({}, [
b({onClick:this.createDroplet}, "Create Droplet"),
input({id:"name",placeholder:"Name of droplet"}),
input({id:"region",placeholder:"Region"}),
input({id:"size",placeholder:"Size (str ending in mb"}),
input({id:"image",placeholder:"Image"}),
input({id:"ssh",placeholder:"ssh keys (optional)"}),
input({id:"backups",placeholder:"backups (optional)"}),
input({id:"ipv6",placeholder:"ipv6 (boolean, optional)"}),
input({id:"user-data",placeholder:" user-data string (optional)"}),
input({id:"priv-networking",placeholder:"Private Networking (boolean, optional)"})
])
]) ])
) )
} }