From c9f731d438188f9bf6f16a1d9f69d7b0cf28d173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B3=80=EC=A0=95=ED=9B=88?= Date: Mon, 7 Jul 2025 16:57:48 +0900 Subject: [PATCH] =?UTF-8?q?task=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etcd-restore.sh | 33 ++++++++++++++++++- .../tasks/redhat/2-etcd-restore.yml | 26 ++++++++++++--- .../tasks/redhat/3-etcd-restart.yml | 24 ++++++++++++++ .../tasks/redhat/4-kubelet-restart.yml | 5 +++ roles/etcd-restore/tasks/redhat/main.yml | 24 ++++++++++++-- 5 files changed, 105 insertions(+), 7 deletions(-) create mode 100644 roles/etcd-restore/tasks/redhat/3-etcd-restart.yml create mode 100644 roles/etcd-restore/tasks/redhat/4-kubelet-restart.yml diff --git a/etcd-restore.sh b/etcd-restore.sh index 47d0aff..cdba228 100755 --- a/etcd-restore.sh +++ b/etcd-restore.sh @@ -1 +1,32 @@ -ANSIBLE_STDOUT_CALLBACK=debug ANSIBLE_DISPLAY_SKIPPED_HOSTS=false ansible-playbook -i hosts -e target=$1 etcd-restore.yml +#!/bin/bash + +if [ $# -eq 0 ]; then + echo "Usage: etcd-restore.sh ['host' or 'member']" + exit 1 +fi + +more lic.txt + +echo '' + +while [ -z $prompt ]; + do read -p "DO YOU ACCEPT THE TERMS OF THIS LINCESE AGREEMENT? [y/n] : " choice; + case "$choice" in + y|Y ) prompt=true; break;; + n|N ) exit 0;; + esac; +done; + +if which ansible-playbook >/dev/null; then + if [ $1 == "host" ]; then + ANSIBLE_STDOUT_CALLBACK=debug ANSIBLE_DISPLAY_SKIPPED_HOSTS=false ansible-playbook -i hosts -e target=host etcd-restore.yml + elif [ $1 == "member" ]; then + ANSIBLE_STDOUT_CALLBACK=debug ANSIBLE_DISPLAY_SKIPPED_HOSTS=false ansible-playbook -i hosts -e target=member etcd-restore.yml + else + echo "Usage: etcd-restore.sh ['host' or 'member']" + exit 1 + fi +else + echo 'Error: ansible is not installed.' >&2 + exit 1 +fi \ No newline at end of file diff --git a/roles/etcd-restore/tasks/redhat/2-etcd-restore.yml b/roles/etcd-restore/tasks/redhat/2-etcd-restore.yml index 108886f..49d9851 100644 --- a/roles/etcd-restore/tasks/redhat/2-etcd-restore.yml +++ b/roles/etcd-restore/tasks/redhat/2-etcd-restore.yml @@ -12,6 +12,7 @@ - name: "[{{ target }} / 2-etcd-restore.yml] etcd original backup" shell: | cp -r /var/lib/etcd/* /tmp/etcd-backup-{{ time }} + failed_when: false - name: "[{{ target }} / 2-etcd-restore.yml] etcd original file delete" shell: | @@ -30,16 +31,28 @@ --data-dir /var/lib/etcd/recover \ --initial-cluster {{ master_host_name }}=https://{{ master_ip }}:2380,{{ master2_hostname }}=https://{{ master2_ip }}:2380,{{ master3_hostname }}=https://{{ master3_ip }}:2380 \ --initial-advertise-peer-urls https://{{ ansible_host }}:2380 - register: etcdctl_command_result + register: master_mode_etcdctl_command_result + when: + - master_mode == "yes" + +- name: "[{{ target }} / 2-etcd-restore.yml] etcd restore" + shell: | + etcdctl snapshot restore /tmp/{{ etcd_filename }} \ + --name {{ ansible_hostname }} \ + --data-dir /var/lib/etcd/recover \ + --initial-cluster {{ master_host_name }}=https://{{ master_ip }}:2380 \ + --initial-advertise-peer-urls https://{{ ansible_host }}:2380 + register: single_etcdctl_command_result + when: + - master_mode == "no" - name: "[{{ target }} / 2-etcd-restore.yml] etcd restore result" debug: msg: | - {% if etcdctl_command_result.rc == 0 %} + {% if master_mode_etcdctl_command_result.rc == 0 or single_etcdctl_command_result.rc == 0 %} etcd restore success! {% else %} etcd restore failed! - {{ etcdctl_command_result.rc }} {% endif %} - name: "[{{ target }} / 2-etcd-restore.yml] delete old etcd member directory" @@ -49,4 +62,9 @@ - name: "[{{ target }} / 2-etcd-restore.yml] change name etcd restore directory" shell: | - mv /var/lib/etcd/recover/member /var/lib/etcd/member \ No newline at end of file + mv /var/lib/etcd/recover/member /var/lib/etcd/member + +- name: "[{{ target }} / 2-etcd-restore.yml] delete recover directory" + file: + path: /var/lib/etcd/recover + state: absent \ No newline at end of file diff --git a/roles/etcd-restore/tasks/redhat/3-etcd-restart.yml b/roles/etcd-restore/tasks/redhat/3-etcd-restart.yml new file mode 100644 index 0000000..7e69bf1 --- /dev/null +++ b/roles/etcd-restore/tasks/redhat/3-etcd-restart.yml @@ -0,0 +1,24 @@ +--- +- name: "[{{ target }} / 3-etcd-restart.yml] get etcd container id" + shell: crictl ps -a | awk '$7 == "etcd" {print $1}' + register: etcd_container_ids + +- name: "[{{ target }} / 3-etcd-restart.yml] etcd restart" + shell: | + crictl stop {{ item }} && crictl rm {{ item }} + loop: "{{ etcd_container_ids.stdout_lines }}" + when: etcd_container_ids.stdout_lines | length > 0 + +#- name: "[{{ target }} / 3-etcd-restart.yml] Wait for etcd container to be ready (60s)" +# pause: +# seconds: 60 + +#- name: "[{{ target }} / 3-etcd-restart.yml] etcd status" +# shell: | +# crictl ps -a |grep etcd +# register: etcd_status + +#- name: "[{{ target }} / 3-etcd-restart.yml] etcd status" +# debug: +# msg: +# "{{ etcd_status.stdout }}" \ No newline at end of file diff --git a/roles/etcd-restore/tasks/redhat/4-kubelet-restart.yml b/roles/etcd-restore/tasks/redhat/4-kubelet-restart.yml new file mode 100644 index 0000000..057bcc2 --- /dev/null +++ b/roles/etcd-restore/tasks/redhat/4-kubelet-restart.yml @@ -0,0 +1,5 @@ +--- +- name: "[{{ target }} / 4-kubelet-restart.yml] kubelet restart" + service: + state: restarted + name: kubelet \ No newline at end of file diff --git a/roles/etcd-restore/tasks/redhat/main.yml b/roles/etcd-restore/tasks/redhat/main.yml index 15c6e77..8d802ca 100644 --- a/roles/etcd-restore/tasks/redhat/main.yml +++ b/roles/etcd-restore/tasks/redhat/main.yml @@ -14,12 +14,32 @@ - "'member-master' in group_names or 'member-master-cluster' in group_names" - target in ['member'] -- include : "2-etcd-restore.yml" +- include: "2-etcd-restore.yml" when: - "'host-master' in group_names or 'host-master-cluster' in group_names" - target in ['host'] -- include : "2-etcd-restore.yml" +- include: "2-etcd-restore.yml" when: - "'member-master' in group_names or 'member-master-cluster' in group_names" + - target in ['member'] + +- include: "3-etcd-restart.yml" + when: + - "'host-master' in group_names or 'host-master-cluster' in group_names" + - target in ['host'] + +- include: "3-etcd-restart.yml" + when: + - "'member-master' in group_names or 'member-master-cluster' in group_names" + - target in ['member'] + +- include: "4-kubelet-restart.yml" + when: + - "'host-cluster' in group_names" + - target in ['host'] + +- include: "4-kubelet-restart.yml" + when: + - "'member-cluster' in group_names" - target in ['member'] \ No newline at end of file