PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Yannig : Ecriture de filtre Ansible

mercredi 25 mai 2016 à 17:37

Écriture de filtre avec Ansible

Ansible est un merveilleux outils pour gérer la mise à jour de vos serveurs. Un gros avantage de ce produit et de permettre d'étendre ses capacités assez facilement à l'aide d'un mécanisme de plugin. Vous pourrez retrouver un petit article que j'avais écrit sur la notion de module à l'emplacement suivant : Écriture de module avec ansible.

Aujourd'hui, je vais vous présenter un autre mécanisme Ansible : les filtres.

Pour info, la notion de filtre vient du monde Jinja. Comme ce moteur est au coeur du fonctionnement d'Ansible, il est donc très facile d'utiliser les mêmes mécanismes chez ce dernier.

Dans ce qui va suivre, nous allons voir comment écrire un filtre spécifique et comment l'utiliser au sein d'Ansible.

Écriture du filtre

Avant toute chose, nous allons devoir écrire une fonction python qui prendra un argument (on peut en mettre plusieurs mais il faudra les rajouter à la suite du filtre entre parenthèse). Cet argument va contenir la chaîne en entrée à transformer. Ci-dessous un exemple de fonction permettant de formater la date du jour à l'aide d'une chaîne de caractère (un peu comme le ferait la commande Unix date) :


def strftime(string_format):
'''
Renvoie une chaîne formatée par strftime (ex : strftime('%Y') => 2016)
'''
return time.strftime(string_format, time.localtime())

Intégration dans Ansible

Rajoutons maintenant le nécessaire pour qu'Ansible puisse utiliser cette fonction :


# -*- coding: utf-8 -*-
# Filtre strftime

from __future__ import absolute_import
from ansible import errors

import time

def strftime(string_format):
'''
Renvoie une chaîne formatée par strftime (ex : strftime('%Y') => 2016)
'''
return time.strftime(string_format, time.localtime())

class FilterModule(object):
''' On renvoie tout ça dans un objet filtre '''

def filters(self):
return { 'strftime': strftime }

Prise en compte

Mettez tout ceci dans le fichier strftime.py (par exemple). Il ne nous reste plus qu'à déclarer l'emplacement du chemin des plugins custom dans le fichier /etc/ansible/ansible.cfg (ou sinon dans le fichier .ansible.cfg dans votre répertoire home) :


filter_plugins = /emplacement/de/mes/filtres/custom

Tout est prêt, nous allons pouvoir passer à l'utilisation du filtre.

Et maintenant, les tests !

Lançons maintenant un petit test pour vérifier que tout ceci fonctionne avec la date du jour par exemple :


ansible -m debug -a msg="{{'%Y%m%d'|strftime}}" localhost

localhost | SUCCESS => {
"msg": "20160525"
}

Rajoutons maintenant l'heure :


ansible -m debug -a msg="{{'%Y%m%d %H:%M'|strftime}}" localhost

localhost | SUCCESS => {
"msg": "20160525 11:06"
}

Ça semble plutôt bien marcher !

Le petit mot de la fin

Vous pouvez maintenant utiliser ce mécanisme où bon vous semblera (déclaration de variable, contenu des paramètres Ansible). Attention toutefois à ne pas oublier la déclaration du répertoire des filtres.

Voilà, ça sera tout pour aujourd'hui !

Gravatar de Yannig
Original post of Yannig.Votez pour ce billet sur Planet Libre.

Journal du hacker : Le Journal du hacker à Ubuntu Party Paris 16.04 les 28 et 29 mai 2016

mercredi 25 mai 2016 à 16:51

Le journal du hacker sera présent à Ubuntu Party Paris 16.04 ce week-end du 28 et 29 mai 2016 à la Cité des sciences et de l'industrie, de 11 à 18h au 30 Avenue Corentin Cariou, 75019 à Paris.

Le Journal du hacker sort de sa tanière pour sa première présence à un événement et va à la rencontre de ses membres et lecteurs à l'occasion de l'Ubuntu Party Paris et on espère vous y croiser ! N'hésitez pas à venir nous faire un petit coucou, réclamer la création de votre compte si ça n'est pas encore fait ou nous dire ce que vous pensez du Journal du hacker.

Nous remercions au passage chaudement l'équipe de Ubuntu Party Paris pour leur invitation et la mise à disposition du stand !

La cité des sciences et de l'industrie est accessible en métro par la ligne 7 station Porte de la villette et par les bus suivants : 139, 150, 152, T3b.

Au plaisir de vous rencontrer à Ubuntu Party Paris ! L'équipe du Journal du hacker

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Thuban : jquery, vanilla javascript, css et dontpanic

mercredi 25 mai 2016 à 10:56

Ces derniers jours, j'ai été obligé de coder en javascript. C'est une première pour moi. Jusque là, j'utilisais sans vergogne des bibliothèques qui requéraient jquery. Tout marchait bien, j'étais content.
Cependant, je dois héberger un site qui avait besoin de jquery. Soit je mettait jquery sur le serveur, ou bien j'utilisais les CDN aux dépens de la vie privée des visiteurs. Vous vous doutez que je n'ai pas choisi la seconde solution. La première était possible, mais c'est quand même une charge supplémentaire sur le serveur. Qui plus est, c'est une charge inutile, puisque tout, oui tout pouvait être réalisé en javascript simple.

