589 lines
45 KiB
TypeScript
589 lines
45 KiB
TypeScript
/**
|
||
* Hetzner Cloud API
|
||
* This is the official documentation for the Hetzner Cloud API. ## Introduction The Hetzner Cloud API operates over HTTPS and uses JSON as its data format. The API is a RESTful API and utilizes HTTP methods and HTTP status codes to specify requests and responses. As an alternative to working directly with our API you may also consider to use: - Our CLI program [hcloud](https://github.com/hetznercloud/cli) - Our [library for Go](https://github.com/hetznercloud/hcloud-go) - Our [library for Python](https://github.com/hetznercloud/hcloud-python) Also you can find a [list of libraries, tools, and integrations on GitHub](https://github.com/hetznercloud/awesome-hcloud). If you are developing integrations based on our API and your product is Open Source you may be eligible for a free one time €50 (excl. VAT) credit on your account. Please contact us via the the support page on your Cloud Console and let us know the following: - The type of integration you would like to develop - Link to the GitHub repo you will use for the Project - Link to some other Open Source work you have already done (if you have done so) ## Getting Started To get started using the API you first need an API token. Sign in into the [Hetzner Cloud Console](https://console.hetzner.cloud/) choose a Project, go to `Security` → `API Tokens`, and generate a new token. Make sure to copy the token because it won’t be shown to you again. A token is bound to a Project, to interact with the API of another Project you have to create a new token inside the Project. Let’s say your new token is `LRK9DAWQ1ZAEFSrCNEEzLCUwhYX1U3g7wMg4dTlkkDC96fyDuyJ39nVbVjCKSDfj`. You’re now ready to do your first request against the API. To get a list of all Servers in your Project, issue the example request on the right side using [curl](https://curl.se/). Make sure to replace the token in the example command with the token you have just created. Since your Project probably does not contain any Servers yet, the example response will look like the response on the right side. We will almost always provide a resource root like `servers` inside the example response. A response can also contain a `meta` object with information like [Pagination](#pagination). **Example Request** ```bash curl -H \"Authorization: Bearer LRK9DAWQ1ZAEFSrCNEEzLCUwhYX1U3g7wMg4dTlkkDC96fyDuyJ39nVbVjCKSDfj\" \\ https://api.hetzner.cloud/v1/servers ``` **Example Response** ```json { \"servers\": [], \"meta\": { \"pagination\": { \"page\": 1, \"per_page\": 25, \"previous_page\": null, \"next_page\": null, \"last_page\": 1, \"total_entries\": 0 } } } ``` ## Authentication All requests to the Hetzner Cloud API must be authenticated via a API token. Include your secret API token in every request you send to the API with the `Authorization` HTTP header. To create a new API token for your Project, switch into the [Hetzner Cloud Console](https://console.hetzner.cloud/) choose a Project, go to `Security` → `API Tokens`, and generate a new token. **Example Authorization header** ```http Authorization: Bearer LRK9DAWQ1ZAEFSrCNEEzLCUwhYX1U3g7wMg4dTlkkDC96fyDuyJ39nVbVjCKSDfj ``` ## Errors Errors are indicated by HTTP status codes. Further, the response of the request which generated the error contains an error code, an error message, and, optionally, error details. The schema of the error details object depends on the error code. The error response contains the following keys: | Keys | Meaning | | --------- | --------------------------------------------------------------------- | | `code` | Short string indicating the type of error (machine-parsable) | | `message` | Textual description on what has gone wrong | | `details` | An object providing for details on the error (schema depends on code) | **Example response** ```json { \"error\": { \"code\": \"invalid_input\", \"message\": \"invalid input in field \'broken_field\': is too long\", \"details\": { \"fields\": [ { \"name\": \"broken_field\", \"messages\": [\"is too long\"] } ] } } } ``` ### Error Codes | Code | Description | | ------------------------- | -------------------------------------------------------------------------------- | | `forbidden` | Insufficient permissions for this request | | `unauthorized` | Request was made with an invalid or unknown token | | `invalid_input` | Error while parsing or processing the input | | `json_error` | Invalid JSON input in your request | | `locked` | The item you are trying to access is locked (there is already an Action running) | | `not_found` | Entity not found | | `rate_limit_exceeded` | Error when sending too many requests | | `resource_limit_exceeded` | Error when exceeding the maximum quantity of a resource for an account | | `resource_unavailable` | The requested resource is currently unavailable | | `server_error` | Error within the API backend | | `service_error` | Error within a service | | `uniqueness_error` | One or more of the objects fields must be unique | | `protected` | The Action you are trying to start is protected for this resource | | `maintenance` | Cannot perform operation due to maintenance | | `conflict` | The resource has changed during the request, please retry | | `unsupported_error` | The corresponding resource does not support the Action | | `token_readonly` | The token is only allowed to perform GET requests | | `unavailable` | A service or product is currently not available | **invalid_input** ```json { \"error\": { \"code\": \"invalid_input\", \"message\": \"invalid input in field \'broken_field\': is too long\", \"details\": { \"fields\": [ { \"name\": \"broken_field\", \"messages\": [\"is too long\"] } ] } } } ``` **uniqueness_error** ```json { \"error\": { \"code\": \"uniqueness_error\", \"message\": \"SSH key with the same fingerprint already exists\", \"details\": { \"fields\": [ { \"name\": \"public_key\" } ] } } } ``` **resource_limit_exceeded** ```json { \"error\": { \"code\": \"resource_limit_exceeded\", \"message\": \"project limit exceeded\", \"details\": { \"limits\": [ { \"name\": \"project_limit\" } ] } } } ``` ## Labels Labels are `key/value` pairs that can be attached to all resources. Valid label keys have two segments: an optional prefix and name, separated by a slash (`/`). The name segment is required and must be a string of 63 characters or less, beginning and ending with an alphanumeric character (`[a-z0-9A-Z]`) with dashes (`-`), underscores (`_`), dots (`.`), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (`.`), not longer than 253 characters in total, followed by a slash (`/`). Valid label values must be a string of 63 characters or less and must be empty or begin and end with an alphanumeric character (`[a-z0-9A-Z]`) with dashes (`-`), underscores (`_`), dots (`.`), and alphanumerics between. The `hetzner.cloud/` prefix is reserved and cannot be used. **Example Labels** ```json { \"labels\": { \"environment\": \"development\", \"service\": \"backend\", \"example.com/my\": \"label\", \"just-a-key\": \"\" } } ``` ## Label Selector For resources with labels, you can filter resources by their labels using the label selector query language. | Expression | Meaning | | -------------------- | ---------------------------------------------------- | | `k==v` / `k=v` | Value of key `k` does equal value `v` | | `k!=v` | Value of key `k` does not equal value `v` | | `k` | Key `k` is present | | `!k` | Key `k` is not present | | `k in (v1,v2,v3)` | Value of key `k` is `v1`, `v2`, or `v3` | | `k notin (v1,v2,v3)` | Value of key `k` is neither `v1`, nor `v2`, nor `v3` | | `k1==v,!k2` | Value of key `k1` is `v` and key `k2` is not present | ### Examples - Returns all resources that have a `env=production` label and that don\'t have a `type=database` label: `env=production,type!=database` - Returns all resources that have a `env=testing` or `env=staging` label: `env in (testing,staging)` - Returns all resources that don\'t have a `type` label: `!type` ## Pagination Responses which return multiple items support pagination. If they do support pagination, it can be controlled with following query string parameters: - A `page` parameter specifies the page to fetch. The number of the first page is 1. - A `per_page` parameter specifies the number of items returned per page. The default value is 25, the maximum value is 50 except otherwise specified in the documentation. Responses contain a `Link` header with pagination information. Additionally, if the response body is JSON and the root object is an object, that object has a `pagination` object inside the `meta` object with pagination information: **Example Pagination** ```json { \"servers\": [...], \"meta\": { \"pagination\": { \"page\": 2, \"per_page\": 25, \"previous_page\": 1, \"next_page\": 3, \"last_page\": 4, \"total_entries\": 100 } } } ``` The keys `previous_page`, `next_page`, `last_page`, and `total_entries` may be `null` when on the first page, last page, or when the total number of entries is unknown. **Example Pagination Link header** ```http Link: <https://api.hetzner.cloud/v1/actions?page=2&per_page=5>; rel=\"prev\", <https://api.hetzner.cloud/v1/actions?page=4&per_page=5>; rel=\"next\", <https://api.hetzner.cloud/v1/actions?page=6&per_page=5>; rel=\"last\" ``` Line breaks have been added for display purposes only and responses may only contain some of the above `rel` values. ## Rate Limiting All requests, whether they are authenticated or not, are subject to rate limiting. If you have reached your limit, your requests will be handled with a `429 Too Many Requests` error. Burst requests are allowed. Responses contain serveral headers which provide information about your current rate limit status. - The `RateLimit-Limit` header contains the total number of requests you can perform per hour. - The `RateLimit-Remaining` header contains the number of requests remaining in the current rate limit time frame. - The `RateLimit-Reset` header contains a UNIX timestamp of the point in time when your rate limit will have recovered and you will have the full number of requests available again. The default limit is 3600 requests per hour and per Project. The number of remaining requests increases gradually. For example, when your limit is 3600 requests per hour, the number of remaining requests will increase by 1 every second. ## Server Metadata Your Server can discover metadata about itself by doing a HTTP request to specific URLs. The following data is available: | Data | Format | Contents | | ----------------- | ------ | ------------------------------------------------------------ | | hostname | text | Name of the Server as set in the api | | instance-id | number | ID of the server | | public-ipv4 | text | Primary public IPv4 address | | private-networks | yaml | Details about the private networks the Server is attached to | | availability-zone | text | Name of the availability zone that Server runs in | | region | text | Network zone, e.g. eu-central | **Example: Summary** ```bash $ curl http://169.254.169.254/hetzner/v1/metadata ``` ```yaml availability-zone: hel1-dc2 hostname: my-server instance-id: 42 public-ipv4: 1.2.3.4 region: eu-central ``` **Example: Hostname** ```bash $ curl http://169.254.169.254/hetzner/v1/metadata/hostname my-server ``` **Example: Instance ID** ```bash $ curl http://169.254.169.254/hetzner/v1/metadata/instance-id 42 ``` **Example: Public IPv4** ```bash $ curl http://169.254.169.254/hetzner/v1/metadata/public-ipv4 1.2.3.4 ``` **Example: Private Networks** ```bash $ curl http://169.254.169.254/hetzner/v1/metadata/private-networks ``` ```yaml - ip: 10.0.0.2 alias_ips: [10.0.0.3, 10.0.0.4] interface_num: 1 mac_address: 86:00:00:2a:7d:e0 network_id: 1234 network_name: nw-test1 network: 10.0.0.0/8 subnet: 10.0.0.0/24 gateway: 10.0.0.1 - ip: 192.168.0.2 alias_ips: [] interface_num: 2 mac_address: 86:00:00:2a:7d:e1 network_id: 4321 network_name: nw-test2 network: 192.168.0.0/16 subnet: 192.168.0.0/24 gateway: 192.168.0.1 ``` **Example: Availability Zone** ```bash $ curl http://169.254.169.254/hetzner/v1/metadata/availability-zone hel1-dc2 ``` **Example: Region** ```bash $ curl http://169.254.169.254/hetzner/v1/metadata/region eu-central ``` ## Sorting Some responses which return multiple items support sorting. If they do support sorting the documentation states which fields can be used for sorting. You specify sorting with the `sort` query string parameter. You can sort by multiple fields. You can set the sort direction by appending `:asc` or `:desc` to the field name. By default, ascending sorting is used. **Example: Sorting** ``` https://api.hetzner.cloud/v1/actions?sort=status https://api.hetzner.cloud/v1/actions?sort=status:asc https://api.hetzner.cloud/v1/actions?sort=status:desc https://api.hetzner.cloud/v1/actions?sort=status:asc&sort=command:desc ``` ## Deprecation Notices You can find all announced deprecations in our [Changelog](/changelog).
|
||
*
|
||
* The version of the OpenAPI document: 1.0.0
|
||
*
|
||
*
|
||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||
* https://openapi-generator.tech
|
||
* Do not edit the class manually.
|
||
*/
|
||
|
||
|
||
import localVarRequest from 'request';
|
||
import http from 'http';
|
||
|
||
/* tslint:disable:no-unused-locals */
|
||
import { CreateServerRequest } from '../model/createServerRequest';
|
||
import { CreateServerResponse } from '../model/createServerResponse';
|
||
import { LoadBalancersIdMetricsGet200Response } from '../model/loadBalancersIdMetricsGet200Response';
|
||
import { ServersGet200Response } from '../model/serversGet200Response';
|
||
import { ServersIdDelete200Response } from '../model/serversIdDelete200Response';
|
||
import { ServersIdGet200Response } from '../model/serversIdGet200Response';
|
||
import { UpdateServerRequest } from '../model/updateServerRequest';
|
||
|
||
import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models';
|
||
import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models';
|
||
|
||
import { HttpError, RequestFile } from './apis';
|
||
|
||
let defaultBasePath = 'https://api.hetzner.cloud/v1';
|
||
|
||
// ===============================================
|
||
// This file is autogenerated - Please do not edit
|
||
// ===============================================
|
||
|
||
export enum ServersApiApiKeys {
|
||
}
|
||
|
||
export class ServersApi {
|
||
protected _basePath = defaultBasePath;
|
||
protected _defaultHeaders : any = {};
|
||
protected _useQuerystring : boolean = false;
|
||
|
||
protected authentications = {
|
||
'default': <Authentication>new VoidAuth(),
|
||
'APIToken': new HttpBearerAuth(),
|
||
}
|
||
|
||
protected interceptors: Interceptor[] = [];
|
||
|
||
constructor(basePath?: string);
|
||
constructor(basePathOrUsername: string, password?: string, basePath?: string) {
|
||
if (password) {
|
||
if (basePath) {
|
||
this.basePath = basePath;
|
||
}
|
||
} else {
|
||
if (basePathOrUsername) {
|
||
this.basePath = basePathOrUsername
|
||
}
|
||
}
|
||
}
|
||
|
||
set useQuerystring(value: boolean) {
|
||
this._useQuerystring = value;
|
||
}
|
||
|
||
set basePath(basePath: string) {
|
||
this._basePath = basePath;
|
||
}
|
||
|
||
set defaultHeaders(defaultHeaders: any) {
|
||
this._defaultHeaders = defaultHeaders;
|
||
}
|
||
|
||
get defaultHeaders() {
|
||
return this._defaultHeaders;
|
||
}
|
||
|
||
get basePath() {
|
||
return this._basePath;
|
||
}
|
||
|
||
public setDefaultAuthentication(auth: Authentication) {
|
||
this.authentications.default = auth;
|
||
}
|
||
|
||
public setApiKey(key: ServersApiApiKeys, value: string) {
|
||
(this.authentications as any)[ServersApiApiKeys[key]].apiKey = value;
|
||
}
|
||
|
||
set accessToken(accessToken: string | (() => string)) {
|
||
this.authentications.APIToken.accessToken = accessToken;
|
||
}
|
||
|
||
public addInterceptor(interceptor: Interceptor) {
|
||
this.interceptors.push(interceptor);
|
||
}
|
||
|
||
/**
|
||
* Returns all existing Server objects
|
||
* @summary Get all Servers
|
||
* @param name Can be used to filter resources by their name. The response will only contain the resources matching the specified name
|
||
* @param labelSelector Can be used to filter resources by labels. The response will only contain resources matching the label selector.
|
||
* @param sort Can be used multiple times.
|
||
* @param status Can be used multiple times. The response will only contain Server matching the status
|
||
* @param page Page to load.
|
||
* @param perPage Items to load per page.
|
||
*/
|
||
public async serversGet (name?: string, labelSelector?: string, sort?: 'id' | 'id:asc' | 'id:desc' | 'name' | 'name:asc' | 'name:desc' | 'created' | 'created:asc' | 'created:desc', status?: 'initializing' | 'starting' | 'running' | 'stopping' | 'off' | 'deleting' | 'rebuilding' | 'migrating' | 'unknown', page?: number, perPage?: number, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: ServersGet200Response; }> {
|
||
const localVarPath = this.basePath + '/servers';
|
||
let localVarQueryParameters: any = {};
|
||
let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
|
||
const produces = ['application/json'];
|
||
// give precedence to 'application/json'
|
||
if (produces.indexOf('application/json') >= 0) {
|
||
localVarHeaderParams.Accept = 'application/json';
|
||
} else {
|
||
localVarHeaderParams.Accept = produces.join(',');
|
||
}
|
||
let localVarFormParams: any = {};
|
||
|
||
if (name !== undefined) {
|
||
localVarQueryParameters['name'] = ObjectSerializer.serialize(name, "string");
|
||
}
|
||
|
||
if (labelSelector !== undefined) {
|
||
localVarQueryParameters['label_selector'] = ObjectSerializer.serialize(labelSelector, "string");
|
||
}
|
||
|
||
if (sort !== undefined) {
|
||
localVarQueryParameters['sort'] = ObjectSerializer.serialize(sort, "'id' | 'id:asc' | 'id:desc' | 'name' | 'name:asc' | 'name:desc' | 'created' | 'created:asc' | 'created:desc'");
|
||
}
|
||
|
||
if (status !== undefined) {
|
||
localVarQueryParameters['status'] = ObjectSerializer.serialize(status, "'initializing' | 'starting' | 'running' | 'stopping' | 'off' | 'deleting' | 'rebuilding' | 'migrating' | 'unknown'");
|
||
}
|
||
|
||
if (page !== undefined) {
|
||
localVarQueryParameters['page'] = ObjectSerializer.serialize(page, "number");
|
||
}
|
||
|
||
if (perPage !== undefined) {
|
||
localVarQueryParameters['per_page'] = ObjectSerializer.serialize(perPage, "number");
|
||
}
|
||
|
||
(<any>Object).assign(localVarHeaderParams, options.headers);
|
||
|
||
let localVarUseFormData = false;
|
||
|
||
let localVarRequestOptions: localVarRequest.Options = {
|
||
method: 'GET',
|
||
qs: localVarQueryParameters,
|
||
headers: localVarHeaderParams,
|
||
uri: localVarPath,
|
||
useQuerystring: this._useQuerystring,
|
||
json: true,
|
||
};
|
||
|
||
let authenticationPromise = Promise.resolve();
|
||
if (this.authentications.APIToken.accessToken) {
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.APIToken.applyToRequest(localVarRequestOptions));
|
||
}
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
|
||
|
||
let interceptorPromise = authenticationPromise;
|
||
for (const interceptor of this.interceptors) {
|
||
interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
|
||
}
|
||
|
||
return interceptorPromise.then(() => {
|
||
if (Object.keys(localVarFormParams).length) {
|
||
if (localVarUseFormData) {
|
||
(<any>localVarRequestOptions).formData = localVarFormParams;
|
||
} else {
|
||
localVarRequestOptions.form = localVarFormParams;
|
||
}
|
||
}
|
||
return new Promise<{ response: http.IncomingMessage; body: ServersGet200Response; }>((resolve, reject) => {
|
||
localVarRequest(localVarRequestOptions, (error, response, body) => {
|
||
if (error) {
|
||
reject(error);
|
||
} else {
|
||
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
|
||
body = ObjectSerializer.deserialize(body, "ServersGet200Response");
|
||
resolve({ response: response, body: body });
|
||
} else {
|
||
reject(new HttpError(response, body, response.statusCode));
|
||
}
|
||
}
|
||
});
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* Deletes a Server. This immediately removes the Server from your account, and it is no longer accessible. Any resources attached to the server (like Volumes, Primary IPs, Floating IPs, Firewalls, Placement Groups) are detached while the server is deleted.
|
||
* @summary Delete a Server
|
||
* @param id ID of the Server
|
||
*/
|
||
public async serversIdDelete (id: number, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: ServersIdDelete200Response; }> {
|
||
const localVarPath = this.basePath + '/servers/{id}'
|
||
.replace('{' + 'id' + '}', encodeURIComponent(String(id)));
|
||
let localVarQueryParameters: any = {};
|
||
let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
|
||
const produces = ['application/json'];
|
||
// give precedence to 'application/json'
|
||
if (produces.indexOf('application/json') >= 0) {
|
||
localVarHeaderParams.Accept = 'application/json';
|
||
} else {
|
||
localVarHeaderParams.Accept = produces.join(',');
|
||
}
|
||
let localVarFormParams: any = {};
|
||
|
||
// verify required parameter 'id' is not null or undefined
|
||
if (id === null || id === undefined) {
|
||
throw new Error('Required parameter id was null or undefined when calling serversIdDelete.');
|
||
}
|
||
|
||
(<any>Object).assign(localVarHeaderParams, options.headers);
|
||
|
||
let localVarUseFormData = false;
|
||
|
||
let localVarRequestOptions: localVarRequest.Options = {
|
||
method: 'DELETE',
|
||
qs: localVarQueryParameters,
|
||
headers: localVarHeaderParams,
|
||
uri: localVarPath,
|
||
useQuerystring: this._useQuerystring,
|
||
json: true,
|
||
};
|
||
|
||
let authenticationPromise = Promise.resolve();
|
||
if (this.authentications.APIToken.accessToken) {
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.APIToken.applyToRequest(localVarRequestOptions));
|
||
}
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
|
||
|
||
let interceptorPromise = authenticationPromise;
|
||
for (const interceptor of this.interceptors) {
|
||
interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
|
||
}
|
||
|
||
return interceptorPromise.then(() => {
|
||
if (Object.keys(localVarFormParams).length) {
|
||
if (localVarUseFormData) {
|
||
(<any>localVarRequestOptions).formData = localVarFormParams;
|
||
} else {
|
||
localVarRequestOptions.form = localVarFormParams;
|
||
}
|
||
}
|
||
return new Promise<{ response: http.IncomingMessage; body: ServersIdDelete200Response; }>((resolve, reject) => {
|
||
localVarRequest(localVarRequestOptions, (error, response, body) => {
|
||
if (error) {
|
||
reject(error);
|
||
} else {
|
||
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
|
||
body = ObjectSerializer.deserialize(body, "ServersIdDelete200Response");
|
||
resolve({ response: response, body: body });
|
||
} else {
|
||
reject(new HttpError(response, body, response.statusCode));
|
||
}
|
||
}
|
||
});
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* Returns a specific Server object. The Server must exist inside the Project
|
||
* @summary Get a Server
|
||
* @param id ID of the Server
|
||
*/
|
||
public async serversIdGet (id: number, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: ServersIdGet200Response; }> {
|
||
const localVarPath = this.basePath + '/servers/{id}'
|
||
.replace('{' + 'id' + '}', encodeURIComponent(String(id)));
|
||
let localVarQueryParameters: any = {};
|
||
let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
|
||
const produces = ['application/json'];
|
||
// give precedence to 'application/json'
|
||
if (produces.indexOf('application/json') >= 0) {
|
||
localVarHeaderParams.Accept = 'application/json';
|
||
} else {
|
||
localVarHeaderParams.Accept = produces.join(',');
|
||
}
|
||
let localVarFormParams: any = {};
|
||
|
||
// verify required parameter 'id' is not null or undefined
|
||
if (id === null || id === undefined) {
|
||
throw new Error('Required parameter id was null or undefined when calling serversIdGet.');
|
||
}
|
||
|
||
(<any>Object).assign(localVarHeaderParams, options.headers);
|
||
|
||
let localVarUseFormData = false;
|
||
|
||
let localVarRequestOptions: localVarRequest.Options = {
|
||
method: 'GET',
|
||
qs: localVarQueryParameters,
|
||
headers: localVarHeaderParams,
|
||
uri: localVarPath,
|
||
useQuerystring: this._useQuerystring,
|
||
json: true,
|
||
};
|
||
|
||
let authenticationPromise = Promise.resolve();
|
||
if (this.authentications.APIToken.accessToken) {
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.APIToken.applyToRequest(localVarRequestOptions));
|
||
}
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
|
||
|
||
let interceptorPromise = authenticationPromise;
|
||
for (const interceptor of this.interceptors) {
|
||
interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
|
||
}
|
||
|
||
return interceptorPromise.then(() => {
|
||
if (Object.keys(localVarFormParams).length) {
|
||
if (localVarUseFormData) {
|
||
(<any>localVarRequestOptions).formData = localVarFormParams;
|
||
} else {
|
||
localVarRequestOptions.form = localVarFormParams;
|
||
}
|
||
}
|
||
return new Promise<{ response: http.IncomingMessage; body: ServersIdGet200Response; }>((resolve, reject) => {
|
||
localVarRequest(localVarRequestOptions, (error, response, body) => {
|
||
if (error) {
|
||
reject(error);
|
||
} else {
|
||
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
|
||
body = ObjectSerializer.deserialize(body, "ServersIdGet200Response");
|
||
resolve({ response: response, body: body });
|
||
} else {
|
||
reject(new HttpError(response, body, response.statusCode));
|
||
}
|
||
}
|
||
});
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* Get Metrics for specified Server. You must specify the type of metric to get: cpu, disk or network. You can also specify more than one type by comma separation, e.g. cpu,disk. Depending on the type you will get different time series data | Type | Timeseries | Unit | Description | |---------|-------------------------|-----------|------------------------------------------------------| | cpu | cpu | percent | Percent CPU usage | | disk | disk.0.iops.read | iop/s | Number of read IO operations per second | | | disk.0.iops.write | iop/s | Number of write IO operations per second | | | disk.0.bandwidth.read | bytes/s | Bytes read per second | | | disk.0.bandwidth.write | bytes/s | Bytes written per second | | network | network.0.pps.in | packets/s | Public Network interface packets per second received | | | network.0.pps.out | packets/s | Public Network interface packets per second sent | | | network.0.bandwidth.in | bytes/s | Public Network interface bytes/s received | | | network.0.bandwidth.out | bytes/s | Public Network interface bytes/s sent | Metrics are available for the last 30 days only. If you do not provide the step argument we will automatically adjust it so that a maximum of 200 samples are returned. We limit the number of samples returned to a maximum of 500 and will adjust the step parameter accordingly.
|
||
* @summary Get Metrics for a Server
|
||
* @param id ID of the Server
|
||
* @param type Type of metrics to get
|
||
* @param start Start of period to get Metrics for (in ISO-8601 format)
|
||
* @param end End of period to get Metrics for (in ISO-8601 format)
|
||
* @param step Resolution of results in seconds
|
||
*/
|
||
public async serversIdMetricsGet (id: number, type: 'cpu' | 'disk' | 'network', start: string, end: string, step?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: LoadBalancersIdMetricsGet200Response; }> {
|
||
const localVarPath = this.basePath + '/servers/{id}/metrics'
|
||
.replace('{' + 'id' + '}', encodeURIComponent(String(id)));
|
||
let localVarQueryParameters: any = {};
|
||
let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
|
||
const produces = ['application/json'];
|
||
// give precedence to 'application/json'
|
||
if (produces.indexOf('application/json') >= 0) {
|
||
localVarHeaderParams.Accept = 'application/json';
|
||
} else {
|
||
localVarHeaderParams.Accept = produces.join(',');
|
||
}
|
||
let localVarFormParams: any = {};
|
||
|
||
// verify required parameter 'id' is not null or undefined
|
||
if (id === null || id === undefined) {
|
||
throw new Error('Required parameter id was null or undefined when calling serversIdMetricsGet.');
|
||
}
|
||
|
||
// verify required parameter 'type' is not null or undefined
|
||
if (type === null || type === undefined) {
|
||
throw new Error('Required parameter type was null or undefined when calling serversIdMetricsGet.');
|
||
}
|
||
|
||
// verify required parameter 'start' is not null or undefined
|
||
if (start === null || start === undefined) {
|
||
throw new Error('Required parameter start was null or undefined when calling serversIdMetricsGet.');
|
||
}
|
||
|
||
// verify required parameter 'end' is not null or undefined
|
||
if (end === null || end === undefined) {
|
||
throw new Error('Required parameter end was null or undefined when calling serversIdMetricsGet.');
|
||
}
|
||
|
||
if (type !== undefined) {
|
||
localVarQueryParameters['type'] = ObjectSerializer.serialize(type, "'cpu' | 'disk' | 'network'");
|
||
}
|
||
|
||
if (start !== undefined) {
|
||
localVarQueryParameters['start'] = ObjectSerializer.serialize(start, "string");
|
||
}
|
||
|
||
if (end !== undefined) {
|
||
localVarQueryParameters['end'] = ObjectSerializer.serialize(end, "string");
|
||
}
|
||
|
||
if (step !== undefined) {
|
||
localVarQueryParameters['step'] = ObjectSerializer.serialize(step, "string");
|
||
}
|
||
|
||
(<any>Object).assign(localVarHeaderParams, options.headers);
|
||
|
||
let localVarUseFormData = false;
|
||
|
||
let localVarRequestOptions: localVarRequest.Options = {
|
||
method: 'GET',
|
||
qs: localVarQueryParameters,
|
||
headers: localVarHeaderParams,
|
||
uri: localVarPath,
|
||
useQuerystring: this._useQuerystring,
|
||
json: true,
|
||
};
|
||
|
||
let authenticationPromise = Promise.resolve();
|
||
if (this.authentications.APIToken.accessToken) {
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.APIToken.applyToRequest(localVarRequestOptions));
|
||
}
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
|
||
|
||
let interceptorPromise = authenticationPromise;
|
||
for (const interceptor of this.interceptors) {
|
||
interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
|
||
}
|
||
|
||
return interceptorPromise.then(() => {
|
||
if (Object.keys(localVarFormParams).length) {
|
||
if (localVarUseFormData) {
|
||
(<any>localVarRequestOptions).formData = localVarFormParams;
|
||
} else {
|
||
localVarRequestOptions.form = localVarFormParams;
|
||
}
|
||
}
|
||
return new Promise<{ response: http.IncomingMessage; body: LoadBalancersIdMetricsGet200Response; }>((resolve, reject) => {
|
||
localVarRequest(localVarRequestOptions, (error, response, body) => {
|
||
if (error) {
|
||
reject(error);
|
||
} else {
|
||
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
|
||
body = ObjectSerializer.deserialize(body, "LoadBalancersIdMetricsGet200Response");
|
||
resolve({ response: response, body: body });
|
||
} else {
|
||
reject(new HttpError(response, body, response.statusCode));
|
||
}
|
||
}
|
||
});
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* Updates a Server. You can update a Server’s name and a Server’s labels. Please note that Server names must be unique per Project and valid hostnames as per RFC 1123 (i.e. may only contain letters, digits, periods, and dashes). Also note that when updating labels, the Server’s current set of labels will be replaced with the labels provided in the request body. So, for example, if you want to add a new label, you have to provide all existing labels plus the new label in the request body.
|
||
* @summary Update a Server
|
||
* @param id ID of the Server
|
||
* @param updateServerRequest
|
||
*/
|
||
public async serversIdPut (id: number, updateServerRequest?: UpdateServerRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: ServersIdGet200Response; }> {
|
||
const localVarPath = this.basePath + '/servers/{id}'
|
||
.replace('{' + 'id' + '}', encodeURIComponent(String(id)));
|
||
let localVarQueryParameters: any = {};
|
||
let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
|
||
const produces = ['application/json'];
|
||
// give precedence to 'application/json'
|
||
if (produces.indexOf('application/json') >= 0) {
|
||
localVarHeaderParams.Accept = 'application/json';
|
||
} else {
|
||
localVarHeaderParams.Accept = produces.join(',');
|
||
}
|
||
let localVarFormParams: any = {};
|
||
|
||
// verify required parameter 'id' is not null or undefined
|
||
if (id === null || id === undefined) {
|
||
throw new Error('Required parameter id was null or undefined when calling serversIdPut.');
|
||
}
|
||
|
||
(<any>Object).assign(localVarHeaderParams, options.headers);
|
||
|
||
let localVarUseFormData = false;
|
||
|
||
let localVarRequestOptions: localVarRequest.Options = {
|
||
method: 'PUT',
|
||
qs: localVarQueryParameters,
|
||
headers: localVarHeaderParams,
|
||
uri: localVarPath,
|
||
useQuerystring: this._useQuerystring,
|
||
json: true,
|
||
body: ObjectSerializer.serialize(updateServerRequest, "UpdateServerRequest")
|
||
};
|
||
|
||
let authenticationPromise = Promise.resolve();
|
||
if (this.authentications.APIToken.accessToken) {
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.APIToken.applyToRequest(localVarRequestOptions));
|
||
}
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
|
||
|
||
let interceptorPromise = authenticationPromise;
|
||
for (const interceptor of this.interceptors) {
|
||
interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
|
||
}
|
||
|
||
return interceptorPromise.then(() => {
|
||
if (Object.keys(localVarFormParams).length) {
|
||
if (localVarUseFormData) {
|
||
(<any>localVarRequestOptions).formData = localVarFormParams;
|
||
} else {
|
||
localVarRequestOptions.form = localVarFormParams;
|
||
}
|
||
}
|
||
return new Promise<{ response: http.IncomingMessage; body: ServersIdGet200Response; }>((resolve, reject) => {
|
||
localVarRequest(localVarRequestOptions, (error, response, body) => {
|
||
if (error) {
|
||
reject(error);
|
||
} else {
|
||
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
|
||
body = ObjectSerializer.deserialize(body, "ServersIdGet200Response");
|
||
resolve({ response: response, body: body });
|
||
} else {
|
||
reject(new HttpError(response, body, response.statusCode));
|
||
}
|
||
}
|
||
});
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* Creates a new Server. Returns preliminary information about the Server as well as an Action that covers progress of creation.
|
||
* @summary Create a Server
|
||
* @param createServerRequest Please note that Server names must be unique per Project and valid hostnames as per RFC 1123 (i.e. may only contain letters, digits, periods, and dashes). For `server_type` you can either use the ID as listed in `/server_types` or its name. For `image` you can either use the ID as listed in `/images` or its name. If you want to create the Server in a Location, you must set `location` to the ID or name as listed in `/locations`. This is the recommended way. You can be even more specific by setting `datacenter` to the ID or name as listed in `/datacenters`. However we only recommend this if you want to assign a specific Primary IP to the Server which is located in the specified Datacenter. Some properties like `start_after_create` or `automount` will trigger Actions after the Server is created. Those Actions are listed in the `next_actions` field in the response. For accessing your Server we strongly recommend to use SSH keys by passing the respective key IDs in `ssh_keys`. If you do not specify any `ssh_keys` we will generate a root password for you and return it in the response. Please note that provided user-data is stored in our systems. While we take measures to protect it we highly recommend that you don’t use it to store passwords or other sensitive information. #### Call specific error codes | Code | Description | |----------------------------------|------------------------------------------------------------| | `placement_error` | An error during the placement occurred | | `primary_ip_assigned` | The specified Primary IP is already assigned to a server | | `primary_ip_datacenter_mismatch` | The specified Primary IP is in a different datacenter | | `primary_ip_version_mismatch` | The specified Primary IP has the wrong IP Version |
|
||
*/
|
||
public async serversPost (createServerRequest?: CreateServerRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: CreateServerResponse; }> {
|
||
const localVarPath = this.basePath + '/servers';
|
||
let localVarQueryParameters: any = {};
|
||
let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
|
||
const produces = ['application/json'];
|
||
// give precedence to 'application/json'
|
||
if (produces.indexOf('application/json') >= 0) {
|
||
localVarHeaderParams.Accept = 'application/json';
|
||
} else {
|
||
localVarHeaderParams.Accept = produces.join(',');
|
||
}
|
||
let localVarFormParams: any = {};
|
||
|
||
(<any>Object).assign(localVarHeaderParams, options.headers);
|
||
|
||
let localVarUseFormData = false;
|
||
|
||
let localVarRequestOptions: localVarRequest.Options = {
|
||
method: 'POST',
|
||
qs: localVarQueryParameters,
|
||
headers: localVarHeaderParams,
|
||
uri: localVarPath,
|
||
useQuerystring: this._useQuerystring,
|
||
json: true,
|
||
body: ObjectSerializer.serialize(createServerRequest, "CreateServerRequest")
|
||
};
|
||
|
||
let authenticationPromise = Promise.resolve();
|
||
if (this.authentications.APIToken.accessToken) {
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.APIToken.applyToRequest(localVarRequestOptions));
|
||
}
|
||
authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));
|
||
|
||
let interceptorPromise = authenticationPromise;
|
||
for (const interceptor of this.interceptors) {
|
||
interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
|
||
}
|
||
|
||
return interceptorPromise.then(() => {
|
||
if (Object.keys(localVarFormParams).length) {
|
||
if (localVarUseFormData) {
|
||
(<any>localVarRequestOptions).formData = localVarFormParams;
|
||
} else {
|
||
localVarRequestOptions.form = localVarFormParams;
|
||
}
|
||
}
|
||
return new Promise<{ response: http.IncomingMessage; body: CreateServerResponse; }>((resolve, reject) => {
|
||
localVarRequest(localVarRequestOptions, (error, response, body) => {
|
||
if (error) {
|
||
reject(error);
|
||
} else {
|
||
if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) {
|
||
body = ObjectSerializer.deserialize(body, "CreateServerResponse");
|
||
resolve({ response: response, body: body });
|
||
} else {
|
||
reject(new HttpError(response, body, response.statusCode));
|
||
}
|
||
}
|
||
});
|
||
});
|
||
});
|
||
}
|
||
}
|