OpenShift clusters on Proxmox made simple
Comprehensive guide for setting up and managing your ProxShift development environment.
ProxShift uses Python virtual environments to:
cd /path/to/proxshift
# Create and activate virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt
ansible-galaxy collection install -r collections/requirements.yml
# Use ProxShift
source proxshift.sh # Auto-activates venv
ps.clusters # Ready to use!
ProxShift includes automatic environment setup:
# Simply source proxshift.sh
source proxshift.sh
# Output:
# Activating ProxShift virtual environment...
# ✓ Virtual environment activated: Python 3.13.7
What happens automatically:
.venv directory| Variable | Default | Description |
|---|---|---|
PROXSHIFT_ROOT |
$(pwd) |
ProxShift installation directory |
PROXSHIFT_VAULT_PASS |
${PROXSHIFT_ROOT}/config/.vault_pass |
Ansible vault password file |
VAULT_ADDR |
From config | HashiCorp Vault address |
VAULT_TOKEN |
From config | HashiCorp Vault token |
# Option 1: Export in shell
export PROXSHIFT_ROOT="/Users/username/proxshift"
export VAULT_ADDR="https://vault.example.com:8200"
# Option 2: Add to ~/.bashrc or ~/.zshrc
echo 'export PROXSHIFT_ROOT="/Users/username/proxshift"' >> ~/.bashrc
echo 'export VAULT_ADDR="https://vault.example.com:8200"' >> ~/.bashrc
# Option 3: Use .env file (create in ProxShift root)
cat > .env << EOF
PROXSHIFT_ROOT="/Users/username/proxshift"
VAULT_ADDR="https://vault.example.com:8200"
VAULT_TOKEN="your-token-here"
EOF
# Load .env file
set -a; source .env; set +a
proxshift/
├── .venv/ # Virtual environment (auto-created)
├── proxshift.sh # Main ProxShift functions
├── config/
│ ├── site-config.yaml # Site configuration
│ └── vault-credentials.yml # Vault settings
├── inventory/ # Cluster inventory definitions
│ └── clusters.yml # All cluster definitions
├── ocp_install/ # Generated ISOs and credentials
│ ├── cluster1/
│ └── cluster2/
├── ansible_collections/ # ProxShift roles and collections
└── docs/ # Documentation
# Standard workflow
cd /path/to/proxshift
# Set required environment variables (examples only - adjust paths)
export PROXSHIFT_ROOT=$HOME/dev/proxshift
export PROXSHIFT_VAULT_PASS=${PROXSHIFT_ROOT}/config/.vault_pass
source proxshift.sh # Load functions
ps.activate # Activate environment
# Alternative: Manual activation (advanced users)
cd /path/to/proxshift
export PROXSHIFT_ROOT=$HOME/dev/proxshift
export PROXSHIFT_VAULT_PASS=${PROXSHIFT_ROOT}/config/.vault_pass
source .venv/bin/activate
source proxshift.sh
# List available clusters
ps.clusters
# Provision a cluster
ps.provision my-cluster
# Generate manifests only
ps.generate_manifests my-cluster
# Create ISO only
ansible-playbook site.yaml -e cluster_name=my-cluster --tags=create_iso
# Deactivate virtual environment (optional)
deactivate
# Or simply close terminal
# Problem: "pip externally managed"
# Solution: Use virtual environment
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# Problem: Virtual environment corrupted
# Solution: Recreate virtual environment
rm -rf .venv
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# Problem: Wrong Python version in venv
# Solution: Specify Python version
python3.11 -m venv .venv # Use specific version
source .venv/bin/activate
pip install -r requirements.txt
# Problem: proxshift.sh doesn't find venv
# Solution: Ensure you're in the right directory
pwd # Should show /path/to/proxshift
ls -la .venv # Should show virtual environment directory
# Problem: Ansible not found after activation
# Solution: Reinstall in virtual environment
source .venv/bin/activate
pip install -r requirements.txt
ansible --version # Should show version
# Problem: Can't find OpenShift tools
# Solution: Add to PATH or specify full path
export PATH="$HOME/bin:$PATH"
which openshift-install
# Problem: Wrong PROXSHIFT_ROOT
# Solution: Set explicitly
export PROXSHIFT_ROOT="/correct/path/to/proxshift"
cd $PROXSHIFT_ROOT
source proxshift.sh
Add to ~/.bashrc:
# ProxShift environment
export PROXSHIFT_ROOT="/path/to/proxshift"
alias ps.env='cd $PROXSHIFT_ROOT && source proxshift.sh'
alias ps.activate='cd $PROXSHIFT_ROOT && source .venv/bin/activate'
Add to ~/.zshrc:
# ProxShift environment
export PROXSHIFT_ROOT="/path/to/proxshift"
alias ps.env='cd $PROXSHIFT_ROOT && source proxshift.sh'
alias ps.activate='cd $PROXSHIFT_ROOT && source .venv/bin/activate'
# Tab completion for ProxShift functions
autoload -U compinit && compinit
Add to ~/.config/fish/config.fish:
# ProxShift environment
set -gx PROXSHIFT_ROOT "/path/to/proxshift"
alias ps.env "cd $PROXSHIFT_ROOT && source proxshift.sh"
alias ps.activate "cd $PROXSHIFT_ROOT && source .venv/bin/activate"
# Use specific Python version
/usr/local/bin/python3.11 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# Download packages
pip download -r requirements.txt -d ./offline-packages
# Install from downloaded packages
pip install --no-index --find-links ./offline-packages -r requirements.txt
# Install development dependencies
pip install -r requirements.txt
pip install ansible-lint yamllint
# Install ProxShift collections in development mode
cd ansible_collections/proxshift
ansible-galaxy collection build .
ansible-galaxy collection install *.tar.gz --force
ProxShift - Seamless OpenShift on Proxmox