Quellcode durchsuchen

Add cloudstack provider

Cristian Matiut vor 3 Monaten
Ursprung
Commit
fe9d53d471

+ 8 - 0
config.ts

@@ -141,6 +141,12 @@ const conf: Config = {
       types: ["destination"],
       requiredFields: ["cluster"],
     },
+    {
+      name: "cloudstack",
+      types: ["destination"],
+      requiredFields: ["zone"],
+      relistFields: ["linux_template", "windows_template"],
+    },
   ],
 
   /*
@@ -170,6 +176,7 @@ const conf: Config = {
     metal: 4,
     lxd: 4,
     libvirt: 4,
+    cloudstack: 4,
     nutanix: 4,
   },
 
@@ -194,6 +201,7 @@ const conf: Config = {
     lxd: "LXD",
     proxmox: "Proxmox VE",
     libvirt: "Libvirt",
+    cloudstack: "Cloudstack",
     nutanix: "Nutanix",
   },
 

+ 1 - 0
src/@types/Providers.ts

@@ -33,6 +33,7 @@ export type ProviderTypes =
   | "rhev"
   | "lxd"
   | "libvirt"
+  | "cloudstack"
   | "nutanix";
 
 export type Providers = {

+ 42 - 0
src/plugins/cloudstack/OptionsSchemaPlugin.ts

@@ -0,0 +1,42 @@
+/*
+Copyright (C) 2026  Cloudbase Solutions SRL
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+You should have received a copy of the GNU Affero General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+import type { Field } from "@src/@types/Field";
+import type { SchemaProperties, SchemaDefinitions } from "@src/@types/Schema";
+import OptionsSchemaPluginBase from "../default/OptionsSchemaPlugin";
+
+export default class OptionsSchemaParser extends OptionsSchemaPluginBase {
+  override parseSchemaToFields(opts: {
+    schema: SchemaProperties;
+    schemaDefinitions?: SchemaDefinitions | null | undefined;
+    dictionaryKey?: string;
+    requiresWindowsImage?: boolean;
+  }) {
+    return super.parseSchemaToFields(opts);
+  }
+
+  override sortFields(fields: Field[]) {
+    super.sortFields(fields);
+    fields.sort((f1, f2) => {
+      // sort zone field first
+      if (f1.name === "zone") {
+        return -1;
+      }
+      if (f2.name === "zone") {
+        return 1;
+      }
+      return 0;
+    });
+  }
+}

+ 3 - 0
tests/mocks/ProvidersMock.ts

@@ -65,4 +65,7 @@ export const PROVIDERS_MOCK: Providers = {
   vhi: {
     types: [],
   },
+  cloudstack: {
+    types: [],
+  },
 };