Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
gfaivre committed Nov 28, 2023
1 parent 18d8501 commit 7831111
Showing 1 changed file with 61 additions and 5 deletions.
66 changes: 61 additions & 5 deletions content/blog/cours/ansible/ansible-les-inventaires-statiques.md
Original file line number Diff line number Diff line change
Expand Up @@ -312,29 +312,85 @@ array (
**On comprendra donc facilement:**

- Que l'ajout d'une clé entraine l'ajout d'un élément à notre tableau pour la clé concernée (Dans notre cas l'ajout de la clé `ansible_port`);
- Que la modification de la valeur d'une clé écrase sa valeur précédemment déclarée (Dans notre cas la modification de l'IP de notre machine).
- Que la modification de la valeur d'une clé écrase sa valeur précédente (Dans notre cas la modification de l'IP de notre machine).

Conclusion: Lorsque l'on utilise des fichiers d'inventaire multiples il vaut bien prendre en compte leur ordonnancement, **la dernière valeur déclarée pour une clé** étant celle qui sera retenu dans notre tableau final.

!!! info "Groupes de groupes"
L'inventaire .

La hiérarchie de groupe d'un inventaire peut avoir plusieurs niveaux. Il est donc possible d'avoir de l'imbrication de groupes. Attention toutefois à ne pas en abuser afin de ne vous perdre dans des arborescence trop complexes.

## Exercices

Rapide mise en pratique des inventaires.

### Exercice 1

Reprendre les différents fichiers contenu dans notre répertoire `inventories` et les compiler en un seul et même fichier `hosts.yml`.
Reprendre les différents fichiers contenu dans notre répertoire `inventories` et les compiler en un seul et même fichier `hosts.yml`, les autres fichiers ne sont finalement plus utiles et peuvent être supprimés.

Souvenez-vous vous pouvez tester un fichier d'inventaire en particulier en le passant en paramètre de la commande `ansible-inventory`: `ansible-inventory --list -i inventories/hosts.yml`.

### Exercice 2

Nous avons vu qu'il existait différent plugin permettant de « lire » un inventaire (si,si au tout début), essayez d'écrire le même inventaire mais à un format différent (foramt ini) par exemple.
Nous avons vu qu'il existait différent plugin permettant de « lire » un inventaire (si,si au tout début), essayez d'écrire le même inventaire mais à un format différent (format ini par exemple).

## Cibler des groupes de machines avec les « patterns »

Notre infrastructure est modeste, mais vous serez parfois amenez à travailler avec des infrastructures d'envergure et serez dans l'obligation de « cibler » certaines machines ou groupes de machines.
Il est ainsi possible d'indiquer explicitement à Ansible quelles sont les machines à considérer pour une action donnée.

Certains « pattern » sont très simple et vous devriez en reconnaitre certains:

Le « wildcard » `*` par exemple qui désignera n'importe quelle valeur est utilisable au sein d'une valeur de clé `ip` ou `hostname` (`192.168.140.*` ou encore `*.example.com`).

Ceux que vous rencontrerez le plus souvent: `:`, `:&` ou encore `:!`.s

### L'opérateur OR

L'opérateur `:` signifiera qu'une machine peut-être dans un groupe **OU** dans un autre, par exemple **staging** ou **production**.

Essayons toujours avec notre module **ping**: `ansible -i inventories/hosts.yml 'staging:production' -m ping`

!!! info "Avec la commande **ansible-inventory**"
`ansible-inventory -i inventories/hosts.yml --host='webservers:production'`

### L'opérateur AND

L'opérateur `:&` signifiera qu'une machine peut-être dans un groupe **ET** dans un autre, par exemple **webservers** et **production**.

`ansible -i inventories/hosts.yml 'webservers:&production' -m ping`

Cette fois-ci vous ne devriez avoir que la machine `vm-web-prod-01` qui est solicité par Ansible.

!!! info "Avec la commande **ansible-inventory**"
`ansible-inventory -i inventories/hosts.yml --host='webservers:&production'`

### L'opérateur NOT

L'opérateur `:!` permettra de cibler une machine qui est dans un groupe **mais pas** dans un autre par exemple membre du groupe **webservers** mais non présente dans le groupe **production**.

`ansible -i inventories/hosts.yml 'webservers:!production' -m ping`

Vous devriez ne soliciter cette fois que `vm-web-staging-01`.

!!! info "Avec la commande **ansible-inventory**"
`ansible-inventory -i inventories/hosts.yml --host='webservers:!production'`

### Combinaisons multiples

Il est bien évidemment possible de combiner les opérateurs prenez toutefois garde aux expressions trop complexes qui gêneront à la compréhension et pourront être source d'erreur !

On peut donc imaginer des choses comme cibler les machines du groupe **webservers** OU **staging** mais qui ne **sont pas dans production** (On est d'accord, ça n'a aucune sens c'est pour l'exemple ;)).

`ansible -i inventories/hosts.yml 'webservers:staging:!production' -m ping`

Il est également possible de mixer nom de groupe et nom de machine: `ansible -i inventories/hosts.yml 'webservers:staging:!vm-web-staging-01' -m ping`

!!! info "Avec la commande **ansible-inventory**"
`ansible-inventory -i inventories/hosts.yml --host='webservers:staging:!vm-web-staging-01'`

## Aller plus loins avec les sources

- https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html#connecting-to-hosts-behavioral-inventory-parameters
- https://docs.ansible.com/ansible/latest/inventory_guide/intro_patterns.html


0 comments on commit 7831111

Please sign in to comment.