J'ai pu remarque au passage que les bibliothèques utilisant jquery ne faisait pas tellement attention à l'optimisation du code, et appelaient une même fonctions un nombre incalculable de fois alors qu'il vaut mieux attendre que le visiteur ait finit de faire défiler la page avec de mettre à jour l'affichage.

J'avais donc ce code jquery, qui affichait dans un

le titre du paragraphe actuellement affiché (h1, h2, h3...) :
var timeout;
	if (timeout) {
		clearTimeout(timeout);
	}
	timeout = setTimeout(function() {
		$(window).on('scroll', function() {
			$('body').find(':header').each(function(){
				if($(window).scrollTop() >= $(this).offset().top) {
					var id = $(this).text();
				}
				$(".isread").text(id);
			});
		});
	}, 50);



Que j'ai pu modifier ainsi en javascript pur :

	var timeout_title;

	var headers = document.querySelectorAll("h1, h2, h3, h4, h5, h6");

	window.addEventListener('scroll', function(){
		clearTimeout(timeout_title);
		timeout_title = setTimeout(function(){
			for (var i =0; i < headers.length; i++) {
				if ( document.body.scrollTop + 50 >= headers[i].offsetTop ) {
					document.getElementsByClassName("isread")[0].innerHTML =
						headers[i].innerHTML;
				}
			}
		}, 100);
	});


Le nombre de lignes est quasiment le même, et c'est plus rapide!

J'ai donc creusé un peu plus cette histoire, pour en conclure qu'il vaut mieux faire du javascript pur que du jquery (du moins pour mes besoins). Il existe forcément des équivalents, puisque jquery est lui-même du javascript.

C'est pourquoi, suite à un gentil rapport de bug d'arpinux concernant dontpanic et un défaut dans les css, j'en ai profité pour retirer les appels à jquery dans le code de dontpanic.

J'avais besoin de faire des appels pour récupérer des données au format JSON :
$.getJSON("/_getinfos/{{movie_name}}/{{index}}",
                 function(data) {
                     $("#status").html(data.status);
                     $("#playlink").html(data.playlink);
                     $("#subtitles").html(data.subtitles);
                     $("#stop").html(data.stop);
                });



Qui donne sans jquery :
 var request = new XMLHttpRequest();
             request.open('GET', '/_getinfos/{{movie_name}}/{{index}}', true);
 
             request.onload = function() {
                 if (request.status >= 200 && request.status < 400) {
                     data = JSON.parse(request.responseText);
 					document.getElementById("status").innerHTML = data.status;
 					document.getElementById("playlink").innerHTML = data.playlink;
 					document.getElementById("subtitles").innerHTML = data.subtitles;
 					document.getElementById("stop").innerHTML = data.stop;
                 }
             }
            request.send();


C'est un chouilla plus long, et peut certainement être optimisé (vu que ce n'est pas mon truc le js). Cependant, ça ne méritait pas de charger jquery, au risque de ne pas utiliser les derniers correctifs de sécurité.

C'est plus propre, on se sent mieux :)

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Monitoring-FR : Meetup Paris Monitoring #6 : interview de Mathias Herberts de Cityzen Data pour « Not Your Father’s Monitoring »

mercredi 25 mai 2016 à 09:33

Le 6e Meetup Paris Monitoring a eu lieu le mercredi 18 mai et avait pour thème « la collecte, le stockage et la manipulation de métriques/séries temporelles ». Cet événement était sponsorisé par Logmatic.io et Ikoula.

Durant ce meetup, Mathias Herberts (@herberts), Co-fondateur et CTO (Chief Technology Officer) de Cityzen Data (@CityzenData sur Twitter) a fait une présentation intitulée « Not Your Father’s Monitoring ». Dans cette présentation, il a d’abord rappelé l’historique de la collecte de données temporelles puis a mis en perspective les manques de ces outils et les nouveaux enjeux auxquels les administrateurs systèmes et réseaux doivent faire face. L’un des outils répondants à ces nouveaux enjeux est Warp 10, plate-forme open-source éditée par Cityzen Data permettant la collecte et l’analyse de données temporelles géospatiales. La conférence était très intéressante car Mathias remettait en perspective les outils qu’il présentait notamment  :

Mathias Herbert

Mathias Herbert

Photo prise par Barbora Ballkova de Somone.

Vous pouvez télécharger directement les fichiers MP3 ou OGG pour une écoute offline en cliquant sur les icônes correspondantes.

mp3 mp3

 

Gravatar de Monitoring-FR
Original post of Monitoring-FR.Votez pour ce billet sur Planet Libre.

T. BRIOLET : openSUSE Leap 42.2 Alpha 1

mercredi 25 mai 2016 à 09:16

La premier version de développement de la prochaine openSUSE Leap est sortie, la 42.2 Alpha 1 !

Elle est téléchargeable ici : http://download.opensuse.org/distribution/leap/42.2/

C’est pour l’instant une version simplement basée sur la 42.1 avec quelques mises à jour qui servira de plateforme pour les développements à venir. Elle contient tout de même Qt 5.6 et le noyau 4.4 issus de SLE12SP2.

Leap-green

La sortie finale est prévue pour la première semaine de Novembre et une version de développement par mois devrait sortir d’ici là.

Pour rappel c’est vraiment une toute première version plutôt instable, ne l’installez que pour effectuer des tests.

Annonce dans la mailing list [en] : https://lists.opensuse.org/opensuse-factory/2016-05/msg00372.html

Syvolc

Gravatar de T. BRIOLET
Original post of T. BRIOLET.Votez pour ce billet sur Planet Libre.