Ansible via Python

Ansible via Python

Nous devons commencer par installer ansible. Se qu’il faut savoir c’est qu’il est possible d’installer ansible en tant que package sur la machine directement ou alors en tant que module python et c’est cette dernière méthode que nous allons utiliser car elle nous permettra d’avoir plusieurs version d’ansible sur notre machine. Pour installer ansible en tant que module python nous allons utiliser virtual env sur python3.

root@serv:/root# apt install python3.9 python3.9-venv
root@serv:/root# python3.9 -m venv ansible
ensuite on vas sourcer le fichier d'activation de l'environment.
root@serv:/root# cd ansible 
root@serv:/root# . ./bin/activate
(ansible) root@serv:/root/ansible# pip install ansible 

Maintenant nous allons définir un fichier inventaire (qui contient la liste des seveurs que nous allons manipuler)

echo 'serv.atomit.local' > inventaire.yml

Pour qu’ansible fonctionne vous avez besoin au minimum que ssh soit accessible et aussi que python soit installé pour le bon fonctionnement des modules. Nous allons effectuer des actions basics. Un ping vers notre serveur, installation de python3.9 et donner les droits sudo à l’utilisateur ansible.

(ansible) root@serv:/root/ansible# cat base.yml 
- hosts: all
  gather_facts: no
  become: yes 
  tasks:
    - name: Ping Host
      ping:
    - name: install python 3.9
      raw: test -e /usr/bin/python || ( [ $(command -v apt) ] && apt install -y python3.9 )
    - name: Création et ajout du compte ansible dans le groupe sudo
      user:
        name: ansible
        groups: sudo 
        append: yes

pour la commande suivant vous devez indiquer le nom d’un utilisateur qui à les droits root jojo dans notre cas.

(ansible) root@serv:/root/ansible# ansible-playbook -i inventaire.yml --user jojo --ask-pass --become --ask-become-pass base.yml
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] **************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [serv.atomit.local]

TASK [Ping Host] **************************************************************************************************************************************
ok: [serv.atomit.local]

TASK [install python 3.9] **************************************************************************************************************************************
changed: [serv.atomit.local]

TASK [Création et ajout du compte ansible dans le groupe sudo] ******************************************************************************************************************************
ok: [serv.atomit.local]

PLAY RECAP **************************************************************************************************************************************
serv.atomit.local          : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Il est aussi possible d’éxécuter des modules ansible directement sans utiliser les fichiers de définition de module.

(ansible) root@serv:/root/ansible# ansible -i inventaire.yml -m user -a 'name=ansible groups=sudo append=yes' --user jojo --ask-pass --become --ask-become-pass all
SSH password: 
BECOME password[defaults to SSH password]: 
serv.atomit.local | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "append": true,
    "changed": false,
    "comment": "",
    "group": 1001,
    "groups": "sudo",
    "home": "/home/ansible",
    "move_home": false,
    "name": "ansible",
    "shell": "/bin/sh",
    "state": "present",
    "uid": 1001
}

Si vous souhaitez récupérer la liste des facts d’un host vous pouvez utiliser.

(ansible) root@serv:/root/ansible# ansible your_server.atomit.local --user jojo -bKk -m ansible.builtin.setup
SSH password: 
BECOME password[defaults to SSH password]: 
serv.atomit.local | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.0.2.15",
            "192.168.56.133"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::a00:27ff:fe63:7af1",
            "fe80::a00:27ff:fe4b:bcc6"
        ],
        "ansible_apparmor": {
            "status": "enabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "12/01/2006",
        "ansible_bios_vendor": "innotek GmbH",
        "ansible_bios_version": "VirtualBox",
        "ansible_board_asset_tag": "NA",
        "ansible_board_name": "VirtualBox",
        "ansible_board_serial": "0",

Voilà le minimum pour ansible. Bien-sur vous pouvez effectuer des actions beaucoup plus complexe, cela sera l’objet d’un prochain tuto.

joel

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.