2 Commits

Author SHA1 Message Date
68929bc91d tp abr 2023-09-21 09:47:20 +02:00
47b37fbcc8 typo 2022-04-26 09:40:38 +02:00
6 changed files with 15 additions and 125 deletions

View File

@@ -1,28 +1,31 @@
# Solution (proposition)
## Includes et import
Plutôt que de conditionner chaque tâche en fonction de la distribution (ce qui sera pénible et difficile à maintenir), la solution consistant à inclure un fichier de variables propre à chaque OS cible est plus élégante.
**Tâche**: écrire des playbooks modulaires
**Condition**: selon besoin
**Norme**: includes et import
**Préparation**:
** Pratique **
En examinant les différents fichiers présents dans ce dépôt, essayez de
déterminez de quelle manière ce playbook a été adapté pour fonctionner aussi
bien sur une CentOS qu'une Debian.
Récupérer la solution de l'atelier handler
L'idée est de transformer en variables toutes les spécificités de chaque distribution (nom
du paquet, du service, de l'utilisateur dédié au service, du répertoire de conf ...) et de définir ces variables dans des fichiers dont le nom correspond à la distribution cible.
Identifier dans le playbook et le fichier vhost.conf toutes les spécificités de RedHat (qui vont empécher le playbook de fonctionner)
Il suffit de faire ensuite un include de ces fichiers en construisant le nom du fichier autour de la variable "ansible_distribution"
Trouver la solution à cette problématique (exécution conditionnelle, variabilisation ...)
L'exécution du block de tâches "firewalld", spécifique à CentOS est conditionné à cette distribution via la clause "when"
Implémenter la solution
La tâche "conf httpd" ne fonctionnera pas sur Debian. Pourquoi ? Proposez une solution.
Sur la debian, la configuration par défaut entre en conflit avec la notre:
Le nom du groupe est différent, il faut en faire une variable
Modifier le playbook pour que le fichier /etc/apache2/sites-enabled/000-default.conf soit supprimé UNIQUEMENT sur la debian, avec redémarrage du service apache si besoin
** Validation:
le playbook s'exécute correctement sur la machine debian
```bash
curl debian1
<span style="text-align: center;background-color: #FD5401; font-size: 42px;">Hello World</span>
```

View File

@@ -1,75 +0,0 @@
---
- name: install apache via ansible playbook
hosts: all
handlers:
- name: restart apache
service:
name: "{{ apache_service_name }}"
state: restarted
tasks:
- name: import OS variables
include_vars: "{{ ansible_distribution | lower }}.yml"
- name: install apache
package:
name: "{{ apache_package_name }}"
state: present
- name: conf httpd
template:
src: vhost.conf
dest: "{{ apache_config_dir}}/vhost.conf"
mode: 0640
owner: root
group: "{{ apache_group_name }}"
notify: restart apache
- name: activate apache
service:
name: "{{ apache_service_name }}"
enabled: yes
state: started
- name: remove default site conf
file:
path: /etc/apache2/sites-enabled/000-default.conf
state: absent
notify: restart apache
- name: setup firewall
block:
- name: install firewalld packages
yum:
name:
- python3-firewall
- firewalld
state: present
- name: enable firewalld service
service:
name: firewalld
enabled: true
state: started
- name: open firewall port
firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
ignore_errors: true
when: ansible_distribution == 'CentOS'
- name: create documentroot
file:
name: /var/www/html/example.org/
state: directory
- name: copy index file
template:
src: index.txt
dest: /var/www/html/example.org/index.html
mode: 0644

View File

@@ -1,6 +0,0 @@
#/home/formation/sib_10_premier_playbook/centos.yml
apache_service_name: httpd
apache_package_name: httpd
apache_config_dir: /etc/httpd/conf.d
apache_log_dir: /var/log/httpd
apache_group_name: apache

View File

@@ -1,6 +0,0 @@
#/home/formation/sib_10_premier_playbook/debian.yml
apache_service_name: apache2
apache_package_name: apache2
apache_config_dir: /etc/apache2/sites-enabled/
apache_log_dir: /var/log/apache2
apache_group_name: www-data

View File

@@ -1 +0,0 @@
<h1>hello World</h1>

View File

@@ -1,25 +0,0 @@
#/home/formation/sib_10_premier_playbook/vhost.conf
<VirtualHost *:80>
ServerName example.org
ServerAlias www.example.org
ServerAlias {{ inventory_hostname }}
DocumentRoot /var/www/html/example.org
CustomLog {{ apache_log_dir }}/example.org_access.log combined
ErrorLog {{ apache_log_dir }}/example.org_error.log
<Directory />
Options none
Allowoverride none
Require all denied
</Directory>
<Directory /var/www/html/example.org>
Require all granted
</Directory>
<Directory /var/www/html/example.org/Private>
Options indexes
AuthName "stop"
AuthType Basic
AuthUserFile /etc/{{ apache_service_name }}/passwd
require valid-user
</Directory>
</VirtualHost>