Mode Ad-Hoc

Source

Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/08-mode-adhoc

Liste des modules utilisés

  • ping
  • setup
  • apt
  • service
  • yum
  • easy_install
  • iptables
  • mysql_user
  • user
  • group
  • stat
  • copy
  • fetch
  • file
  • git

1. Pré-requis

Le mode ad-hoc permet d’exécuter des tâches ad-hoc. Rappelons qu’une tâche n’est rien d’autre que l’appel à un module.

Un fichier de configuration et un inventaire sont nécessaires.

[webservers]
app1
app2

[dbservers]
db

[all:vars]
ansible_connection=ssh
ansible_user=root
ansible_ssh_pass=testtest

2. Se documenter

Se documenter sur la commande ansible

La commande ansible offre la possibilité d’exécuter des modules ansible de manière “ad-hoc”, c’est à dire tâche par tâche, commande par commande. L’intérêt est de pouvoir exécuter la même tâche à exécuter en parallèle sur un inventaire en tout ou en partie.

ansible --help
Usage: ansible <host-pattern> [options]

Define and run a single task 'playbook' against a set of hosts

En général, la commande s’écrit ansible suivie d’un hôte ou d’un groupe d’inventaire suivie -m nom_de_module suivie l’option d’argument -a "clé=valeur clé=valeur clé=valeur" :

ansible group_inventaire -m nom_de_module -a "clé=valeur clé=valeur clé=valeur"

Se documenter sur les modules

ansible-doc yum

3. Test fondamental

ansible all -m ping

4. Commandes brutes

Si on ne précise pas le nom du module, c’est le module raw par défaut qui est utilisé avec les commandes brutes comme option d’argument.

Le module raw exécute les arguments directement en brut dans une session ssh.

ansible all -a "hostname"
ansible all -a "df -h"
ansible app1 -m setup

5. Installation de NTPD sur Debian/Ubuntu :

ansible all -m apt -a "name=openntpd state=present"
ansible all -m service -a "name=openntpd state=started enabled=yes"

6. Installation de NTPD sur RedHat :

ansible all -m yum -a "name=ntp state=present"
ansible all -m service -a "name=ntpd state=started enabled=yes"

Synchroniser les hôtes :

ansible all -m service -a "name=ntpd state=stopped"
ansible all -a "ntpdate -q 0.rhel.pool.ntp.org"
ansible all -m service -a "name=ntpd state=started"

7. Jouer avec YUM

Installer Apache

ansible webservers -m yum -a "name=httpd state=present"

Lancer le service

ansible webservers -m service -a "name=httpd state=started"

Arrêter le service

ansible webservers -m service -a "name=httpd state=stopped"

Retirer Apache

ansible webservers -m yum -a "name=httpd state=absent"

8. Configurer les serveurs d’application

ansible webservers -m yum -a "name=MySQL-python state=present"
ansible webservers -m yum -a "name=python-setuptools state=present"
ansible webservers -m easy_install -a "name=django<2 state=present"

9. Configurer le serveur de base de données

ansible db -m yum -a "name=mariadb-server state=present"
ansible db -m service -a "name=mariadb state=started enabled=yes"
ansible db -a "iptables -F"
ansible db -a "iptables -A INPUT -s 192.168.60.0/24 -p tcp -m tcp --dport 3306 -j ACCEPT"

Comment traduire les commandes iptables en module Ansible ?

ansible db -m iptables -a "flush=yes"
ansible db -m iptables -a "chain=INPUT protocol=tcp source=192.168.60.0/24 destination_port=3306 jump=ACCEPT"
ansible db -m yum -a "name=MySQL-python state=present"
ansible db -m mysql_user -a "name=django host=% password=12345 priv=*.*:ALL state=present"

10. Limiter une tâche à un hôte

ansible webservers -m service -a "name=ntpd state=restarted" --limit app1

L’option --limit accepte des expressions rationnelles (regexp) :

ansible all -m service -a "name=ntpd state=restarted" --limit "app*"

11. Gérer les utilisateurs

ansible webservers -m group -a "name=admin state=present"
ansible webservers -m user -a "name=johndoe groups=admin createhome=yes"

Supprimer un utilisateur :

ansible webservers -m user -a "name=johndoe state=absent remove=yes"

user - Manage user accounts

12. Prendre des informations sur un fichier

ansible webservers -m stat -a "path=/etc/environment"

13. Copier un fichier sur l’hôte

ansible webservers -m copy -a "src=/etc/hosts dest=/tmp/hosts"
ansible webservers -m stat -a "path=/tmp/hosts"

14. Rapatrier un fichier sur le contrôlleur

ansible webservers -m fetch -a "src=/etc/hosts dest=/tmp"

15. Créer des dossiers et des fichiers

ansible webservers -m file -a "dest=/tmp/test mode=644 state=directory"
ansible webservers -m file -a "src=/src/symlink dest=/dest/symlink owner=root group=root state=link"

16. Effacer des dossiers et des fichiers

ansible webservers -m file -a "dest=/tmp/test state=absent"

17. Autres modules fichiers

Files modules :

  • acl - Sets and retrieves file ACL information.
  • archive - Creates a compressed archive of one or more files or trees
  • assemble - Assembles a configuration file from fragments
  • blockinfile - Insert/update/remove a text block surrounded by marker lines
  • copy - Copies files to remote locations
  • fetch - Fetches a file from remote nodes
  • file - Sets attributes of files
  • find - Return a list of files based on specific criteria
  • ini_file - Tweak settings in INI files
  • iso_extract - Extract files from an ISO image
  • lineinfile - Manage lines in text files
  • patch - Apply patch files using the GNU patch tool
  • replace - Replace all instances of a particular string in a file using a back-referenced regular expression.
  • stat - Retrieve file or file system status
  • synchronize - A wrapper around rsync to make common tasks in your playbooks quick and easy.
  • tempfile - Creates temporary files and directories.
  • template - Templates a file out to a remote server
  • unarchive - Unpacks an archive after (optionally) copying it from the local machine.
  • xattr - Manage user defined extended attributes
  • xml - Manage bits and pieces of XML files or strings

18. Tâches en arrière-plan

L’option -B permet d’activer la tâche en arrière-plan avec délai maximum.

ansible webservers -B 3600 -m yum -a "name="*" state=latest"

19. Deployer une application Git

Veuillez déployer via Git les exemples du support qui se trouvent sur le dépôt Github https://github.com/goffinet/guide-ansible-playbooks à la racine du dossier d’accueil de l’utilisateur root.

Pour cet exercice, la solution n’est pas fournie ici. Veuillez vous référer à la documentation du module git.