Ansible Playbook для удаления
Сохраните следующий код в файл, например, remove_httpd_php.yml:
---
- 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):
all:
hosts:
target_server:
ansible_host: <IP_сервера>
ansible_user: <ваш_пользователь>
ansible_ssh_private_key_file: ~/.ssh/id_rsa
3. Запустите playbook:
ansible-playbook -i inventory.yml remove_httpd_php.yml
Проверка
После выполнения playbook:
- Убедитесь, что службы
httpdиphp-fpmостановлены и удалены:
systemctl status httpd
systemctl status php-fpm
Ожидаемый вывод: службы не существуют или неактивны.
- Проверьте, что пакеты удалены:
dnf list installed | grep -E 'httpd|php'
Список должен быть пустым для этих пакетов.
- Проверьте, что файл
info.phpудалён:
ls /var/www/html/info.php
Файл не должен существовать.
- Убедитесь, что порт HTTP закрыт:
sudo firewall-cmd --list-services
http не должен быть в списке.
Примечания
- Ошибки игнорируются (
ignore_errors: yes) для задач, которые могут не выполняться, если компоненты уже отсутствуют (например, службы или файлы). - Остаточные файлы: Playbook не удаляет логи (
/var/log/httpd,/var/log/php-fpm) или каталог/var/www/html. Если хотите удалить их, добавьте задачу:
- name: Remove web directory
file:
path: /var/www/html
state: absent
Используйте с осторожностью, так как это удалит все файлы в /var/www/html.
Если у вас есть дополнительные требования или нужно что-то доработать, напишите!
[file-name 000156_2025-06-15_08-21-51.txt]