Proxmox OS Update
Ansible-based automation for managing and updating virtual machines and LXC containers on a Proxmox hypervisor. Uses Jenkins as a CI/CD orchestrator to execute playbooks for various maintenance tasks.
Features
- Dynamic Inventory: Automatically discovers running VMs and LXCs from the Proxmox API
- Tag-Based Targeting: Group machines by Proxmox tags (update, docker, k8s)
- CI/CD Integration: Jenkins pipeline for scheduled and on-demand execution
- Dry-Run Mode: Test changes before applying them
- Flexible Targeting: Update specific hosts, groups, or all running machines
Project Structure
proxmox-os-update/
├── Jenkinsfile # CI/CD pipeline configuration
├── README.md
├── inventories/
│ └── inventory.proxmox.yml # Dynamic Proxmox inventory
└── playbooks/
└── update.yaml # System update playbook
Prerequisites
- Ansible with
community.proxmoxcollection - Proxmox VE cluster with API token configured
- SSH access to target machines (as
jenkinsuser) - Jenkins server (for CI/CD execution)
Configuration
Proxmox API Token
Create an API token in Proxmox for the dynamic-inventory@pve user. The token credentials should be stored in Jenkins.
Inventory Groups
The dynamic inventory automatically creates these groups:
| Group | Description |
|---|---|
proxmox_all_running |
All running VMs and LXCs |
vms |
QEMU virtual machines |
lxcs |
LXC containers |
update_targets |
Machines tagged with 'update' |
docker_hosts |
Machines tagged with 'docker' |
kubernetes |
Machines tagged with 'k8s' |
Usage
Via Jenkins (Recommended)
Trigger the Jenkins pipeline and select:
- Playbook: Which playbook to run
- Limit: Target specific hosts or groups (optional)
- Dry Run: Test without applying changes
Manual Execution
# Update all running machines
ansible-playbook -i inventories/inventory.proxmox.yml playbooks/update.yaml
# Target specific group
ansible-playbook -i inventories/inventory.proxmox.yml playbooks/update.yaml --limit docker_hosts
# Dry run
ansible-playbook -i inventories/inventory.proxmox.yml playbooks/update.yaml --check --diff
Ad-hoc Commands
# Test connectivity to all VMs
ansible -i inventories/inventory.proxmox.yml vms -m ping
# Test connectivity to a specific host
ansible -i inventories/inventory.proxmox.yml hostname -m ping
Available Playbooks
| Playbook | Description |
|---|---|
update.yaml |
Updates apt cache and performs dist-upgrade |
Environment Variables
| Variable | Description |
|---|---|
PROXMOX_URL |
Proxmox API endpoint |
PROXMOX_USER |
API username |
PROXMOX_TOKEN_ID |
API token ID |
PROXMOX_TOKEN_SECRET |
API token secret |
Description