Resources attached to the Road To DevOps tutorial https://blog.noobtoroot.xyz/road-to-devops/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

8.2 KiB

Logo Ansible

Installation

Installation d'Ansible

Environnement : CentOS 7 / 1vCPU / 512m RAM / 10G Disk

$ sudo yum -y install epel-release
$ sudo yum -y update
$ sudo yum -y install ansible
$ ansible --version
ansible 2.9.16
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ansible/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /bin/ansible
  python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

Environnement : CentOS 8 / 1vCPU / 768m RAM / 10G Disk

$ sudo dnf -y install epel-release
$ sudo dnf -y update
$ sudo dnf -y install ansible
$ ansible --version
ansible 2.9.16
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Aug 24 2020, 17:57:11) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]

Configuration SSH

Schéma connexion ssh

  1. Génération d'une paire de clés SSH
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):
Created directory '/home/formation/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ~/.ssh/id_rsa.
Your public key has been saved in ~/.ssh/id_rsa.pub.
The key fingerprint is:
08:d5:a7:66:ca:a0:0c:6c:2f:40:2b:0f:25:de:cf:4c root@centos7
The key's randomart image is:
+--[ RSA 2048]----+
|       .o o..    |
|       o +Eo     |
|        + .      |
|         . + o   |
|        S o = * o|
|           . o @.|
|            . = o|
|           . o   |
|            o.   |
+-----------------+
  1. Copie de la clé publique sur les machines cibles
ssh-copy-id -i formation@10.6.214.70
ssh-copy-id -i formation@10.6.214.72
ssh-copy-id -i formation@10.6.214.73
ssh-copy-id -i formation@10.6.214.74

Configuration

Fichier | Description

  • | - /etc/ansible/ansible.cfg | Fichier de configuration global ~/.ansible.cfg | Fichier de surcharge par utilisateur /path/to/project/ansible.cfg | Fichier de surcharge par projet

/path/to/project/ansible.cfg

[defaults]
log_path=./ansible.log
roles_path = ./roles:/opt/othersite/roles
retry_files_save_path=./retries/

Exemple de surcharge locale de la configuration d'Ansible.

Logo Ansible

Inventaire

Fichier de déclaration des machines cibles à adresser.

Objectifs de l'inventaire

  1. Déclarer la liste des machines à adresser.

  2. Déclarer et associer des variables à :

    • une machine en particulier,

    • un sous-ensemble des machines,

    • l'ensemble des machines.

Inventaire

  • L'inventaire par défaut est défini dans le fichier /etc/ansible/hosts.

  • Il faut être root pour pouvoir le modifier.

  • Il est également possible de créer un fichier inventaire à l'emplacement de notre choix.

  • Il est aussi possible de gérer plusieurs inventaires correspondant à des plateformes différentes.
    Dans le homedir de l'utilisateur Ansible par exemple :

~/inventories/
├── dev
│   └── hosts   <----- inventaire de l'environnement de dev
├── qualif
│   └── hosts   <----- inventaire de l'environnement de qualif
└── prod
    └── hosts   <----- inventaire de l'environnement de production

Déclaration de machines

Adresse IP

10.6.214.70
10.6.214.72
10.6.214.73
10.6.214.74

Alias de la machine et adresse IP

lb.formation.sii.fr   ansible_host=10.6.214.70
web1.formation.sii.fr ansible_host=10.6.214.72
web2.formation.sii.fr ansible_host=10.6.214.73
bdd.formation.sii.fr  ansible_host=10.6.214.74

https://docs.ansible.com/ansible/intro_inventory.html#hosts-and-groups

Variables possibles pour les connexions :

  • ansible_host
    Le nom (si ce nom est différent de l'alias) ou l'adresse IP de la machine cible.

  • ansible_port
    Le port ssh (si différent de 22).

  • ansible_user
    L'utilisateur ssh à utiliser (si différent de l'utilisateur courant).

  • ansible_ssh_pass
    Le mot de passe ssh de l'utilisateur ansible_user.

  • ansible_ssh_private_key_file
    La clé privée utilisée par ssh. Utile en cas d'utilisation de plusieurs clés et si on ne veut pas utiliser SSH agent.

Déclaration de groupes de machines

lb.formation.sii.fr   ansible_host=10.6.214.70
web1.formation.sii.fr ansible_host=10.6.214.72
web2.formation.sii.fr ansible_host=10.6.214.73
bdd.formation.sii.fr  ansible_host=10.6.214.74

[lb]                                # groupe
lb.formation.sii.fr

[web]
web[1:2].formation.sii.fr           # exemple de raccourci
                                    # d'écriture

[db]
bdd.formation.sii.fr

[formation:children]                # groupe de groupes
lb
web
db

Groupes par défaut

  • all : contient toutes les machines.

  • ungrouped : contient toutes les machines qui n'appartiennent pas à un groupe (en dehors de all)

Lancer une commande sur un groupe de machines spécifique

$ ansible formation -m ping
10.6.214.70 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
10.6.214.74 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
10.6.214.72 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
10.6.214.73 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Variables de groupes

...
[web]
web[1-2].formation.sii.fr

[db]
bdd.formation.sii.fr

[formation:children]
web
db

[formation:vars]            # variables du groupe formation
ansible_user: "formation"
ansible_ssh_private_key_file: /home/formation/.ssh/id_rsa

Vérifier les variables de l'inventaire

$ ansible-inventory -i inventories/formation/hosts --list --yaml
all:
  children:
    web:
      hosts:
        web1.formation.sii.fr:
          ansible_become: 'yes'
          ansible_become_pass: ansible
          ansible_host: 192.168.56.102
          ansible_ssh_private_key_file: /home/ansible/.ssh/id_rsa
          ansible_user: ansible
        web2.formation.sii.fr:
          ansible_become: 'yes'
          ansible_become_pass: ansible
          ansible_host: 192.168.56.103
          ansible_ssh_private_key_file: /home/ansible/.ssh/id_rsa
          ansible_user: ansible
    db:
      hosts:
        bdd.formation.sii.fr:
          ansible_become: 'yes'
          ansible_become_pass: ansible
          ansible_host: 192.168.56.104
          ansible_ssh_private_key_file: /home/ansible/.ssh/id_rsa
          ansible_user: ansible

Externaliser les variables

A utiliser pour séparer les variables de la liste des machines.

~/inventories/
  └── lab
      ├── group_vars
        ├── web                       <--- variables pour le groupe web
       └── db                        <--- variables pour le groupe db
      ├── host_vars
      │   ├── web1.formation.sii.fr     <--- variables pour la machine web1
      │   └── web2.formation.sii.fr     <--- variables pour la machine web2
      └── hosts

Les dossiers group_vars et host_vars permettent l'organisation des fichiers de variables.

Travaux pratiques

Travaux pratiques

TP Ansible : Inventaire