testing new proxmox logic
This commit is contained in:
21
roles/proxmox_upgrade_node/defaults/main.yml
Normal file
21
roles/proxmox_upgrade_node/defaults/main.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
# =============================================================================
|
||||
# proxmox_upgrade_node — defaults
|
||||
# =============================================================================
|
||||
|
||||
# Reboot behaviour
|
||||
upgrade_reboot_if_required: true # reboot if /var/run/reboot-required exists
|
||||
upgrade_reboot_force: false # reboot even if not required
|
||||
upgrade_reboot_timeout: 600 # seconds to wait for node to come back
|
||||
upgrade_node_rejoin_timeout: 300 # seconds to wait for cluster rejoin
|
||||
upgrade_node_rejoin_retries: 30
|
||||
upgrade_node_rejoin_delay: 10
|
||||
|
||||
# apt options
|
||||
upgrade_apt_update_cache: true
|
||||
upgrade_apt_autoremove: true
|
||||
upgrade_apt_cache_valid_time: 3600
|
||||
|
||||
# API connection (inherited from inventory)
|
||||
api_port: 8006
|
||||
validate_certs: false
|
||||
11
roles/proxmox_upgrade_node/meta/main.yml
Normal file
11
roles/proxmox_upgrade_node/meta/main.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
galaxy_info:
|
||||
role_name: proxmox_upgrade_node
|
||||
author: ansible-msp
|
||||
description: "MSP Proxmox automation — proxmox_upgrade_node"
|
||||
min_ansible_version: "2.15"
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bookworm
|
||||
dependencies: []
|
||||
85
roles/proxmox_upgrade_node/tasks/main.yml
Normal file
85
roles/proxmox_upgrade_node/tasks/main.yml
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
# =============================================================================
|
||||
# proxmox_upgrade_node — tasks
|
||||
# Runs apt dist-upgrade on a single node, reboots if required,
|
||||
# and waits for the node to rejoin the cluster.
|
||||
#
|
||||
# Required vars:
|
||||
# current_node — the node being upgraded (used for logging)
|
||||
# =============================================================================
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | apt-get update"
|
||||
ansible.builtin.apt:
|
||||
update_cache: "{{ upgrade_apt_update_cache }}"
|
||||
cache_valid_time: "{{ upgrade_apt_cache_valid_time }}"
|
||||
changed_when: false
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | apt dist-upgrade"
|
||||
ansible.builtin.apt:
|
||||
upgrade: dist
|
||||
autoremove: "{{ upgrade_apt_autoremove }}"
|
||||
autoclean: true
|
||||
register: upgrade_apt_result
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | Log upgraded packages"
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ upgrade_apt_result.stdout_lines | last | default('No output') }}"
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | Check if reboot required"
|
||||
ansible.builtin.stat:
|
||||
path: /var/run/reboot-required
|
||||
register: upgrade_reboot_required_file
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | Set reboot needed fact"
|
||||
ansible.builtin.set_fact:
|
||||
upgrade_needs_reboot: >-
|
||||
{{ upgrade_reboot_required_file.stat.exists or upgrade_reboot_force }}
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | Reboot node"
|
||||
ansible.builtin.reboot:
|
||||
reboot_timeout: "{{ upgrade_reboot_timeout }}"
|
||||
msg: "Ansible controlled reboot for Proxmox upgrade"
|
||||
pre_reboot_delay: 5
|
||||
post_reboot_delay: 15
|
||||
when:
|
||||
- upgrade_needs_reboot
|
||||
- upgrade_reboot_if_required
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | Skip reboot (not required)"
|
||||
ansible.builtin.debug:
|
||||
msg: "No reboot required on {{ current_node }} — skipping."
|
||||
when: not upgrade_needs_reboot
|
||||
|
||||
# ── Wait for cluster rejoin ───────────────────────────────────────────────────
|
||||
- name: "Upgrade | {{ current_node }} | Wait for node to rejoin cluster"
|
||||
community.proxmox.proxmox_node_info:
|
||||
api_host: "{{ api_host }}"
|
||||
api_user: "{{ api_user }}"
|
||||
api_token_id: "{{ api_token_id }}"
|
||||
api_token_secret: "{{ api_token_secret }}"
|
||||
api_port: "{{ api_port }}"
|
||||
validate_certs: "{{ validate_certs }}"
|
||||
register: upgrade_rejoin_check
|
||||
delegate_to: localhost
|
||||
until: >-
|
||||
upgrade_rejoin_check.proxmox_nodes
|
||||
| selectattr('node', 'equalto', current_node)
|
||||
| selectattr('status', 'equalto', 'online')
|
||||
| list
|
||||
| length > 0
|
||||
retries: "{{ upgrade_node_rejoin_retries }}"
|
||||
delay: "{{ upgrade_node_rejoin_delay }}"
|
||||
when: upgrade_needs_reboot
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | Node back online"
|
||||
ansible.builtin.debug:
|
||||
msg: >-
|
||||
✓ Node {{ current_node }} has rejoined the cluster
|
||||
{{ '(after reboot)' if upgrade_needs_reboot else '(no reboot needed)' }}.
|
||||
|
||||
- name: "Upgrade | {{ current_node }} | Complete"
|
||||
ansible.builtin.debug:
|
||||
msg: >-
|
||||
━━━ Upgrade complete: {{ current_node }}
|
||||
{% if upgrade_apt_result.changed %}(packages updated){% else %}(already up to date){% endif %}
|
||||
{% if upgrade_needs_reboot %}(rebooted){% else %}(no reboot){% endif %} ━━━
|
||||
Reference in New Issue
Block a user