feat(volumes and firewalls): enable volumes and firewalls management.
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
// Hetzner Cloud Firewall Class
|
||||
import type { HetznerAccount } from './classes.account.js';
|
||||
import * as plugins from './hetznercloud.plugins.js';
|
||||
import * as types from './types.js';
|
||||
|
||||
export class HetznerFirewall {
|
||||
// STATIC
|
||||
public static create = async (
|
||||
hetznerAccountRefArg: HetznerAccount,
|
||||
optionsArg: {
|
||||
name: string;
|
||||
labels?: {[key: string]: string},
|
||||
rules: types.IFirewall['rules'],
|
||||
}
|
||||
) => {
|
||||
const firewall = new HetznerFirewall(hetznerAccountRefArg);
|
||||
|
||||
const createFirewallUrl = '/firewalls';
|
||||
const createFirewallPayload: types.TFirewallCreateRequestBody = {
|
||||
name: optionsArg.name,
|
||||
labels: optionsArg.labels || {} as any,
|
||||
rules: optionsArg.rules
|
||||
};
|
||||
const response = await firewall.hetznerAccountRef.request(
|
||||
'POST',
|
||||
createFirewallUrl,
|
||||
createFirewallPayload
|
||||
);
|
||||
firewall.data = (response.body as types.TFirewallCreateResponseBody).firewall;
|
||||
return firewall;
|
||||
}
|
||||
|
||||
public static getFirewalls = async (hetznerAccountRefArg: HetznerAccount) => {
|
||||
const firewallsGetUrl = '/firewalls';
|
||||
const response = await hetznerAccountRefArg.request('GET', firewallsGetUrl, {});
|
||||
const firewallsDataArray = (response.body as types.TFirewallsGetResponseBody).firewalls;
|
||||
const firewalls: HetznerFirewall[] = [];
|
||||
for (const firewallData of firewallsDataArray) {
|
||||
const firewall = new HetznerFirewall(hetznerAccountRefArg);
|
||||
firewall.data = firewallData;
|
||||
firewalls.push(firewall);
|
||||
}
|
||||
return firewalls;
|
||||
}
|
||||
|
||||
public static getFirewallsByLabel = async (hetznerAccountRefArg: HetznerAccount, labelObject: {[key: string]: string}) => {
|
||||
const firewalls = await HetznerFirewall.getFirewalls(hetznerAccountRefArg);
|
||||
const results: HetznerFirewall[] = [];
|
||||
for (const firewall of firewalls) {
|
||||
let isMatch = true;
|
||||
for (const key in labelObject) {
|
||||
if (firewall.data.labels[key] !== labelObject[key]) {
|
||||
isMatch = false;
|
||||
}
|
||||
}
|
||||
if (isMatch) {
|
||||
results.push(firewall);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
// INSTANCE
|
||||
public data: types.IFirewall;
|
||||
public hetznerAccountRef: HetznerAccount;
|
||||
|
||||
constructor(hetznerAccountRefArg: HetznerAccount) {
|
||||
this.hetznerAccountRef = hetznerAccountRefArg;
|
||||
}
|
||||
|
||||
public async delete() {
|
||||
await this.hetznerAccountRef.request('DELETE', `/firewalls/${this.data.id}`, {});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user