2026-09-23 14:26:05 +09:00

78 lines
2.7 KiB
YAML

---
- name: Apply Netplan configuration with automatic rollback on error
block:
- name: Deploy disable cloud-init message
ansible.builtin.copy:
dest: /etc/cloud/cloud-init.disabled
src: cloud-init.disabled
owner: root
group: root
mode: '0644'
- name: Disable old netplan configuration files
ansible.builtin.command:
cmd: "mv {{ item }} {{ item }}.disabled"
removes: "{{ item }}" # ファイルがない場合にエラーを発生させない
loop:
- /etc/netplan/00-installer-config.yaml
- /etc/netplan/50-cloud-init.yaml
- name: Fetch netplan configuration files
ansible.builtin.fetch:
src: /etc/netplan/10-ansible-netplan.yaml
dest: "{{ fetch_dir }}/{{ inventory_hostname }}_10-ansible-netplan.yaml"
flat: true
ignore_errors: true
- name: Deploy netplan configuration files
ansible.builtin.copy:
src: "{{ inventory_hostname }}/10-ansible-netplan.yaml"
dest: /etc/netplan/10-ansible-netplan.yaml
owner: root
group: root
mode: '0600'
register: deploy_result
- name: Validate netplan configuration syntax
ansible.builtin.command: netplan generate
when: deploy_result.changed
changed_when: false
- name: Confirm and permanently apply Netplan configuration
ansible.builtin.command: netplan apply # tryしても即座に確定するためテストは不可能
async: 3 # 通信ができなくなると処理が停止するため非同期で実行
poll: 0
when: deploy_result.changed
- name: Verify SSH connectivity after configuration change
ansible.builtin.wait_for:
host: "{{ ansible_host }}"
port: "{{ ansible_port | default(22) }}"
state: started
delay: 2
timeout: 5
delegate_to: localhost
register: do_verify
when: deploy_result.changed
# 何らかの異常が発生した場合への対応
rescue:
- name: "[RESCUE] Re-enable disabled old Netplan files"
ansible.builtin.copy:
dest: /etc/netplan/10-ansible-netplan.yaml
src: "{{ fetch_dir }}/{{ inventory_hostname }}_10-ansible-netplan.yaml"
mode: '0600'
when:
- do_verify is undefined
- deploy_result is defined
- deploy_result.changed
- name: "[RESCUE] Fail playbook execution with error notification"
ansible.builtin.fail:
msg: >-
{{
'SSH connection lost after netplan apply. Remote rollback is unavailable.'
if do_verify is defined
else 'Netplan configuration failed before apply and was safely rolled back.'
}}