96 lines
3.2 KiB
Groovy
96 lines
3.2 KiB
Groovy
pipeline {
|
|
agent any
|
|
|
|
parameters {
|
|
choice(
|
|
name: 'PLAYBOOK',
|
|
choices: ['dockerUpdate.yml', 'dockerPrune.yaml'],
|
|
description: 'Select the playbook to run'
|
|
)
|
|
string(
|
|
name: 'LIMIT',
|
|
defaultValue: '',
|
|
description: 'Limit to specific hosts or groups (e.g., "vms", "lxcs", "update_targets", or hostname) no.lan required'
|
|
)
|
|
booleanParam(
|
|
name: 'DRY_RUN',
|
|
defaultValue: false,
|
|
description: 'Run in check mode (no changes made)'
|
|
)
|
|
}
|
|
|
|
environment {
|
|
PROXMOX_URL = 'https://192.168.0.166:8006'
|
|
PROXMOX_USER = 'dynamic-inventory@pve'
|
|
PROXMOX_TOKEN_ID = 'dynamic-inventory'
|
|
PROXMOX_TOKEN_SECRET = credentials('PROXMOX_TOKEN_SECRET')
|
|
ANSIBLE_HOST_KEY_CHECKING = 'False'
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
checkout scm
|
|
}
|
|
}
|
|
|
|
stage('Verify Inventory') {
|
|
steps {
|
|
sh '''
|
|
echo "Testing dynamic inventory connection..."
|
|
ansible-inventory -i inventories/inventory.proxmox.yml --list | head -10
|
|
'''
|
|
}
|
|
}
|
|
|
|
stage('Run Playbook') {
|
|
steps {
|
|
script {
|
|
def dockerPlaybooks = ['dockerUpdate.yml', 'dockerPrune.yaml']
|
|
def isDockerPlaybook = params.PLAYBOOK in dockerPlaybooks
|
|
|
|
// Build the limit flag
|
|
def limitValue = ''
|
|
if (isDockerPlaybook) {
|
|
// Docker playbooks always target 'docker_hosts' group
|
|
// If user provides a limit, use intersection (docker_hosts AND limit)
|
|
limitValue = params.LIMIT ? "docker_hosts:&${params.LIMIT}" : 'docker_hosts'
|
|
} else {
|
|
limitValue = params.LIMIT ?: ''
|
|
}
|
|
|
|
def limitFlag = limitValue ? "--limit '${limitValue}'" : ''
|
|
def checkFlag = (params.DRY_RUN == true) ? '--check --diff' : ''
|
|
def extraVars = (params.CLEANUP_SNAPSHOTS == true) ? "-e cleanup_old_snapshots=true" : ''
|
|
|
|
echo "DRY_RUN parameter: ${params.DRY_RUN}"
|
|
echo "Check flag: '${checkFlag}'"
|
|
echo "Limit: '${limitValue}'"
|
|
if (isDockerPlaybook) {
|
|
echo "Docker playbook detected - targeting 'docker_hosts' group"
|
|
}
|
|
|
|
sh """
|
|
ansible-playbook \
|
|
-i inventories/inventory.proxmox.yml \
|
|
playbooks/${params.PLAYBOOK} \
|
|
${limitFlag} \
|
|
${checkFlag} \
|
|
${extraVars} \
|
|
-v
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
success {
|
|
echo "Playbook ${params.PLAYBOOK} completed successfully"
|
|
}
|
|
failure {
|
|
echo "Playbook ${params.PLAYBOOK} failed"
|
|
}
|
|
}
|
|
}
|