From 61639b2e21633c085616081e97142fbb649d536b Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 28 Nov 2025 16:13:42 +0530 Subject: [PATCH] extension: import using manifest For https://github.com/apache/cloudstack/pull/12102 Signed-off-by: Abhishek Kumar --- source/_static/images/import-extension.png | Bin 0 -> 63891 bytes source/adminguide/extensions.rst | 2 + .../extensions/import_extensions.rst | 302 ++++++++++++++++++ 3 files changed, 304 insertions(+) create mode 100644 source/_static/images/import-extension.png create mode 100644 source/adminguide/extensions/import_extensions.rst diff --git a/source/_static/images/import-extension.png b/source/_static/images/import-extension.png new file mode 100644 index 0000000000000000000000000000000000000000..781b5333088ef021e87ee7fb3ef0b0518b17e56c GIT binary patch literal 63891 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

aI3?PU@U#53|i^H&C733v7!zTzm8R> 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 Sh_J>aB=YxE?&jYy^7~)cqO^$s literal 0 HcmV?d00001 diff --git a/source/adminguide/extensions.rst b/source/adminguide/extensions.rst index 2c6b7308e0..55ad2df35c 100644 --- a/source/adminguide/extensions.rst +++ b/source/adminguide/extensions.rst @@ -96,6 +96,8 @@ CloudStack provides built-in Orchestrator Extensions for Proxmox, Hyper-V, and M .. include:: extensions/limitations.rst +.. include:: extensions/import_extensions.rst + .. include:: extensions/troubleshooting.rst .. include:: extensions/developer.rst diff --git a/source/adminguide/extensions/import_extensions.rst b/source/adminguide/extensions/import_extensions.rst new file mode 100644 index 0000000000..6d2ae4d40b --- /dev/null +++ b/source/adminguide/extensions/import_extensions.rst @@ -0,0 +1,302 @@ +.. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information# + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +Importing Extensions using manifest files +========================================= + +CloudStack provides functionality to import extensions using manifest files. This allows administrators to quickly set up and configure built-in extensions without manually creating them through the UI or API. +Either the ``importExtension`` API call can be used by providing a manifest file link, or the UI can be used to import extensions by providing the manifest file link directly. +CloudStack supports importing extensions from Git repositories or direct archive links. The manifest file must reference a source that provides: + +- A Git repository with archive download capability (e.g., GitHub), or +- A direct URL to a downloadable archive (e.g., ``.zip``, ``.tar.gz``) + +The archive must contain the required entrypoint file and any other needed scripts/files at the correct paths. + + |import-extension.png| + + +Git Repository Layout and Required Files +---------------------------------------- + +For an extension to be installed by CloudStack, two files are required: + +1. ``manifest.yaml`` +2. An entrypoint binary or script referenced from the manifest. + +``manifest.yaml`` (required) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Must be located at the root of the repository. +- Must follow the extension schema (``apiVersion``, ``kind``, ``metadata``, ``spec``, etc.). +- Must reference a valid entrypoint file under ``spec.entrypoint.path``. + +Example layout:: + + cloudstack-orchestrator-extension/ + ├── manifest.yaml # Required — must be at the root + └── orchestrator.py # Required — entrypoint binary/script + +Entrypoint Binary or Script (required) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The entrypoint file must exist at the exact relative path specified:: + + entrypoint: + language: python + path: orchestrator.py + targetDir: /usr/share/cloudstack-management/extensions/orchestrator + +Resulting installation path:: + + /usr/share/cloudstack-management/extensions/orchestrator/orchestrator.py + +--- + +Manifest Structure Overview +--------------------------- + +The ``manifest.yaml`` file describes how CloudStack should install, register, and run the extension. + +At a high level, a manifest contains:: + + apiVersion + kind + metadata + source + spec + enabled + customActions + +--- + +Required Fields +--------------- + +apiVersion and kind +~~~~~~~~~~~~~~~~~~~ + +- ``apiVersion``: API version for the extension manifest. +- ``kind``: Extension type — for compute lifecycle handlers, this must be ``OrchestratorExtension``. + +--- + +Metadata +-------- + +Provides human-readable information stored in the Registry and shown in the UI. + ++--------------+----------+---------------------------------------------+ +| Field | Required | Description | ++==============+==========+=============================================+ +| name | Yes | Internal identifier | ++--------------+----------+---------------------------------------------+ +| displayName | Yes | UI-visible name | ++--------------+----------+---------------------------------------------+ +| description | Yes | Short explanation | ++--------------+----------+---------------------------------------------+ +| version | Yes | Semantic version | ++--------------+----------+---------------------------------------------+ +| maintainer | Yes | Contact information | ++--------------+----------+---------------------------------------------+ +| homepage | Optional | Project URL | ++--------------+----------+---------------------------------------------+ + +Example:: + + metadata: + name: orchestrator + displayName: Orchestrator Extension + description: > + Example orchestrator extension for CloudStack. + version: 0.1.0 + maintainer: "Your Name " + homepage: "https://github.com/user/cloudstack-orchestrator-extension" + +--- + +Source +------ + +Defines where CloudStack fetches extension files from:: + + source: + type: git + url: "https://github.com/user/cloudstack-orchestrator-extension" + refs: "main" + +--- + +Spec +---- + +Spec Type:: + + spec: + type: Orchestrator + +Compatibility (required) +~~~~~~~~~~~~~~~~~~~~~~~~ + +Defines supported CloudStack versions:: + + spec: + compatibility: + cloudstack: + minVersion: 4.23.0 + +Entrypoint (required) +~~~~~~~~~~~~~~~~~~~~~ + +Specifies installation and execution settings:: + + spec: + entrypoint: + path: orchestrator.py + targetDir: /usr/share/cloudstack-management/extensions/orchestrator + +Execution path:: + + / + +Orchestrator Options (optional) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + spec: + orchestrator: + requiresPrepareVm: false + +Details (optional) +~~~~~~~~~~~~~~~~~~ + +Free-form metadata passed through without interpretation:: + + spec: + details: + key1: value1 + key2: value2 + +--- + +Global Enabled Flag +------------------- + +Controls whether the extension becomes active after installation:: + + enabled: true + +--- + +Custom Actions +-------------- + +Extensions may expose UI actions. + +If not required:: + + customActions: [] + +Example:: + + customActions: + - name: BackupInstance + displayName: "Backup Instance" + description: "Trigger a backup using the external orchestrator." + resourcetype: VirtualMachine + enabled: true + timeout: 600 + allowedroletypes: [Admin, DomainAdmin, User] + successmessage: "Successfully completed {{actionName}} for {{resourceName}} with {{extensionName}}" + errormessage: "Failed to complete {{actionName}} for {{resourceName}} with {{extensionName}}" + details: + vendor: "external-backup-system" + retentionPolicy: "daily" + +--- + +Parameters +---------- + +Shown to the user when executing an action. + +If unused:: + + parameters: [] + +Example:: + + parameters: + - name: backup_type + type: STRING + required: true + validationformat: NONE + valueoptions: "full,incremental" + + - name: retain_days + type: NUMBER + required: false + validationformat: DECIMAL + +Supported Parameter Types +~~~~~~~~~~~~~~~~~~~~~~~~~ + +- BOOLEAN +- DATE +- NUMBER +- STRING + +Validation Formats +~~~~~~~~~~~~~~~~~~ + ++------------+--------------------------------------+ +| Type | Formats | ++============+======================================+ +| NUMBER | ``NONE``, ``DECIMAL`` | ++------------+--------------------------------------+ +| STRING | ``NONE``, ``EMAIL``, ``PASSWORD``, | +| | ``URL``, ``UUID`` | ++------------+--------------------------------------+ +| BOOLEAN | No additional formats | ++------------+--------------------------------------+ +| DATE | No additional formats | ++------------+--------------------------------------+ + +--- + +Example Parameter Block +----------------------- + +:: + + parameters: + - name: backup_type + type: STRING + required: true + validationformat: NONE + valueoptions: "full,incremental" + + - name: retain_days + type: NUMBER + validationformat: DECIMAL + + - name: notify + type: BOOLEAN + +.. Images + + +.. |import-extension.png| image:: /_static/images/import-extension.png