Fix update-bwvebox.yml and update-cloudbox-containers.yml with working pattern
- Simplified to use direct shell loops for discovering running containers/VMs - Uses zip filter pattern for pairing container IDs with OS types - Fixes the bug where nested loop result dictionaries were passed as container IDs instead of simple strings (causing container: not found) - Matches the working pattern from update-containers.yml
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
---
|
||||
# Update bwvebox (production cluster) Proxmox LXC containers and VMs
|
||||
# Usage: ansible-playbook -i inventory update-bwvebox.yml
|
||||
|
||||
- name: Update bwvebox Production LXC Containers and VMs
|
||||
hosts: bwvebox
|
||||
gather_facts: no
|
||||
vars:
|
||||
candidate_containers:
|
||||
# Critical services
|
||||
- 100 # supportme
|
||||
- 101 # matomo
|
||||
- 102 # snipeit
|
||||
- 103 # passbolt
|
||||
- 104 # INVESTBRAIN
|
||||
- 105 # visualdash
|
||||
# Infrastructure
|
||||
- 107 # netman
|
||||
- 108 # docuserv
|
||||
- 109 # dumanet
|
||||
- 110 # technitiumdns
|
||||
- 111 # minarca
|
||||
# AI & Data
|
||||
- 113 # BIGAI
|
||||
- 114 # grist
|
||||
- 115 # searxng
|
||||
- 116 # TWINGATE
|
||||
# Management
|
||||
- 117 # PORTAINER
|
||||
- 120 # netbox
|
||||
- 121 # RUSTDESK
|
||||
- 122 # odoocrm
|
||||
- 123 # nocodb
|
||||
- 124 # alpine-it-tools
|
||||
- 125 # pve-scripts-local
|
||||
- 126 # PPUSHER
|
||||
- 127 # UPTYME
|
||||
- 128 # KASM
|
||||
- 130 # excalidraw
|
||||
- 131 # beanalytics
|
||||
- 132 # bwitcloud
|
||||
- 136 # proxmox-datacenter-manager
|
||||
- 137 # pulse
|
||||
- 138 # beavault
|
||||
- 139 # patchman
|
||||
- 140 # mariadb
|
||||
- 141 # wordpress
|
||||
- 142 # bwitdnstoo
|
||||
- 143 # gitea
|
||||
- 145 # SPEED-TRACKER
|
||||
- 146 # apache-guacamole
|
||||
- 147 # BDAP
|
||||
- 148 # wireguard
|
||||
- 150 # N8NAI
|
||||
- 151 # POCKETID
|
||||
- 152 # myip
|
||||
- 153 # immich
|
||||
- 154 # web-check
|
||||
- 155 # rustfs
|
||||
- 156 # PROXMAN
|
||||
- 157 # KIMAI
|
||||
- 160 # postgresql
|
||||
- 161 # bentopdf
|
||||
- 164 # WHITEBOARD
|
||||
- 166 # DASHY
|
||||
- 168 # METABASE
|
||||
- 169 # INVOICE
|
||||
- 170 # HOMEASSISTANT
|
||||
- 171 # openobserve
|
||||
- 172 # vaultwarden
|
||||
- 173 # mail-archiver
|
||||
candidate_vms:
|
||||
- 112 # freepbx
|
||||
- 118 # BWINBOX
|
||||
- 133 # ollama-cpu
|
||||
- 134 # dockertemplate
|
||||
- 159 # POPUPOS
|
||||
- 9000 # ubuntu-24.04-cloud
|
||||
- 9001 # windows-server-2022
|
||||
- 9002 # debian-12-cloud
|
||||
- 9003 # debian-13-cloud
|
||||
|
||||
tasks:
|
||||
- name: Discover running LXC containers
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
for ct in {{ candidate_containers | join(' ') }}; do
|
||||
if sudo /usr/sbin/pct status "$ct" 2>/dev/null | grep -q running; then
|
||||
echo "$ct"
|
||||
fi
|
||||
done
|
||||
register: running_cts
|
||||
check_mode: no
|
||||
changed_when: false
|
||||
|
||||
- name: Discover running VMs
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
for vm in {{ candidate_vms | join(' ') }}; do
|
||||
if sudo /usr/sbin/qm status "$vm" 2>/dev/null | grep -q running; then
|
||||
echo "$vm"
|
||||
fi
|
||||
done
|
||||
register: running_vms
|
||||
check_mode: no
|
||||
changed_when: false
|
||||
|
||||
- name: Detect OS in running containers
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
CT_ID="{{ item }}"
|
||||
OS_INFO=$(sudo /usr/sbin/pct exec "$CT_ID" -- cat /etc/os-release 2>/dev/null || echo "")
|
||||
if echo "$OS_INFO" | grep -qi "alpine"; then echo "alpine"
|
||||
elif echo "$OS_INFO" | grep -qi "arch"; then echo "arch"
|
||||
elif echo "$OS_INFO" | grep -qi "debian"; then echo "debian"
|
||||
elif echo "$OS_INFO" | grep -qi "ubuntu"; then echo "ubuntu"
|
||||
elif echo "$OS_INFO" | grep -qi "devuan"; then echo "devuan"
|
||||
elif echo "$OS_INFO" | grep -qi "fedora"; then echo "fedora"
|
||||
elif echo "$OS_INFO" | grep -qi "rocky"; then echo "rocky"
|
||||
elif echo "$OS_INFO" | grep -qi "centos"; then echo "centos"
|
||||
elif echo "$OS_INFO" | grep -qi "alma"; then echo "alma"
|
||||
elif echo "$OS_INFO" | grep -qi "suse"; then echo "opensuse"
|
||||
else echo "unknown"
|
||||
fi
|
||||
loop: "{{ running_cts.stdout_lines }}"
|
||||
register: container_os
|
||||
check_mode: no
|
||||
changed_when: false
|
||||
when: running_cts.stdout_lines | length > 0
|
||||
|
||||
- name: Update running containers with OS-specific package manager
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
set -e
|
||||
CT_ID="{{ item[0] }}"
|
||||
OS_TYPE="{{ item[1] }}"
|
||||
|
||||
echo "=== Updating container $CT_ID (OS: $OS_TYPE) ==="
|
||||
|
||||
case "$OS_TYPE" in
|
||||
alpine)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- sh -c 'apk update && apk upgrade -a'
|
||||
;;
|
||||
arch)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'pacman -Syyu --noconfirm'
|
||||
;;
|
||||
fedora|rocky|centos|alma)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'dnf -y update && dnf -y upgrade'
|
||||
;;
|
||||
ubuntu|debian|devuan)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'export DEBIAN_FRONTEND=noninteractive && apt-get update -qq && apt-get -yq dist-upgrade'
|
||||
;;
|
||||
opensuse)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'zypper ref && zypper --non-interactive dup'
|
||||
;;
|
||||
*)
|
||||
echo "Unknown OS ($OS_TYPE), trying apt..."
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'export DEBIAN_FRONTEND=noninteractive && apt-get update -qq && apt-get -yq dist-upgrade'
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "=== Container $CT_ID complete ==="
|
||||
loop: "{{ running_cts.stdout_lines | zip(container_os.results | default([]) | map(attribute='stdout')) | list }}"
|
||||
when: running_cts.stdout_lines | length > 0
|
||||
|
||||
- name: Update running VMs (assumed Debian/Ubuntu)
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
VM_ID="{{ item }}"
|
||||
echo "=== Updating VM $VM_ID ==="
|
||||
sudo /usr/sbin/qm guest exec $VM_ID -- bash -c 'export DEBIAN_FRONTEND=noninteractive && apt-get update -qq && apt-get upgrade -y -qq'
|
||||
echo "=== VM $VM_ID complete ==="
|
||||
loop: "{{ running_vms.stdout_lines }}"
|
||||
when: running_vms.stdout_lines | length > 0
|
||||
|
||||
- name: Report results
|
||||
ansible.builtin.debug:
|
||||
msg: "[bwvebox] updates complete. Containers: {{ running_cts.stdout_lines | default([]) }}, VMs: {{ running_vms.stdout_lines | default([]) }}"
|
||||
@@ -0,0 +1,109 @@
|
||||
---
|
||||
# Update cloudbox.beawit.net Proxmox LXC containers and VMs
|
||||
# Usage: ansible-playbook -i inventory update-cloudbox-containers.yml
|
||||
|
||||
- name: Update Cloudbox Containers and VMs
|
||||
hosts: cloudbox
|
||||
gather_facts: no
|
||||
vars:
|
||||
candidate_containers:
|
||||
- 101 # hosting-manager (LXC)
|
||||
candidate_vms:
|
||||
- 201 # tacticalrmm (VM)
|
||||
|
||||
tasks:
|
||||
- name: Discover running LXC containers
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
for ct in {{ candidate_containers | join(' ') }}; do
|
||||
if sudo /usr/sbin/pct status "$ct" 2>/dev/null | grep -q running; then
|
||||
echo "$ct"
|
||||
fi
|
||||
done
|
||||
register: running_cts
|
||||
check_mode: no
|
||||
changed_when: false
|
||||
|
||||
- name: Discover running VMs
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
for vm in {{ candidate_vms | join(' ') }}; do
|
||||
if sudo /usr/sbin/qm status "$vm" 2>/dev/null | grep -q running; then
|
||||
echo "$vm"
|
||||
fi
|
||||
done
|
||||
register: running_vms
|
||||
check_mode: no
|
||||
changed_when: false
|
||||
|
||||
- name: Detect OS in running containers
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
CT_ID="{{ item }}"
|
||||
OS_INFO=$(sudo /usr/sbin/pct exec "$CT_ID" -- cat /etc/os-release 2>/dev/null || echo "")
|
||||
if echo "$OS_INFO" | grep -qi "alpine"; then echo "alpine"
|
||||
elif echo "$OS_INFO" | grep -qi "arch"; then echo "arch"
|
||||
elif echo "$OS_INFO" | grep -qi "debian"; then echo "debian"
|
||||
elif echo "$OS_INFO" | grep -qi "ubuntu"; then echo "ubuntu"
|
||||
elif echo "$OS_INFO" | grep -qi "devuan"; then echo "devuan"
|
||||
elif echo "$OS_INFO" | grep -qi "fedora"; then echo "fedora"
|
||||
elif echo "$OS_INFO" | grep -qi "rocky"; then echo "rocky"
|
||||
elif echo "$OS_INFO" | grep -qi "centos"; then echo "centos"
|
||||
elif echo "$OS_INFO" | grep -qi "alma"; then echo "alma"
|
||||
elif echo "$OS_INFO" | grep -qi "suse"; then echo "opensuse"
|
||||
else echo "unknown"
|
||||
fi
|
||||
loop: "{{ running_cts.stdout_lines }}"
|
||||
register: container_os
|
||||
check_mode: no
|
||||
changed_when: false
|
||||
when: running_cts.stdout_lines | length > 0
|
||||
|
||||
- name: Update running containers with OS-specific package manager
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
set -e
|
||||
CT_ID="{{ item[0] }}"
|
||||
OS_TYPE="{{ item[1] }}"
|
||||
|
||||
echo "=== Updating container $CT_ID (OS: $OS_TYPE) ==="
|
||||
|
||||
case "$OS_TYPE" in
|
||||
alpine)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- sh -c 'apk update && apk upgrade -a'
|
||||
;;
|
||||
arch)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'pacman -Syyu --noconfirm'
|
||||
;;
|
||||
fedora|rocky|centos|alma)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'dnf -y update && dnf -y upgrade'
|
||||
;;
|
||||
ubuntu|debian|devuan)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'export DEBIAN_FRONTEND=noninteractive && apt-get update -qq && apt-get -yq dist-upgrade'
|
||||
;;
|
||||
opensuse)
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'zypper ref && zypper --non-interactive dup'
|
||||
;;
|
||||
*)
|
||||
echo "Unknown OS ($OS_TYPE), trying apt..."
|
||||
sudo /usr/sbin/pct exec "$CT_ID" -- bash -c 'export DEBIAN_FRONTEND=noninteractive && apt-get update -qq && apt-get -yq dist-upgrade'
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "=== Container $CT_ID complete ==="
|
||||
loop: "{{ running_cts.stdout_lines | zip(container_os.results | default([]) | map(attribute='stdout')) | list }}"
|
||||
when: running_cts.stdout_lines | length > 0
|
||||
|
||||
- name: Update running VMs (assumed Debian/Ubuntu)
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
VM_ID="{{ item }}"
|
||||
echo "=== Updating VM $VM_ID ==="
|
||||
sudo /usr/sbin/qm guest exec $VM_ID -- bash -c 'export DEBIAN_FRONTEND=noninteractive && apt-get update -qq && apt-get upgrade -y -qq'
|
||||
echo "=== VM $VM_ID complete ==="
|
||||
loop: "{{ running_vms.stdout_lines }}"
|
||||
when: running_vms.stdout_lines | length > 0
|
||||
|
||||
- name: Report results
|
||||
ansible.builtin.debug:
|
||||
msg: "[cloudbox] updates complete. Containers: {{ running_cts.stdout_lines | default([]) }}, VMs: {{ running_vms.stdout_lines | default([]) }}"
|
||||
Reference in New Issue
Block a user