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]