3 * Copyright 2016 RIFT.IO Inc
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
22 var request
= require('request');
23 var Promise
= require('promise');
24 var _
= require('underscore');
25 var utils
= require('../../../../framework/core/api_utils/utils.js');
26 var constants
= require('../../../../framework/core/api_utils/constants.js');
27 var APIVersion
= '/v1';
30 Cloud
.get = function(req
) {
33 var api_server
= req
.query
["api_server"];
34 var id
= req
.params
.id
|| req
.params
.name
;
37 // Get all cloud accounts
38 return new Promise(function(resolve
, reject
) {
40 var requestHeaders
= {};
41 _
.extend(requestHeaders
,
42 constants
.HTTP_HEADERS
.accept
.collection
, {
43 'Authorization': req
.get('Authorization')
47 url
: utils
.confdPort(api_server
) + APIVersion
+ '/api/operational/cloud/account',
49 headers
: requestHeaders
,
50 forever
: constants
.FOREVER_ON
,
51 rejectUnauthorized
: false
53 function(error
, response
, body
) {
55 if (utils
.validateResponse('Cloud.get', error
, response
, body
, resolve
, reject
)) {
57 data
= JSON
.parse(response
.body
).collection
['rw-cloud:account']
59 console
.log('Problem with "Cloud.get"', e
);
63 error
: 'Problem with "Cloud.get": ' + e
// + e.toString()
68 statusCode
: response
.statusCode
,
69 data
: self
.poolAggregate(data
)
75 //Get a specific cloud account
76 return new Promise(function(resolve
, reject
) {
77 var requestHeaders
= {};
78 _
.extend(requestHeaders
,
79 constants
.HTTP_HEADERS
.accept
.data
, {
80 'Authorization': req
.get('Authorization')
84 url
: utils
.confdPort(api_server
) + APIVersion
+ '/api/operational/cloud/account/' + id
,
86 headers
: requestHeaders
,
87 forever
: constants
.FOREVER_ON
,
88 rejectUnauthorized
: false
90 function(error
, response
, body
) {
92 if (utils
.validateResponse('Cloud.get', error
, response
, body
, resolve
, reject
)) {
94 data
= JSON
.parse(response
.body
)['rw-cloud:account'];
96 console
.log('Problem with "Cloud.get"', e
);
100 error
: 'Problem with "Cloud.get": ' + e
.toString()
106 statusCode
: response
.statusCode
,
115 Cloud
.create = function(req
) {
117 var api_server
= req
.query
["api_server"];
120 return new Promise(function(resolve
, reject
) {
122 "account": Array
.isArray(data
) ? data
: [data
]
125 console
.log('Creating with', JSON
.stringify(jsonData
));
127 var requestHeaders
= {};
128 _
.extend(requestHeaders
,
129 constants
.HTTP_HEADERS
.accept
.data
,
130 constants
.HTTP_HEADERS
.content_type
.data
, {
131 'Authorization': req
.get('Authorization')
135 url
: utils
.confdPort(api_server
) + APIVersion
+ '/api/config/cloud',
137 headers
: requestHeaders
,
138 forever
: constants
.FOREVER_ON
,
139 rejectUnauthorized
: false,
141 }, function(error
, response
, body
) {
142 console
.log('Handling Cloud Create response')
143 if (utils
.validateResponse('Cloud.create', error
, response
, body
, resolve
, reject
)) {
145 statusCode
: response
.statusCode
,
146 data
: JSON
.stringify(response
.body
)
153 Cloud
.update = function(req
) {
155 var api_server
= req
.query
["api_server"];
156 var id
= req
.params
.id
|| req
.params
.name
;
159 return new Promise(function(resolve
, reject
) {
161 "rw-cloud:account": data
164 console
.log('Updating ', id
, ' with', JSON
.stringify(jsonData
));
166 var requestHeaders
= {};
167 _
.extend(requestHeaders
,
168 constants
.HTTP_HEADERS
.accept
.data
,
169 constants
.HTTP_HEADERS
.content_type
.data
, {
170 'Authorization': req
.get('Authorization')
174 url
: utils
.confdPort(api_server
) + APIVersion
+ '/api/config/cloud/account/' + id
,
176 headers
: requestHeaders
,
177 forever
: constants
.FOREVER_ON
,
178 rejectUnauthorized
: false,
180 }, function(error
, response
, body
) {
181 if (utils
.validateResponse('Cloud.update', error
, response
, body
, resolve
, reject
)) {
183 statusCode
: response
.statusCode
,
184 data
: JSON
.stringify(response
.body
)
191 Cloud
.delete = function(req
) {
193 var api_server
= req
.query
["api_server"];
194 var id
= req
.params
.id
|| req
.params
.name
;
196 if (!id
|| !api_server
) {
197 return new Promise(function(resolve
, reject
) {
198 console
.log('Must specifiy api_server and id to delete cloud account');
202 error
: 'Must specifiy api_server and id to delete cloud account'
208 return new Promise(function(resolve
, reject
) {
209 var requestHeaders
= {};
210 _
.extend(requestHeaders
,
211 constants
.HTTP_HEADERS
.accept
.data
, {
212 'Authorization': req
.get('Authorization')
215 url
: utils
.confdPort(api_server
) + APIVersion
+ '/api/config/cloud/account/' + id
,
217 headers
: requestHeaders
,
218 forever
: constants
.FOREVER_ON
,
219 rejectUnauthorized
: false
220 }, function(error
, response
, body
) {
221 if (utils
.validateResponse('Cloud.delete', error
, response
, body
, resolve
, reject
)) {
223 statusCode
: response
.statusCode
,
224 data
: JSON
.stringify(response
.body
)
231 Cloud
.getResources = function(req
) {
233 var api_server
= req
.query
["api_server"];
234 var cloudAccount
= req
.query
["cloud_account"];
236 return new Promise(function(resolve
, reject
) {
237 var requestHeaders
= {};
238 _
.extend(requestHeaders
,
239 constants
.HTTP_HEADERS
.accept
.data
, {
240 'Authorization': req
.get('Authorization')
244 url
: utils
.confdPort(api_server
) + APIVersion
+ '/api/operational/cloud/account/' + cloudAccount
+ '/resources?deep',
246 headers
: requestHeaders
,
247 forever
: constants
.FOREVER_ON
,
248 rejectUnauthorized
: false
250 function(error
, response
, body
) {
252 if (utils
.validateResponse('Cloud.getResources', error
, response
, body
, resolve
, reject
)) {
254 data
= JSON
.parse(response
.body
)['rw-cloud:resources']
256 console
.log('Problem with "Cloud.getResources"', e
);
259 err
.statusCode
= 500;
261 error
: 'Problem with "Cloud.getResources": ' + e
.toString()
267 return resolve(data
);
273 Cloud
.getPools = function(req
) {
275 var api_server
= req
.query
["api_server"];
276 var cloudAccount
= req
.query
["cloud-account"];
278 return new Promise(function(resolve
, reject
) {
280 var requestHeaders
= {};
281 _
.extend(requestHeaders
,
282 constants
.HTTP_HEADERS
.accept
.data
, {
283 'Authorization': req
.get('Authorization')
287 url
: utils
.confdPort(api_server
) + APIVersion
+ '/api/operational/cloud/account/' + cloudAccount
+ '/pools',
289 headers
: requestHeaders
,
290 forever
: constants
.FOREVER_ON
,
291 rejectUnauthorized
: false
293 function(error
, response
, body
) {
295 if (utils
.validateResponse('Cloud.getPools', error
, response
, body
, resolve
, reject
)) {
297 data
= JSON
.parse(response
.body
)['rw-cloud:pools']
299 console
.log('Problem with "Cloud.getPools"', e
);
301 err
.statusCode
= 500;
303 error
: 'Problem with "Cloud.getPools": ' + e
.toString()
310 statusCode
: response
.statusCode
,
318 Cloud
.poolAggregate = function(cloudAccounts
) {
319 cloudAccounts
.forEach(function(ca
) {
320 var oldPools
= ca
.pools
;
322 for (type
in oldPools
) {
323 oldPools
[type
].forEach(function(pool
) {
330 return cloudAccounts
;
335 module
.exports
= Cloud
;