Compare commits

...

12 Commits

Author SHA1 Message Date
philkunz 4c327e5e32 1.0.14 2024-02-18 23:25:57 +01:00
philkunz a898928bd3 fix(core): update 2024-02-18 23:25:57 +01:00
philkunz aba8182422 1.0.13 2024-02-18 23:23:21 +01:00
philkunz 5412ab524b fix(core): update 2024-02-18 23:23:20 +01:00
philkunz 2f175e9d64 1.0.12 2024-02-18 01:17:15 +01:00
philkunz d2b1018234 fix(core): update 2024-02-18 01:17:15 +01:00
philkunz e7babf5222 1.0.11 2024-02-17 21:59:11 +01:00
philkunz 63660ecc03 fix(core): update 2024-02-17 21:59:10 +01:00
philkunz 336e27f383 1.0.10 2024-02-17 21:58:11 +01:00
philkunz 9174571ea4 fix(core): update 2024-02-17 21:58:10 +01:00
philkunz 4a722b79b7 1.0.9 2024-02-17 21:55:53 +01:00
philkunz 866dc35403 fix(core): update 2024-02-17 21:55:52 +01:00
7 changed files with 73 additions and 11 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@apiclient.xyz/hetznercloud", "name": "@apiclient.xyz/hetznercloud",
"version": "1.0.8", "version": "1.0.14",
"private": false, "private": false,
"description": "an unofficial api client for the hetzner cloud api", "description": "an unofficial api client for the hetzner cloud api",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
+20 -6
View File
@@ -6,7 +6,9 @@ const testQenv = new qenv.Qenv('./', './.nogit/');
let testAccount: hetznercloud.HetznerAccount; let testAccount: hetznercloud.HetznerAccount;
tap.test('should create a valid hetzer account', async () => { tap.test('should create a valid hetzer account', async () => {
testAccount = new hetznercloud.HetznerAccount(await testQenv.getEnvVarOnDemand('HETZNER_API_TOKEN')); testAccount = new hetznercloud.HetznerAccount(
await testQenv.getEnvVarOnDemand('HETZNER_API_TOKEN')
);
expect(testAccount).toBeInstanceOf(hetznercloud.HetznerAccount); expect(testAccount).toBeInstanceOf(hetznercloud.HetznerAccount);
}); });
@@ -14,15 +16,27 @@ tap.test('should be able to list all servers', async () => {
const servers = await testAccount.getServers(); const servers = await testAccount.getServers();
expect(servers).toBeArray(); expect(servers).toBeArray();
console.log(JSON.stringify(servers, null, 2)); console.log(JSON.stringify(servers, null, 2));
}) });
tap.test('should be able to create a server', async () => { const testserver = tap.test('should be able to create a server', async (toolsArg) => {
const newServer = await testAccount.createServer({ const newServer = await testAccount.createServer({
name: 'testserver', name: 'testserver',
location: 'nbg1' location: 'nbg1',
type: 'cpx41',
labels: {
servezoneId: 'testzone',
},
}); });
expect(newServer).toBeInstanceOf(hetznercloud.HetznerServer); expect(newServer).toBeInstanceOf(hetznercloud.HetznerServer);
console.log(newServer); console.log(newServer);
}) await toolsArg.delayFor(10000);
return newServer;
});
tap.start() tap.test('should be able to delete a server', async () => {
const testServer: hetznercloud.HetznerServer =
await (testserver.testResultPromise as Promise<hetznercloud.HetznerServer>);
// await testServer.delete();
});
tap.start();
+1 -1
View File
@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@apiclient.xyz/hetznercloud', name: '@apiclient.xyz/hetznercloud',
version: '1.0.8', version: '1.0.14',
description: 'an unofficial api client for the hetzner cloud api' description: 'an unofficial api client for the hetzner cloud api'
} }
+5
View File
@@ -11,6 +11,10 @@ export class HetznerAccount {
return HetznerServer.getServers(this); return HetznerServer.getServers(this);
} }
public async getServerByLabel(labelArg: string, valueArg?: string) {
return HetznerServer.getServerByLabel(this, labelArg, valueArg);
}
public async createServer(optionsArg: plugins.tsclass.typeFestOwn.SecondArgument<typeof HetznerServer.create>) { public async createServer(optionsArg: plugins.tsclass.typeFestOwn.SecondArgument<typeof HetznerServer.create>) {
return HetznerServer.create(this, optionsArg); return HetznerServer.create(this, optionsArg);
} }
@@ -32,6 +36,7 @@ export class HetznerAccount {
Authorization: `Bearer ${this.token}`, Authorization: `Bearer ${this.token}`,
}, },
requestBody: payloadArg, requestBody: payloadArg,
keepAlive: false,
}); });
console.log(response.statusCode); console.log(response.statusCode);
console.log(response.body); console.log(response.body);
View File
+16 -3
View File
@@ -8,7 +8,10 @@ export class HetznerServer {
hetznerAccountRefArg: HetznerAccount, hetznerAccountRefArg: HetznerAccount,
optionsArg: { optionsArg: {
name: string; name: string;
location: 'nbg1'; type: types.THetznerCloudServerName;
location: types.THetznerCloudLocationName;
labels?: {[key: string]: string},
userData?: string,
} }
) { ) {
const server = new HetznerServer(hetznerAccountRefArg); const server = new HetznerServer(hetznerAccountRefArg);
@@ -17,10 +20,11 @@ export class HetznerServer {
const createServerPayload: types.TServerCreateRequestBody = { const createServerPayload: types.TServerCreateRequestBody = {
name: optionsArg.name, name: optionsArg.name,
image: 'ubuntu-22.04', image: 'ubuntu-22.04',
server_type: 'cx11', server_type: optionsArg.type,
start_after_create: true, start_after_create: true,
labels: {}, labels: optionsArg.labels || {} as any,
location: optionsArg.location, location: optionsArg.location,
user_data: optionsArg.userData || '',
public_net: { public_net: {
enable_ipv4: true, enable_ipv4: true,
enable_ipv6: true, enable_ipv6: true,
@@ -48,6 +52,15 @@ export class HetznerServer {
return servers; return servers;
} }
public static async getServerByLabel(hetznerAccountRefArg: HetznerAccount, labelArg: string, valueArg?: string) {
const servers = await HetznerServer.getServers(hetznerAccountRefArg);
for (const server of servers) {
if (valueArg ? server.data.labels[labelArg] === valueArg : server.data.labels[labelArg]) {
return server;
}
}
}
// INSTANCE // INSTANCE
public hetznerAccountRef: HetznerAccount; public hetznerAccountRef: HetznerAccount;
public data: types.IServer; public data: types.IServer;
+30
View File
@@ -10,3 +10,33 @@ export type TServersGetResponseBody = plugins.hetznerOpenapi.paths['/servers']['
export type TServerCreateRequestBody = plugins.hetznerOpenapi.paths['/servers']['post']['requestBody']['content']['application/json']; export type TServerCreateRequestBody = plugins.hetznerOpenapi.paths['/servers']['post']['requestBody']['content']['application/json'];
export type TServerCreateResponseBody = plugins.hetznerOpenapi.paths['/servers']['post']['responses']['201']['content']['application/json']; export type TServerCreateResponseBody = plugins.hetznerOpenapi.paths['/servers']['post']['responses']['201']['content']['application/json'];
// server types
export type THetznerCloudServerName =
| 'cx11'
| 'cx21'
| 'cx31'
| 'cx41'
| 'cx51'
| 'ccx11'
| 'ccx21'
| 'ccx31'
| 'ccx41'
| 'ccx51'
| 'ccx13'
| 'ccx23'
| 'ccx33'
| 'ccx43'
| 'ccx53'
| 'ccx63'
| 'cpx11'
| 'cpx21'
| 'cpx31'
| 'cpx41'
| 'cpx51'
| 'cpx61'
| 'cpx70'
| 'cpx71'
| 'cpx90';
// location types
export type THetznerCloudLocationName = 'fsn1' | 'nbg1' | 'hel1' | 'ash' | 'hil';