GNU/Linux >> Tutoriels Linux >  >> Linux

Guide pratique :Premiers pas avec Ansible

Présentation

Ansible est un outil d'administration système qui permet l'administration de plusieurs appareils à partir d'un seul appareil central. Il se compare à des outils comme Puppet ou Chef, mais alors que ces packages nécessitent l'installation d'agents sur les systèmes clients, Ansible fonctionne en passant des commandes via ssh sans avoir besoin d'agents du tout. Nous examinerons certaines des tâches administratives dont Ansible est capable afin que vous puissiez avoir une meilleure idée de savoir si Ansible pourrait vous convenir.


.

Prérequis

  • Un appareil de contrôle Linux, BSD ou OSX.
  • Accès ssh (pare-feu et informations d'identification) aux appareils clients depuis votre appareil de contrôle. Ansible préfère l'utilisation de clés ssh pour accéder aux appareils clients, mais nous vous montrerons également des options à l'aide d'un nom d'utilisateur et d'un mot de passe.
  • Python 2.6 ou 2.7 installé sur l'appareil de contrôle.

.

Installation

Ansible est disponible via les gestionnaires de packages des principales distributions Linux/BSD/OSX. Il est également disponible via le programme d'installation pip de Python.

CentOS/Fedora :

sudo yum install ansible

Ubuntu (vous devrez d'abord ajouter le PPA Ansible) :

sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

Arch Linux :

pacman -S ansible

FreeBSD :

sudo pkg install ansible

Gestionnaire de packages Python, pip (les utilisateurs OSX peuvent également installer avec pip) :

sudo pip install ansible

Configuration de l'accès aux clients Ansible

Hôtes

L'un des avantages de l'utilisation d'Ansible est la possibilité de gérer plusieurs clients à partir d'un seul appareil de contrôle, à partir de la même interface de terminal. Vous pouvez spécifier différents groupes de serveurs clients en fonction de la fonction, de l'emplacement et/ou du système d'exploitation en créant des groupes dans /etc/ansible/hosts fichier.

[mailservers]
smtp.orl-fl.example.com
smtp.dal-tx.example.com

[db_servers]
db.orl-fl.example.com
db.sfo-ca.example.com

[orlando]
smtp.orl-fl.example.com
db.orl-fl.examle.com

[nameservers]
ns[01:12].example.com

Un nom entre crochets [] définit un nom de groupe et inclut les hôtes dans la liste qui le suit. Vous pouvez également indiquer une plage séquentielle dans un modèle de nom d'hôte avec des crochets et deux-points, comme dans ns[01:12].example.com ci-dessus.

Un client peut exister dans plusieurs groupes. Le nom du groupe fonctionne comme un alias pour la liste des groupes, ce qui permet de référencer plus facilement le groupe de serveurs que vous ciblerez avec votre commande ou playbook Ansible particulier.
.

Clés SSH

Ansible fonctionne mieux lorsque votre serveur de contrôle, celui à partir duquel vous exécuterez vos commandes Ansible, peut utiliser des clés ssh pour accéder aux hôtes clients. Lorsque vous exécutez une commande Ansible sans options supplémentaires, elle tente par défaut d'accéder aux clients distants via des clés ssh.

Astuce :Si vous avez sécurisé votre clé ssh privée avec une phrase secrète, il peut être peu pratique et inefficace de devoir saisir cette phrase secrète chaque fois que vous devez la déchiffrer pour chaque session ssh que vous ouvrirez avec Ansible. Pour simplifier ce processus, ouvrez un shell séparé avec ssh-agent . Lorsque vous importez une clé privée dans ce shell, il vous suffit de saisir votre phrase secrète une seule fois pour ajouter la clé privée non chiffrée.

ssh-agent bash
ssh-add ~/.ssh/id_rsa

La première commande ouvre un nouveau shell bash. Le ssh-add La commande vous demandera la phrase secrète de votre clé privée, puis importera la clé privée RSA dans ce shell. Vous pouvez, bien sûr, remplacer la clé privée appropriée, si vous utilisez id_ecdsa ou id_dsa , par exemple.

.

.

Accès ssh (sans clés ssh)

Si vous avez des serveurs clients qui n'ont pas de clés ssh configurées, vous pouvez toujours utiliser Ansible avec votre utilisateur actuel et demander votre mot de passe utilisateur. Par exemple, nous pourrions vouloir utiliser le ping module pour vérifier que tous nos hôtes dans le db_servers groupe sont réactifs.

ansible db_servers -m ping --ask-pass

Cette commande demandera d'abord le mot de passe ssh de l'utilisateur actuel à utiliser pour accéder à tous les serveurs dans db_servers groupe avant d'exécuter le module sur chaque client.

Remarque :Cette commande nécessite que votre utilisateur existe sur chaque client, qu'il dispose d'un accès SSH et qu'il utilise le même mot de passe.

Aussi, le ping module n'est pas lié au ping ICMP qui teste la connectivité réseau. Son utilisation avec ansible La commande vérifie qu'un serveur client est accessible avec l'utilisateur indiqué et que le serveur client dispose d'une version de Python avec laquelle Ansible peut fonctionner. Le ping le module doit renvoyer un pong réponse en cas de réussite..

.

Accès ssh (avec mot de passe)

Les commandes Ansible par défaut supposent également que, en plus d'utiliser des clés ssh, vous utilisez sudo sans mot de passe. Si vous avez des serveurs clients qui nécessitent un mot de passe pour obtenir un accès sudo, vous pouvez utiliser des options supplémentaires pour devenir sudo et demander un mot de passe sudo. Ainsi, par exemple, pour redémarrer tous les serveurs dans les mailservers groupe en utilisant le nom d'utilisateur username .

ansible mailservers -a "/sbin/reboot" -u username --become --ask-become-pass

Le --become indique que l'utilisateur deviendra un utilisateur privilégié (sudo), et l'option --ask-become-pass L'option invite Ansible à demander le mot de passe pour devenir cet utilisateur privilégié avant d'exécuter la commande.

Le --become et --ask-become-pass les options sont des options plus récentes (à partir de la version 1.9 d'Ansible) destinées à remplacer l'ancien --sudo et --ask-sudo-pass (-K ), respectivement. Ces anciennes versions fonctionnent toujours. Le remplacement de sudo pour become élargit la portée de ces options pour inclure l'intégration avec des outils qui utilisent des moyens autres que sudo pour activer l'élévation des privilèges.

.

Quelques commandes CLI Ansible de base

Bien que la véritable puissance d'Ansible réside dans l'utilisation de playbooks, vous pouvez également exécuter le ansible commande pour effectuer une gestion rapide des clients pour les cas où il n'est pas logique de créer un playbook ou où vous pourriez avoir besoin de n'envoyer qu'une seule commande à un groupe d'appareils clients.

Le ansible la commande suit le modèle ansible [group] OPTIONS .
.

Exécuter les mises à jour Yum

Si, par exemple, vous souhaitez exécuter des mises à jour yum sur les serveurs de vos mailservers groupe, vous pouvez accomplir cette tâche avec la commande Ansible suivante :

ansible mailservers -m yum -a "name=* state=latest" --become

Cette commande met à jour tous les serveurs dans mailservers groupe avec le yum module (-m ). Le -a L'option indique un argument particulier entre guillemets - dans ce cas, la mise à jour de tous les packages installés (en utilisant le * joker) à leur dernier état.
.

Copier le fichier vers les clients

Vous pouvez utiliser Ansible pour distribuer un fichier à un groupe de serveurs clients.

ansible orlando -m copy -a "src=/home/scripts/foo.sh dest=/opt/scripts/foo.sh"

Cette commande invoque la copy module et indique le src (source) et dest (destination) entre guillemets pour les arguments. L'emplacement source par défaut est l'appareil sur lequel cette commande Ansible s'exécute et peut être absolu ou relatif. L'emplacement de destination est l'emplacement sur le périphérique client distant et doit toujours être absolu.

Vous pouvez également utiliser le copy module pour affiner davantage les attributs du fichier que vous copiez.

ansible orlando -m copy -a "src=/home/scripts/foo.sh dest=/opt/scripts/foo.sh owner=foo group=bar mode=0755"

Cette commande modifie en outre les autorisations de propriétaire, de groupe et de fichier du fichier sur chaque client dans orlando groupe.
.

Exécuter la commande Shell

Vous pouvez également exécuter un script sur chaque client avec le shell module.

ansible orlando -m shell -a '/opt/scripts/foo.sh >> /home/foo/bar.txt' 

Cette commande exécuterait le foo.sh script et rediriger sa sortie vers le /home/foo/bar.txt dossier. Notez les guillemets simples ici. Vous aurez besoin de guillemets simples au lieu de doubles pour pouvoir passer le >> opérateur au shell distant.
.

Un Ansible Amuse-Bouche

Il existe de nombreuses autres commandes et modules que vous pouvez utiliser, mais cet échantillon devrait fournir une bonne introduction à l'utilité d'Ansible si vous gérez même un petit nombre de serveurs. Si vous vous trouvez dans la position parfois peu enviable de devoir effectuer des tâches répétitives sur votre infrastructure de serveur, nous espérons que ces exemples vous ont donné un aperçu de la façon dont Ansible peut vous aider à travailler plus intelligemment (et plus efficacement !).

Assurez-vous de revenir avec nous à l'avenir pour plus d'articles sur l'administration du serveur et d'autres choses que vous pouvez faire avec Ansible. Atlantic.Net propose une large gamme de solutions d'hébergement VPS flexibles pour une petite start-up ou une entreprise bien établie.
.
.


Linux
  1. Premiers pas avec Zsh

  2. Démarrer avec ls

  3. Premiers pas avec PostgreSQL sous Linux

  4. Comment démarrer avec Juju?

  5. Premiers pas avec SSH sous Linux

Premiers pas avec les playbooks Ansible

Premiers pas avec les commandes ansibles ad hoc

Premiers pas avec le gestionnaire de paquets Nix

Premiers pas avec systemctl

Comment :démarrer avec Ubuntu 14.04 LTS avec LAMP

Comment :démarrer avec Ubuntu 14.04 LTS avec LEMP