<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Contribution on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/contribution/</link><description>Recent content in Contribution on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Wed, 10 Oct 2018 12:15:12 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/contribution/index.xml" rel="self" type="application/rss+xml"/><item><title>Sortie d’Ansible 2.7 et ma première contribution</title><link>https://blog.zwindler.fr/2018/10/10/sortie-dansible-2-7-et-ma-premiere-contribution/</link><pubDate>Wed, 10 Oct 2018 12:15:12 +0000</pubDate><guid>https://blog.zwindler.fr/2018/10/10/sortie-dansible-2-7-et-ma-premiere-contribution/</guid><description>&lt;img src="https://blog.zwindler.fr/2018/10/ansible_logo.webp" alt="Featured image of post Sortie d’Ansible 2.7 et ma première contribution" /&gt;&lt;h2 id="sortie-dansible-27"&gt;Sortie d’Ansible 2.7
&lt;/h2&gt;&lt;p&gt;Hier soir, la dernière version d’Ansible (2.7) est sortie. Cette release s’est concentrée sur une amélioration de la performance et de la stabilité, même si de très nombreux modules ont fait leur apparition, comme à chaque nouvelle version.&lt;/p&gt;
&lt;h3 id="python"&gt;Python
&lt;/h3&gt;&lt;p&gt;Le support de Python 2.6 est abandonné, au profit de Python 2.7. Cela signifie que l’hôte qui exécutera le playbook devra disposer de Python 2.7 au minimum (même si Python 2.6 est toujours supporté sur la machine cible).&lt;/p&gt;
&lt;h3 id="écritures-concurrentes"&gt;Écritures concurrentes
&lt;/h3&gt;&lt;p&gt;Un problème auquel j’ai déjà eu affaire est la gestion des écritures concurrentes sur un même fichier (par exemple si plusieurs hôtes écrivent sur un même fichier distant ou alors un delegate_to). A priori il existe maintenant un « lock » pour éviter d’écraser les modifications. Il faudra que je teste pour voir si ça marche bien.&lt;/p&gt;
&lt;h3 id="performances-accrues-généralisation-du-ssh-pipelining-"&gt;Performances accrues, généralisation du SSH pipelining ?
&lt;/h3&gt;&lt;p&gt;La plus grosse modification, qui va nécessiter des tests approfondis, est la modification de la manière dont sont déclenchées les actions/modules sur les serveurs distants. Précédemment, les tasks nécessitaient 2 commandes SSH au lieu d’une maintenant. Effectivement, le temps d’exécution de playbooks contenant des actions simple mais très nombreuses pouvait être très long.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ansible-2.7 changes the Ansiballz strategy for running modules remotely so that invoking a module only needs to invoke python once per module on the remote machine instead of twice.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un gain de performance dans ce genre de cas où on passe plus de temps à lancer des commandes que les exécuter est forcément une bonne nouvelle. Je me demande si ce n’est pas simplement une activation « par défaut » de la variable d’environnement ANSIBLE_SSH_PIPELINING=1 (que j’utilise déjà dans ce genre de cas).&lt;/p&gt;
&lt;p&gt;A priori non &lt;a class="link" href="https://github.com/ansible/ansible/issues/36275" target="_blank" rel="noopener"
&gt;si j’en crois cette issue&lt;/a&gt;, mais pour l’instant je n’ai pas remarqué de différence significative sur mes playbooks les plus gourmands en temps d’exécution.&lt;/p&gt;
&lt;h3 id="module-reboot"&gt;Module reboot
&lt;/h3&gt;&lt;p&gt;A noter, la plupart des gens remontent l’arrivée d’un module « reboot » (et son équivalent « win_reboot ») qui redémarre une machine et ré-initie une connexion une fois que la machine a refait surface. Personnellement je n’utilise pas ce genre de fonctionnalité mais j’imagine que c’est une feature « nice to have » plutôt que d’utiliser le module « pause » ou la fonctionnalité « retry » en attendant que l’hôte refasse surface.&lt;/p&gt;
&lt;h2 id="les-nouveaux-modules"&gt;Les nouveaux modules
&lt;/h2&gt;&lt;p&gt;Je ne vais pas en faire la liste complète (disponible &lt;a class="link" href="https://github.com/ansible/ansible/tree/stable-2.7/changelogs" target="_blank" rel="noopener"
&gt;dans le changelog&lt;/a&gt;), mais cette version a visiblement été l’occasion pour les équipes de plusieurs cloud providers de se mettre en avant.&lt;/p&gt;
&lt;p&gt;On peut noter les équipes de Google Cloud comme grands vainqueurs avec 39 nouveaux modules. Ils sont suivi par Azure (+21, avec l’apport des bases de données et des webapps), Vultr (13), et 8 pour Scaleway.&lt;/p&gt;
&lt;p&gt;Tout ça m’intéresse beaucoup car, notamment pour Scaleway, de nombreux objets étaient encore indisponibles et il a fallut que j’écrive des scripts à la main pour curler l’API, ne serait ce que pour &lt;a class="link" href="https://docs.ansible.com/ansible/2.7/modules/scaleway_image_facts_module.html#scaleway-image-facts-module" target="_blank" rel="noopener"
&gt;récupérer les IDs des templates de VMs&lt;/a&gt; que je voulais utiliser (impossible à lister autrement).&lt;/p&gt;
&lt;p&gt;Avant :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl -X GET -H &amp;#34;X-Auth-Token: $SCW_API_KEY&amp;#34; -H &amp;#39;Content-Type: application/json&amp;#39; https://cp-par1.scaleway.com/images | jq -r &amp;#39;.images[] | select(.name|contains(&amp;#34;CentOS&amp;#34;)) | .id,.name,.arch,.modification_date&amp;#39;
37832f54-c18f-4338-a552-113e4302a236
CentOS 7.4
x86_64
2018-09-06T10:40:08.145552+00:00
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Maintenant, je peux sois l’exécuter à la main directement depuis Ansible, soit requêter le serveur Scaleway pour avoir une liste des images disponible directement dans mes playbooks :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible localhost -m scaleway_image_facts -a region=par1
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match &amp;#39;all&amp;#39;
localhost | SUCCESS =&amp;gt; {
&amp;#34;ansible_facts&amp;#34;: {
&amp;#34;scaleway_image_facts&amp;#34;: [
{
&amp;#34;arch&amp;#34;: &amp;#34;x86_64&amp;#34;,
&amp;#34;creation_date&amp;#34;: &amp;#34;2018-09-14T10:01:24.268850+00:00&amp;#34;,
&amp;#34;default_bootscript&amp;#34;: {
&amp;#34;architecture&amp;#34;: &amp;#34;x86_64&amp;#34;,
&amp;#34;bootcmdargs&amp;#34;: &amp;#34;LINUX_COMMON scaleway boot=local nbd.max_part=16&amp;#34;,
&amp;#34;default&amp;#34;: false,
&amp;#34;dtb&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;id&amp;#34;: &amp;#34;15fbd2f7-a0f9-412b-8502-6a44da8d98b8&amp;#34;,
[...]
- name: Gather Scaleway images facts 
scaleway_image_facts: 
region: par1
register: images_facts
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et tant qu’on est dans le genre module qui vient remplacer des trucs que je faisais à la mimine, on peut aussi citer &lt;a class="link" href="https://docs.ansible.com/ansible/2.7/modules/docker_swarm_module.html#docker-swarm-module" target="_blank" rel="noopener"
&gt;docker_swarm&lt;/a&gt; + &lt;a class="link" href="https://docs.ansible.com/ansible/2.7/modules/docker_swarm_service_module.html#docker-swarm-service-module" target="_blank" rel="noopener"
&gt;docker_swarm_service&lt;/a&gt; pour gérer un cluster docker Swarm (comme son nom l’indique), ou &lt;a class="link" href="https://docs.ansible.com/ansible/2.7/modules/k8s_facts_module.html#k8s-facts-module" target="_blank" rel="noopener"
&gt;k8s_facts&lt;/a&gt; pour récupérer des objets dans Kubernetes.&lt;/p&gt;
&lt;h2 id="et-ma-première-contribution-"&gt;Et ma première contribution !
&lt;/h2&gt;&lt;p&gt;Même si j’ai déjà contribué sur plusieurs projets open source (traductions du site de Shinken, petites contributions à plusieurs plugins Nagios et à XWiki, ouverture d’issues dans de nombreux projects open source), j’ai également résolu ma première issue sur un gros projet grâce à Ansible et l’équipe d’Azure.&lt;/p&gt;
&lt;p&gt;Il y a peu, Microsoft a mis à disposition sur Azure de machine virtuelle disposant gratuitement d’interface physique dédiées (non virtualisées donc) à 30 Gbps et avec une latence moindre (plus d’info sur &lt;a class="link" href="https://docs.microsoft.com/fr-fr/azure/virtual-network/create-vm-accelerated-networking-cli" target="_blank" rel="noopener"
&gt;la documentation officielle&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Comme il s’agissait d’un simple flag à ajouter dans l’API et que &lt;a class="link" href="https://github.com/ansible/ansible/issues/41218" target="_blank" rel="noopener"
&gt;l’issue avait été taguée en « easy fix » par les maintainer&lt;/a&gt;, j’ai sauté sur l’occasion et j’ai pris l’issue à mon compte.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/10/accelerated_network_ansible1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Au final, sur les 70 lignes de mon commit, il n’y a que 10 lignes de codes (le reste étant des tests et de la documentation, obligatoires pour toute soumission), mais je suis quand même content car ça marche bien ;)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/10/accelerated_network_ansible2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Champomy !!&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>