<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Playbook on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/playbook/</link><description>Recent content in Playbook on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Thu, 21 Mar 2019 13:00:14 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/playbook/index.xml" rel="self" type="application/rss+xml"/><item><title>Déployer en 5 minutes un cluster Kubernetes sur ARM avec k3s et Ansible</title><link>https://blog.zwindler.fr/2019/03/21/deployer-en-5-minutes-un-cluster-kubernetes-sur-arm-avec-k3s-et-ansible/</link><pubDate>Thu, 21 Mar 2019 13:00:14 +0000</pubDate><guid>https://blog.zwindler.fr/2019/03/21/deployer-en-5-minutes-un-cluster-kubernetes-sur-arm-avec-k3s-et-ansible/</guid><description>&lt;img src="https://blog.zwindler.fr/2019/03/k3s_scaleway.webp" alt="Featured image of post Déployer en 5 minutes un cluster Kubernetes sur ARM avec k3s et Ansible" /&gt;&lt;h2 id="cest-quoi-k3s-"&gt;C’est quoi k3s ?
&lt;/h2&gt;&lt;p&gt;Il y a quelques jours, vous avez peut être vu passer dans vos fil d’actus &lt;strong&gt;k3s&lt;/strong&gt;, ce nouveau projet &lt;a class="link" href="https://k3s.io/" target="_blank" rel="noopener"
&gt;open sourcé par Rancher&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lightweight Kubernetes. 5 less than k8s.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il s’agit d’une version réduite de Kubernetes, sans pour autant être minimaliste, qui nous vante la possibilité de monter des clusters Kubernetes avec très peu de ressources nécessaires. On parle de moins de 512 Mo de RAM pour un master, encore moins pour un worker, tout dans un binaire de 40 Mo, support de &lt;strong&gt;armhf&lt;/strong&gt;, et &lt;strong&gt;arm64&lt;/strong&gt;, &amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Great for Edge, IoT, CI, ARM, and situations where a PhD in k8s clusterology is infeasible&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cerise sur le gâteau, comme tout est regroupé dans un seul et même binaire, l’installation est ultra simple et se résume en :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Récupérer un binaire&lt;/li&gt;
&lt;li&gt;Lancer le binaire sur le master&lt;/li&gt;
&lt;li&gt;Lancer le binaire sur le worker avec l’URL du master et un token&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mais-cest-génial-"&gt;Mais c’est génial !
&lt;/h2&gt;&lt;p&gt;Nécessairement, pour arriver à ça, il a fallut faire quelques concessions mais pour l’instant je ne les trouves pas très gênantes. Parmi les modifications notables, on retrouve :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suppression des features alpha, legacy et non standard&lt;/li&gt;
&lt;li&gt;Suppression de tous les add-on des cloud providers&lt;/li&gt;
&lt;li&gt;Remplacement de etcd3 par sqlite3 (même si etcd3 peut être toujours être utilisé)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="jen-veux-un-"&gt;J’en veux un !
&lt;/h2&gt;&lt;p&gt;Autant dire que pas mal de bidouilleurs du dimanche se sont jetés dessus.&lt;/p&gt;
&lt;p&gt;Le premier exemple qui vient à l’esprit est de monter un cluster Kubernetes sur Raspberry pi. Nombre de personnes ont déjà installé Docker sur un raspberry qui traînait dans un tiroir (moi compris), et le nombre d’articles avec Docker Swarm sur plusieurs Raspberry pullule sur le web.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2016/09/05/geekerie-du-week-end-installer-docker-sur-un-raspberry-pi/" &gt;Geekerie du week end : installer Docker sur un Raspberry Pi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout ça c’est très bien mais jusqu’à présent, il était difficile d’installer Kubernetes sur ce genre de machines, assez limités en CPU/RAM. Du coup, vous vous en doutez, je ne suis pas le premier à parler de ça.&lt;/p&gt;
&lt;p&gt;Vincent RABAT aka &lt;strong&gt;itwars&lt;/strong&gt; (que vous connaissez sûrement si vous écumez les meetups sur Bordeaux) m’a coiffé au poteau en &lt;a class="link" href="https://github.com/itwars/k3s-ansible" target="_blank" rel="noopener"
&gt;releasant un playbook Ansible pour installer k3s&lt;/a&gt;, et notamment sur un Raspberry Pi (mais pas que).&lt;/p&gt;
&lt;p&gt;A charge de revanche, Vincent ;-).&lt;/p&gt;
&lt;h2 id="un-peu-différent"&gt;Un peu différent
&lt;/h2&gt;&lt;p&gt;Du coup, pour me démarquer, je vous propose aujourd’hui quelque chose d’un peu différent. N’ayant pas suffisament de raspberry sous la main, j’ai voulu faire un PoC de k3s en me basant sur des machines ARM créées chez un cloud provider.&lt;/p&gt;
&lt;p&gt;L’idée étant que si ça marche sur des machines de faible puissance en ARM, ça marchera partout (x64, raspberry, etc).&lt;/p&gt;
&lt;p&gt;Ça fait plusieurs fois que j’utilise &lt;a class="link" href="https://www.scaleway.com/" target="_blank" rel="noopener"
&gt;Scaleway&lt;/a&gt; comme hébergeur pour des petits projets, et en particulier pour déployer rapidement des machines car leur API est pas trop mal fichues et surtout ils disposent de modules Ansible très bien fait, notamment avec la feature « inventaire dynamique », ce que beaucoup ne font pas.&lt;/p&gt;
&lt;p&gt;Pour ceux que ça intéresse, mon talk sur BDX.IO était basé sur le même principe :&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=WPRE1_f0pyg" target="_blank" rel="noopener"
&gt;https://www.youtube.com/watch?v=WPRE1_f0pyg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans ce tuto, je vais donc vous montrer comment en quelque commande, monter un cluster k3s sur des machines ARM créées à la volée chez Scaleway, le tout avec Ansible (vous l’aurez compris).&lt;/p&gt;
&lt;h2 id="quelques-prérequis"&gt;Quelques prérequis
&lt;/h2&gt;&lt;p&gt;La première chose à faire est de cloner sur votre machine les playbooks Ansible que j’ai mis à disposition sur Github à l’adresse suivante : &lt;a class="link" href="https://github.com/zwindler/ansible-scaleway-k3s" target="_blank" rel="noopener"
&gt;github.com/zwindler/ansible-scaleway-k3s&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour réaliser ce tuto, je pars du principe que vous avec déjà un compte sur Scaleway, que vous avez un clé SSH qu’on déposera à la racine du projet, appelée &lt;strong&gt;admin.pub&lt;/strong&gt; (c’est original).&lt;/p&gt;
&lt;p&gt;Il faudra également installer les package &lt;strong&gt;pipy&lt;/strong&gt; suivant sur la machine locale :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip install jinja2 PyYAML paramiko cryptography packaging
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, vous devrez installer Ansible depuis les sources (&amp;gt;= 2.8devel) et éventuellement le binaire &lt;strong&gt;jq&lt;/strong&gt; pour requêter dans les output JSON (ça c’est juste pour se faciliter la vie)&lt;/p&gt;
&lt;p&gt;Dans la console Scaleway, vous devrez créer un token sur le site de Scaleway pour les accès distants et le stocker dans un fichier &lt;strong&gt;scaleway_token&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export SCW_API_KEY=&amp;#39;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et enfin sourcer le fichier pour avoir la variable dans votre environnement&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;source scaleway_token
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="ok-on-est-prêt"&gt;OK, on est prêt
&lt;/h2&gt;&lt;p&gt;La première étape de cette procédure va être de générer des instances ARM pour héberger le master et le worker Kubernetes. Pour ça, le playbook Ansible &lt;strong&gt;create_arm_vms.yaml&lt;/strong&gt; va :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;récupérer l’ID d’organisation du compte Scaleway&lt;/li&gt;
&lt;li&gt;récupérer un ID d’image compatible debian Stretch&lt;/li&gt;
&lt;li&gt;ajouter si nécessaire la clé SSH de l’admin&lt;/li&gt;
&lt;li&gt;créer autant de machines que nécessaire&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On lance la commande suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook create_arm_vms_scaleway.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ET C’EST TOUT !&lt;/p&gt;
&lt;p&gt;Normalement en 2 minutes, vous devriez avoir 2 instances ARM sur le datacenter de Paris (par1).&lt;/p&gt;
&lt;p&gt;A noter, il se peut qu’elles ne soient pas accessibles tout de suite en SSH. J’adapterai peut être le playbook pour qu’il ne rende pas la main tant que les machines ne sont pas accessibles, et qu’on enchaîne automatiquement sur l’étape suivante (TODO).&lt;/p&gt;
&lt;h2 id="inventaire-automatique"&gt;Inventaire automatique
&lt;/h2&gt;&lt;p&gt;Je le disais plus haut, la grande force de Scaleway avec Ansible est le fait qu’ils ont fait l’effort de coder &lt;strong&gt;l’inventaire dynamique&lt;/strong&gt;. Vous n’avez pas besoin de renseigner à la main les IPs des instances que vous venez de créer dans un fichier ansible/hosts. Grâce à l’API, la découverte se fait automatiquement. On va dont pouvoir enchaîner sur la suite directement.&lt;/p&gt;
&lt;p&gt;De base, voici le contenu de mon fichier d’inventaire (inventory.yml) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;plugin: scaleway
regions:
- par1
tags:
- k3smaster
- k3sworker
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Maintenant que les machines sont UP, on peut vérifier ce que nous renvoie Scaleway avec la commande &lt;strong&gt;ansible-inventory&lt;/strong&gt;. Ça devrait ressembler à ça :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-inventory --list -i inventory.yml
{
&amp;#34;_meta&amp;#34;: {
&amp;#34;hostvars&amp;#34;: {
&amp;#34;x.x.x.x&amp;#34;: {
&amp;#34;arch&amp;#34;: &amp;#34;arm64&amp;#34;,
&amp;#34;commercial_type&amp;#34;: &amp;#34;ARM64-2GB&amp;#34;,
&amp;#34;hostname&amp;#34;: &amp;#34;k3smaster1&amp;#34;,
[...]
&amp;#34;k3sworker&amp;#34;: {
&amp;#34;hosts&amp;#34;: [
&amp;#34;x.x.x.x&amp;#34;,
&amp;#34;y.y.y.y&amp;#34;,
&amp;#34;z.z.z.z&amp;#34;
]
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="ssh-fingerprints"&gt;SSH fingerprints
&lt;/h2&gt;&lt;p&gt;Une étape qui est souvent fastidieuse, surtout quand on ajoute beaucoup de serveur, est l’étape de vérification de l&amp;rsquo;empreinte SSH des nouveaux serveurs lors de la première connexion. Cette authentification est très importante et il &lt;b&gt;n’est pas du tout conseillé&lt;/b&gt; (comme je le vois parfois) d’ajouter l’option &lt;strong&gt;ANSIBLE_HOST_KEY_CHECKING=False&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ici, je vous propose de scanner automatiquement &lt;em&gt;la première fois&lt;/em&gt; l&amp;rsquo;empreinte, et l’ajouter dans votre known_hosts. Ainsi, si l&amp;rsquo;empreinte change en cours de route, vous serez prévenus. Cependant, ce n’est à utiliser que dans le cas de notre bidouille, pas en production.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-inventory --list -i inventory.yml | jq -r &amp;#39;.k3smaster.hosts | .[]&amp;#39; | xargs ssh-keyscan &amp;gt;&amp;gt; ~/.ssh/known_hosts
ansible-inventory --list -i inventory.yml | jq -r &amp;#39;.k3sworker.hosts | .[]&amp;#39; | xargs ssh-keyscan &amp;gt;&amp;gt; ~/.ssh/known_hosts
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vous pouvez maintenant ajouter votre clé SSH dans le ssh-agent, et vérifier qu’on vous pouvez vous connecter à tous les serveurs via Ansible :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;eval `ssh-agent`
ssh-add myprivate.key
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="préparation-du-serveur"&gt;Préparation du serveur
&lt;/h2&gt;&lt;p&gt;C’était facile, non ?&lt;/p&gt;
&lt;p&gt;Et bien la suite l’est encore plus, à l’exception de cette petite subtilité/piège =&amp;gt; Il se trouve que l’image ARM par défaut proposée par Scaleway ne dispose ni de python ni de sudo. Pour faire du Ansible, c’est très très handicapant.&lt;/p&gt;
&lt;p&gt;J’ai donc écris un petit playbook, à n’exécuter la première fois, qui installe les prérequis non présents sur l’image de base (&lt;strong&gt;python&lt;/strong&gt; et &lt;strong&gt;sudo&lt;/strong&gt;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root install_prerequisites_scaleway.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si vous n’êtes pas sur ce genre de machines, vous n’aurez pas à faire cette étapes.&lt;/p&gt;
&lt;p&gt;Maintenant qu’on a des machines avec python et sudo, on peut installer k3s normalement avec Ansible :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root install_k3s_scaleway.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois de plus : ET C’EST TOUT !&lt;/p&gt;
&lt;p&gt;Le cluster est maintenant opérationnel. Les serveurs ont Kubernetes installé et fonctionnel. Le ou les workers ont rejoint le master et font parti d’un même cluster. Un Ingress controller Treafik est créé, on peut jouer dessus directement :-)&lt;/p&gt;
&lt;h2 id="bonus--accéder-au-cluster"&gt;Bonus : accéder au cluster
&lt;/h2&gt;&lt;p&gt;Bon je vous ai un peu feinté.&lt;/p&gt;
&lt;p&gt;Certes, on peut se connecter en SSH sur le master et le piloter avec les commandes &lt;strong&gt;kubectl&lt;/strong&gt; classique (mais il faut rajouter k3s devant car le binaire kubectl est intégré à k3s). Mais c’est quand même plus simple si on peut y accéder à distance, depuis votre machine locale.&lt;/p&gt;
&lt;p&gt;Là encore, j’ai donc fais un petit playbook qui va aspirer la configuration &lt;strong&gt;kubectl&lt;/strong&gt; et la coller dans le fichier &lt;strong&gt;~/.kube/config.k3smaster&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root configure_kubeconfig.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, vous devriez pouvoir tester votre nouveau cluster depuis votre PC :-)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd
kubectl --kubeconfig=.kube/config.k3smaster get nodes
NAME STATUS ROLES AGE VERSION
k3smaster1 Ready &amp;lt;none&amp;gt; 2d v1.13.3-k3s.6
k3sworker1 Ready &amp;lt;none&amp;gt; 2d v1.13.3-k3s.6
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Enjoy !!!&lt;/p&gt;</description></item><item><title>Installation xwiki 10.6.1 via un playbook Ansible</title><link>https://blog.zwindler.fr/2018/09/05/installation-xwiki-10-6-via-un-playbook-ansible/</link><pubDate>Wed, 05 Sep 2018 11:45:00 +0000</pubDate><guid>https://blog.zwindler.fr/2018/09/05/installation-xwiki-10-6-via-un-playbook-ansible/</guid><description>&lt;img src="https://blog.zwindler.fr/2018/09/xwiki_ansible.webp" alt="Featured image of post Installation xwiki 10.6.1 via un playbook Ansible" /&gt;&lt;h2 id="ansible--xwiki"&gt;Ansible + XWiki
&lt;/h2&gt;&lt;p&gt;Je sais ce que vous vous dites :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ça fait longtemps que zwindler n’a pas écrit un article sur Ansible ou XWiki !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Non ? Vous ne vous dites pas ça ? Bon tant pis c’est pas grave. Aujourd’hui, je rédige ENFIN l’article pour parler d’un playbook que j’ai déjà rédigé il y a presque un an déjà (et mis à jour et déployé de nombreuses fois). C’est dire si j’ai du retard dans les articles du blog&amp;hellip;&lt;/p&gt;
&lt;h2 id="petit-rappel-des-épisodes-précédents"&gt;Petit rappel des épisodes précédents
&lt;/h2&gt;&lt;p&gt;J’ai déjà rédigé de manière extensive sur XWiki qui est un belle solution open source de gestion de la connaissance. Parmi les articles les plus susceptibles d’intéresser, il y a déjà :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2016/09/15/installer-xwiki-8-2-1-avec-docker-compose-en-2-lignes-de-commandes/" &gt;Installer facilement XWiki en 2 lignes de commandes avec Docker compose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2016/09/12/migration-mediawiki-vers-xwiki/" &gt;Tutoriel de migration d’un Mediawiki vers XWiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/10/24/tutoriel-xwiki-ma-premier-appli-stateful-sur-kubernetes/" &gt;Déploiement d’une application Stateful dans Kubernetes par l’exemple (XWiki + PostgreSQL)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2016/03/12/parametres-caches-de-xwiki-taille/" &gt;Résoudre les erreurs de type « Fichier trop gros » lors de l’import d’un fichier dans XWiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il y en a plein d’autre (&lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=xwiki" &gt;voir ici&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="et-ansible-"&gt;Et Ansible ?
&lt;/h2&gt;&lt;p&gt;Et bien oui. Je vous rabâche aussi les oreilles avec Ansible, l’Infrastructure as Code, et l’Idempotence. (Là encore, &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=ansible" &gt;il y en a plein&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Alors pourquoi pas un playbook Ansible pour automatiser l’installation de XWiki, si vous n’avez pas de cluster Kubernetes sous la main et que vous êtes un Gaulois réfractaire à Docker ?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/09/gaulois.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="ya-quoi-dans-ton-playbook-"&gt;Ya quoi dans ton playbook ?
&lt;/h2&gt;&lt;p&gt;Trêve de suspense, les sources sont disponibles sur &lt;a class="link" href="https://github.com/zwindler/ansible-deploy-xwiki-tomcat-postgresql" target="_blank" rel="noopener"
&gt;Github à cette adresse&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ce playbook a été testé pour des RHEL/CentOS 7, en particulier de la version 7.2 jusqu’à 7.4. Une installation de RHEL/CentOS en mode minimale, même sans environnement graphique, devrait être suffisante. Je l’ai faite tourner en production sur des environnements Desktop dans des VMs, mais aussi en Minimal sur un container LXC dans Proxmox VE sans aucun souci.&lt;/p&gt;
&lt;p&gt;L’installation n’utilise pas les serveurs web et de bases de données par « défaut » (MySQL), mais Tomcat 8 et PostgreSQL. Pour la version de Tomcat, c’est une version très particulière qu’il faut utiliser car des bugs ont étés introduits dans une version, puis RE-introduits quelques mois plus tard. Vous pouvez modifier la version par défaut qui est une variables de mon playbook (8.5.32) si elle ne vous convient pas. Les instructions d’installation se basent sur &lt;a class="link" href="https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Installation/InstallationWAR/InstallationTomcat/" target="_blank" rel="noopener"
&gt;la documentation officielle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/09/xwiki_warning.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- tomcat_version: 8.5.32
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vous pouvez également modifier la version de XWiki directement dans le playbook (c’est une variable là aussi) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- xwiki_version: &amp;#34;10.6.1&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A noter, les vielles versions de XWiki n’étaient pas hébergées sur le même dépôt, qui a changé récemment, d’où les deux URLs dans le playbook.&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;On va utiliser git pour récupérer le playbook et ansible (version de l’OS, rien d’exotique).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;yum install ansible git
git clone https://github.com/zwindler/ansible-deploy-xwiki-tomcat-postgresql
cd ansible-deploy-xwiki-tomcat-postgresql
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="quand-est-ce-quon-installe-xwiki-"&gt;Quand est ce qu’on installe XWiki ?
&lt;/h2&gt;&lt;p&gt;Maintenant !&lt;/p&gt;
&lt;p&gt;Sur un poste qui dispose de git et Ansible :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -l localhost ansible-deploy-xwiki-tomcat-postgresql.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le playbook devrait vous prompter pour un mot de passe pour l’utilisateur de base de données PostgreSQL, n’hésitez pas à mettre quelque chose de complexe. Vous ne devriez pas en avoir besoin.&lt;/p&gt;
&lt;p&gt;Si vous avez une erreur qui vous dit que localhost est ignoré, vous pouvez l’ajouter à votre fichier d’inventaire global : /etc/ansible/hosts&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo vim /etc/ansible/hosts
[local]
localhost ansible_connection=local
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et Paf ! Vous avez un XWiki installé, disponible à l’adresse &lt;code&gt;http://@IP:8080/&lt;/code&gt;. Il n’y a plus qu’à le configurer :)&lt;/p&gt;</description></item><item><title>Votre première VM dans Azure… déployée avec Ansible bien sûr !</title><link>https://blog.zwindler.fr/2018/08/07/premiere-vm-dans-azure-avec-ansible-bien-sur/</link><pubDate>Tue, 07 Aug 2018 11:45:22 +0000</pubDate><guid>https://blog.zwindler.fr/2018/08/07/premiere-vm-dans-azure-avec-ansible-bien-sur/</guid><description>&lt;img src="https://blog.zwindler.fr/2018/06/azure.webp" alt="Featured image of post Votre première VM dans Azure… déployée avec Ansible bien sûr !" /&gt;&lt;h2 id="mais-tu-nas-pas-déjà-fais-un-article-sur-ansible-et-des-vms-"&gt;Mais tu n’as pas déjà fais un article sur Ansible et des VMs ?
&lt;/h2&gt;&lt;p&gt;Si vous me suivez depuis quelques temps, vous savez que j’apprécie particulièrement Ansible. J’ai déjà écris &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=ansible" &gt;plusieurs articles sur le sujet&lt;/a&gt;, ainsi que de nombreux playbooks que j’ai mis à votre disposition sur &lt;a class="link" href="https://github.com/zwindler?utf8=%E2%9C%93&amp;amp;tab=repositories&amp;amp;q=ansible&amp;amp;type=&amp;amp;language=" target="_blank" rel="noopener"
&gt;mon compte github.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un des articles qui intéresse le plus les lecteurs du blogs est un article en deux parties (&lt;a class="link" href="https://blog.zwindler.fr/2017/06/20/deployer-machines-virtuelles-ansible-vmware/" &gt;part1&lt;/a&gt; &lt;a class="link" href="https://blog.zwindler.fr/2017/11/14/deployer-vm-vmware-ansible-part-2/" &gt;part2&lt;/a&gt;) qui détaille comment déployer des machines virtuelles sur une architecture VMware vSphere avec Ansible. J’en ai d’ailleurs fait une version en anglais également qui attire pas mal de monde aussi ;-).&lt;/p&gt;
&lt;p&gt;Du coup, maintenant que je me suis attaqué aux principaux clouds providers (AWS, GCP et Azure), il était grand temps de faire un article sur cette partie également !&lt;/p&gt;
&lt;p&gt;Comme d’autres outils d’automatisation, Ansible fait la part belle aux intégrations cloud. Je vous laisse jeter un oeil à la liste des modules Ansible disponibles pour le cloud :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.ansible.com/ansible/2.9/modules/list_of_cloud_modules.html" target="_blank" rel="noopener"
&gt;docs.ansible.com/ansible/2.9/modules/list_of_cloud_modules.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et c’est particulièrement vrai pour Azure, dont l’équipe dédiée chez Microsoft est assez réactive et ajoute des features de manière très régulière (on aura l’occasion d’y revenir dans un prochain article, #teasing).&lt;/p&gt;
&lt;h2 id="les-prérequis"&gt;Les prérequis
&lt;/h2&gt;&lt;p&gt;Finalement, déployer un VM dans Azure, c’est presque pareil que comme déployer une VM dans VMware. On a des prérequis, une liste de paramètres à renseigner et pouf, on va poper une VM.&lt;/p&gt;
&lt;p&gt;Bon, en vrai, ce n’est pas aussi trivial : si pour VMware, on se contentait d’une API python relativement simple à installer avec &lt;strong&gt;pip&lt;/strong&gt; et d’un mot de passe, sur Azure, il va falloir trimer un poil plus.&lt;/p&gt;
&lt;p&gt;Deux ressources nous donnent la marche à suivre pour configurer notre poste :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/fr-fr/azure/developer/ansible/overview" target="_blank" rel="noopener"
&gt;Le guide de Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.microsoft.com/fr-fr/azure/ansible/ansible-overview" target="_blank" rel="noopener"
&gt;Le guide d’Ansible&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="installer"&gt;Installer
&lt;/h3&gt;&lt;p&gt;Sur une machine mint/debian/ubuntu, récupérer les modules python nécessaires :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt install python-pip ansible
pip install setuptools wheel
pip install ansible[azure]
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="configurer"&gt;Configurer
&lt;/h3&gt;&lt;p&gt;Pour déployer des VMs sur Azure, il faut&amp;hellip; un compte sur Azure !&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Thanks, captain obvious.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bon, si jamais vous voulez essayer, sachez que vous pouvez vous créer un compte gratuit avec 200$ de crédit offert, mais seulement valable 30 jours. C’est hyper radin de leur part, là où un GCP offre 300$ pendant 1 an, ce qui offre largement plus de temps pour tester.&lt;/p&gt;
&lt;p&gt;Pour ouvrir le compte, il faut simplement aller à &lt;a class="link" href="https://azure.microsoft.com/fr-fr/free/search/?&amp;amp;WT.srch=1&amp;amp;wt.mc_id=AID719808_SEM_Xu5DFmXy&amp;amp;gclid=Cj0KCQjwv-DaBRCcARIsAI9sba9FHepWuC6mzBDlrT2LqPIAQzFYrCdyjTC72M2QqEtYRd6GXXoyooQaAhYsEALw_wcB&amp;amp;dclid=COf_zsaAutwCFY1h0wodDDcOqg" target="_blank" rel="noopener"
&gt;cette URL&lt;/a&gt; et renseigner &lt;strong&gt;une carte bancaire&lt;/strong&gt;. Oui je sais, j’ai flippé moi aussi.&lt;/p&gt;
&lt;p&gt;Normalement, ils ne vous prélèveront pas sans vous prévenir, c’est simplement pour éviter les bots. Personnellement je n’ai pas eu de problèmes mais je ne peux rien garantir (même si je pense que ça se saurait s’il y avait eu des soucis de ce côté là).&lt;/p&gt;
&lt;p&gt;Une fois le compte créé, on va générer les fichiers de configuration pour Azure. Le plus simple pour le faire, c’est d’utiliser la commande « az login » (mais du coup il faut &lt;a class="link" href="https://docs.microsoft.com/fr-fr/cli/azure/install-azure-cli?view=azure-cli-latest" target="_blank" rel="noopener"
&gt;installer az cli&lt;/a&gt; en plus).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;az login
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code CCHMTROLL to authenticate.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/08/azcli.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Vous devriez avoir un dossier .azure dans votre homedir&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ll .azure
total 8
drwxrwxrwx 1 zwindler zwindler 512 Aug 4 17:00 ./
drwxr-xr-x 1 zwindler zwindler 512 Aug 4 16:56 ../
-rw------- 1 zwindler zwindler 7124 Aug 4 17:00 accessTokens.json
-rw-rw-rw- 1 zwindler zwindler 5 Aug 4 16:56 az.json
-rw-rw-rw- 1 zwindler zwindler 5 Aug 4 16:56 az.sess
-rw-rw-rw- 1 zwindler zwindler 333 Aug 4 17:00 azureProfile.json
-rw-rw-rw- 1 zwindler zwindler 66 Aug 4 17:00 clouds.config
-rw------- 1 zwindler zwindler 27 Aug 4 16:56 config
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="et-donc-on-la-déploie-sur-azure-cette-vm-"&gt;Et donc, on la déploie sur Azure, cette VM ?
&lt;/h2&gt;&lt;p&gt;Maintenant que notre poste est configuré, ça redeviens simple. Ouf !&lt;/p&gt;
&lt;p&gt;Le module à invoquer dans notre playbook est &lt;strong&gt;azure_rm_virtualmachine&lt;/strong&gt;, dont la documentation est disponible à l’adresse suivante :&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.ansible.com/ansible/latest/modules/azure_rm_virtualmachine_module.html#azure-rm-virtualmachine-module" target="_blank" rel="noopener"
&gt;https://docs.ansible.com/ansible/latest/modules/azure_rm_virtualmachine_module.html#azure-rm-virtualmachine-module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voici un des exemples donnés dans la documentation du module :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- name: Create a VM with managed disk
azure_rm_virtualmachine:
resource_group: Testing
name: testvm001
vm_size: Standard_D4
managed_disk_type: Standard_LRS
admin_username: adminUser
ssh_public_keys:
- path: /home/adminUser/.ssh/authorized_keys
key_data: &amp;lt; insert your ssh public key here... &amp;gt;
image:
offer: CoreOS
publisher: CoreOS
sku: Stable
version: latest
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;La plupart des options que je vous met plus haut sont obligatoires. Il y en a beaucoup d’autre, mais celles ci sont un minimum. Pour expliquer un peu de quoi il s’agit, voici une petite traduction :&lt;/p&gt;
&lt;p&gt;&lt;u&gt;resource_group&lt;/u&gt;&lt;br&gt;
Sur Azure, il existe plusieurs entités logiques permettant de segmenter les ressources entre elles. La souscription (plus haut niveau de segmentation, utile au niveau billing) et les &lt;strong&gt;resources groups&lt;/strong&gt;. On peut donc avoir plusieurs resource groups dans une souscription.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;name&lt;/u&gt;&lt;br&gt;
Le nom de la ressource, telle qu’elle apparaîtra dans votre portail Azure. Pas plus important que ça.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;vm_size&lt;/u&gt;&lt;br&gt;
Là on rentre dans le vif du sujet ; il s’agit de la taille de la VM (en terme de nombre de CPU et de Go de RAM) que va avoir votre VM. Un guide des tailles (sans le billing) est disponible &lt;a class="link" href="https://docs.microsoft.com/fr-fr/azure/virtual-machines/windows/sizes-general" target="_blank" rel="noopener"
&gt;à l’adresse suivante&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;managed_disk_type&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Pour faire simple, est ce que votre disque sera sur des baies SSD ou sur des baies mixant SSD et HDD classiques. On a assez peu d’information sur la façon dont sont stockées les données, au delà d’un nombre d’IOPS qui sera d’autant plus important que vous aurez réservé d’espace disque. Par exemple, un disque Premium de 128 Go, on aura droit à 500 IOPS et 100Mo/s max. Si vous passez au delà (de 129 à 256), vous aurez droit à 1100 IOPS et 125 Mo/s.&lt;/p&gt;
&lt;p&gt;Quelques infos quand même :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.microsoft.com/fr-fr/azure/virtual-machines/windows/premium-storage" target="_blank" rel="noopener"
&gt;docs.microsoft.com/fr-fr/azure/virtual-machines/windows/premium-storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.microsoft.com/fr-fr/azure/virtual-machines/windows/standard-storage" target="_blank" rel="noopener"
&gt;docs.microsoft.com/fr-fr/azure/virtual-machines/windows/standard-storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je vois vos petits yeux pétiller de malice.&lt;/p&gt;
&lt;p&gt;Vous vous dites « ahah, je vais les feinter, me payer un disque de 129 Go pour avoir les perfs d’un disque de 256 pour à peine plus qu’un disque de 128 Go ».&lt;/p&gt;
&lt;p&gt;Et bien non, ils ne sont pas fous, vous payerez pour un disque de 256 même si vous ne demandez que 129 (et même si vous n’utilisez 1 Go dedans).&lt;/p&gt;
&lt;p&gt;&lt;u&gt;admin_username &amp;amp; ssh_public_keys&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Je ne vais pas vous faire l’affront de détailler ça. Il faut rentrer un utilisateur, un path pour la clé SSH et le contenu de votre clé publique.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;image&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Sur azure, vous avez accès à un magasin pré configuré d’images de VMs.&lt;/p&gt;
&lt;p&gt;Si on veut un Ubuntu 16.04, on mettra :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;image:
offer: UbuntuServer
publisher: Canonical
sku: &amp;#39;16.04.0-LTS&amp;#39;
version: latest
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pour un CentOS 7.4 :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;image:
offer: CentOS
publisher: OpenLogic
sku: &amp;#39;7.4&amp;#39;
version: latest
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="toujours-plus"&gt;Toujours plus
&lt;/h2&gt;&lt;p&gt;Alors OK, avoir un bout de doc qui explique comment déployer une VM sur Azure, c’est chouette. Mais est ce qu’on pourrait pas faire mieux ?&lt;/p&gt;
&lt;p&gt;Et oui, bien sûr ! Car en fait, dans Azure, on ne va pas simplement pouvoir déployer notre VM comme ça et espérer que ça marche.&lt;/p&gt;
&lt;p&gt;Je l’ai déjà dis, il existe des ressources groups, dans lequel toutes vos ressources doivent être. On va devoir le créer. Mais il va aussi nous falloir une carte réseau, qui aura une adresse IP qui elle même proviendra d’un réseau virtuel, qui auront leur propres règles de sécurité (genre de firewalling basique). Et bien sûr, tout ça, c’est des objets à créer (à la main :-( &amp;hellip; ou pas) !&lt;/p&gt;
&lt;p&gt;Mais comme je suis sympa, je vais vous donner un playbook clé en main qui fait tout ça pour vous ;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;---
- name: &amp;#34;Create Azure resources&amp;#34;
connection: local
hosts: all
vars_prompt:
- name: &amp;#34;location&amp;#34;
prompt: &amp;#34;Choose region to deploy VMs&amp;#34;
private: no
default: &amp;#34;westeurope&amp;#34;
- name: &amp;#34;project_prefix&amp;#34;
prompt: &amp;#34;Choose a prefix for all the resources&amp;#34;
private: no
default: &amp;#34;test&amp;#34;
- name: &amp;#34;instances_number&amp;#34;
prompt: &amp;#34;Choose a number of virtual machines to create&amp;#34;
private: no
default: 1
- name: &amp;#34;vm_size&amp;#34;
prompt: &amp;#34;Choose a size for azure virtual machines&amp;#34;
private: no
default: &amp;#34;Standard_B2s&amp;#34;
- name: &amp;#34;managed_disk_type&amp;#34;
prompt: &amp;#34;Choose a type for azure virtual disks&amp;#34;
private: no
default: &amp;#34;Standard_LRS&amp;#34;
- name: &amp;#34;admin_username&amp;#34;
prompt: &amp;#34;Choose an admin username&amp;#34;
private: no
default: &amp;#34;zwindler&amp;#34;
- name: &amp;#34;admin_pub_path&amp;#34;
prompt: &amp;#34;Where can I find the admin public key ?&amp;#34;
private: no
default: &amp;#34;~/.ssh/id_rsa.pub&amp;#34;
- name: &amp;#34;local_ip&amp;#34;
prompt: &amp;#34;your local IP address (skip if you don&amp;#39;t want to add 22 port to NSG)&amp;#34;
private: no
default: &amp;#34;skip&amp;#34;
- name: &amp;#34;virtualnetwork_cidr&amp;#34;
prompt: &amp;#34;Give a network CIDR for virtual network (large)&amp;#34;
private: no
default: &amp;#34;172.16.0.0/18&amp;#34;
- name: &amp;#34;subnet_cidr&amp;#34;
prompt: &amp;#34;Give a subnet of that network&amp;#34;
private: no
default: &amp;#34;172.16.1.0/24&amp;#34;
vars:
- resourcegroup_name: &amp;#34;{{project_prefix}}-rg&amp;#34;
- availabilityset_name: &amp;#34;{{project_prefix}}-avset&amp;#34;
- virtualnetwork_name: &amp;#34;{{project_prefix}}-vnet&amp;#34;
- subnet_name: &amp;#34;{{project_prefix}}-subnet&amp;#34;
- securitygroup_name: &amp;#34;{{project_prefix}}-nsg&amp;#34;
- vm_root_name: &amp;#34;{{project_prefix}}-vm&amp;#34;
- public_ip_name: &amp;#34;{{project_prefix}}-ip&amp;#34;
- nic_root_name: &amp;#34;{{project_prefix}}-nic&amp;#34;
tasks:
- name: &amp;#34;Create {{project_prefix}}-rg Resource Group&amp;#34;
azure_rm_resourcegroup:
name: &amp;#34;{{resourcegroup_name}}&amp;#34;
location: &amp;#34;{{location}}&amp;#34;
- name: &amp;#34;Create {{availabilityset_name}} Availability Set&amp;#34;
azure_rm_availabilityset:
name: &amp;#34;{{availabilityset_name}}&amp;#34;
location: &amp;#34;{{location}}&amp;#34;
resource_group: &amp;#34;{{resourcegroup_name}}&amp;#34;
sku: Aligned
- name: &amp;#34;Create {{virtualnetwork_name}} Virtual Network&amp;#34;
azure_rm_virtualnetwork:
name: &amp;#34;{{virtualnetwork_name}}&amp;#34;
resource_group: &amp;#34;{{resourcegroup_name}}&amp;#34;
address_prefixes_cidr:
- &amp;#34;{{virtualnetwork_cidr}}&amp;#34;
- name: &amp;#34;create {{subnet_name}} Subnet in {{virtualnetwork_name}} for VMs&amp;#34;
azure_rm_subnet:
name: &amp;#34;{{subnet_name}}&amp;#34;
virtual_network_name: &amp;#34;{{virtualnetwork_name}}&amp;#34;
resource_group: &amp;#34;{{resourcegroup_name}}&amp;#34;
address_prefix_cidr: &amp;#34;{{subnet_cidr}}&amp;#34;
register: subnet
- name: &amp;#34;Create {{securitygroup_name}} security rules (if local IP address was given)&amp;#34;
azure_rm_securitygroup:
name: &amp;#34;{{securitygroup_name}}&amp;#34;
resource_group: &amp;#34;{{resourcegroup_name}}&amp;#34;
purge_rules: yes
rules:
- name: &amp;#39;AllowSSHFromYourOwnInternetIP&amp;#39;
protocol: &amp;#39;Tcp&amp;#39;
source_address_prefix: &amp;#34;{{local_ip}}&amp;#34;
destination_port_range: 22
access: Allow
priority: 1000
direction: Inbound
when: local_ip | ipaddr
- name: &amp;#34;Create a {{nic_root_name}}X network interface for each VM&amp;#34;
azure_rm_networkinterface:
name: &amp;#34;{{nic_root_name}}{{item}}&amp;#34;
resource_group: &amp;#34;{{resourcegroup_name}}&amp;#34;
virtual_network: &amp;#34;{{virtualnetwork_name}}&amp;#34;
subnet_name: &amp;#34;{{subnet_name}}&amp;#34;
security_group: &amp;#34;{{securitygroup_name}}&amp;#34;
ip_configurations:
- name: &amp;#34;ipconfig&amp;#34;
public_ip_address_name: &amp;#34;{{public_ip_name}}&amp;#34;
primary: True
with_sequence: count=&amp;#34;{{instances_number}}&amp;#34;
- name: &amp;#34;Create {{vm_root_name}}X VM with existing NIC&amp;#34;
azure_rm_virtualmachine:
resource_group: &amp;#34;{{resourcegroup_name}}&amp;#34;
name: &amp;#34;{{vm_root_name}}{{item}}&amp;#34;
vm_size: &amp;#34;{{vm_size}}&amp;#34;
managed_disk_type: &amp;#34;{{managed_disk_type}}&amp;#34;
admin_username: &amp;#34;{{admin_username}}&amp;#34;
availability_set: &amp;#34;{{availabilityset_name}}&amp;#34;
ssh_password_enabled: false
ssh_public_keys:
- path: &amp;#34;/home/{{admin_username}}/.ssh/authorized_keys&amp;#34;
key_data: &amp;#34;{{lookup(&amp;#39;file&amp;#39;, &amp;#39;{{admin_pub_path}}&amp;#39;) }}&amp;#34;
network_interface_names: &amp;#34;{{nic_root_name}}{{item}}&amp;#34;
image:
offer: UbuntuServer
publisher: Canonical
sku: &amp;#39;16.04.0-LTS&amp;#39;
version: latest
with_sequence: count=&amp;#34;{{instances_number}}&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pour ceux qui veulent d’économiser un copier coller, j’ai mis à disposition ce playbook à l’adresse suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/zwindler/ansible-deploy-azure" target="_blank" rel="noopener"
&gt;github.com/zwindler/ansible-deploy-azure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et il ne reste plus qu’à l’exécuter :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip install --user netaddr
echo localhost &amp;gt; hosts
ansible-playbook -i hosts azure-deploy.yml
[...]
TASK [Create test-vmX VM with existing NIC] *****************************************
changed: [localhost] =&amp;gt; (item=1)
PLAY RECAP **************************************************************************
localhost : ok=1 changed=7 unreachable=0 failed=0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/08/azure_vm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="le-mot-de-la-fin"&gt;Le mot de la fin
&lt;/h2&gt;&lt;p&gt;Bon, on en est où maintenant ?&lt;/p&gt;
&lt;p&gt;Et bien maintenant, vous avez un playbook qui vous permet de déployer des VMs à tour de bras dans Azure certes, mais aussi de les préconfigurer avec votre clé SSH et votre utilisateur administrateur, et seul votre IP (ou celle que vous aurez donné ou un subnet) pourra y accéder en SSH.&lt;br&gt;
Vous avez toutes vos VMs dans un même sous réseau, lui même dans un réseau virtuel.&lt;br&gt;
Vous avez également un AVSET qui vous permet de ne pas avoir toutes vos VMs sur les mêmes hyperviseurs et augmenter la disponibilité de votre application.&lt;br&gt;
Et tout ça, sans rien avoir eu à faire à la main.&lt;/p&gt;
&lt;p&gt;Badass non ?&lt;/p&gt;
&lt;p&gt;Et encore! J’en ai gardé un peu sous le coude, pour d’autres articles ;-)&lt;/p&gt;</description></item></channel></rss>