86 lines
3.2 KiB
YAML
86 lines
3.2 KiB
YAML
---
|
|
# 仅扩展已经受管的两个 shared-etcd LXC;不移动/删除已有 rootfs 或数据卷。
|
|
- name: 串行准备 standby 与备份仓库的独立 HDD 卷
|
|
hosts: pg_pve
|
|
become: true
|
|
gather_facts: false
|
|
serial: 1
|
|
any_errors_fatal: true
|
|
vars:
|
|
pg_etcd_health:
|
|
- /opt/homelab-etcd/etcdctl
|
|
- --endpoints=https://192.168.10.127:2379,https://10.60.0.20:2379,https://10.60.0.21:2379
|
|
- --cacert=/etc/homelab-etcd/ca.crt
|
|
- --cert=/etc/homelab-etcd/admin.crt
|
|
- --key=/etc/homelab-etcd/admin.key
|
|
- endpoint
|
|
- health
|
|
tasks:
|
|
- name: 核对受管容器
|
|
ansible.builtin.command:
|
|
argv: [pct, config, "{{ pg_lxc_id }}"]
|
|
register: pg_lxc_config
|
|
changed_when: false
|
|
check_mode: false
|
|
- name: 拒绝未知容器或已有冲突挂载
|
|
ansible.builtin.assert:
|
|
that:
|
|
- pg_lxc_id in [150, 151]
|
|
- "'shared-etcd' in pg_lxc_config.stdout"
|
|
- "('hostname: ' ~ pg_lxc_hostname) in pg_lxc_config.stdout"
|
|
- >-
|
|
'mp0:' not in pg_lxc_config.stdout or
|
|
('mp=' ~ pg_lxc_mount ~ ',') in (pg_lxc_config.stdout ~ ',')
|
|
- "'mp0:' not in pg_lxc_config.stdout or 'mp0: pve-rg-hdd:' in pg_lxc_config.stdout"
|
|
- name: 验证维护前全部 etcd 成员健康
|
|
ansible.builtin.command:
|
|
argv: "{{ pg_etcd_health }}"
|
|
delegate_to: localhost
|
|
changed_when: false
|
|
check_mode: false
|
|
- name: 首次添加独立卷
|
|
when: "'mp0:' not in pg_lxc_config.stdout and not ansible_check_mode"
|
|
block:
|
|
- name: 正常停止当前单个成员
|
|
ansible.builtin.command:
|
|
argv: [pct, shutdown, "{{ pg_lxc_id }}", --timeout, '60']
|
|
changed_when: true
|
|
- name: 从指定 HDD 池创建新的 mp0
|
|
ansible.builtin.command:
|
|
argv:
|
|
- pct
|
|
- set
|
|
- "{{ pg_lxc_id }}"
|
|
- --mp0
|
|
- "pve-rg-hdd:{{ pg_lxc_disk_gb }},mp={{ pg_lxc_mount }},backup=1"
|
|
changed_when: true
|
|
- name: 容器启动前限制新卷的初始同步速率
|
|
ansible.builtin.include_tasks: tasks/limit-resync.yml
|
|
always:
|
|
- name: 查询当前状态
|
|
ansible.builtin.command:
|
|
argv: [pct, status, "{{ pg_lxc_id }}"]
|
|
register: pg_lxc_status
|
|
changed_when: false
|
|
- name: 恢复容器运行
|
|
ansible.builtin.command:
|
|
argv: [pct, start, "{{ pg_lxc_id }}"]
|
|
changed_when: true
|
|
when: "'running' not in pg_lxc_status.stdout"
|
|
- name: 仅上调不足的内存限额,不缩容既有预算
|
|
ansible.builtin.command:
|
|
argv: [pct, set, "{{ pg_lxc_id }}", --memory, "{{ pg_lxc_memory }}"]
|
|
when: >-
|
|
((pg_lxc_config.stdout | regex_findall('(?m)^memory: ([0-9]+)$')) | first | int) < pg_lxc_memory
|
|
changed_when: true
|
|
- name: 确认当前成员恢复再处理下一台
|
|
ansible.builtin.command:
|
|
argv: "{{ pg_etcd_health }}"
|
|
delegate_to: localhost
|
|
changed_when: false
|
|
register: pg_etcd_after
|
|
retries: 18
|
|
delay: 5
|
|
until: pg_etcd_after.rc == 0
|
|
when: not ansible_check_mode
|