End-to-end deployment automation for OpenText SMAX/OBM/BVD on Proxmox, vSphere, and bare-metal
Project description
SMAX-Scripts
End-to-end deployment automation for OpenText ITOM suites (SMAX, OBM, BVD) on on-premise infrastructure — Proxmox VE, VMware vSphere, and bare-metal.
Demo GIF — record
docs/assets/demo.gif(Phase 3 OMT → Phase 6 Suite, 30 seconds, OBS/Kap) and embed it here.
Install
# CLI reconciler (headless — run against an existing deployment.yaml)
pip install smax-scripts
smax-scripts --help
# Wizard UI + WebSocket cockpit (Docker — full server mode)
docker run -p 8080:8080 \
-v $(pwd)/deployment.yaml:/app/deployment.yaml \
-v $(pwd)/deployment.state.json:/app/deployment.state.json \
--env-file .secrets.env \
ghcr.io/mostafa-fawzy91/smax-scripts:latest
# open http://localhost:8080/
Linux: Container runs as UID 1000. Add
--user $(id -u):$(id -g)if host files are a different UID.
What it does
OpenText provides cloud deployment toolkits for AWS/Azure/GCP. Nothing exists for on-premise. This fills that gap.
A 6-phase wizard generates a deployment.yaml manifest. An idempotent Python reconciler reads the manifest and executes each phase in sequence — surviving reboots, partial failures, and air-gapped environments.
deployment.yaml → reconciler.py → running SMAX cluster
(manifest) (executor)
| Phase | What it does |
|---|---|
| 1 — VM Provisioning | Creates VMs on Proxmox / vSphere with correct CPU/RAM/storage per sizing matrix |
| 2 — OS Preparation | Configures RHEL 9 nodes via SSH: sysctl, swap, packages, firewall |
| 3 — OMT Bootstrap | Generates install.properties, validates DNS, bootstraps OMT/Kubernetes, HAProxy + Keepalived |
| 4 — Image Mirroring | Mirrors suite images to local Harbor — online pull or offline tar bundle |
| 5 — Storage (PV/PVC) | Creates PersistentVolumes and PVCs via the Kubernetes SDK |
| 6 — Suite Deployment | cdfctl runlevel UP, monitors pods to Running, validates HTTPS endpoint |
Supported configurations
Suites: SMAX · ESM · BVD · OBM
Deployment sizes: Evaluation · Small · Medium · Large
Virtualization: Proxmox VE (full) · VMware vSphere · Bare-metal
OS: RHEL 9.x · Rocky Linux 9.x
Storage: NFS (full) · NetApp · Ceph
Quick start
# 1. Install
pip install smax-scripts
# 2. Create deployment.yaml (wizard generates this — or copy the example)
cp deployment.yaml.example deployment.yaml
# edit deployment.yaml
# 3. Load credentials
cp .secrets.env.example .secrets.env
# edit .secrets.env
source .secrets.env
# 4. Run all phases
smax-scripts --manifest deployment.yaml
# Run a single phase
smax-scripts --manifest deployment.yaml --phase phase3_omt
# Check state
smax-scripts --manifest deployment.yaml --status
# Reset a failed phase and retry
smax-scripts --manifest deployment.yaml --reset phase3_omt
smax-scripts --manifest deployment.yaml --phase phase3_omt
Credentials are NEVER stored in the manifest — they are read from environment variables (see .secrets.env.example). The manifest is safe to commit to git.
Deployment manifest
version: "1.0"
target:
provider: proxmox # proxmox | vsphere | bare_metal
suite: smax # smax | esm | bvd | obm
suite_version: "24.4"
deployment_size: small # evaluation | small | medium | large
infrastructure:
master_nodes:
- hostname: "master1.example.com"
ip: "10.0.0.11"
worker_nodes:
- hostname: "worker1.example.com"
ip: "10.0.0.21"
virtual_ip: "10.0.0.100"
lb_type: internal # internal = HAProxy + Keepalived provisioned automatically
os:
type: rhel9
local_repo_url: "http://10.0.0.50/repo" # omit for internet-connected nodes
registry:
local_url: "harbor.internal:5000"
offline_bundle_path: "" # set for fully air-gapped environments
storage:
type: nfs
server: "10.0.0.60"
export_path: "/exports/smax"
uid: 1999
gid: 1999
Rollback
Every phase implements rollback(). Use --rollback to undo provisioned resources and reset state:
smax-scripts --manifest deployment.yaml --rollback phase3_omt
| Phase | Rollback behaviour |
|---|---|
phase1_vm |
Deletes VMs on Proxmox or vSphere; no-op for bare-metal |
phase2_os |
Re-enables swap; restores backed-up .repo files |
phase3_omt |
Runs OMT uninstall.sh on primary master |
phase4_images |
Deletes pushed images from Harbor via API |
phase5_storage |
Deletes PVs and PVCs from the cluster |
phase6_suite |
Brings runlevel DOWN; removes suite ConfigMap |
Air-gapped deployments
Set os.local_repo_url in the manifest for offline OS packages. For container images:
# On a connected machine — export suite images to a tar bundle
python reconciler/phases/phase4_images.py --export \
--manifest deployment.yaml --output smax-24.4-images.tar
# Transfer bundle, then in deployment.yaml:
# registry.offline_bundle_path: "/path/to/smax-24.4-images.tar"
See Air-Gapped Deployments for the full workflow.
Development
git clone https://github.com/mostafa-fawzy91/SMAX-Scripts.git
cd SMAX-Scripts
pip install -r requirements.txt
# Run tests
pytest tests/ -q
# Server mode
python run_server.py
# open http://localhost:8080/
Docs
Full documentation: https://mostafa-fawzy91.github.io/SMAX-Scripts
Roadmap
- Phase 1 — Static wizard + idempotent reconciler
- Phase 2 — FastAPI server + WebSocket live cockpit
- Phase 2 — vSphere
phase1_vm.pyfull implementation (pyVmomi, template clone) - Phase 2 — Per-phase rollback (
--rollback) - Phase 2 — Sub-step granularity in state file (
_stepsindeployment.state.json) - Phase 2 — Cluster discovery / import (
/api/discover) - Phase 3 — PyPI package (
pip install smax-scripts) - Phase 3 — Docker image (
ghcr.io/mostafa-fawzy91/smax-scripts) - Phase 3 — GitHub Pages docs site
- Phase 4 — NetApp / Ceph storage backends (dynamic PVC via Trident CSI / Rook CSI)
- Phase 4 — RKE2 / OpenShift OMT deployment mode (
--existing-k8s/--openshiftflags) - Phase 4 — Suite upgrade workflow (
smax-scripts --upgrade TARGET_VERSION) (current → next version)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smax_scripts-1.0.0.tar.gz.
File metadata
- Download URL: smax_scripts-1.0.0.tar.gz
- Upload date:
- Size: 67.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0be9585faf93bdea16d0f9b6ae4f63d3c09ec99c6acf962e18aea070ed1b2721
|
|
| MD5 |
a13fd0e8cd4cae83f01ee9f45e8d7076
|
|
| BLAKE2b-256 |
f7e9a75337726b3876afe2d4f90ae4798b35979550e5e2c3b07b26119966cc27
|
File details
Details for the file smax_scripts-1.0.0-py3-none-any.whl.
File metadata
- Download URL: smax_scripts-1.0.0-py3-none-any.whl
- Upload date:
- Size: 56.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1bfee16403f0f8917aabf6bf52878acf56dea9810541f85d4309fbe6d634fb1
|
|
| MD5 |
31c0075563c30860d654519cf6e03242
|
|
| BLAKE2b-256 |
1d3779f0404062d2a33296a2f179b7f811210ad628e1a1ba5a0a0e0928e02b45
|