hetznercloud/ts/classes.server.ts
2024-01-29 21:14:05 +01:00

54 lines
1.7 KiB
TypeScript

import type { HetznerAccount } from './classes.account.js';
import * as plugins from './hetznercloud.plugins.js';
import * as types from './types.js';
export class HetznerServer {
// STATIC
public static async create(hetznerAccountRefArg: HetznerAccount, optionsArg: {
name: string,
datacenter: 'nbg1-dc3',
}) {
const server = new HetznerServer(hetznerAccountRefArg);
const createServerUrl = '/servers';
const createServerPayload: types.TServerCreateRequestBody =
{
name: optionsArg.name,
datacenter: optionsArg.datacenter,
image: '',
server_type: '',
start_after_create: true,
user_data: '',
};
const response = await server.hetznerAccountRef.request('POST', createServerUrl, createServerPayload);
server.data = (response.body as types.TServerCreateResponseBody).server;
return server;
}
public static async getServers(hetznerAccountRefArg: HetznerAccount) {
const serversGetUrl = '/servers';
const response = await hetznerAccountRefArg.request('GET', serversGetUrl, {});
const serversDataArray = (response.body as types.TServersGetResponseBody).servers;
const servers: HetznerServer[] = [];
for (const serverData of serversDataArray) {
const server = new HetznerServer(hetznerAccountRefArg);
server.data = serverData;
servers.push(server);
}
return servers;
}
// INSTANCE
public hetznerAccountRef: HetznerAccount;
public data: types.IServer;
constructor(hetznerAccountRefArg: HetznerAccount) {
this.hetznerAccountRef = hetznerAccountRefArg;
}
public async delete() {
await this.hetznerAccountRef.request('DELETE', `/servers/${this.data.id}`, {});
}
}