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/151

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é 1 commentaire
30jan/154

Importer et exporter vos tableaux de bords de Kibana en ligne de commande

Posted by Fabien Arcellier

Kibana est une console visuelle extraordinaire. En quelques heures, vous pouvez créer un tableau de bord pour l'analyse de vos données. Lorsque j'expérimente, j'efface souvent le contenu du noeud elasticsearch pour relancer les imports logstash.
Cette opération efface tous les tableaux de bords personnalisés.

Kibana stocke la configuration de ces tableaux de bord directement sous forme de document dans Elasticsearch dans l'index kibana-int. Voici quelques requetes pour les manipuler.

Requete elasticsearch pour manipuler vos tableaux de bord

Requete avec curl pour voir l'ensemble des dashboards de Kibana :

curl http://localhost:9200/_search?q=dashboard:*&pretty

Requete avec curl pour exporter / sauvegarder un dashboard appellé "Custom"

curl http://localhost:9200/kibana-int/dashboard/Custom/_source > Custom.json

Requete avec curl pour supprimer le dashboard "Custom" :

curl -XDelete http://localhost:9200/kibana-int/dashboard/Custom

Requete avec curl pour creer un dashboard depuis le fichier json :

curl -XPOST --data-binary @Custom.json http://localhost:9200/kibana-int/dashboard/Custom

Exporter et importer vos tableaux de bords avec un script

Voici un script python pour l'exportation :

# python export-kibana-dashboards.py http://localhost:9200 > data/dashboards.json

import sys, urllib, json

if len(sys.argv) < 2 :
    print("usage :  python export-kibana-dashboards.py http://localhost:9200 > file.json")
    exit()

elasticsearch_url = sys.argv[1]
query_url = elasticsearch_url + "/_search?q=dashboard:*"
response = urllib.urlopen(query_url)
data = json.loads(response.read())
dashboards = data['hits']['hits']

print(json.dumps(dashboards, sort_keys=True, indent=4))

Voici le script pour réimporter votre fichier json

# python import-kibana-dashboards.py http://localhost:9200 < file.json

import sys, httplib, urllib2, json

if len(sys.argv) < 2 :
    print("usage :  python import-kibana-dashboards.py http://localhost:9200 < file.json")
    exit()

elasticsearch_url = sys.argv[1]
post_dashboard_url = elasticsearch_url + "/kibana-int/dashboard"

json_dashboards = sys.stdin.read()
dashboards = json.loads(json_dashboards)

for dashboard in dashboards:
    try:
        print("Importation de %s" % dashboard["_id"])
        data = json.dumps(dashboard['_source'])

        url = post_dashboard_url + "/" + urllib2.quote(dashboard["_id"])
        req = urllib2.Request(url, data)
        req.add_header('Content-Length', str(len(data)))
        req.add_header('Content-Type', 'application/octet-stream')
        res = urllib2.urlopen(req)
        print(res)
    except  httplib.BadStatusLine as e:
        print(e)
Remplis sous: Non classé 4 Commentaires
1août/140

Methode cascading en C# avec 2 methodes d’extension

Posted by Fabien Arcellier

Snippet C# qui vous permet d'utiliser du méthode cascading sur n'importe quel objet pour chaîner vos traitements.

Vous retrouvez ce code dans un Fiddle.

Remplis sous: Non classé Lire la suite
23juil/140

Getting started avec Vagrant

Posted by Fabien Arcellier

En tant que développeur, vous débutez beaucoup de projets. Certains sans lendemain, certains que vous souhaitez mener au bout. Chacun de ces projets peut avoir des spécificités d'environnement. Parfois un serveur apache qui tourne sur votre machine, parfois une machine virtuelle pour héberger votre projet (un linux avec la chaîne de compilation qui va bien, ...).

Avez-vous entendu parler de ces outils comme Chef, Puppet ou CfEngine qui permette de reproduire un environnement à la demande ? Vous vous êtes déjà dit, je parie, comment faire pareil pour mon poste de travail ?

Vous voulez à partir d'une ligne de commande que votre environnement soit prêt pour démarrer. Vous voulez que cet environnement soit propre. Je n’entends pas 4 versions de python qui tourne dessus, 50 librairies dont certaines vous avez oublié le nom, sans un serveur Apache qui héberge aussi 2 instances de PHP. Vous avez également 3 PC que vous utilisez fréquemment, vous voulez pouvoir travailler sur chacun d'eux.

Vagrant est un outil qui vous permettra de faire ça. A l'aide d'un fichier de configuration, vous pourrez réaliser 4 choses :

  • Avoir une machine virtuelle qui s'installe en quelques minutes
  • Monter un dossier partagé lié à votre environnement de travail (dans mon cas windows)
  • Pouvoir supprimer la machine virtuelle (ça prend de la place ces bêtes-là) et la remonter à la demande
  • Que ces recettes soient sauvegardés dans votre gestionnaire de source, prêt à être exécuté sur une autre machine

Vagrant

Je vous invite à me suivre pour un premier voyage. Je travaille sur un PC utilisant Windows (j'ai mes raisons ...) et je souhaite monter un environnement pour pouvoir exécuter en toute simplicité des scripts pythons.

Remplis sous: Non classé Lire la suite