Skip to main content

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.py full implementation (pyVmomi, template clone)
  • Phase 2 — Per-phase rollback (--rollback)
  • Phase 2 — Sub-step granularity in state file (_steps in deployment.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 / --openshift flags)
  • Phase 4 — Suite upgrade workflow (smax-scripts --upgrade TARGET_VERSION) (current → next version)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smax_scripts-1.0.0.tar.gz (67.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

smax_scripts-1.0.0-py3-none-any.whl (56.8 kB view details)

Uploaded Python 3

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

Hashes for smax_scripts-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0be9585faf93bdea16d0f9b6ae4f63d3c09ec99c6acf962e18aea070ed1b2721
MD5 a13fd0e8cd4cae83f01ee9f45e8d7076
BLAKE2b-256 f7e9a75337726b3876afe2d4f90ae4798b35979550e5e2c3b07b26119966cc27

See more details on using hashes here.

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

Hashes for smax_scripts-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e1bfee16403f0f8917aabf6bf52878acf56dea9810541f85d4309fbe6d634fb1
MD5 31c0075563c30860d654519cf6e03242
BLAKE2b-256 1d3779f0404062d2a33296a2f179b7f811210ad628e1a1ba5a0a0e0928e02b45

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page