Skip to content

Commit debae7b

Browse files
committed
Merge pull request #365 from uProxy/gitlaura-destroy-cloud-server
Added OAuth to provisioner stop method
2 parents a058050 + 385252d commit debae7b

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/cloud/digitalocean/provisioner.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const DEFAULT_SIZE: string = '1gb';
1919

2020
const 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

Comments
 (0)