feat: complete uninstall cleanup on server and local output
Remove binary, config, masq, system user, ufw rules, and apt packages from VPS; delete output/<server>/ by default and rebuild global index.html via localhost play.
This commit is contained in:
@@ -41,8 +41,3 @@ hysteria2_wait_for_acme: true
|
||||
|
||||
# Открыть output/index.html в браузере после install/update/export
|
||||
hysteria2_open_browser: true
|
||||
|
||||
# --- uninstall ---
|
||||
hysteria2_uninstall_remove_config: true
|
||||
hysteria2_uninstall_remove_masq: true
|
||||
hysteria2_uninstall_remove_local_output: false
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
# Системный пользователь Hysteria (создаётся install_server.sh)
|
||||
hysteria2_system_user: hysteria
|
||||
|
||||
# --- uninstall ---
|
||||
hysteria2_uninstall_remove_config: true
|
||||
hysteria2_uninstall_remove_masq: true
|
||||
hysteria2_uninstall_remove_system_user: true
|
||||
hysteria2_uninstall_remove_packages: true
|
||||
hysteria2_uninstall_remove_firewall_rules: true
|
||||
hysteria2_uninstall_remove_local_output: true
|
||||
hysteria2_uninstall_rebuild_global_index: true
|
||||
hysteria2_uninstall_ufw_rules:
|
||||
- 80/tcp
|
||||
- 443/tcp
|
||||
- 443/udp
|
||||
@@ -6,14 +6,23 @@
|
||||
state: stopped
|
||||
failed_when: false
|
||||
|
||||
- name: Remove Hysteria2 via official script
|
||||
ansible.builtin.shell:
|
||||
cmd: bash <(curl -fsSL https://get.hy2.sh/) --remove
|
||||
executable: /bin/bash
|
||||
- name: Sync official Hysteria2 install script on control node
|
||||
ansible.builtin.import_tasks: sync_install_script.yml
|
||||
|
||||
- name: Copy Hysteria2 install script to server
|
||||
ansible.builtin.copy:
|
||||
src: "{{ hysteria2_install_script_name }}"
|
||||
dest: "{{ hysteria2_install_script_remote_path }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Remove Hysteria2 binary and systemd units via official script
|
||||
ansible.builtin.command:
|
||||
cmd: "{{ hysteria2_install_script_remote_path }} --remove"
|
||||
register: _hysteria2_remove
|
||||
changed_when: _hysteria2_remove.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Remove Hysteria2 configuration directory
|
||||
- name: Remove Hysteria2 configuration and ACME data
|
||||
ansible.builtin.file:
|
||||
path: "{{ hysteria2_config_path | dirname }}"
|
||||
state: absent
|
||||
@@ -25,18 +34,57 @@
|
||||
state: absent
|
||||
when: hysteria2_uninstall_remove_masq | bool
|
||||
|
||||
- name: Remove Hysteria system user and home directory
|
||||
ansible.builtin.user:
|
||||
name: "{{ hysteria2_system_user }}"
|
||||
state: absent
|
||||
remove: true
|
||||
when: hysteria2_uninstall_remove_system_user | bool
|
||||
failed_when: false
|
||||
|
||||
- name: Check if ufw is available and active
|
||||
ansible.builtin.command: ufw status
|
||||
register: _hysteria2_ufw_status
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
when: hysteria2_uninstall_remove_firewall_rules | bool
|
||||
|
||||
- name: Remove firewall rules added during install
|
||||
ansible.builtin.command: "ufw delete allow {{ item }}"
|
||||
loop: "{{ hysteria2_uninstall_ufw_rules }}"
|
||||
register: _hysteria2_ufw_delete
|
||||
changed_when: >-
|
||||
_hysteria2_ufw_delete.rc == 0
|
||||
and 'Could not delete' not in (_hysteria2_ufw_delete.stdout | default(''))
|
||||
and 'Could not find' not in (_hysteria2_ufw_delete.stderr | default(''))
|
||||
failed_when: false
|
||||
when:
|
||||
- hysteria2_uninstall_remove_firewall_rules | bool
|
||||
- "'active' in (_hysteria2_ufw_status.stdout | default(''))"
|
||||
|
||||
- name: Remove packages installed for Hysteria2
|
||||
ansible.builtin.apt:
|
||||
name: "{{ _hysteria2_apt_packages }}"
|
||||
state: absent
|
||||
purge: true
|
||||
autoremove: true
|
||||
vars:
|
||||
_hysteria2_apt_packages: >-
|
||||
{{
|
||||
['curl', 'micro']
|
||||
+ (['qrencode'] if hysteria2_generate_qr_png | bool else [])
|
||||
}}
|
||||
when: hysteria2_uninstall_remove_packages | bool
|
||||
|
||||
- name: Remove copied install script from server
|
||||
ansible.builtin.file:
|
||||
path: "{{ hysteria2_install_script_remote_path }}"
|
||||
state: absent
|
||||
|
||||
- name: Reload systemd after uninstall
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: true
|
||||
|
||||
- name: Show uninstall result
|
||||
ansible.builtin.debug:
|
||||
msg: >-
|
||||
Hysteria2 удалён с {{ inventory_hostname }}.
|
||||
{% if not hysteria2_uninstall_remove_local_output | bool %}
|
||||
Локальные URL/QR в {{ hysteria2_output_dir }}/{{ hysteria2_output_name }}/ сохранены.
|
||||
{% endif %}
|
||||
|
||||
- name: Remove local exported client files
|
||||
ansible.builtin.file:
|
||||
path: "{{ hysteria2_output_dir }}/{{ hysteria2_output_name }}"
|
||||
@@ -44,3 +92,16 @@
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
when: hysteria2_uninstall_remove_local_output | bool
|
||||
|
||||
- name: Show uninstall result
|
||||
ansible.builtin.debug:
|
||||
msg: >-
|
||||
Hysteria2 полностью удалён с {{ inventory_hostname }}.
|
||||
{% if hysteria2_uninstall_remove_local_output | bool %}
|
||||
Локальные URL/QR в {{ hysteria2_output_dir }}/{{ hysteria2_output_name }}/ удалены.
|
||||
{% if hysteria2_uninstall_rebuild_global_index | bool %}
|
||||
Глобальный {{ hysteria2_output_dir }}/index.html пересобран.
|
||||
{% endif %}
|
||||
{% else %}
|
||||
Локальные URL/QR в {{ hysteria2_output_dir }}/{{ hysteria2_output_name }}/ сохранены.
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user