## Description
Doc : https://docs.ansible.com/ansible/latest/modules/file_module.html
Commande : `ansible-doc file`
Objectif : gestion des fichiers et répertoires
Périmètre : fichiers, répertoires, liens symboliques
## Paramètres
|--|--|
| `attribute` | Paramètres particuliers d'un fichier : immutabilité etc... (https://fr.wikipedia.org/wiki/Chattr)|
| `force` | Pour les liens symboliques (si le fichier source existe pas, la destination existe)|
| `group/owner` | Propriétaire et groupe de l'élément|
| `mode` | Sous les deux formats : "0755" ou "u=rwx,g=rx,o=rx"|
| `path` | Localisation|
| `recurse` | Création du chemin intermédiaire si n'existe pas (yes/no) > pour directory uniquement|
| `src` | Pour les liens (hard ou symbolique)|
| `state` | Type (absent / directory / file / hard / link / touch)|
## Commandes
Créer un répertoire
```yaml
- name: création du répertoire /tmp/xavki
file:
path: /tmp/xavki/
state: directory
```
> Le propriétaire du dossier et l'utilisateur de connexion
{.is-info}
Changement de user > root
```yaml
- name: création du répertoire /tmp/xavki
file:
path: /tmp/xavki/
state: directory
owner: root
```
become = yes > différents endroits pour le faire
* cli > -b
* playbook/tasks > become: yes
```yaml
- name: création du répertoire /tmp/xavki
file:
path: /tmp/xavki/
state: directory
owner: root
become: yes
```
> Attention à l'indentation
{.is-warning}
Modification du groupe et des droits (RWX-RX-RX - 0755) | stat
```yaml
- name: création du répertoire /tmp/xavki
file:
path: /tmp/xavki/
state: directory
owner: root
group: root
mode: 0755
become: yes
```
Récursivité (pour directory uniquement
```yaml
- name: création du répertoire /tmp/xavki
file:
path: /tmp/xavki/1/2/3/4
recurse: yes
state: directory
owner: root
group: root
mode: 0755
```
Touch
```yaml
- name: création du répertoire /tmp/xavki
file:
path: /tmp/xavki/1/2/3/4/fichier.txt
state: touch
owner: root
group: root
mode: 0755
```
Lien symbolique = lien vers fichier (diff avec hardlink = lien vers inode)
```yaml
- name: création du répertoire /tmp/xavki
file:
src: /tmp/xavki/1/2/3/4/
dest: /tmp/symlink
state: link #hard
owner: root
group: root
mode: 0755
```
Suppression de fichier
```yaml
- name: dir sans idempotence
file:
path: /tmp/xavki.txt
state: absent
```
Suppression de répertoire récursive
```yaml
- name: dir sans idempotence
file:
path: /tmp/xavki/
state: absent
```
# USER : CREER, SUPPRIMER, GERER DES UTILISATEURS
## Description
Doc : https://docs.ansible.com/ansible/latest/modules/user_module.html
Commande : `ansible-doc user`
Equivalence : `useradd/adduser/userdel/deluser/luseradd`
## Paramètres
|--|--|
| `append yes/no` | En lien avec groups / ajout aux groupes ou changement |
| `comment` | Commentaire associé au user |
| `create_home yes/no` | Création de la home ou pas |
| `expires format epoch` | Date d'expiration |
| `force` | Permet de forcer la suppression des fichier d'un user |
| `generate_ssh_key` | Génère en même temps une clef ssh à l'utilisateur |
| `group` | Définit le groupe principal de l'utilisateur |
| `groups` | Définit les groupes secondaires qui seront ajoutés |
| `home` | Définition de la home du user |
| `local` | Dans le cas d'une décentralisation de la gestion des users (forcer localement) |
| `move_home` | Pour déplacer une home existante |
| `name` | nom utilisateur |
| `password` | Hash du password |
| `password_lock` | Vérouiller le password du user |
| `remove` | En cas de state absent, suppression en même des répertoires du user |
| `shell` | Définition sur shell attribué au user |
| `skeleton` | Avec create_home, pour définir le squelette à appliquer |
| `ssh_key_bits` | Taille de la clef ssh générée |
| `ssh_key_comment` | Commentaire de la clef ssh |
| `ssh_key_file` | Spécifie le chemin de la clef ssh |
| `ssh_key_passphrase`| Définir la passphrase de la clef ssh sinon pas de passphrase |
| `ssh_key_type` | rsa par défaut, type de clef ssh |
| `state` | Création ou suppression |
| `system` | A la création définir ou non un compte system |
| `uid` | Fixer l'uid |
| `update_password always/on_create` | Soit mettre à jour sur changement ou juste création
## Commandes
Création d'un user avec password
```yaml
- name: création de xavki
user:
name: xavki
state: present
password: "{{ 'password' | password_hash('sha512') }}"
```
Ajout au groupe sudo
```yaml
- name: création de xavki
user:
name: xavki
state: present
groups: sudo
append: yes
password: "{{ 'password' | password_hash('sha512') }}"
```
Fixer l'uid
```yaml
- name: création de xavki
user:
name: xavki
state: present
uid: 1200
groups: sudo
append: yes
password: "{{ 'password' | password_hash('sha512') }}"
```
Génération de la clef ssh
```yaml
- name: création de xavki
user:
name: xavki
state: present
uid: 1200
groups: sudo
append: yes
generate_ssh_key: yes
password: "{{ 'password' | password_hash('sha512') }}"
```
Ajout d'un register et découvrir les outputs
```yaml
- name: création du user xavki
user:
name: xavki
state: present
generate_ssh_key: yes
uid: 1200
groups: sudo
append: yes
password: "{{ 'password' | password_hash('sha512') }}"
register: mavar
- name: debug
debug:
msg: "{{ mavar }}"
```
nologin avec le shell
```yaml
- name: création du user xavki
user:
name: xavki
state: present
shell: /sbin/nologin
generate_ssh_key: yes
uid: 1200
groups: sudo
append: yes
password: "{{ 'password' | password_hash('sha512') }}"
password_lock: yes
```
Suppression d'un user
```yaml
- name: création du user xavki
user:
name: xavki
state: absent
```
# REGISTER & STAT
## Description
Doc : Documentation : https://docs.ansible.com/ansible/latest/modules/stat_module.html
## Paramètres
|--|--|
| `path` | Chemin du fichier ou répertoire |
| `follow` | Suivre les liens symboliques |
| `get_checksum` | Récupérer la checksum |
| `checksum_algorithm` | Type de checksum (md5, etc) |
| `get_mime` | Récupération du type de données |
## Commandes
Création d'un fichier
```yaml
- name: création d'un fichier
file:
path: /tmp/xavki.txt
state: touch
owner: xavki
```
Utilisation de stat
```yaml
- name: check avec stat
stat:
path: /tmp/xavki.txt
```
Récupération de la variable
```yaml
- name: check avec stat
stat:
path: /tmp/xavki.txt
register: __fichier_xavki_exist
- name: debug
debug:
var: __fichier_xavki
```
Récupération d'une clef
```yaml
- name: debug
debug:
var: __fichier_xavki.stat.exists
```
Utilisation conditionnnel
```yaml
- name: création répertoire xavki
file:
path: /tmp/xavki
state: directory
when: __fichier_xavki.stat.exists
```
## Exemple
```yaml
tasks:
- name: création d'un fichier
file:
path: /tmp/xavki.txt
state: touch
owner: root
when: xavki_file is defined
- name: check avec stat
stat:
path: /tmp/xavki.txt
register: __fichier_xavki
- name: debug
debug:
var: __fichier_xavki.stat.exists
- name: création répertoire xavki
file:
path: /tmp/xavki
state: directory
when: __fichier_xavki.stat.exists and xavki_file is defined
```