LogNotes

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`.

Если у вас есть дополнительные требования или нужно что-то доработать, напишите!
← Previous Next →
Back to list