@@ -19,6 +19,7 @@ const DEFAULT_SIZE: string = '1gb';
1919
2020const STATUS_CODES : { [ k : string ] : string ; } = {
2121 'START' : 'Starting provisioner' ,
22+ 'STOP' : 'Stopping cloud server' ,
2223 'OAUTH_INIT' : 'Initializing oauth flow' ,
2324 'OAUTH_ERROR' : 'Error getting oauth token' ,
2425 'OAUTH_COMPLETE' : 'Got oauth token' ,
@@ -99,13 +100,28 @@ class Provisioner {
99100
100101 /**
101102 * One-click destruction of a VM
102- * See freedom-module.json for return and error types
103- * @todo currently doesnt wait for destroy to complete before resolving
104103 * @param {String } name of VM to create
105- * @return {Promise.<Object> }
104+ * @return {Promise.<void> }
105+ */
106+ public stop = ( name : string ) : Promise < void > => {
107+ this . sendStatus_ ( 'STOP' ) ;
108+ return this . doOAuth_ ( ) . then ( ( oauthObj : any ) => {
109+ this . state_ . oauth = oauthObj ;
110+ } ) . then ( ( ) => {
111+ return this . destroyServer_ ( name ) ;
112+ } ) ;
113+ }
114+
115+ /**
116+ * Destroys cloud server; assumes OAuth has already been completed
117+ * @todo DELETE request does not return a response body so we
118+ * need to check that the response header indicates success (204)
119+ * @param {String } droplet name, as a string
120+ * @return {Promise.<void> }
106121 */
107- public stop = ( name : string ) : Promise < Object > => {
122+ private destroyServer_ = ( name : string ) : Promise < void > => {
108123 return this . doRequest_ ( 'GET' , 'droplets' ) . then ( ( resp : any ) => {
124+ // Find and delete the server with the same name
109125 for ( var i = 0 ; i < resp . droplets . length ; i ++ ) {
110126 if ( resp . droplets [ i ] . name === name ) {
111127 return Promise . resolve ( {
@@ -115,10 +131,11 @@ class Provisioner {
115131 }
116132 return Promise . reject ( {
117133 'errcode' : 'VM_DNE' ,
118- 'message' : 'Droplet with name, ' + name + ', doesnt exist'
134+ 'message' : 'Droplet ' + name + ' doesnt exist'
119135 } ) ;
120136 } ) . then ( ( resp : any ) => {
121- return this . doRequest_ ( 'DELETE' , 'droplets/' + resp . droplet . id ) ;
137+ this . doRequest_ ( 'DELETE' , 'droplets/' + resp . droplet . id ) ;
138+ return Promise . resolve < void > ( ) ;
122139 } ) ;
123140 }
124141
0 commit comments