41 lines
1.2 KiB
TypeScript
41 lines
1.2 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
|
|
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;
|
|
}
|
|
|
|
// 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}`, {});
|
|
}
|
|
}
|