2025-06-15 08:21:51
Ниже представлен Ansible playbook для удаления всего, что было установлено предыдущим playbook-ом, включая Apache (httpd), PHP-FPM 8.0, репозитории Remi и EPEL, конфигурационные файлы, настройки SELinux и брандмауэра. Этот playbook полностью откатывает изменения, сделанные предыдущей установкой.
### Ansible Playbook для удаления
Сохраните следующий код в файл, например, `remove_httpd_php.yml`:
```yaml
---
- name: Remove Apache, PHP-FPM 8.0, and related configurations on RHEL 8
hosts: all
become: yes
tasks:
- name: Stop and disable httpd service
systemd:
name: httpd
state: stopped
enabled: no
ignore_errors: yes
- name: Stop and disable php-fpm service
systemd:
name: php-fpm
state: stopped
enabled: no
ignore_errors: yes
- name: Remove test PHP file
file:
path: /var/www/html/info.php
state: absent
- name: Remove Apache and PHP packages
dnf:
name:
- httpd
- php
- php-fpm
- php-mysqlnd
- php-gd
- php-xml
- php-mbstring
- php-json
state: absent
autoremove: yes
- name: Remove PHP-FPM configuration file from Apache
file:
path: /etc/httpd/conf.d/php-fpm.conf
state: absent
notify: Restart httpd
ignore_errors: yes
- name: Reset PHP module
command: dnf module reset php -y
args:
warn: no
- name: Remove Remi repository
dnf:
name: remi-release
state: absent
autoremove: yes
- name: Remove EPEL repository
dnf:
name: epel-release
state: absent
autoremove: yes
- name: Close HTTP port in firewalld
firewalld:
service: http
permanent: yes
state: disabled
immediate: yes
when: ansible_distribution == "RedHat" and ansible_service_mgr == "systemd"
ignore_errors: yes
- name: Reset SELinux booleans
seboolean:
name: "{{ item }}"
state: no
persistent: yes
loop:
- httpd_execmem
- httpd_can_network_connect
when: ansible_selinux.status is defined and ansible_selinux.status == "enabled"
ignore_errors: yes
- name: Remove SELinux context for /var/www/html
command: restorecon -R /var/www/html/
args:
warn: no
when: ansible_selinux.status is defined and ansible_selinux.status == "enabled"
ignore_errors: yes
handlers:
- name: Restart httpd
systemd:
name: httpd
state: restarted
ignore_errors: yes
```
### Объяснение playbook
1. **Остановка служб**: Останавливает и отключает автозапуск `httpd` и `php-fpm`.
2. **Удаление тестового файла**: Удаляет файл `/var/www/html/info.php`.
3. **Удаление пакетов**: Удаляет Apache, PHP 8.0, PHP-FPM и все указанные расширения с автоматическим удалением зависимостей (`autoremove: yes`).
4. **Удаление конфигурации Apache**: Удаляет файл `/etc/httpd/conf.d/php-fpm.conf`.
5. **Сброс модуля PHP**: Сбрасывает модуль `php` для очистки настроек модуля Remi.
6. **Удаление репозиториев**: Удаляет Remi и EPEL.
7. **Закрытие порта в брандмауэре**: Удаляет правило для HTTP в firewalld.
8. **Сброс SELinux**: Отключает SELinux-боли, установленные ранее, и восстанавливает стандартный контекст SELinux для `/var/www/html`.
9. **Handlers**: Перезапускает `httpd`, если требуется (с игнорированием ошибок, так как служба может быть уже удалена).
### Предварительные требования
- Ansible установлен на управляющей машине.
- SSH-доступ к целевой машине настроен в вашем inventory-файле (аналогично предыдущему playbook).
- Целевая машина — RHEL 8, на которой был выполнен предыдущий playbook.
### Запуск playbook
1. Сохраните playbook в файл, например, `remove_httpd_php.yml`.
2. Используйте тот же inventory-файл (например, `inventory.yml`):
```yaml
all:
hosts:
target_server:
ansible_host: <IP_сервера>
ansible_user: <ваш_пользователь>
ansible_ssh_private_key_file: ~/.ssh/id_rsa
```
3. Запустите playbook:
```bash
ansible-playbook -i inventory.yml remove_httpd_php.yml
```
### Проверка
После выполнения playbook:
- Убедитесь, что службы `httpd` и `php-fpm` остановлены и удалены:
```bash
systemctl status httpd
systemctl status php-fpm
```
Ожидаемый вывод: службы не существуют или неактивны.
- Проверьте, что пакеты удалены:
```bash
dnf list installed | grep -E 'httpd|php'
```
Список должен быть пустым для этих пакетов.
- Проверьте, что файл `info.php` удалён:
```bash
ls /var/www/html/info.php
```
Файл не должен существовать.
- Убедитесь, что порт HTTP закрыт:
```bash
sudo firewall-cmd --list-services
```
`http` не должен быть в списке.
### Примечания
- **Ошибки игнорируются** (`ignore_errors: yes`) для задач, которые могут не выполняться, если компоненты уже отсутствуют (например, службы или файлы).
- **Остаточные файлы**: Playbook не удаляет логи (`/var/log/httpd`, `/var/log/php-fpm`) или каталог `/var/www/html`. Если хотите удалить их, добавьте задачу:
```yaml
- name: Remove web directory
file:
path: /var/www/html
state: absent
```
Используйте с осторожностью, так как это удалит все файлы в `/var/www/html`.
Если у вас есть дополнительные требования или нужно что-то доработать, напишите!
Back to list