@gridscale/api
Version:
gridscale API Wrapper
182 lines (146 loc) • 5.26 kB
text/typescript
import { assignIn, isFunction, isUndefined } from 'lodash';
import { APIClass, ApiResult, GenericApiResult, RequestOptions, VoidApiResult } from '../api';
import * as models from './../Specs';
class Location {
// Naming
public _api: APIClass;
public _defaults: RequestOptions;
public _basepath: string;
/**
* Create Object Endpoint
*
*
* @param _api API Class Instance
* @param _path Path to the Object
*/
constructor(_api: APIClass) {
this._api = _api;
this._defaults = {
'page': 0,
'limit' : 25
};
this._basepath = '/objects/locations';
}
/**
* Overwrite Default Settings for this Type
*
* @param _options
*/
public setDefaults( _options: RequestOptions ) {
assignIn( this._defaults , _options );
}
/**
* Add Local Options with Defaults
*
*
* @param _options
* @returns {RequestOptions}
* @private
*/
_buildRequestOptions (_options?: RequestOptions) {
// Clone Defaults
const defaults = assignIn({}, this._defaults);
// Add Options
if ( !isUndefined( _options ) && !isFunction( _options ) ) {
assignIn(defaults, _options);
}
// Return Default Values
return defaults;
}
/**
* List Objects
*
*
* @param _options
* @param _callback
* @returns {Promise<ApiResult<models.LocationsGetResponse>>}
*/
list(_options?: RequestOptions, _callback?: (response: Response, result: ApiResult<GenericApiResult>) => void): Promise<ApiResult<models.LocationsGetResponse>> {
// Get Defaults
const requestOptions = this._buildRequestOptions(_options);
// Set Callback
if ( isFunction( _options ) && isUndefined( _callback ) ) {
_callback = _options;
}
return this._api.get( this._basepath , requestOptions , _callback);
}
/**
* Create location
* @param _attributes
* @param _callback
* @returns {Promise<ApiResult<CreateResult>>}
*/
create(_attributes: models.LocationCreate, _callback?: (response: Response, result: ApiResult<GenericApiResult>) => void): Promise<ApiResult<models.CreateResponse>> {
return this._api.post( this._basepath , _attributes , _callback);
}
/**
* Patch location
* @param _attributes
* @param _callback
* @returns {Promise<ApiResult<VoidApiResult>>}
*/
patch(_uuid: string, _attributes: models.LocationUpdate, _callback?: (response: Response, result: ApiResult<GenericApiResult>) => void): Promise<ApiResult<VoidApiResult>> {
return this._api.patch( this._basepath + '/' + _uuid , _attributes , _callback);
}
/**
* remove Single location by UUID
*
* @param _uuid
* @param _callback
*/
remove(_uuid: string, _callback?: (response: Response, result: ApiResult<GenericApiResult>) => void): Promise<ApiResult<VoidApiResult>> {
return this._api.remove( this._basepath + '/' + _uuid, _callback);
}
/**
* Get Single Object by UUID
*
* @param _uuid
* @param _callback
*/
get(_uuid: string, _callback?: Function): Promise<ApiResult<models.LocationGetResponse>> {
return this._api.get( this._basepath + '/' + _uuid, _callback);
}
/**
Return all IP Adresses for this locations
*/
getLocationIPs(_uuid: string, _callback?: Function): Promise<ApiResult<models.IpsGetResponse>> {
return this._api.get( this._basepath + '/' + _uuid + '/ips', _callback);
}
/**
Return all isoimages for this location
*/
getLocationISOImages(_uuid: string, _callback?: Function): Promise<ApiResult<models.IsoimagesGetResponse>> {
return this._api.get( this._basepath + '/' + _uuid + '/isoimages', _callback);
}
/**
Return all networks for this location
*/
getLocationNetworks(_uuid: string, _callback?: Function): Promise<ApiResult<models.NetworksGetResponse>> {
return this._api.get( this._basepath + '/' + _uuid + '/networks', _callback);
}
/**
Return all servers for this location
*/
getLocationServers(_uuid: string, _callback?: Function): Promise<ApiResult<models.ServersGetResponse>> {
return this._api.get( this._basepath + '/' + _uuid + '/servers', _callback);
}
/**
Return all snapshots for this location
*/
getLocationSnapshots(_uuid: string, _callback?: Function): Promise<ApiResult<models.SnapshotGetResponse>> {
return this._api.get( this._basepath + '/' + _uuid + '/snapshots', _callback);
}
/**
Return all storages for this location
*/
getLocationStorages(_uuid: string, _callback?: Function): Promise<ApiResult<models.StoragesGetResponse>> {
return this._api.get( this._basepath + '/' + _uuid + '/storages', _callback);
}
/**
Return all storages for this location
*/
getLocationTemplates(_uuid: string, _callback?: Function): Promise<ApiResult<models.TemplatesGetResponse>> {
return this._api.get( this._basepath + '/' + _uuid + '/templates', _callback);
}
}
export { Location };