Prepare 0.1.0 for lab release: durable handlers, HTTP Compose, CI, and pulumi-tests.

- Harden DB-backed handlers and seed profiles; align client wire shapes for
  cluster resources, QEMU config, and node SSL fields
- Serve plain HTTP on Compose :8006; keep TLS optional (--profile tls) and
  terminate HTTPS at Kubernetes Ingress
- Add pulumi-tests (full contract surface majors 6–9 + BPG lifecycle) and
  make pulumi-tests
- Ship bilingual docs, CHANGELOG, SECURITY, CONTRIBUTING, and GitHub Actions
  (make ci + Compose/Helm validation)
This commit is contained in:
Sergey Antropoff
2026-07-18 04:18:05 +03:00
parent 777926487b
commit 48df10b17e
172 changed files with 7528 additions and 1208 deletions
+2
View File
@@ -1,3 +1,5 @@
**Language / Язык:** [English](README.md) | [Русский](README.ru.md)
# Runnable client cookbooks
Companion code for [docs/clients.md](../docs/clients.md).
+29
View File
@@ -0,0 +1,29 @@
**Language / Язык:** [English](README.md) | [Русский](README.ru.md)
# Запускаемые cookbook клиентов
Сопровождающий код к [docs/ru/clients.md](../docs/ru/clients.md).
## Предварительные требования
```bash
make up
make seed PROFILE=small
```
## Структура
| Путь | Стек |
|---|---|
| `python/` | proxmoxer + requests |
| `go/` | Go stdlib |
| `java/` | Java 11+ HttpClient |
| `perl/` | HTTP::Tiny |
| `ansible/` | ansible-playbook |
| `terraform/` | Terraform + Proxmox provider |
| `pulumi/` | Pulumi (Python) |
Нода по умолчанию: **`pve01`**. Токен по умолчанию:
`root@pam!automation=automation-secret`.
Гайды: [docs/examples/](../docs/ru/examples/overview.md).
+1 -1
View File
@@ -19,7 +19,7 @@ func env(k, def string) string {
}
func main() {
base := strings.TrimRight(env("PVE_BASE", "http://localhost:8006/api2/json"), "/")
base := strings.TrimRight(env("PVE_BASE", "https://localhost:8006/api2/json"), "/")
node := env("PVE_NODE", "pve01")
vmid := env("PVE_VMID", "113")
token := env("PVE_API_TOKEN", "root@pam!automation=automation-secret")
+1 -1
View File
@@ -18,7 +18,7 @@ public final class Cookbook {
private static final HttpClient CLIENT = HttpClient.newHttpClient();
public static void main(String[] args) throws Exception {
String base = env("PVE_BASE", "http://localhost:8006/api2/json");
String base = env("PVE_BASE", "https://localhost:8006/api2/json");
String node = env("PVE_NODE", "pve01");
String vmid = env("PVE_VMID", "114");
String token = env("PVE_API_TOKEN", "root@pam!automation=automation-secret");
+1 -1
View File
@@ -10,7 +10,7 @@ sub uri_escape {
return $value;
}
my $base = $ENV{PVE_BASE} // 'http://localhost:8006/api2/json';
my $base = $ENV{PVE_BASE} // 'https://localhost:8006/api2/json';
my $node = $ENV{PVE_NODE} // 'pve01';
my $vmid = $ENV{PVE_VMID} // '115';
my $token = $ENV{PVE_API_TOKEN} // 'root@pam!automation=automation-secret';
+1 -1
View File
@@ -15,7 +15,7 @@ import pulumi
import requests
config = pulumi.Config()
base = config.get("base") or "http://localhost:8006/api2/json"
base = config.get("base") or "https://localhost:8006/api2/json"
node = config.get("node") or "pve01"
vmid = int(config.get("vmid") or "118")
token = config.get_secret("token") or "root@pam!automation=automation-secret"
+1 -1
View File
@@ -27,7 +27,7 @@ def wait_task(proxmox: ProxmoxAPI, node: str, upid: str, timeout: float = 120.0)
def main() -> int:
host = os.environ.get("PVE_HOST", "localhost")
port = int(os.environ.get("PVE_PORT", "8007"))
port = int(os.environ.get("PVE_PORT", "8006"))
user = os.environ.get("PVE_USER", "root@pam")
node = os.environ.get("PVE_NODE", "pve01")
vmid = int(os.environ.get("PVE_VMID", "110"))
+1 -1
View File
@@ -10,7 +10,7 @@ from typing import Any
import requests
BASE = os.environ.get("PVE_BASE", "http://localhost:8006/api2/json")
BASE = os.environ.get("PVE_BASE", "https://localhost:8006/api2/json")
NODE = os.environ.get("PVE_NODE", "pve01")
VMID = int(os.environ.get("PVE_VMID", "111"))
TOKEN = os.environ.get(
+2 -2
View File
@@ -16,8 +16,8 @@ provider "proxmox" {
variable "endpoint" {
type = string
description = "Simulator HTTPS gateway, e.g. https://localhost:8007"
default = "https://localhost:8007"
description = "Simulator HTTPS gateway, e.g. https://localhost:8006"
default = "https://localhost:8006"
}
variable "api_token" {
+1 -1
View File
@@ -1,5 +1,5 @@
# Optional overrides — copy to terraform.tfvars if needed.
# endpoint = "https://localhost:8007"
# endpoint = "http://localhost:8006"
# api_token = "root@pam!automation=automation-secret"
# node_name = "pve01"
# vmid = 117