Au fil des flows

28fév/150

Utiliser forward_agent avec Vagrant sous Windows

Posted by Fabien Arcellier

Je souhaitai aller plus loin avec Ansible. J'ai voulu émuler une infrastructure avec plus de machines. Je suis reparti d'un couple de VM dédié à la supervision applicative.

Supervision

La première machine utilise apache pour héberger une application web. Celle-ci envoie des statistiques d'usage en utilisant un agent StatsD vers la machine de supervision qui héberge une instance de Graphite.

Dans Ansible, j'ai un inventaire avec 2 hosts et 2 groupes. Je souhaite que ces machines soient déployés par ssh comme je le ferai sur l'infrastructure réel.

deploiement

Deployer depuis l'usine de deploiement

Pour vous connecter à votre hôte "Usine de déploiement", vous tapez depuis une console powershell :

vagrant ssh

Une fois sur la machine de déploiement, vous ne pouvez pas vous connecter sur les 2 autres machines par SSH. Celle-ci vous demande un mot de passe pour le compte vagrant.

Par défaut, sur les vm instanciés par vagrant, l'authentification par mot de passe est désactivé.

vagrant_password

Plusieurs solutions :

  • Activer l'authentification par mot de passe
  • Deployer une clé ssh sur la vm "Usine de déploiement" et ajouter les clés publiques sur les 2 autres machines
  • Utiliser le mode agent fowarding avec SSH

La première solution n'est pas recommandée. Pour qu'elle fonctionne, vous devrez avoir les mots de passes dans les fichiers d'inventaire de Ansible.
La seconde solution est peu pratique. Elle oblige à laisser une clé privée sur un serveur distant. Ce n'est pas recommandé.

Je trouve la 3ème solution bien plus élégante. Elle demande un peu de préparation sous Windows.

Utiliser le mode forward agent de ssh

Pour passer outre ce problème, vous devez avoir un ssh-agent qui tourne sur votre machine. Je ne connais pas de possibilité d'exécuter ssh-agent depuis Powershell. Vous allez devoir utiliser cygwin ou git-bash.

Ces 2 shells tournent bien avec le terminal ConEmu sous Windows.

Il vous suffit de taper ces 3 lignes de commandes :

eval `ssh-agent`
ssh-add
ssh-add ~/.vagrant.d/insecure_private_key

Quand vagrant crée une machine virtuelle, il emploie par défaut une clé ssh qui se trouve dans le dossier ~/.vagrant.d/insecure_private_key.

Pour éviter de les taper à chaque lancement, vous pouvez placer ces lignes dans un script .bashrc de votre dossier utilisateur.

A partir de là, quand vous taperez :

vagrant ssh

puis une fois sur votre vm :

ssh 192.168.33.11

Vous n'aurez pas besoin de vous authentifier. Il devient très simple d'effectuer votre déploiement à l'aide de Ansible.

Remplis sous: Non classé Aucun commentaire
27fév/157

Voir les logs d’ansible en continue sur Jenkins

Posted by Fabien Arcellier

Ansible vous permet de déployer élégamment votre infrastructure. Le déploiement d'un groupe de serveur prédictif d'un groupe de serveurs en une commande change la vie au quotidien.

Dans ce contexte, il est intéressant de pouvoir exécuter vos scripts ansible en un clique de souris. Jenkins permet de faire ça très simplement.

Voici la commande que j'ai tapé initialement :

ansible-playbook -i ansible/recette ansible/tomcat.yml

Problème : les logs de Ansible s'affichent à la fin de l'exécution. Pendant l'exécution de Jenkins, vous ne pouvez pas savoir à quelle étape vous en êtes.

Solution : Ansible est un programme python. Par défaut la sortie est bufferisée.
Pour la rendre non bufferisée, vous pouvez utiliser la variable d'environnemnent PYTHONUNBUFFERED.

export PYTHONUNBUFFERED=1
ansible-playbook -i ansible/recette ansible/tomcat.yml

Cet variable est l'équivalent d'invoquer python -u.

Remplis sous: Non classé 7 Commentaires