From b9fe23e2be05ea76a1b22917ac0c1388d89fb9dd Mon Sep 17 00:00:00 2001 From: Philippe Parage Date: Fri, 20 Mar 2026 08:49:09 +0100 Subject: [PATCH 1/5] fix(api): include error context in failure responses (closes #31) When rc != 0, the JSON response now includes: - error: the fatal/FAILED line from Ansible output - log_multiline: last 10 lines for context Previously returned only {rc: 2, result: []} with no explanation. Now returns {rc: 2, result: [], error: "...", log_multiline: [...]} --- app/routes/vms.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/routes/vms.py b/app/routes/vms.py index 35e1d8e..200b0d7 100644 --- a/app/routes/vms.py +++ b/app/routes/vms.py @@ -73,7 +73,13 @@ def _run_proxmox_action(req, action: str, extravars: dict) -> JSONResponse: if req.as_json: result = extract_action_results(events, action) - payload = {"rc": rc, "result": result} + payload: dict[str, Any] = {"rc": rc, "result": result} + # On failure, include error context from Ansible logs + if rc != 0: + lines = log_plain.splitlines() + fatal = next((l for l in lines if "fatal:" in l or "FAILED" in l), None) + payload["error"] = fatal.strip() if fatal else f"Ansible exited with rc={rc}" + payload["log_multiline"] = lines[-10:] # last 10 lines for context else: payload = {"rc": rc, "log_multiline": log_plain.splitlines()} From 6582c4f6ceee906bc36784796434c6b7d4aedb2a Mon Sep 17 00:00:00 2001 From: Philippe Parage Date: Fri, 20 Mar 2026 12:11:33 +0100 Subject: [PATCH 2/5] fix(cors): include lab network 192.168.42.x in default allowed origins The CORS regex env var gets mangled by systemd EnvironmentFile backslash parsing. Adding the lab subnet to the hardcoded default avoids that issue entirely. --- app/core/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/core/config.py b/app/core/config.py index 2bcafbf..0ad1983 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -58,7 +58,7 @@ class Settings: cors_origin_regex: str = field( default_factory=lambda: os.getenv( "CORS_ORIGIN_REGEX", - r"^https?://(localhost|127\.0\.0\.1|\[::1\])(:\d+)?$", + r"^https?://(localhost|127\.0\.0\.1|\[::1\]|192\.168\.42\.\d{1,3})(:\d+)?$", ) ) From 6e06389c098a5dda2b0eb41357a23ce85e055a64 Mon Sep 17 00:00:00 2001 From: t0kubetsu Date: Mon, 11 May 2026 12:14:47 +0200 Subject: [PATCH 3/5] feat(docker): two-stage production image on Debian bookworm, add openapi.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile: rewrite to two-stage build (builder → runtime) using python:3.13-bookworm / python:3.13-slim-bookworm; venv installed to /opt/venv in builder and copied to runtime stage; Ansible collections copied from /usr/share/ansible/collections; correct ANSIBLE_COLLECTIONS_PATH env var for ansible-core 2.19.1 - docker-compose.yml: production-oriented; no source bind-mounts; image tag driven by IMAGE_NAME env var (default ghcr.io/range42/range42-backend-api:latest) - openapi.json: export current API spec for Kong gateway bootstrap - README.md: add Docker Build & Publish section with GHCR login, build, tag and push commands; add openapi.json regeneration snippet - .dockerignore: exclude openapi.json from build context Closes #64 --- .dockerignore | 1 + Dockerfile | 36 +- README.md | 70 +- docker-compose.yml | 10 +- openapi.json | 9822 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 9917 insertions(+), 22 deletions(-) create mode 100644 openapi.json diff --git a/.dockerignore b/.dockerignore index 27bcb14..ad69bbf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -13,3 +13,4 @@ tests/ *.md !requirements.txt !requirements.yml +openapi.json diff --git a/Dockerfile b/Dockerfile index 0a3db0b..ad096fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,33 +1,45 @@ -FROM python:3.12-slim +# ─── Stage 1: builder ───────────────────────────────────────────────────────── +FROM python:3.13-bookworm AS builder -# Install system deps for ansible and ssh RUN apt-get update && apt-get install -y --no-install-recommends \ openssh-client \ git \ && rm -rf /var/lib/apt/lists/* -WORKDIR /app +WORKDIR /build -# Install Python deps COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt +RUN python -m venv /opt/venv \ + && /opt/venv/bin/pip install --no-cache-dir -r requirements.txt -# Install Ansible collections COPY requirements.yml . -RUN ansible-galaxy collection install -r requirements.yml -p /usr/share/ansible/collections +RUN /opt/venv/bin/ansible-galaxy collection install \ + -r requirements.yml \ + -p /usr/share/ansible/collections + +# ─── Stage 2: runtime ───────────────────────────────────────────────────────── +FROM python:3.13-slim-bookworm AS runtime + +RUN apt-get update && apt-get install -y --no-install-recommends \ + openssh-client \ + git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY --from=builder /opt/venv /opt/venv +COPY --from=builder /usr/share/ansible/collections /usr/share/ansible/collections -# Copy application COPY app/ app/ COPY playbooks/ playbooks/ COPY inventory/ inventory/ -# Set env defaults +ENV PATH="/opt/venv/bin:$PATH" +ENV PYTHONPATH=/app ENV PROJECT_ROOT_DIR=/app ENV API_BACKEND_WWWAPP_PLAYBOOKS_DIR=/app/ ENV API_BACKEND_INVENTORY_DIR=/app/inventory/ -ENV HOST=0.0.0.0 -ENV PORT=8000 -ENV PYTHONPATH=/app +ENV ANSIBLE_COLLECTIONS_PATH=/usr/share/ansible/collections EXPOSE 8000 diff --git a/README.md b/README.md index 59fe45e..0ec619a 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ FastAPI application that orchestrates Proxmox infrastructure deployments by exec ## Table of Contents - [Quick Start](#quick-start) +- [Docker: Build & Publish](#docker-build--publish) - [Configuration](#configuration) - [API Documentation](#api-documentation) - [WebSocket API](#websocket-api) @@ -23,17 +24,16 @@ FastAPI application that orchestrates Proxmox infrastructure deployments by exec ### Option 1 -- Docker ```bash -docker compose up +# Build and start (uses the built image — no source bind-mounts) +VAULT_PASSWORD=my-secret docker compose up ``` -Builds the image, installs dependencies and Ansible collections, and starts the API on port `8000`. +Builds the image from the local source and starts the API on port `8000`. The application code, Ansible playbooks, and inventory are baked into the image at build time. **Environment variables:** Configured via the host environment or a `.env` file. Required: at least one of `VAULT_PASSWORD_FILE` or `VAULT_PASSWORD` for vault-encrypted operations. **Volumes:** -- `./app` -- Application source (read-only) -- `./playbooks` -- Ansible playbooks (read-only) -- `./inventory` -- Ansible inventory files (read-only) +- `${SSH_KEY_PATH:-~/.ssh}` -- SSH private keys (read-only) — needed for Ansible over SSH **Health check:** The container pings `/docs/openapi.json` every 30s (5s timeout, 10s start period, 3 retries). @@ -66,6 +66,66 @@ uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload --- +## Docker: Build & Publish + +The Dockerfile is a two-stage build (`builder` → `runtime`) based on **Debian Bookworm** (`python:3.13-bookworm` / `python:3.13-slim-bookworm`): + +- **Stage 1 `builder`** — installs Python dependencies into `/opt/venv` and Ansible collections into `/usr/share/ansible/collections`. +- **Stage 2 `runtime`** — copies the virtualenv and collections from the builder; bakes in application code; runs uvicorn. + +### Build locally + +```bash +docker compose build +# or directly: +docker build -t ghcr.io/range42/range42-backend-api:latest . +``` + +### Run locally (validate the image) + +```bash +VAULT_PASSWORD=my-secret docker compose up +# API reachable at http://localhost:8000/docs/swagger +``` + +### Publish to GHCR + +```bash +# 1. Authenticate (one-time per machine) +echo $GITHUB_TOKEN | docker login ghcr.io -u --password-stdin + +# 2. Build and tag +IMAGE=ghcr.io/range42/range42-backend-api +VERSION=v0.1 # or $(git describe --tags --always) + +docker build -t ${IMAGE}:${VERSION} -t ${IMAGE}:latest . + +# 3. Push +docker push ${IMAGE}:${VERSION} +docker push ${IMAGE}:latest +``` + +Or with Compose (sets `IMAGE_NAME` for the service): + +```bash +IMAGE_NAME=ghcr.io/range42/range42-backend-api:v0.1 docker compose build +IMAGE_NAME=ghcr.io/range42/range42-backend-api:v0.1 docker compose push +``` + +### OpenAPI spec + +The committed `openapi.json` at the repository root reflects the current API surface. It is used to bootstrap the Kong API gateway configuration. To regenerate it after adding or modifying routes: + +```bash +PYTHONPATH=. python -c " +import json +from app.main import create_app +print(json.dumps(create_app().openapi(), indent=2)) +" > openapi.json +``` + +--- + ## Configuration All settings are read from environment variables in `app/core/config.py`. Nothing is hard-coded. diff --git a/docker-compose.yml b/docker-compose.yml index 8024ad4..d9d3cd5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,17 +1,17 @@ services: api: - build: . + image: ${IMAGE_NAME:-ghcr.io/range42/range42-backend-api:latest} + build: + context: . + target: runtime ports: - "${PORT:-8000}:8000" volumes: - - ./app:/app/app:ro - - ./playbooks:/app/playbooks:ro - - ./inventory:/app/inventory:ro - ${SSH_KEY_PATH:-~/.ssh}:/root/.ssh:ro environment: - PROJECT_ROOT_DIR=/app - API_BACKEND_WWWAPP_PLAYBOOKS_DIR=/app/ - - API_BACKEND_PUBLIC_PLAYBOOKS_DIR=${API_BACKEND_PUBLIC_PLAYBOOKS_DIR:-/app/} + - API_BACKEND_PUBLIC_PLAYBOOKS_DIR=${API_BACKEND_PUBLIC_PLAYBOOKS_DIR:-} - API_BACKEND_INVENTORY_DIR=/app/inventory/ - API_BACKEND_VAULT_FILE=${API_BACKEND_VAULT_FILE:-} - VAULT_PASSWORD_FILE=${VAULT_PASSWORD_FILE:-} diff --git a/openapi.json b/openapi.json new file mode 100644 index 0000000..9e34a31 --- /dev/null +++ b/openapi.json @@ -0,0 +1,9822 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "CR42 - API", + "contact": { + "email": "info@digisquad.com" + }, + "license": { + "name": "GPLv3" + }, + "version": "v0.1" + }, + "paths": { + "/v0/admin/debug/ping": { + "post": { + "tags": [ + "runner" + ], + "summary": "Run Ansible ping utility", + "description": "This endpoint runs the Ansible ping module to check connectivity with target hosts.", + "operationId": "debug_ping_v0_admin_debug_ping_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DebugPingRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/debug/func_test": { + "post": { + "tags": [ + "__tmp_testing" + ], + "summary": "temp stuff", + "description": "_testing - tmp", + "operationId": "debug_func_test_v0_admin_debug_func_test_post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/linux/ubuntu/install/docker": { + "post": { + "tags": [ + "bundles - core - ubuntu " + ], + "summary": "Install docker packages", + "description": "Install and configure docker engine on the target ubuntu system", + "operationId": "bundles_core_linux_ubuntu_install_docker_v0_admin_run_bundles_core_linux_ubuntu_install_docker_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleDockerRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleDockerReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/linux/ubuntu/install/docker-compose": { + "post": { + "tags": [ + "bundles - core - ubuntu " + ], + "summary": "Install docker compose packages", + "description": "Install and configure docker compose on the target ubuntu system", + "operationId": "bundles_core_linux_ubuntu_install_docker_compose_v0_admin_run_bundles_core_linux_ubuntu_install_docker_compose_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleDockerComposeRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleDockerComposeReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/linux/ubuntu/install/basic-packages": { + "post": { + "tags": [ + "bundles - core - ubuntu " + ], + "summary": "Install basics packages", + "description": "Install and configure a base set of packages on the target Ubuntu system", + "operationId": "bundles_core_linux_ubuntu_install_basic_packages_v0_admin_run_bundles_core_linux_ubuntu_install_basic_packages_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleBasicPackagesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleBasicPackagesReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/linux/ubuntu/install/dot-files": { + "post": { + "tags": [ + "bundles - core - ubuntu " + ], + "summary": "Install user dotfiles", + "description": "Install and configure generic dotfiles - vimrc, zshrc, etc.", + "operationId": "bundles_core_linux_ubuntu_install_dotfiles_v0_admin_run_bundles_core_linux_ubuntu_install_dot_files_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleDotFilesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleDotFilesItemReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/linux/ubuntu/configure/add-user": { + "post": { + "tags": [ + "bundles - core - ubuntu " + ], + "summary": "Add system user", + "description": "Create a new user with shell, home and password", + "operationId": "bundles_core_linux_ubuntu_configure_add_user_v0_admin_run_bundles_core_linux_ubuntu_configure_add_user_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleAddUserRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleAddUserReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/create-vms-admin": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - admin" + ], + "summary": "Create default admin VMs", + "description": "Create the default set of admin virtual machines for initial configuration in Proxmox", + "operationId": "bundles_proxmox_create_vms_admin_v0_admin_run_bundles_core_proxmox_configure_default_create_vms_admin_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleCreateAdminVmsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleCreateAdminVmsReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/create-vms-vuln": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - vuln" + ], + "summary": "Create default vulnerable VMs", + "description": "Create the default set of vulnerable virtual machines for initial configuration in Proxmox", + "operationId": "bundles_proxmox_create_vms_vuln_v0_admin_run_bundles_core_proxmox_configure_default_create_vms_vuln_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleCreateVulnVmsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleCreateVulnVmsReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/create-vms-student": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - student" + ], + "summary": "Create default student VMs", + "description": "Create the default set of student virtual machines for initial configuration in Proxmox", + "operationId": "bundles_proxmox_create_vms_student_v0_admin_run_bundles_core_proxmox_configure_default_create_vms_student_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleCreateStudentVmsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleCreateStudentVmsReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/start-vms-admin": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - admin" + ], + "summary": "Start admin vms ", + "description": "Start all admin virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_start_vms_admin_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/stop-vms-admin": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - admin" + ], + "summary": "Stop admin vms ", + "description": "Stop all admin virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_stop_vms_admin_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/pause-vms-admin": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - admin" + ], + "summary": "Pause admin vms ", + "description": "Pause all admin virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_pause_vms_admin_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/resume-vms-admin": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - admin" + ], + "summary": "Resume admin vms ", + "description": "Resume all admin virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_resume_vms_admin_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/start-vms-vuln": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - vuln" + ], + "summary": "Start vuln vms ", + "description": "Start all vuln virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_start_vms_vuln_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/stop-vms-vuln": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - vuln" + ], + "summary": "Stop vuln vms ", + "description": "Stop all vuln virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_stop_vms_vuln_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/pause-vms-vuln": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - vuln" + ], + "summary": "Pause vuln vms ", + "description": "Pause all vuln virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_pause_vms_vuln_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/resume-vms-vuln": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - vuln" + ], + "summary": "Resume vuln vms ", + "description": "Resume all vuln virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_resume_vms_vuln_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/start-vms-student": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - student" + ], + "summary": "Start student vms ", + "description": "Start all student virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_start_vms_student_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/stop-vms-student": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - student" + ], + "summary": "Stop student vms ", + "description": "Stop all student virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_stop_vms_student_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/pause-vms-student": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - student" + ], + "summary": "Pause student vms ", + "description": "Pause all student virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_pause_vms_student_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/resume-vms-student": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - student" + ], + "summary": "Resume student vms ", + "description": "Resume all student virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_resume_vms_student_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/delete-vms-student": { + "delete": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - student" + ], + "summary": "Delete student vms ", + "description": "Delete all student virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_delete_vms_student_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/delete-vms-vuln": { + "delete": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - vuln" + ], + "summary": "Delete vuln vms ", + "description": "Delete all vuln virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_delete_vms_vuln_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/delete-vms-admin": { + "delete": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - admin" + ], + "summary": "Delete admin vms ", + "description": "Delete all admin virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_delete_vms_admin_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/snapshot/create-vms-student": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - student" + ], + "summary": "Snapshot student vms ", + "description": "Snapshot all student virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_snapshot_create_vms_student_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotCreateReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/snapshot/create-vms-vuln": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - vuln" + ], + "summary": "Snapshot vuln vms ", + "description": "Snapshot all vuln virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_snapshot_create_vms_vuln_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotCreateReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/snapshot/create-vms-admin": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - admin" + ], + "summary": "Snapshot admin vms ", + "description": "Snapshot all admin virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_snapshot_create_vms_admin_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleStartStopDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotCreateReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/snapshot/revert-vms-student": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - student" + ], + "summary": "Snapshot student vms ", + "description": "Snapshot all student virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_snapshot_revert_vms_student_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleRevertSnapshotDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotRevertReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/snapshot/revert-vms-vuln": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - vuln" + ], + "summary": "Snapshot vuln vms ", + "description": "Snapshot all vuln virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_snapshot_revert_vms_vuln_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleRevertSnapshotDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotRevertReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/core/proxmox/configure/default/snapshot/revert-vms-admin": { + "post": { + "tags": [ + "bundles - core - proxmox - vms - default-configuration - admin" + ], + "summary": "Snapshot admin vms ", + "description": "Snapshot all admin virtual machines", + "operationId": "handler_v0_admin_run_bundles_core_proxmox_configure_default_snapshot_revert_vms_admin_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleRevertSnapshotDefaultRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotRevertReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/bundles/{bundles_name}/run": { + "post": { + "tags": [ + "runner" + ], + "summary": "Run bundles", + "description": "Run generic bundles with default (and static) extras_vars", + "operationId": "run_bundle_v0_admin_run_bundles__bundles_name__run_post", + "parameters": [ + { + "name": "bundles_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bundles Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DebugPingRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/run/scenarios/{scenario_name}/run": { + "post": { + "tags": [ + "runner" + ], + "summary": "Run scenario", + "description": "Run generic scenario with default (and static) extras_vars", + "operationId": "run_scenario_v0_admin_run_scenarios__scenario_name__run_post", + "parameters": [ + { + "name": "scenario_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Scenario Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DebugPingRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/list": { + "post": { + "tags": [ + "proxmox - usage" + ], + "summary": "List VMs and LXC containers", + "description": "This endpoint retrieves all virtual machines (VMs) and LXC containers from Proxmox.", + "operationId": "proxmox_vms_list_v0_admin_proxmox_vms_list_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmListRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "List VM result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmListReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/list_usage": { + "post": { + "tags": [ + "proxmox - usage" + ], + "summary": "Retrieve current resource usage of VMs and LXC containers", + "description": "Returns the current RAM, disk, and CPU usage for all virtual machines (VMs) and LXC containers.", + "operationId": "proxmox_vms_list_usage_v0_admin_proxmox_vms_list_usage_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmListUsageRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Resource usage details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmListUsageReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/start": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Start a specific VM", + "description": "This endpoint start the target virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_start_v0_admin_proxmox_vms_vm_id_start_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Start result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/stop": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Stop a specific VM", + "description": "This endpoint stop the target virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_stop_v0_admin_proxmox_vms_vm_id_stop_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Start result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/stop_force": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Force stop a specific VM", + "description": "This endpoint force stop the target virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_stop_force_v0_admin_proxmox_vms_vm_id_stop_force_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Start result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/pause": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Pause a specific VM", + "description": "This endpoint pauses the target virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_pause_v0_admin_proxmox_vms_vm_id_pause_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Start result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/resume": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Resume a specific VM", + "description": "This endpoint resume the target virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_resume_v0_admin_proxmox_vms_vm_id_resume_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Start result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/create": { + "post": { + "tags": [ + "proxmox - vm management" + ], + "summary": "Create a specific VM", + "description": "This endpoint create the target virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_create_v0_admin_proxmox_vms_vm_id_create_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmCreateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Delete result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmCreateReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/delete": { + "delete": { + "tags": [ + "proxmox - vm management" + ], + "summary": "Delete a specific VM", + "description": "This endpoint delete the target virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_delete_v0_admin_proxmox_vms_vm_id_delete_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmDeleteRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Delete result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmDeleteReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/clone": { + "post": { + "tags": [ + "proxmox - vm management" + ], + "summary": "Clone a specific VM", + "description": "This endpoint clone the target virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_clone_v0_admin_proxmox_vms_vm_id_clone_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmCloneRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Delete result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmCloneReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_ids/stop": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Mass stop vms ", + "description": "Stop all specified virtual machines", + "operationId": "proxmox_vms_vm_ids_mass_stop_v0_admin_proxmox_vms_vm_ids_stop_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MassActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_ids/stop_force": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Mass force stop vms ", + "description": "Force stop all specified virtual machines", + "operationId": "proxmox_vms_vm_ids_mass_stop_force_v0_admin_proxmox_vms_vm_ids_stop_force_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MassActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_ids/start": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Mass start vms ", + "description": "Start all specified virtual machines", + "operationId": "proxmox_vms_vm_ids_mass_start_v0_admin_proxmox_vms_vm_ids_start_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MassActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_ids/pause": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Mass pause vms ", + "description": "Pause all specified virtual machines", + "operationId": "proxmox_vms_vm_ids_mass_pause_v0_admin_proxmox_vms_vm_ids_pause_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MassActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_ids/resume": { + "post": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Mass resume vms ", + "description": "Resume all specified virtual machines", + "operationId": "proxmox_vms_vm_ids_mass_resume_v0_admin_proxmox_vms_vm_ids_resume_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MassActionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmActionReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_ids/delete": { + "delete": { + "tags": [ + "proxmox - vm lifecycle" + ], + "summary": "Mass delete vms ", + "description": "Delete all specified virtual machines", + "operationId": "proxmox_vms_vm_ids_mass_delete_v0_admin_proxmox_vms_vm_ids_delete_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MassDeleteRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MassDeleteReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_get_config": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Retrieve configuration of a VM", + "description": "Returns the configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_get_config_v0_admin_proxmox_vms_vm_id_config_vm_get_config_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmGetConfigRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmGetConfigReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_get_config_cdrom": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Get cdrom configuration of a VM", + "description": "Returns the cdrom configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_get_config_cdrom_v0_admin_proxmox_vms_vm_id_config_vm_get_config_cdrom_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmGetConfigCdromRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "cdrom configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmGetConfigCdromReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_get_config_cpu": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Get cpu configuration of a VM", + "description": "Returns the cpu configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_get_config_cpu_v0_admin_proxmox_vms_vm_id_config_vm_get_config_cpu_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmGetConfigCpuRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "cpu configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmGetConfigCpuReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_get_config_ram": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Get ram configuration of a VM", + "description": "Returns the ram configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_get_config_ram_v0_admin_proxmox_vms_vm_id_config_vm_get_config_ram_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmGetConfigRamRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ram configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmGetConfigRamReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_set_tag": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Retrieve configuration of a VM", + "description": "Returns the configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_set_tags_v0_admin_proxmox_vms_vm_id_config_vm_set_tag_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmSetTagRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmSetTagReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_set_name": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Set name of a VM", + "description": "Sets the name of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_set_name_v0_admin_proxmox_vms_vm_id_config_vm_set_name_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Request_ProxmoxVmsVMID_VmSetName" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply_ProxmoxVmsVMID_VmSetName" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_set_description": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Set description of a VM", + "description": "Sets the description of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_set_description_v0_admin_proxmox_vms_vm_id_config_vm_set_description_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Request_ProxmoxVmsVMID_VmSetDescription" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply_ProxmoxVmsVMID_VmSetDescription" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_set_cpu": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Set CPU cores of a VM", + "description": "Sets the CPU cores of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_set_cpu_v0_admin_proxmox_vms_vm_id_config_vm_set_cpu_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Request_ProxmoxVmsVMID_VmSetCpu" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply_ProxmoxVmsVMID_VmSetCpu" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/config/vm_set_memory": { + "post": { + "tags": [ + "proxmox - vm configuration" + ], + "summary": "Set memory of a VM", + "description": "Sets the memory of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_vm_set_memory_v0_admin_proxmox_vms_vm_id_config_vm_set_memory_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Request_ProxmoxVmsVMID_VmSetMemory" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply_ProxmoxVmsVMID_VmSetMemory" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/snapshot/list": { + "post": { + "tags": [ + "proxmox - vm snapshots" + ], + "summary": "List a snapshot for a VM", + "description": "List snapshot of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_list_snapshot_v0_admin_proxmox_vms_vm_id_snapshot_list_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotListRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Snapshot list result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotListReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/snapshot/create": { + "post": { + "tags": [ + "proxmox - vm snapshots" + ], + "summary": "Create a snapshot for a VM", + "description": "Creates a snapshot of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_create_snapshot_v0_admin_proxmox_vms_vm_id_snapshot_create_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotCreateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Snapshot creation result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotCreateReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/snapshot/delete": { + "delete": { + "tags": [ + "proxmox - vm snapshots" + ], + "summary": "Delete a snapshot for a VM", + "description": "Delete a snapshot of the specified virtual machine (VM).", + "operationId": "proxmox_vms_vm_id_delete_snapshot_v0_admin_proxmox_vms_vm_id_snapshot_delete_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotDeleteRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Snapshot delete result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotDeleteReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/vms/vm_id/snapshot/revert": { + "post": { + "tags": [ + "proxmox - vm snapshots" + ], + "summary": "Revert a VM to a snapshot", + "description": "Reverts the specified virtual machine (VM) to the given snapshot.", + "operationId": "proxmox_vms_vm_id_revert_snapshot_v0_admin_proxmox_vms_vm_id_snapshot_revert_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotRevertRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Snapshot revert result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotRevertReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/storage/storage_name/list_iso": { + "post": { + "tags": [ + "proxmox - storage" + ], + "summary": "Retrieve configuration of a VM", + "description": "Returns the configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_storage_with_storage_name_list_iso_v0_admin_proxmox_storage_storage_name_list_iso_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StorageListIsoRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StorageListIsoItemReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/storage/storage_name/list_template": { + "post": { + "tags": [ + "proxmox - storage" + ], + "summary": "Retrieve configuration of a VM", + "description": "Returns the configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_storage_with_storage_name_list_template_v0_admin_proxmox_storage_storage_name_list_template_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StorageListTemplateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StorageListTemplateReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/storage/list": { + "post": { + "tags": [ + "proxmox - storage" + ], + "summary": "Retrieve configuration of a VM", + "description": "Returns the configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_storage_list_v0_admin_proxmox_storage_list_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StorageListRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StorageListItemReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/storage/download_iso": { + "post": { + "tags": [ + "proxmox - storage" + ], + "summary": "Retrieve configuration of a VM", + "description": "Returns the configuration details of the specified virtual machine (VM).", + "operationId": "proxmox_storage_download_iso_v0_admin_proxmox_storage_download_iso_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StorageDownloadIsoRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "VM configuration details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StorageDownloadIsoItemReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/vm/alias/list": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "List VM firewall aliases", + "description": "List firewall aliases for a specific virtual machine", + "operationId": "proxmox_vm_alias_list_v0_admin_proxmox_firewall_vm_alias_list_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallAliasListRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the VM firewall aliases", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallAliasListReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/vm/alias/add": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Add a firewall alias", + "description": "Add a new alias to the Proxmox firewall - IPs, subnets/networks, hostnames", + "operationId": "proxmox_firewall_vm_alias_add_v0_admin_proxmox_firewall_vm_alias_add_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallAliasAddRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Information about the created firewall alias", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallAliasAddReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/vm/alias/delete": { + "delete": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Delete a firewall alias", + "description": "Remove an existing alias from the proxmox firewall", + "operationId": "proxmox_firewall_vm_alias_delete_v0_admin_proxmox_firewall_vm_alias_delete_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallAliasDeleteRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the deleted firewall alias", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallAliasDeleteReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/vm/rules/list": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "List VM firewall rules", + "description": "List firewall rules for a specific virtual machine", + "operationId": "proxmox_vm_rules_list_v0_admin_proxmox_firewall_vm_rules_list_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallRuleListRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the VM firewall rules", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallRuleListReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/vm/rules/apply": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Apply firewall rules", + "description": "Apply the received firewall rules to the proxmox firewall", + "operationId": "proxmox_firewall_vm_rules_add_v0_admin_proxmox_firewall_vm_rules_apply_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallRuleApplyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the applied firewall rules", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallRuleApplyReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/vm/rules/delete": { + "delete": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Delete a firewall rule", + "description": "Remove an existing rule from the proxmox firewall configuration", + "operationId": "proxmox_firewall_vm_rules_delete_v0_admin_proxmox_firewall_vm_rules_delete_delete", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallRuleDeleteRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the deleted firewall rule.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallRuleDeleteRequest" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/vm/enable": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Enable VM firewall", + "description": "Enable the proxmox firewall for a specific virtual machine", + "operationId": "proxmox_firewall_vm_enable_v0_admin_proxmox_firewall_vm_enable_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallEnableVmRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the enabled VM firewall", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallEnableVmReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/vm/disable": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Disable VM firewall", + "description": "Disable the proxmox firewall for a specific virtual machine", + "operationId": "proxmox_firewall_vm_disable_v0_admin_proxmox_firewall_vm_disable_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallDisableVmRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the disabled VM firewall", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallDisableVmReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/node/enable": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Enable node firewall", + "description": "Enable the proxmox firewall on a specific node", + "operationId": "proxmox_firewall_node_enable_v0_admin_proxmox_firewall_node_enable_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallEnableNodeRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the enabled node firewall", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallEnableNodeReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/node/disable": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Disable node firewall", + "description": "Disable the proxmox firewall on a specific node", + "operationId": "proxmox_firewall_node_disable_v0_admin_proxmox_firewall_node_disable_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallDisableNodeRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the disabled node firewall", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallDisableNodeReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/datacenter/enable": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Enable datacenter firewall", + "description": "Enable the proxmox firewall at the datacenter level", + "operationId": "proxmox_firewall_dc_enable_v0_admin_proxmox_firewall_datacenter_enable_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallEnableDcRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the enabled datacenter firewall", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallEnableDcReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/firewall/datacenter/disable": { + "post": { + "tags": [ + "proxmox - firewall" + ], + "summary": "Disable datacenter firewall", + "description": "Disable the proxmox firewall at the datacenter level", + "operationId": "proxmox_firewall_dc_disable_v0_admin_proxmox_firewall_datacenter_disable_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallDisableDcRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Details of the disabled datacenter firewall", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FirewallDisableDcReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/network/vm/add": { + "post": { + "tags": [ + "proxmox - network - vm" + ], + "summary": "Add VM network interface", + "description": "Create and attach a new network interface to a Proxmox VM.", + "operationId": "proxmox_network_vm_add_interface_v0_admin_proxmox_network_vm_add_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmNetworkAddRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Information about the added network interface.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmNetworkAddReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/network/vm/delete": { + "post": { + "tags": [ + "proxmox - network - vm" + ], + "summary": "Delete VM network interface", + "description": "Remove a network interface from a Proxmox VM.", + "operationId": "proxmox_network_vm_delete_interface_v0_admin_proxmox_network_vm_delete_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmNetworkDeleteRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Information about the deleted network interface.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmNetworkDeleteReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/network/vm/list": { + "post": { + "tags": [ + "proxmox - network - vm" + ], + "summary": "List VM network interfaces", + "description": "Retrieve all network interfaces attached to a Proxmox VM.", + "operationId": "proxmox_network_vm_list_interface_v0_admin_proxmox_network_vm_list_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmNetworkListRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "List of VM network interfaces.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VmNetworkListReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/network/node/add": { + "post": { + "tags": [ + "proxmox - network - node" + ], + "summary": "Add node network interface", + "description": "Create and attach a new network interface to a Proxmox node.", + "operationId": "proxmox_network_node_add_interface_v0_admin_proxmox_network_node_add_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeNetworkAddRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Information about the added network interface.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeNetworkAddReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/network/node/delete": { + "post": { + "tags": [ + "proxmox - network - node" + ], + "summary": "Delete node network interface", + "description": "Remove a network interface from a Proxmox node.", + "operationId": "proxmox_network_node_delete_interface_v0_admin_proxmox_network_node_delete_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeNetworkDeleteRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Information about the deleted network interface.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeNetworkDeleteReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v0/admin/proxmox/network//node/list": { + "post": { + "tags": [ + "proxmox - network - node" + ], + "summary": "List node network interfaces", + "description": "Retrieve all network interfaces configured on a Proxmox node.", + "operationId": "proxmox_network_node_list_interface_v0_admin_proxmox_network__node_list_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeNetworkListRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "List of node network interfaces.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeNetworkListReply" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "BundleAddUserItemReply": { + "properties": { + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "raw_data" + ], + "title": "BundleAddUserItemReply" + }, + "BundleAddUserReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/BundleAddUserItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "BundleAddUserReply", + "example": { + "rc": 0, + "result": [ + {} + ] + } + }, + "BundleAddUserRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "hosts": { + "type": "string", + "pattern": "^[a-zA-Z0-9._:-]+$", + "title": "Hosts", + "description": "Hosts or groups" + }, + "user": { + "type": "string", + "pattern": "^[a-z_][a-z0-9_-]*$", + "title": "User", + "description": "New user" + }, + "password": { + "type": "string", + "pattern": "^[A-Za-z0-9@._-]*$", + "title": "Password", + "description": "New password" + }, + "change_pwd_at_logon": { + "type": "boolean", + "title": "Change Pwd At Logon", + "description": "Force user to change password on first login" + }, + "shell_path": { + "type": "string", + "pattern": "^/[a-z/]*$", + "title": "Shell Path", + "description": "Default user shell " + } + }, + "type": "object", + "required": [ + "proxmox_node", + "hosts", + "user", + "password", + "change_pwd_at_logon", + "shell_path" + ], + "title": "BundleAddUserRequest", + "example": { + "change_pwd_at_logon": false, + "hosts": "r42.vuln-box-00", + "password": "r0b0t_aLd3rs0n", + "proxmox_node": "px-testing", + "shell_path": "/bin/sh", + "user": "elliot" + } + }, + "BundleBasicPackagesItemReply": { + "properties": { + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "raw_data" + ], + "title": "BundleBasicPackagesItemReply" + }, + "BundleBasicPackagesReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/BundleBasicPackagesItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "BundleBasicPackagesReply", + "example": { + "rc": 0, + "result": [ + {} + ] + } + }, + "BundleBasicPackagesRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "hosts": { + "type": "string", + "pattern": "^[a-zA-Z0-9._:-]+$", + "title": "Hosts", + "description": "Hosts or groups" + }, + "install_package_basics": { + "type": "boolean", + "title": "Install Package Basics", + "description": "" + }, + "install_package_firewalls": { + "type": "boolean", + "title": "Install Package Firewalls", + "description": "" + }, + "install_package_docker": { + "type": "boolean", + "title": "Install Package Docker", + "description": "" + }, + "install_package_docker_compose": { + "type": "boolean", + "title": "Install Package Docker Compose", + "description": "" + }, + "install_package_utils_json": { + "type": "boolean", + "title": "Install Package Utils Json", + "description": "" + }, + "install_package_utils_network": { + "type": "boolean", + "title": "Install Package Utils Network", + "description": "" + }, + "install_ntpclient_and_update_time": { + "type": "boolean", + "title": "Install Ntpclient And Update Time", + "description": "" + }, + "packages_cleaning": { + "type": "boolean", + "title": "Packages Cleaning", + "description": "" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "hosts", + "install_package_basics", + "install_package_firewalls", + "install_package_docker", + "install_package_docker_compose", + "install_package_utils_json", + "install_package_utils_network", + "install_ntpclient_and_update_time", + "packages_cleaning" + ], + "title": "BundleBasicPackagesRequest", + "example": { + "hosts": "r42.vuln-box-00", + "install_ntpclient_and_update_time": true, + "install_package_basics": true, + "install_package_docker": false, + "install_package_docker_compose": false, + "install_package_firewalls": false, + "install_package_utils_json": false, + "install_package_utils_network": false, + "packages_cleaning": true, + "proxmox_node": "px-testing" + } + }, + "BundleCreateAdminVmsItemReply": { + "properties": { + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "raw_data" + ], + "title": "BundleCreateAdminVmsItemReply" + }, + "BundleCreateAdminVmsItemRequest": { + "properties": { + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_ip": { + "type": "string", + "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$", + "title": "Vm Ip", + "description": "vm ipv4" + }, + "vm_description": { + "type": "string", + "maxLength": 200, + "title": "Vm Description", + "description": "Description" + } + }, + "type": "object", + "required": [ + "vm_id", + "vm_ip", + "vm_description" + ], + "title": "BundleCreateAdminVmsItemRequest" + }, + "BundleCreateAdminVmsReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/BundleCreateAdminVmsItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "BundleCreateAdminVmsReply", + "example": { + "rc": 0, + "result": [ + {} + ] + } + }, + "BundleCreateAdminVmsRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "vms": { + "additionalProperties": { + "$ref": "#/components/schemas/BundleCreateAdminVmsItemRequest" + }, + "type": "object", + "title": "Vms", + "description": "Map - vm override vm_id vm_ip vm_description, ... " + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vms" + ], + "title": "BundleCreateAdminVmsRequest", + "example": { + "proxmox_node": "px-testing", + "vms": { + "admin-wazuh": { + "vm_description": "Wazuh - dashboard", + "vm_id": 1000, + "vm_ip": "192.168.42.100" + }, + "admin-web-api-kong": { + "vm_description": "API gateway", + "vm_id": 1020, + "vm_ip": "192.168.42.120" + } + } + } + }, + "BundleCreateStudentVmsItemReply": { + "properties": { + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "raw_data" + ], + "title": "BundleCreateStudentVmsItemReply" + }, + "BundleCreateStudentVmsItemRequest": { + "properties": { + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_ip": { + "type": "string", + "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$", + "title": "Vm Ip", + "description": "vm ipv4" + }, + "vm_description": { + "type": "string", + "maxLength": 200, + "title": "Vm Description", + "description": "Description" + } + }, + "type": "object", + "required": [ + "vm_id", + "vm_ip", + "vm_description" + ], + "title": "BundleCreateStudentVmsItemRequest" + }, + "BundleCreateStudentVmsReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/BundleCreateStudentVmsItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "BundleCreateStudentVmsReply", + "example": { + "rc": 0, + "result": [ + {} + ] + } + }, + "BundleCreateStudentVmsRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "vms": { + "additionalProperties": { + "$ref": "#/components/schemas/BundleCreateStudentVmsItemRequest" + }, + "type": "object", + "title": "Vms", + "description": "Map - vm override vm_id vm_ip vm_description, ... " + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vms" + ], + "title": "BundleCreateStudentVmsRequest", + "example": { + "proxmox_node": "px-testing", + "vms": { + "student-box-01": { + "vm_description": "student R42 student vm", + "vm_id": 3001, + "vm_ip": "192.168.42.160" + } + } + } + }, + "BundleCreateVulnVmsItemReply": { + "properties": { + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "raw_data" + ], + "title": "BundleCreateVulnVmsItemReply" + }, + "BundleCreateVulnVmsItemRequest": { + "properties": { + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_ip": { + "type": "string", + "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$", + "title": "Vm Ip", + "description": "vm ipv4" + }, + "vm_description": { + "type": "string", + "maxLength": 200, + "title": "Vm Description", + "description": "Description" + } + }, + "type": "object", + "required": [ + "vm_id", + "vm_ip", + "vm_description" + ], + "title": "BundleCreateVulnVmsItemRequest" + }, + "BundleCreateVulnVmsReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/BundleCreateVulnVmsItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "BundleCreateVulnVmsReply", + "example": { + "rc": 0, + "result": [ + {} + ] + } + }, + "BundleCreateVulnVmsRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "vms": { + "additionalProperties": { + "$ref": "#/components/schemas/BundleCreateVulnVmsItemRequest" + }, + "type": "object", + "title": "Vms", + "description": "Map - vm override vm_id vm_ip vm_description, ... " + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vms" + ], + "title": "BundleCreateVulnVmsRequest", + "example": { + "proxmox_node": "px-testing", + "vms": { + "vuln-box-00": { + "vm_description": "vulnerable vm 00", + "vm_id": 4000, + "vm_ip": "192.168.42.170" + } + } + } + }, + "BundleDockerComposeItemReply": { + "properties": { + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "raw_data" + ], + "title": "BundleDockerComposeItemReply" + }, + "BundleDockerComposeReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/BundleDockerComposeItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "BundleDockerComposeReply", + "example": { + "rc": 0, + "result": [ + {} + ] + } + }, + "BundleDockerComposeRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "hosts": { + "type": "string", + "pattern": "^[a-zA-Z0-9._:-]+$", + "title": "Hosts", + "description": "Hosts or groups" + }, + "install_package_docker": { + "type": "boolean", + "title": "Install Package Docker", + "description": "" + }, + "install_package_docker_compose": { + "type": "boolean", + "title": "Install Package Docker Compose", + "description": "" + }, + "install_ntpclient_and_update_time": { + "type": "boolean", + "title": "Install Ntpclient And Update Time", + "description": "" + }, + "packages_cleaning": { + "type": "boolean", + "title": "Packages Cleaning", + "description": "" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "hosts", + "install_package_docker", + "install_package_docker_compose", + "install_ntpclient_and_update_time", + "packages_cleaning" + ], + "title": "BundleDockerComposeRequest", + "example": { + "hosts": "r42.vuln-box-00", + "install_ntpclient_and_update_time": true, + "install_package_docker": true, + "install_package_docker_compose": true, + "packages_cleaning": true, + "proxmox_node": "px-testing" + } + }, + "BundleDockerItemReply": { + "properties": { + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "raw_data" + ], + "title": "BundleDockerItemReply" + }, + "BundleDockerReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/BundleDockerItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "BundleDockerReply", + "example": { + "rc": 0, + "result": [ + {} + ] + } + }, + "BundleDockerRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "hosts": { + "type": "string", + "pattern": "^[a-zA-Z0-9._:-]+$", + "title": "Hosts", + "description": "Hosts or groups" + }, + "install_package_docker": { + "type": "boolean", + "title": "Install Package Docker", + "description": "" + }, + "install_ntpclient_and_update_time": { + "type": "boolean", + "title": "Install Ntpclient And Update Time", + "description": "" + }, + "packages_cleaning": { + "type": "boolean", + "title": "Packages Cleaning", + "description": "" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "hosts", + "install_package_docker", + "install_ntpclient_and_update_time", + "packages_cleaning" + ], + "title": "BundleDockerRequest", + "example": { + "hosts": "r42.vuln-box-00", + "install_ntpclient_and_update_time": true, + "install_package_docker": true, + "packages_cleaning": true, + "proxmox_node": "px-testing" + } + }, + "BundleDotFilesItemReply": { + "properties": { + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "raw_data" + ], + "title": "BundleDotFilesItemReply" + }, + "BundleDotFilesRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "hosts": { + "type": "string", + "pattern": "^[a-zA-Z0-9._:-]+$", + "title": "Hosts", + "description": "Hosts or groups" + }, + "user": { + "type": "string", + "title": "User", + "description": "targeted username" + }, + "install_vim_dot_files": { + "type": "boolean", + "title": "Install Vim Dot Files", + "description": "Install vim dot file in user directory" + }, + "install_zsh_dot_files": { + "type": "boolean", + "title": "Install Zsh Dot Files", + "description": "Install zsh dot file in user directory" + }, + "apply_for_root": { + "type": "boolean", + "title": "Apply For Root", + "description": "Install dot files in /root" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "hosts", + "user", + "install_vim_dot_files", + "install_zsh_dot_files", + "apply_for_root" + ], + "title": "BundleDotFilesRequest", + "example": { + "apply_for_root": false, + "hosts": "r42.vuln-box-00", + "install_vim_dot_files": true, + "install_zsh_dot_files": true, + "proxmox_node": "px-testing", + "user": "jane" + } + }, + "BundleRevertSnapshotDefaultRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_snapshot_name": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9_-]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Snapshot Name", + "description": "Name of the snapshot to create" + } + }, + "type": "object", + "required": [ + "proxmox_node" + ], + "title": "BundleRevertSnapshotDefaultRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_snapshot_name": "default-snapshot-from-API-220925-1734" + } + }, + "BundleStartStopDefaultRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + } + }, + "type": "object", + "required": [ + "proxmox_node" + ], + "title": "BundleStartStopDefaultRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing" + } + }, + "DebugPingRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": false + }, + "hosts": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9\\._-]+$" + }, + { + "type": "null" + } + ], + "title": "Hosts", + "description": "Targeted ansible hosts" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "hosts" + ], + "title": "DebugPingRequest", + "example": { + "as_json": false, + "hosts": "all", + "proxmox_node": "px-testing" + } + }, + "FirewallAliasAddItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_ListIso_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_fw_alias_cidr": { + "type": "string", + "title": "Vm Fw Alias Cidr" + }, + "vm_fw_alias_name": { + "type": "string", + "title": "Vm Fw Alias Name" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_fw_alias_cidr", + "vm_fw_alias_name", + "vm_id" + ], + "title": "FirewallAliasAddItemReply" + }, + "FirewallAliasAddReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallAliasAddItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallAliasAddReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_vm_add_iptables_alias", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_fw_alias_cidr": "192.168.123.0/24", + "vm_fw_alias_name": "test", + "vm_id": "1000" + } + ] + } + }, + "FirewallAliasAddRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_fw_alias_name": { + "type": "string", + "pattern": "^[A-Za-z0-9-_]+$", + "title": "Vm Fw Alias Name", + "description": "Firewall alias name" + }, + "vm_fw_alias_cidr": { + "type": "string", + "pattern": "^[0-9./]+$", + "title": "Vm Fw Alias Cidr", + "description": "CIDR notation for the alias - eg 192.168.123.0/24" + }, + "vm_fw_alias_comment": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9 _-]*$" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Alias Comment", + "description": "Optional comment for the firewall alias" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_fw_alias_name", + "vm_fw_alias_cidr", + "vm_fw_alias_comment" + ], + "title": "FirewallAliasAddRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_fw_alias_cidr": "192.168.123.0/24", + "vm_fw_alias_comment": "this_comment", + "vm_fw_alias_name": "test", + "vm_id": "1000" + } + }, + "FirewallAliasDeleteItemReply": { + "properties": { + "action": { + "type": "string", + "const": "firewall_vm_delete_iptables_alias", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_fw_alias_name": { + "type": "string", + "title": "Vm Fw Alias Name" + }, + "vm_id": { + "type": "integer", + "title": "Vm Id" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_fw_alias_name", + "vm_id" + ], + "title": "FirewallAliasDeleteItemReply" + }, + "FirewallAliasDeleteReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallAliasDeleteItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallAliasDeleteReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_vm_delete_iptables_alias", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_fw_alias_name": "test", + "vm_id": "1000" + } + ] + } + }, + "FirewallAliasDeleteRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_fw_alias_name": { + "type": "string", + "pattern": "^[A-Za-z0-9-_]+$", + "title": "Vm Fw Alias Name", + "description": "Firewall alias name" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_fw_alias_name" + ], + "title": "FirewallAliasDeleteRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_fw_alias_name": "test", + "vm_id": "1000" + } + }, + "FirewallAliasListItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_ListIptablesAlias_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_fw_alias_cidr": { + "type": "string", + "title": "Vm Fw Alias Cidr" + }, + "vm_fw_alias_name": { + "type": "integer", + "title": "Vm Fw Alias Name" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_fw_alias_cidr", + "vm_fw_alias_name", + "vm_id" + ], + "title": "FirewallAliasListItemReply" + }, + "FirewallAliasListReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallAliasListItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallAliasListReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_vm_list_iptables_alias", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_fw_alias_cidr": "192.168.123.0/24", + "vm_fw_alias_name": "test", + "vm_id": "1000" + } + ] + } + }, + "FirewallAliasListRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "FirewallAliasListRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1000" + } + }, + "FirewallDisableDcItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_DisableFirewallDc_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node" + ], + "title": "FirewallDisableDcItemReply" + }, + "FirewallDisableDcReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallDisableDcItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallDisableDcReply", + "example": { + "rc": 0, + "result": [ + { + "action": "storage_list_iso", + "proxmox_node": "px-testing", + "source": "proxmox" + } + ] + } + }, + "FirewallDisableDcRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "proxmox_api_host": { + "type": "string", + "pattern": "^[A-Za-z0-9\\.:-]*$", + "title": "Proxmox Api Host", + "description": "Proxmox api - ip:port" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "proxmox_api_host" + ], + "title": "FirewallDisableDcRequest", + "example": { + "as_json": true, + "proxmox_api_host": "127.0.0.1:1234", + "proxmox_node": "px-testing" + } + }, + "FirewallDisableNodeItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_EnableFirewallNode_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "node_firewall": { + "type": "string", + "title": "Node Firewall" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "node_firewall" + ], + "title": "FirewallDisableNodeItemReply" + }, + "FirewallDisableNodeReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallDisableNodeItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallDisableNodeReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_node_enable", + "node_firewall": "disabled", + "proxmox_node": "px-testing", + "source": "proxmox" + } + ] + } + }, + "FirewallDisableNodeRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + } + }, + "type": "object", + "required": [ + "proxmox_node" + ], + "title": "FirewallDisableNodeRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing" + } + }, + "FirewallDisableVmItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_EnableFirewallDc_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "proxmox_api_host": { + "type": "string", + "title": "Proxmox Api Host" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "proxmox_api_host" + ], + "title": "FirewallDisableVmItemReply" + }, + "FirewallDisableVmReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallDisableVmItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallDisableVmReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_vm_disable", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_firewall": "disable", + "vm_id": "1000", + "vm_name": "test" + } + ] + } + }, + "FirewallDisableVmRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "FirewallDisableVmRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1000" + } + }, + "FirewallEnableDcItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_EnableFirewallDc_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "proxmox_api_host": { + "type": "string", + "title": "Proxmox Api Host" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "proxmox_api_host" + ], + "title": "FirewallEnableDcItemReply" + }, + "FirewallEnableDcReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallEnableDcItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallEnableDcReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_vm_disable", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_firewall": "disable", + "vm_id": "100", + "vm_name": "test" + } + ] + } + }, + "FirewallEnableDcRequest": { + "properties": { + "proxmox_api_host": { + "type": "string", + "pattern": "^[A-Za-z0-9\\.:-]*$", + "title": "Proxmox Api Host", + "description": "Proxmox api - ip:port" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + } + }, + "type": "object", + "required": [ + "proxmox_api_host" + ], + "title": "FirewallEnableDcRequest", + "example": { + "as_json": true, + "proxmox_api_host": "127.0.0.1:18007", + "proxmox_node": "px-testing" + } + }, + "FirewallEnableNodeItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_EnableFirewallNode_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "node_firewall": { + "type": "string", + "title": "Node Firewall" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "node_firewall" + ], + "title": "FirewallEnableNodeItemReply" + }, + "FirewallEnableNodeReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallEnableNodeItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallEnableNodeReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_node_enable", + "node_firewall": "enabled", + "proxmox_node": "px-testing", + "source": "proxmox" + } + ] + } + }, + "FirewallEnableNodeRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + } + }, + "type": "object", + "required": [ + "proxmox_node" + ], + "title": "FirewallEnableNodeRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing" + } + }, + "FirewallEnableVmItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_EnableFirewallVm_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "vm_firewall": { + "type": "string", + "title": "Vm Firewall" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_name", + "vm_firewall" + ], + "title": "FirewallEnableVmItemReply" + }, + "FirewallEnableVmReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallEnableVmItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallEnableVmReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_vm_enable", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_firewall": "enabled", + "vm_id": "100", + "vm_name": "test" + } + ] + } + }, + "FirewallEnableVmRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "FirewallEnableVmRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1000", + "vm_name": "test" + } + }, + "FirewallRuleApplyItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_ApplyIptablesRules_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_fw_action": { + "type": "string", + "title": "Vm Fw Action" + }, + "vm_fw_comment": { + "type": "string", + "title": "Vm Fw Comment" + }, + "vm_fw_dest": { + "type": "string", + "title": "Vm Fw Dest" + }, + "vm_fw_dport": { + "type": "string", + "title": "Vm Fw Dport" + }, + "vm_fw_enable": { + "type": "integer", + "title": "Vm Fw Enable" + }, + "vm_fw_iface": { + "type": "string", + "title": "Vm Fw Iface" + }, + "vm_fw_log": { + "type": "string", + "title": "Vm Fw Log" + }, + "vm_fw_pos": { + "type": "integer", + "title": "Vm Fw Pos" + }, + "vm_fw_proto": { + "type": "string", + "title": "Vm Fw Proto" + }, + "vm_fw_source": { + "type": "string", + "title": "Vm Fw Source" + }, + "vm_fw_sport": { + "type": "string", + "title": "Vm Fw Sport" + }, + "vm_fw_type": { + "type": "string", + "title": "Vm Fw Type" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_fw_action", + "vm_fw_comment", + "vm_fw_dest", + "vm_fw_dport", + "vm_fw_enable", + "vm_fw_iface", + "vm_fw_log", + "vm_fw_pos", + "vm_fw_proto", + "vm_fw_source", + "vm_fw_sport", + "vm_fw_type", + "vm_id" + ], + "title": "FirewallRuleApplyItemReply" + }, + "FirewallRuleApplyReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallRuleApplyItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallRuleApplyReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_vm_apply_iptables_rule", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_fw_action": "ACCEPT", + "vm_fw_dport": "80", + "vm_fw_enable": "1", + "vm_fw_proto": "tcp", + "vm_fw_type": "out", + "vm_id": "100" + } + ] + } + }, + "FirewallRuleApplyRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "title": "Proxmox Node", + "description": "Target Proxmox node name." + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true: return JSON output, otherwise raw output.", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_fw_action": { + "type": "string", + "pattern": "^(ACCEPT|DROP|REJECT)$", + "title": "Vm Fw Action", + "description": "Firewall action - ACCEPT, DROP, REJECT" + }, + "vm_fw_dport": { + "type": "string", + "pattern": "^[0-9:-]+$", + "title": "Vm Fw Dport", + "description": "Destination port or port range" + }, + "vm_fw_enable": { + "type": "integer", + "title": "Vm Fw Enable", + "description": "Enable flag - 1 = enabled, 0 = disabled" + }, + "vm_fw_proto": { + "type": "string", + "pattern": "^[a-zA-Z0-9]+$", + "title": "Vm Fw Proto", + "description": "Protocol - tcp, udp, icmp" + }, + "vm_fw_type": { + "type": "string", + "pattern": "^(in|out)$", + "title": "Vm Fw Type", + "description": "Rule type - in or out" + }, + "vm_fw_log": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9_-]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Log", + "description": "Optional logging level - info, debug,..." + }, + "vm_fw_iface": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9_-]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Iface", + "description": "Optional network interface name" + }, + "vm_fw_source": { + "anyOf": [ + { + "type": "string", + "pattern": "^[0-9./]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Source", + "description": "Optional source address or CIDR" + }, + "vm_fw_dest": { + "anyOf": [ + { + "type": "string", + "pattern": "^[0-9./]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Dest", + "description": "Optional destination address or CIDR" + }, + "vm_fw_sport": { + "anyOf": [ + { + "type": "string", + "pattern": "^[0-9:-]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Sport", + "description": "Optional source port or port range" + }, + "vm_fw_comment": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9 _-]*$" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Comment", + "description": "Optional comment for the rule" + }, + "vm_fw_pos": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Pos", + "description": "Optional position index rule in the chain." + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_fw_action", + "vm_fw_dport", + "vm_fw_enable", + "vm_fw_proto", + "vm_fw_type" + ], + "title": "FirewallRuleApplyRequest", + "example": [ + { + "as_json": true, + "proxmox_node": "px-node-01", + "vm_fw_action": "ACCEPT", + "vm_fw_comment": "Test comment", + "vm_fw_dest": "0.0.0.0/0", + "vm_fw_dport": "22", + "vm_fw_enable": 1, + "vm_fw_iface": "net0", + "vm_fw_log": "debug", + "vm_fw_pos": 5, + "vm_fw_proto": "tcp", + "vm_fw_source": "192.168.1.0/24", + "vm_fw_sport": "1024", + "vm_fw_type": "in", + "vm_id": "1000" + } + ] + }, + "FirewallRuleDeleteRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_fw_pos": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Vm Fw Pos", + "description": "Optional position index rule in the chain." + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_fw_pos" + ], + "title": "FirewallRuleDeleteRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_fw_pos": 1, + "vm_id": "1000" + } + }, + "FirewallRuleListItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_ListIptablesRules_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_fw_action": { + "type": "string", + "title": "Vm Fw Action" + }, + "vm_fw_comment": { + "type": "string", + "title": "Vm Fw Comment" + }, + "vm_fw_dest": { + "type": "string", + "title": "Vm Fw Dest" + }, + "vm_fw_dport": { + "type": "string", + "title": "Vm Fw Dport" + }, + "vm_fw_enable": { + "type": "integer", + "title": "Vm Fw Enable" + }, + "vm_fw_iface": { + "type": "string", + "title": "Vm Fw Iface" + }, + "vm_fw_log": { + "type": "string", + "title": "Vm Fw Log" + }, + "vm_fw_pos": { + "type": "integer", + "title": "Vm Fw Pos" + }, + "vm_fw_proto": { + "type": "string", + "title": "Vm Fw Proto" + }, + "vm_fw_source": { + "type": "string", + "title": "Vm Fw Source" + }, + "vm_fw_sport": { + "type": "string", + "title": "Vm Fw Sport" + }, + "vm_fw_type": { + "type": "string", + "title": "Vm Fw Type" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_fw_action", + "vm_fw_comment", + "vm_fw_dest", + "vm_fw_dport", + "vm_fw_enable", + "vm_fw_iface", + "vm_fw_log", + "vm_fw_pos", + "vm_fw_proto", + "vm_fw_source", + "vm_fw_sport", + "vm_fw_type", + "vm_id" + ], + "title": "FirewallRuleListItemReply" + }, + "FirewallRuleListReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/FirewallRuleListItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "FirewallRuleListReply", + "example": { + "rc": 0, + "result": [ + { + "action": "firewall_vm_list_iptables_rule", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_fw_action": "ACCEPT", + "vm_fw_enable": 0, + "vm_fw_log": "nolog", + "vm_fw_pos": 0, + "vm_fw_type": "in", + "vm_id": "100" + } + ] + } + }, + "FirewallRuleListRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "FirewallRuleListRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1000" + } + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "MassActionRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_ids": { + "items": { + "type": "string" + }, + "type": "array", + "minItems": 1, + "title": "Vm Ids", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_ids" + ], + "title": "MassActionRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_ids": [ + "4000", + "4001" + ] + } + }, + "MassDeleteItemReply": { + "properties": { + "action": { + "type": "string", + "enum": [ + "vm_start", + "vm_stop", + "vm_resume", + "vm_pause", + "vm_stop_force" + ], + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "vm_status": { + "type": "string", + "enum": [ + "running", + "stopped", + "paused" + ], + "title": "Vm Status" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_name", + "vm_status" + ], + "title": "MassDeleteItemReply" + }, + "MassDeleteReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/MassDeleteItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "MassDeleteReply" + }, + "MassDeleteRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vms": { + "items": { + "$ref": "#/components/schemas/MassDeleteVmItem" + }, + "type": "array", + "minItems": 1, + "title": "Vms", + "description": "List of virtual machine (vm_id + vm_name)" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vms" + ], + "title": "MassDeleteRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vms": [ + { + "id": "4000", + "name": "vuln-box-00" + }, + { + "id": "4001", + "name": "vuln-box-01" + }, + { + "id": "4002", + "name": "vuln-box-02" + } + ] + } + }, + "MassDeleteVmItem": { + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Id", + "description": "Virtual machine id" + }, + "name": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "title": "Name", + "description": "Virtual machine meta name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "MassDeleteVmItem" + }, + "NodeNetworkAddItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_DeleteIptablesRule_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "as_json": { + "type": "boolean", + "title": "As Json" + }, + "bridge_ports": { + "type": "string", + "title": "Bridge Ports" + }, + "iface_name": { + "type": "string", + "title": "Iface Name" + }, + "iface_type": { + "type": "string", + "title": "Iface Type" + }, + "iface_autostart": { + "type": "integer", + "title": "Iface Autostart" + }, + "ip_address": { + "type": "string", + "title": "Ip Address" + }, + "ip_netmask": { + "type": "string", + "title": "Ip Netmask" + }, + "ip_gateway": { + "type": "string", + "title": "Ip Gateway" + }, + "ovs_bridge": { + "type": "string", + "title": "Ovs Bridge" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "as_json", + "bridge_ports", + "iface_name", + "iface_type", + "iface_autostart", + "ip_address", + "ip_netmask", + "ip_gateway", + "ovs_bridge" + ], + "title": "NodeNetworkAddItemReply" + }, + "NodeNetworkAddReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/NodeNetworkAddItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "NodeNetworkAddReply", + "example": { + "rc": 0, + "result": [ + { + "action": "network_add_interfaces_node", + "bridge_ports": "enp87s0", + "iface_autostart": "1", + "iface_name": "vmbr142", + "ip_address": "192.168.99.2", + "ip_netmask": "255.255.255.0", + "proxmox_node": "px-testing", + "source": "proxmox" + } + ] + } + }, + "NodeNetworkAddRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "bridge_ports": { + "anyOf": [ + { + "type": "string", + "pattern": "^[a-zA-Z0-9._-]+$" + }, + { + "type": "null" + } + ], + "title": "Bridge Ports", + "description": "Bridge ports" + }, + "iface_name": { + "anyOf": [ + { + "type": "string", + "pattern": "^[a-zA-Z0-9._-]+$" + }, + { + "type": "null" + } + ], + "title": "Iface Name", + "description": "Interface name" + }, + "iface_type": { + "anyOf": [ + { + "type": "string", + "pattern": "^[a-zA-Z]+$" + }, + { + "type": "null" + } + ], + "title": "Iface Type", + "description": "Interface type - ethernet, ovs, bridge" + }, + "iface_autostart": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Iface Autostart", + "description": "Autostart flag - 0 = no, 1 = yes" + }, + "ip_address": { + "anyOf": [ + { + "type": "string", + "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$" + }, + { + "type": "null" + } + ], + "title": "Ip Address", + "description": "ipv4 address" + }, + "ip_netmask": { + "anyOf": [ + { + "type": "string", + "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$|^\\/[0-9]{1,2}$" + }, + { + "type": "null" + } + ], + "title": "Ip Netmask", + "description": "ipv4 netmask" + }, + "ip_gateway": { + "anyOf": [ + { + "type": "string", + "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$" + }, + { + "type": "null" + } + ], + "title": "Ip Gateway", + "description": "ipv4 gateway" + }, + "ovs_bridge": { + "anyOf": [ + { + "type": "string", + "pattern": "^[a-zA-Z0-9._-]+$" + }, + { + "type": "null" + } + ], + "title": "Ovs Bridge", + "description": "OVS bridge name" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "iface_name", + "iface_type", + "iface_autostart" + ], + "title": "NodeNetworkAddRequest", + "example": [ + { + "as_json": "true", + "bridge_ports": "enp87s0", + "iface_autostart": 1, + "iface_name": "vmbr142", + "iface_type": "bridge", + "ip_address": "192.168.99.2", + "ip_netmask": "255.255.255.0", + "proxmox_node": "px-testing" + } + ] + }, + "NodeNetworkDeleteItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_DeleteIptablesRule_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "iface_name": { + "type": "string", + "title": "Iface Name" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "iface_name" + ], + "title": "NodeNetworkDeleteItemReply" + }, + "NodeNetworkDeleteReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/NodeNetworkDeleteItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "NodeNetworkDeleteReply", + "example": { + "rc": 0, + "result": [ + { + "action": "network_delete_interfaces_node", + "iface_name": "vmbr42", + "proxmox_node": "px-testing", + "source": "proxmox" + } + ] + } + }, + "NodeNetworkDeleteRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "iface_name": { + "anyOf": [ + { + "type": "string", + "pattern": "^[a-zA-Z0-9._-]+$" + }, + { + "type": "null" + } + ], + "title": "Iface Name", + "description": "Interface name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + } + }, + "type": "object", + "required": [ + "proxmox_node", + "iface_name" + ], + "title": "NodeNetworkDeleteRequest", + "example": { + "as_json": true, + "iface_name": "vmbr42", + "proxmox_node": "px-testing", + "storage_name": "local" + } + }, + "NodeNetworkListItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_DeleteIptablesRule_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_fw_pos": { + "type": "integer", + "title": "Vm Fw Pos" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_fw_pos" + ], + "title": "NodeNetworkListItemReply" + }, + "NodeNetworkListReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/NodeNetworkListItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "NodeNetworkListReply", + "example": { + "rc": 0, + "result": [ + { + "action": "network_list_interfaces_node", + "iface": "wlp89s0", + "iface_priority": 8, + "ip_settings_method": "manual", + "ip_settings_method6": "manual", + "proxmox_node": "px-testing", + "source": "proxmox" + } + ] + } + }, + "NodeNetworkListRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + } + }, + "type": "object", + "required": [ + "proxmox_node" + ], + "title": "NodeNetworkListRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing" + } + }, + "Reply_ProxmoxVmsVMID_VmSetCpu": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Result" + }, + "log_multiline": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Log Multiline" + } + }, + "type": "object", + "title": "Reply_ProxmoxVmsVMID_VmSetCpu", + "example": { + "rc": 0 + } + }, + "Reply_ProxmoxVmsVMID_VmSetDescription": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Result" + }, + "log_multiline": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Log Multiline" + } + }, + "type": "object", + "title": "Reply_ProxmoxVmsVMID_VmSetDescription", + "example": { + "rc": 0 + } + }, + "Reply_ProxmoxVmsVMID_VmSetMemory": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Result" + }, + "log_multiline": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Log Multiline" + } + }, + "type": "object", + "title": "Reply_ProxmoxVmsVMID_VmSetMemory", + "example": { + "rc": 0 + } + }, + "Reply_ProxmoxVmsVMID_VmSetName": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Result" + }, + "log_multiline": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Log Multiline" + } + }, + "type": "object", + "title": "Reply_ProxmoxVmsVMID_VmSetName", + "example": { + "rc": 0 + } + }, + "Request_ProxmoxVmsVMID_VmSetCpu": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_cores": { + "type": "integer", + "maximum": 128.0, + "minimum": 1.0, + "title": "Vm Cores", + "description": "Number of CPU cores" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_cores" + ], + "title": "Request_ProxmoxVmsVMID_VmSetCpu", + "example": { + "as_json": true, + "proxmox_node": "pve01", + "vm_cores": 4, + "vm_id": "1023" + } + }, + "Request_ProxmoxVmsVMID_VmSetDescription": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_description": { + "type": "string", + "maxLength": 4096, + "title": "Vm Description", + "description": "New description for the virtual machine" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_description" + ], + "title": "Request_ProxmoxVmsVMID_VmSetDescription", + "example": { + "as_json": true, + "proxmox_node": "pve01", + "vm_description": "Production web server", + "vm_id": "1023" + } + }, + "Request_ProxmoxVmsVMID_VmSetMemory": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_memory": { + "type": "integer", + "maximum": 1048576.0, + "minimum": 128.0, + "title": "Vm Memory", + "description": "Memory in megabytes" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_memory" + ], + "title": "Request_ProxmoxVmsVMID_VmSetMemory", + "example": { + "as_json": true, + "proxmox_node": "pve01", + "vm_id": "1023", + "vm_memory": 4096 + } + }, + "Request_ProxmoxVmsVMID_VmSetName": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_name": { + "type": "string", + "pattern": "^[A-Za-z0-9._-]+$", + "title": "Vm Name", + "description": "New name for the virtual machine" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_name" + ], + "title": "Request_ProxmoxVmsVMID_VmSetName", + "example": { + "as_json": true, + "proxmox_node": "pve01", + "vm_id": "1023", + "vm_name": "web-server-01" + } + }, + "SnapshotCreateItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config", + "title": "Action" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "vm_snapshot_description": { + "type": "string", + "title": "Vm Snapshot Description" + }, + "vm_snapshot_name": { + "type": "string", + "title": "Vm Snapshot Name" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "action", + "proxmox_node", + "source", + "vm_id", + "vm_name", + "vm_snapshot_description", + "vm_snapshot_name", + "raw_data" + ], + "title": "SnapshotCreateItemReply" + }, + "SnapshotCreateReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/SnapshotCreateItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "SnapshotCreateReply", + "example": { + "rc": 0, + "result": [ + { + "action": "snapshot_vm_create", + "proxmox_node": "px-testing", + "raw_data": { + "data": "UPID:px-testing:002D5E30:1706941B:68C196E9:qmsnapshot:1000:API_master@pam!API_master:" + }, + "source": "proxmox", + "vm_id": "1000", + "vm_name": "admin-wazuh", + "vm_snapshot_description": "MY_DESCRIPTION", + "vm_snapshot_name": "MY_VM_SNAPSHOT" + } + ] + } + }, + "SnapshotCreateRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_snapshot_name": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9_-]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Snapshot Name", + "description": "Name of the snapshot to create" + }, + "vm_snapshot_description": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9_-]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Snapshot Description", + "description": "Optional description for the snapshot" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "SnapshotCreateRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111", + "vm_snapshot_description": "MY_DESCRIPTION", + "vm_snapshot_name": "MY_VM_SNAPSHOT" + } + }, + "SnapshotDeleteItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + } + }, + "type": "object", + "required": [ + "action", + "source" + ], + "title": "SnapshotDeleteItemReply" + }, + "SnapshotDeleteReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/SnapshotDeleteItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "SnapshotDeleteReply", + "example": { + "rc": 0, + "result": [ + { + "action": "snapshot_vm_delete", + "proxmox_node": "px-testing", + "raw_data": { + "data": "UPID:px-testing:002D6878:17077370:68C19925:qmdelsnapshot:1000:API_master@pam!API_master:" + }, + "source": "proxmox", + "vm_id": "1000", + "vm_name": "admin-wazuh", + "vm_snapshot_name": "BBBB" + } + ] + } + }, + "SnapshotDeleteRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_snapshot_name": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9_-]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Snapshot Name", + "description": "Name of the snapshot to delete" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "SnapshotDeleteRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111", + "vm_snapshot_name": "MY_VM_SNAPSHOT" + } + }, + "SnapshotListItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + } + }, + "type": "object", + "required": [ + "action", + "source" + ], + "title": "SnapshotListItemReply" + }, + "SnapshotListReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/SnapshotListItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "SnapshotListReply", + "example": { + "rc": 0, + "result": [ + { + "action": "snapshot_vm_list", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_id": "1000", + "vm_snapshot_description": "MY_DESCRIPTION", + "vm_snapshot_name": "MY_VM_SNAPSHOT", + "vm_snapshot_parent": "", + "vm_snapshot_time": 1757517545 + }, + { + "action": "snapshot_vm_list", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_id": "1000", + "vm_snapshot_description": "You are here!", + "vm_snapshot_name": "current", + "vm_snapshot_parent": "MY_VM_SNAPSHOT", + "vm_snapshot_sha1": "7cc59c988bb8f18601fe076ad239f8b760667270" + } + ] + } + }, + "SnapshotListRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "SnapshotListRequest", + "example": { + "proxmox_node": "px-testing", + "vm_id": "1111" + } + }, + "SnapshotRevertItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + } + }, + "type": "object", + "required": [ + "action", + "source" + ], + "title": "SnapshotRevertItemReply" + }, + "SnapshotRevertReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/SnapshotRevertItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "SnapshotRevertReply", + "example": { + "rc": 0, + "result": [ + { + "action": "snapshot_vm_revert", + "proxmox_node": "px-testing", + "raw_data": { + "data": "UPID:px-testing:002D7C57:17096777:68C19E25:qmrollback:1000:API_master@pam!API_master:" + }, + "source": "proxmox", + "vm_id": "1000", + "vm_name": "admin-wazuh", + "vm_snapshot_name": "CCCC" + } + ] + } + }, + "SnapshotRevertRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_snapshot_name": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9_-]+$" + }, + { + "type": "null" + } + ], + "title": "Vm Snapshot Name", + "description": "Name of the snapshot to create" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "SnapshotRevertRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111", + "vm_snapshot_name": "CCCC" + } + }, + "StorageDownloadIsoItemReply": { + "properties": { + "action": { + "type": "string", + "const": "storage_download_iso", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "cpu_allocated": { + "type": "integer", + "title": "Cpu Allocated" + }, + "cpu_current_usage": { + "type": "integer", + "title": "Cpu Current Usage" + }, + "disk_current_usage": { + "type": "integer", + "title": "Disk Current Usage" + }, + "disk_max": { + "type": "integer", + "title": "Disk Max" + }, + "disk_read": { + "type": "integer", + "title": "Disk Read" + }, + "disk_write": { + "type": "integer", + "title": "Disk Write" + }, + "net_in": { + "type": "integer", + "title": "Net In" + }, + "net_out": { + "type": "integer", + "title": "Net Out" + }, + "ram_current_usage": { + "type": "integer", + "title": "Ram Current Usage" + }, + "ram_max": { + "type": "integer", + "title": "Ram Max" + }, + "vm_status": { + "type": "string", + "title": "Vm Status" + }, + "vm_uptime": { + "type": "integer", + "title": "Vm Uptime" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_name", + "cpu_allocated", + "cpu_current_usage", + "disk_current_usage", + "disk_max", + "disk_read", + "disk_write", + "net_in", + "net_out", + "ram_current_usage", + "ram_max", + "vm_status", + "vm_uptime" + ], + "title": "StorageDownloadIsoItemReply" + }, + "StorageDownloadIsoRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "proxmox_storage": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "title": "Proxmox Storage", + "description": "Target Proxmox storage name" + }, + "iso_file_content_type": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Iso File Content Type", + "description": "MIME type of the ISO file" + }, + "iso_file_name": { + "type": "string", + "pattern": "^[A-Za-z0-9._-]+\\.iso$", + "title": "Iso File Name", + "description": "ISO file name - must end with .iso" + }, + "iso_url": { + "type": "string", + "pattern": "^https?://[^\\s]+$", + "title": "Iso Url", + "description": "http|https URL where the ISO will be downloaded from." + } + }, + "type": "object", + "required": [ + "proxmox_node", + "proxmox_storage", + "iso_file_content_type", + "iso_file_name", + "iso_url" + ], + "title": "StorageDownloadIsoRequest", + "example": { + "as_json": true, + "iso_file_content_type": "iso", + "iso_file_name": "ubuntu-24.04-live-server-amd64.iso", + "iso_url": "https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso", + "proxmox_node": "px-testing", + "storage_name": "local" + } + }, + "StorageListIsoItemReply": { + "properties": { + "action": { + "type": "string", + "const": "storage_list_iso", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "iso_content": { + "type": "string", + "title": "Iso Content" + }, + "iso_ctime": { + "type": "integer", + "title": "Iso Ctime" + }, + "iso_format": { + "type": "string", + "title": "Iso Format" + }, + "iso_size": { + "type": "integer", + "title": "Iso Size" + }, + "iso_vol_id": { + "type": "string", + "title": "Iso Vol Id" + }, + "local": { + "type": "string", + "title": "Local" + }, + "storage_name": { + "type": "string", + "title": "Storage Name" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "iso_content", + "iso_ctime", + "iso_format", + "iso_size", + "iso_vol_id", + "local", + "storage_name" + ], + "title": "StorageListIsoItemReply" + }, + "StorageListIsoRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "storage_name": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Storage Name", + "description": "Proxmox storage name" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "storage_name" + ], + "title": "StorageListIsoRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "storage_name": "local" + } + }, + "StorageListItemReply": { + "properties": { + "action": { + "type": "string", + "const": "storage_list", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "storage_active": { + "type": "integer", + "title": "Storage Active" + }, + "storage_content_types": { + "type": "string", + "title": "Storage Content Types" + }, + "storage_is_enable": { + "type": "integer", + "title": "Storage Is Enable" + }, + "storage_is_share": { + "type": "integer", + "title": "Storage Is Share" + }, + "storage_name": { + "type": "string", + "title": "Storage Name" + }, + "storage_space_available": { + "type": "integer", + "title": "Storage Space Available" + }, + "storage_space_total": { + "type": "integer", + "title": "Storage Space Total" + }, + "storage_space_used": { + "type": "integer", + "title": "Storage Space Used" + }, + "storage_space_used_fraction": { + "type": "number", + "title": "Storage Space Used Fraction" + }, + "storage_type": { + "type": "string", + "title": "Storage Type" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "storage_active", + "storage_content_types", + "storage_is_enable", + "storage_is_share", + "storage_name", + "storage_space_available", + "storage_space_total", + "storage_space_used", + "storage_space_used_fraction", + "storage_type" + ], + "title": "StorageListItemReply" + }, + "StorageListRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "storage_name": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Storage Name", + "description": "Proxmox storage name" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "storage_name" + ], + "title": "StorageListRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "storage_name": "local" + } + }, + "StorageListTemplateItemReply": { + "properties": { + "action": { + "type": "string", + "const": "storage_list_template", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "storage_name": { + "type": "string", + "title": "Storage Name" + }, + "template_content": { + "type": "string", + "title": "Template Content" + }, + "template_ctime": { + "type": "integer", + "title": "Template Ctime" + }, + "template_format": { + "type": "string", + "title": "Template Format" + }, + "template_size": { + "type": "integer", + "title": "Template Size" + }, + "template_vol_id": { + "type": "string", + "title": "Template Vol Id" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "storage_name", + "template_content", + "template_ctime", + "template_format", + "template_size", + "template_vol_id" + ], + "title": "StorageListTemplateItemReply" + }, + "StorageListTemplateReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/StorageListTemplateItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "StorageListTemplateReply", + "example": { + "rc": 0, + "result": [ + { + "action": "storage_list_template", + "proxmox_node": "px-testing", + "source": "proxmox", + "storage_name": "local", + "template_content": "vztmpl", + "template_ctime": 1749734175, + "template_format": "tzst", + "template_size": 126515062, + "template_vol_id": "local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst" + } + ] + } + }, + "StorageListTemplateRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "storage_name": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Storage Name", + "description": "Proxmox storage name" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "storage_name" + ], + "title": "StorageListTemplateRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "storage_name": "local" + } + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + }, + "VmActionItemReply": { + "properties": { + "action": { + "type": "string", + "enum": [ + "vm_start", + "vm_stop", + "vm_resume", + "vm_pause", + "vm_stop_force" + ], + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_name" + ], + "title": "VmActionItemReply" + }, + "VmActionReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmActionItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmActionReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_delete", + "proxmox_node": "px-testing", + "raw_data": { + "data": "UPID:px-testing:0033649C:1D2619CC:68D143C5:qmdestroy:4001:API_master@pam!API_master:" + }, + "source": "proxmox", + "vm_id": 4001, + "vm_name": "vuln-box-01" + }, + { + "action": "vm_delete", + "proxmox_node": "px-testing", + "raw_data": { + "data": "UPID:px-testing:003364A6:1D261A84:68D143C6:qmdestroy:4002:API_master@pam!API_master:" + }, + "source": "proxmox", + "vm_id": 4002, + "vm_name": "vuln-box-02" + } + ] + } + }, + "VmActionRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "VmActionRequest", + "example": { + "proxmox_node": "px-testing", + "vm_id": "2000" + } + }, + "VmCloneItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_clone", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id" + }, + "vm_id_clone_from": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id Clone From" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "vm_description": { + "type": "string", + "title": "Vm Description" + }, + "raw_info": { + "type": "string", + "title": "Raw Info", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_id_clone_from", + "vm_name", + "vm_description", + "raw_info" + ], + "title": "VmCloneItemReply" + }, + "VmCloneReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmCloneItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmCloneReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_clone", + "proxmox_node": "px-testing", + "raw_info": { + "data": "UPID:px-testing:0027CE9B:167F1A2C:68C03C17:qmclone:4004:API_master@pam!API_master:" + }, + "source": "proxmox", + "vm_description": "my description", + "vm_id": "5004", + "vm_id_clone_from": "4004", + "vm_name": "test-cloned" + } + ] + } + }, + "VmCloneRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_new_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm New Id", + "description": "New virtual machine id" + }, + "vm_description": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9\\s.,_\\-]*$" + }, + { + "type": "null" + } + ], + "title": "Vm Description", + "description": "Virtual machine meta description field", + "default": "cloned-vm" + }, + "vm_name": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Vm Name", + "description": "Virtual machine meta name" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_new_id", + "vm_name" + ], + "title": "VmCloneRequest", + "example": { + "proxmox_node": "px-testing", + "vm_description": "my description", + "vm_id": "2000", + "vm_name": "test-cloned", + "vm_new_id": "3000" + } + }, + "VmCreateItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_create", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "vm_cpu": { + "type": "string", + "title": "Vm Cpu" + }, + "vm_cores": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Cores" + }, + "vm_sockets": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Sockets" + }, + "vm_memory": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Memory" + }, + "vm_net0": { + "type": "string", + "title": "Vm Net0" + }, + "vm_scsi0": { + "type": "string", + "title": "Vm Scsi0" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by Proxmox" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_name", + "vm_cpu", + "vm_cores", + "vm_sockets", + "vm_memory", + "vm_net0", + "vm_scsi0", + "raw_data" + ], + "title": "VmCreateItemReply" + }, + "VmCreateReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmCreateItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmCreateReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_create", + "proxmox_node": "px-testing", + "raw_data": "UPID:px-testing:00281144:16855865:68C04C13:qmcreate:9998:API_master@pam!API_master:", + "source": "proxmox", + "vm_cores": 2, + "vm_cpu": "host", + "vm_id": 9998, + "vm_memory": 2042, + "vm_name": "vm-with-local-iso-2", + "vm_net0": "virtio,bridge=vmbr0", + "vm_scsi0": "local-lvm:42,format=raw", + "vm_sockets": 1 + } + ] + } + }, + "VmCreateRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_name": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Vm Name", + "description": "Virtual machine meta name" + }, + "vm_cpu": { + "type": "string", + "pattern": "^[A-Za-z0-9._-]+$", + "title": "Vm Cpu", + "description": "CPU type/model - host)" + }, + "vm_cores": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Cores", + "description": "Number of cores per socket" + }, + "vm_sockets": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Sockets", + "description": "Number of CPU sockets" + }, + "vm_memory": { + "type": "integer", + "minimum": 128.0, + "title": "Vm Memory", + "description": "Memory in MiB" + }, + "vm_disk_size": { + "anyOf": [ + { + "type": "integer", + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Vm Disk Size", + "description": "Disk size in GiB - optional" + }, + "vm_iso": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9._-]+:iso/.+\\.iso$" + }, + { + "type": "null" + } + ], + "title": "Vm Iso", + "description": "ISO volume path like 'local:iso/xxx.iso' - optional" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_name", + "vm_cpu", + "vm_cores", + "vm_sockets", + "vm_memory" + ], + "title": "VmCreateRequest", + "example": { + "proxmox_node": "px-testing", + "vm_cores": 2, + "vm_cpu": "host", + "vm_disk_size": 42, + "vm_id": "1111", + "vm_iso": "local:iso/ubuntu-24.04.2-live-server-amd64.iso", + "vm_memory": 2042, + "vm_name": "new-vm", + "vm_sockets": 1 + } + }, + "VmDeleteItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_delete", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_name", + "raw_data" + ], + "title": "VmDeleteItemReply" + }, + "VmDeleteReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmDeleteItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmDeleteReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_delete", + "proxmox_node": "px-testing", + "raw_data": "UPID:px-testing:123123:1123D4:68BFF2C7:qmdestroy:1023:API_master@pam!API_master:", + "source": "proxmox", + "vm_id": 1023, + "vm_name": "admin-web-deployer-ui" + } + ] + } + }, + "VmDeleteRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "VmDeleteRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111" + } + }, + "VmGetConfigCdromItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config_cdrom", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_cdrom_device": { + "type": "string", + "title": "Vm Cdrom Device" + }, + "vm_cdrom_iso": { + "type": "string", + "title": "Vm Cdrom Iso" + }, + "vm_cdrom_media": { + "type": "string", + "title": "Vm Cdrom Media" + }, + "vm_cdrom_size": { + "type": "string", + "title": "Vm Cdrom Size" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_cdrom_device", + "vm_cdrom_iso", + "vm_cdrom_media", + "vm_cdrom_size" + ], + "title": "VmGetConfigCdromItemReply" + }, + "VmGetConfigCdromReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmGetConfigCdromItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmGetConfigCdromReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_get_config_cdrom", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_cdrom_device": "ide2", + "vm_cdrom_iso": "local:1000/vm-1000-cloudinit.qcow2", + "vm_cdrom_media": "cdrom", + "vm_cdrom_size": "4M", + "vm_id": "1000" + } + ] + } + }, + "VmGetConfigCdromRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "VmGetConfigCdromRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111" + } + }, + "VmGetConfigCpuItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config_cpu", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_arch": { + "type": "string", + "title": "Vm Arch" + }, + "vm_cores": { + "type": "string", + "title": "Vm Cores" + }, + "vm_sockets": { + "type": "string", + "title": "Vm Sockets" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_arch", + "vm_cores", + "vm_sockets" + ], + "title": "VmGetConfigCpuItemReply" + }, + "VmGetConfigCpuReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmGetConfigCpuItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmGetConfigCpuReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_get_config_cpu", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_arch": "host", + "vm_cores": "2", + "vm_id": "1000", + "vm_sockets": "1" + } + ] + } + }, + "VmGetConfigCpuRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "VmGetConfigCpuRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111" + } + }, + "VmGetConfigItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "raw_data": { + "type": "string", + "title": "Raw Data", + "description": "Raw string returned by proxmox" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_name", + "raw_data" + ], + "title": "VmGetConfigItemReply" + }, + "VmGetConfigRamItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config_ram", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_ram_allocated": { + "type": "string", + "title": "Vm Ram Allocated" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_ram_allocated" + ], + "title": "VmGetConfigRamItemReply" + }, + "VmGetConfigRamReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmGetConfigRamItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmGetConfigRamReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_get_config_ram", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_id": "1000", + "vm_ram_allocated": "8192" + } + ] + } + }, + "VmGetConfigRamRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "VmGetConfigRamRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111" + } + }, + "VmGetConfigReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmGetConfigItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmGetConfigReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_get_config", + "proxmox_node": "px-testing", + "raw_data": { + "data": { + "balloon": 0, + "boot": "c", + "bootdisk": "scsi0", + "cipassword": "**********", + "ciuser": "alice", + "cores": 2, + "cpu": "host", + "digest": "29bec92_redacted", + "ide2": "local:1000/vm-1000-cloudinit.qcow2,media=cdrom,size=4M", + "ipconfig0": "ip=192.168.42.100/24,gw=192.168.42.1", + "memory": "8192", + "meta": "creation-qemu=9.0.2,ctime=1757418890", + "name": "admin-wazuh", + "net0": "virtio=BC:24:11:CB:B3:C7,bridge=vmbr0", + "scsi0": "local-lvm:vm-1000-disk-0,size=64G", + "scsihw": "virtio-scsi-pci", + "serial0": "socket", + "smbios1": "uuid=82c50ddc-a24f-4cbc-a013-c0e846f230fc", + "sockets": 1, + "sshkeys": "ssh-ed25519%20AAAAC....redacted", + "tags": "admin", + "vga": "serial0", + "vmgenid": "c7426562-ad4b-4719-81a1-72328f7ec018" + } + }, + "source": "proxmox", + "vm_id": "1000" + } + ] + } + }, + "VmGetConfigRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "VmGetConfigRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111" + } + }, + "VmListActionEnum": { + "type": "string", + "enum": [ + "vm_list", + "vm_start", + "vm_stop", + "vm_resume", + "vm_pause", + "vm_stop_force" + ], + "title": "VmListActionEnum" + }, + "VmListInfoReply": { + "properties": { + "action": { + "$ref": "#/components/schemas/VmListActionEnum" + }, + "source": { + "type": "string", + "title": "Source", + "description": "data source provider", + "default": "proxmox" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "vm_status": { + "$ref": "#/components/schemas/VmListStatusEnum" + }, + "vm_id": { + "type": "integer", + "title": "Vm Id" + }, + "vm_uptime": { + "type": "integer", + "title": "Vm Uptime" + }, + "vm_meta": { + "$ref": "#/components/schemas/VmListMetaReply" + } + }, + "type": "object", + "required": [ + "action", + "proxmox_node", + "vm_name", + "vm_status", + "vm_id", + "vm_uptime", + "vm_meta" + ], + "title": "VmListInfoReply" + }, + "VmListMetaReply": { + "properties": { + "cpu_current_usage": { + "type": "integer", + "title": "Cpu Current Usage" + }, + "cpu_allocated": { + "type": "integer", + "title": "Cpu Allocated" + }, + "disk_current_usage": { + "type": "integer", + "title": "Disk Current Usage" + }, + "disk_read": { + "type": "integer", + "title": "Disk Read" + }, + "disk_write": { + "type": "integer", + "title": "Disk Write" + }, + "disk_max": { + "type": "integer", + "title": "Disk Max" + }, + "ram_current_usage": { + "type": "integer", + "title": "Ram Current Usage" + }, + "ram_max": { + "type": "integer", + "title": "Ram Max" + }, + "net_in": { + "type": "integer", + "title": "Net In" + }, + "net_out": { + "type": "integer", + "title": "Net Out" + } + }, + "type": "object", + "required": [ + "cpu_current_usage", + "cpu_allocated", + "disk_current_usage", + "disk_read", + "disk_write", + "disk_max", + "ram_current_usage", + "ram_max", + "net_in", + "net_out" + ], + "title": "VmListMetaReply" + }, + "VmListReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN CODE (0 = OK) " + }, + "result": { + "items": { + "items": { + "$ref": "#/components/schemas/VmListInfoReply" + }, + "type": "array" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "rc", + "result" + ], + "title": "VmListReply" + }, + "VmListRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + } + }, + "type": "object", + "required": [ + "proxmox_node" + ], + "title": "VmListRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing" + } + }, + "VmListStatusEnum": { + "type": "string", + "enum": [ + "running", + "stopped", + "paused" + ], + "title": "VmListStatusEnum" + }, + "VmListUsageItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_list_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "integer", + "minimum": 1.0, + "title": "Vm Id" + }, + "vm_name": { + "type": "string", + "title": "Vm Name" + }, + "cpu_allocated": { + "type": "integer", + "title": "Cpu Allocated" + }, + "cpu_current_usage": { + "type": "integer", + "title": "Cpu Current Usage" + }, + "disk_current_usage": { + "type": "integer", + "title": "Disk Current Usage" + }, + "disk_max": { + "type": "integer", + "title": "Disk Max" + }, + "disk_read": { + "type": "integer", + "title": "Disk Read" + }, + "disk_write": { + "type": "integer", + "title": "Disk Write" + }, + "net_in": { + "type": "integer", + "title": "Net In" + }, + "net_out": { + "type": "integer", + "title": "Net Out" + }, + "ram_current_usage": { + "type": "integer", + "title": "Ram Current Usage" + }, + "ram_max": { + "type": "integer", + "title": "Ram Max" + }, + "vm_status": { + "type": "string", + "title": "Vm Status" + }, + "vm_uptime": { + "type": "integer", + "title": "Vm Uptime" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_name", + "cpu_allocated", + "cpu_current_usage", + "disk_current_usage", + "disk_max", + "disk_read", + "disk_write", + "net_in", + "net_out", + "ram_current_usage", + "ram_max", + "vm_status", + "vm_uptime" + ], + "title": "VmListUsageItemReply" + }, + "VmListUsageReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmListUsageItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmListUsageReply", + "example": { + "rc": 0, + "result": [ + { + "cpu_allocated": 1, + "cpu_current_usage": 0, + "disk_current_usage": 0, + "disk_max": 34359738368, + "disk_read": 0, + "disk_write": 0, + "net_in": 280531583, + "net_out": 6330590, + "ram_current_usage": 1910544625, + "ram_max": 4294967296, + "vm_id": 1020, + "vm_name": "admin-web-api-kong", + "vm_status": "running", + "vm_uptime": 79940 + } + ] + } + }, + "VmListUsageRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + } + }, + "type": "object", + "required": [ + "proxmox_node" + ], + "title": "VmListUsageRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing" + } + }, + "VmNetworkAddItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_DeleteIptablesRule_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_fw_pos": { + "type": "integer", + "title": "Vm Fw Pos" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_fw_pos" + ], + "title": "VmNetworkAddItemReply" + }, + "VmNetworkAddReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmNetworkAddItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmNetworkAddReply", + "example": { + "rc": 0, + "result": [ + { + "action": "network_add_interfaces_vm", + "iface_model": "virtio", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_id": "1000" + } + ] + } + }, + "VmNetworkAddRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "iface_model": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9._-]+$" + }, + { + "type": "null" + } + ], + "title": "Iface Model", + "description": "Interface model- virtio, e1000, rtl8139" + }, + "iface_bridge": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9._-]+$" + }, + { + "type": "null" + } + ], + "title": "Iface Bridge", + "description": "Bridge name for interface - vmbr0, vmbr142" + }, + "vm_vmnet_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Vm Vmnet Id", + "description": "Network device index - 0, 1, 2, ..." + }, + "iface_trunks": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Iface Trunks", + "description": "Enable trunk - allow multiple vlan on interface" + }, + "iface_tag": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Iface Tag", + "description": "VLAN tag id" + }, + "iface_rate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Iface Rate", + "description": "Limit bandwith - Mbps - 0 to x" + }, + "iface_queues": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Iface Queues", + "description": "Allocated amount allocated tx/rx on interface" + }, + "iface_mtu": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Iface Mtu", + "description": "MTU" + }, + "iface_macaddr": { + "anyOf": [ + { + "type": "string", + "pattern": "^(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$" + }, + { + "type": "null" + } + ], + "title": "Iface Macaddr", + "description": "MAC address - hexa format" + }, + "iface_link_down": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Iface Link Down", + "description": "Force to set down the interface" + }, + "iface_firewall": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Iface Firewall", + "description": "Apply firewall rules on this interface" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "iface_model", + "iface_bridge", + "vm_vmnet_id", + "iface_trunks", + "iface_tag", + "iface_rate", + "iface_queues", + "iface_mtu", + "iface_macaddr", + "iface_link_down", + "iface_firewall" + ], + "title": "VmNetworkAddRequest", + "example": { + "as_json": true, + "iface_bridge": "vmbr142", + "iface_model": "virtio", + "proxmox_node": "px-testing", + "storage_name": "local", + "vm_id": "1000", + "vm_vmnet_id": "1" + } + }, + "VmNetworkDeleteItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_DeleteIptablesRule_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + }, + "vm_fw_pos": { + "type": "integer", + "title": "Vm Fw Pos" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id", + "vm_fw_pos" + ], + "title": "VmNetworkDeleteItemReply" + }, + "VmNetworkDeleteReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmNetworkDeleteItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmNetworkDeleteReply", + "example": { + "rc": 0, + "result": [ + { + "action": "network_delete_interfaces_vm", + "iface_model": "virtio", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_id": "1000" + } + ] + } + }, + "VmNetworkDeleteRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_vmnet_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Vm Vmnet Id", + "description": "Network device index - 0, 1, 2, ..." + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_vmnet_id" + ], + "title": "VmNetworkDeleteRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "storage_name": "local", + "vm_id": "1000", + "vm_vmnet_id": 1 + } + }, + "VmNetworkListItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_DeleteIptablesRule_usage", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + }, + "proxmox_node": { + "type": "string", + "title": "Proxmox Node" + }, + "vm_id": { + "type": "string", + "title": "Vm Id" + } + }, + "type": "object", + "required": [ + "action", + "source", + "proxmox_node", + "vm_id" + ], + "title": "VmNetworkListItemReply" + }, + "VmNetworkListReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmNetworkListItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmNetworkListReply", + "example": { + "rc": 0, + "result": [ + { + "action": "network_list_interfaces_vm", + "proxmox_node": "px-testing", + "source": "proxmox", + "vm_id": "1000", + "vm_network_bridge": "vmbr0", + "vm_network_device": "net0", + "vm_network_mac": "AA:BB:CC:DD:EE:FF", + "vm_network_type": "virtio" + } + ] + } + }, + "VmNetworkListRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id" + ], + "title": "VmNetworkListRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1001" + } + }, + "VmSetTagItemReply": { + "properties": { + "action": { + "type": "string", + "const": "vm_get_config", + "title": "Action" + }, + "source": { + "type": "string", + "const": "proxmox", + "title": "Source" + } + }, + "type": "object", + "required": [ + "action", + "source" + ], + "title": "VmSetTagItemReply" + }, + "VmSetTagReply": { + "properties": { + "rc": { + "type": "integer", + "title": "Rc", + "description": "RETURN code (0 = OK)", + "default": 0 + }, + "result": { + "items": { + "$ref": "#/components/schemas/VmSetTagItemReply" + }, + "type": "array", + "title": "Result" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "VmSetTagReply", + "example": { + "rc": 0, + "result": [ + { + "action": "vm_set_tag", + "source": "proxmox", + "tags": "group_01,group_02" + } + ] + } + }, + "VmSetTagRequest": { + "properties": { + "proxmox_node": { + "type": "string", + "pattern": "^[A-Za-z0-9-]*$", + "title": "Proxmox Node", + "description": "Proxmox node name" + }, + "as_json": { + "type": "boolean", + "title": "As Json", + "description": "If true : JSON output else : raw output", + "default": true + }, + "vm_id": { + "type": "string", + "pattern": "^[0-9]+$", + "title": "Vm Id", + "description": "Virtual machine id" + }, + "vm_tag_name": { + "type": "string", + "pattern": "^[A-Za-z0-9_, -]+$", + "title": "Vm Tag Name", + "description": "Comma separated list of tags to assign to the virtual machine" + } + }, + "type": "object", + "required": [ + "proxmox_node", + "vm_id", + "vm_tag_name" + ], + "title": "VmSetTagRequest", + "example": { + "as_json": true, + "proxmox_node": "px-testing", + "vm_id": "1111", + "vm_tag_name": "group_01,group_02" + } + } + } + } +} From f33eadbe002c1c2fee732659e6f254f9d0611dba Mon Sep 17 00:00:00 2001 From: t0kubetsu Date: Mon, 11 May 2026 12:16:20 +0200 Subject: [PATCH 4/5] fix(contact): update contact email to info@nc3.lu --- app/main.py | 2 +- openapi.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/main.py b/app/main.py index fd66111..5200fa5 100644 --- a/app/main.py +++ b/app/main.py @@ -78,7 +78,7 @@ def create_app() -> FastAPI: openapi_url="/docs/openapi.json", version="v0.1", license_info={"name": "GPLv3"}, - contact={"email": "info@digisquad.com"}, + contact={"email": "info@nc3.lu"}, middleware=middleware, ) diff --git a/openapi.json b/openapi.json index 9e34a31..d81df5b 100644 --- a/openapi.json +++ b/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "CR42 - API", "contact": { - "email": "info@digisquad.com" + "email": "info@nc3.lu" }, "license": { "name": "GPLv3" From 5747459ae9b310651479d8bc3acc41193ec0264a Mon Sep 17 00:00:00 2001 From: t0kubetsu Date: Mon, 11 May 2026 12:26:24 +0200 Subject: [PATCH 5/5] =?UTF-8?q?fix(docker):=20address=20code=20review=20?= =?UTF-8?q?=E2=80=94=20non-root=20user,=20vault=20secret=20guidance,=20com?= =?UTF-8?q?pose=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile: add ARG UID/GID (default 1000) and non-root user `range42`; chown /app to range42; set HOME=/home/range42; add USER directive before EXPOSE/HEALTHCHECK/CMD - docker-compose.yml: pass UID/GID build args; update SSH key volume mount path to /home/range42/.ssh; restore API_BACKEND_PUBLIC_PLAYBOOKS_DIR default to /app/ (regression fix); add commented inventory bind-mount override; annotate VAULT_PASSWORD as dev-only - README.md: document non-root user, UID/GID build args, SSH known_hosts requirement, and VAULT_PASSWORD_FILE as the production vault secret pattern --- Dockerfile | 14 +++++++++++++- README.md | 25 +++++++++++++++++++++++++ docker-compose.yml | 14 ++++++++++++-- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index ad096fb..c107274 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,10 +20,17 @@ RUN /opt/venv/bin/ansible-galaxy collection install \ # ─── Stage 2: runtime ───────────────────────────────────────────────────────── FROM python:3.13-slim-bookworm AS runtime +# Match host UID/GID at build time so SSH key volume permissions align. +# Override with: docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) +ARG UID=1000 +ARG GID=1000 + RUN apt-get update && apt-get install -y --no-install-recommends \ openssh-client \ git \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* \ + && groupadd -g "${GID}" range42 \ + && useradd -u "${UID}" -g "${GID}" -m -d /home/range42 --no-log-init range42 WORKDIR /app @@ -34,13 +41,18 @@ COPY app/ app/ COPY playbooks/ playbooks/ COPY inventory/ inventory/ +RUN chown -R range42:range42 /app + ENV PATH="/opt/venv/bin:$PATH" +ENV HOME=/home/range42 ENV PYTHONPATH=/app ENV PROJECT_ROOT_DIR=/app ENV API_BACKEND_WWWAPP_PLAYBOOKS_DIR=/app/ ENV API_BACKEND_INVENTORY_DIR=/app/inventory/ ENV ANSIBLE_COLLECTIONS_PATH=/usr/share/ansible/collections +USER range42 + EXPOSE 8000 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ diff --git a/README.md b/README.md index 0ec619a..0c5b97b 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,18 @@ The Dockerfile is a two-stage build (`builder` → `runtime`) based on **Debian - **Stage 1 `builder`** — installs Python dependencies into `/opt/venv` and Ansible collections into `/usr/share/ansible/collections`. - **Stage 2 `runtime`** — copies the virtualenv and collections from the builder; bakes in application code; runs uvicorn. +### Non-root user + +The runtime image runs as a non-root user (`range42`, UID/GID 1000 by default). If your SSH keys are owned by a different UID, pass matching build args so the container user can read the mounted keys: + +```bash +docker compose build # uses UID/GID 1000 +# or match your host user: +UID=$(id -u) GID=$(id -g) docker compose build +``` + +SSH host key checking is enabled (`ANSIBLE_HOST_KEY_CHECKING=True`). Pre-populate `~/.ssh/known_hosts` on the host before mounting, or the first Ansible connection to an unknown host will fail. + ### Build locally ```bash @@ -112,6 +124,19 @@ IMAGE_NAME=ghcr.io/range42/range42-backend-api:v0.1 docker compose build IMAGE_NAME=ghcr.io/range42/range42-backend-api:v0.1 docker compose push ``` +### Vault password in production + +`VAULT_PASSWORD` passed as an environment variable is visible via `docker inspect` and in `/proc//environ` inside the container. For production use `VAULT_PASSWORD_FILE` pointed at a mounted secret file: + +```bash +# Create a secret file (outside the repo) +echo "my-vault-password" > /run/secrets/vault_pass +chmod 600 /run/secrets/vault_pass + +# Pass the file path, not the password itself +VAULT_PASSWORD_FILE=/run/secrets/vault_pass docker compose up +``` + ### OpenAPI spec The committed `openapi.json` at the repository root reflects the current API surface. It is used to bootstrap the Kong API gateway configuration. To regenerate it after adding or modifying routes: diff --git a/docker-compose.yml b/docker-compose.yml index d9d3cd5..4531cad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,16 +4,26 @@ services: build: context: . target: runtime + args: + UID: ${UID:-1000} + GID: ${GID:-1000} ports: - "${PORT:-8000}:8000" volumes: - - ${SSH_KEY_PATH:-~/.ssh}:/root/.ssh:ro + # SSH keys — must be readable by the container user (UID 1000 by default). + # Set SSH_KEY_PATH to override the source directory. + - ${SSH_KEY_PATH:-~/.ssh}:/home/range42/.ssh:ro + # Inventory contains per-deployment host credentials. Uncomment to + # override the baked-in inventory without rebuilding the image: + # - ${INVENTORY_PATH:-./inventory}:/app/inventory:ro environment: - PROJECT_ROOT_DIR=/app - API_BACKEND_WWWAPP_PLAYBOOKS_DIR=/app/ - - API_BACKEND_PUBLIC_PLAYBOOKS_DIR=${API_BACKEND_PUBLIC_PLAYBOOKS_DIR:-} + - API_BACKEND_PUBLIC_PLAYBOOKS_DIR=${API_BACKEND_PUBLIC_PLAYBOOKS_DIR:-/app/} - API_BACKEND_INVENTORY_DIR=/app/inventory/ - API_BACKEND_VAULT_FILE=${API_BACKEND_VAULT_FILE:-} + # Production: use VAULT_PASSWORD_FILE pointing to a mounted secret file. + # VAULT_PASSWORD is visible via `docker inspect` — dev/testing only. - VAULT_PASSWORD_FILE=${VAULT_PASSWORD_FILE:-} - VAULT_PASSWORD=${VAULT_PASSWORD:-} - CORS_ORIGIN_REGEX=${CORS_ORIGIN_REGEX:-}