<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Automatisation on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/automatisation/</link><description>Recent content in Automatisation on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Fri, 24 Nov 2023 14:00:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/automatisation/index.xml" rel="self" type="application/rss+xml"/><item><title>Une issue ouverte sur un projet, 7 ans après ?</title><link>https://blog.zwindler.fr/2023/11/24/issue-ouverte-apres-7-ans/</link><pubDate>Fri, 24 Nov 2023 14:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2023/11/24/issue-ouverte-apres-7-ans/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/09/article_docker_xwiki.webp" alt="Featured image of post Une issue ouverte sur un projet, 7 ans après ?" /&gt;&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;Il y a 7 ans, en août 2016 (!!), je créais ma première &amp;ldquo;vraie&amp;rdquo; image docker.&lt;/p&gt;
&lt;p&gt;Il s&amp;rsquo;agissait d&amp;rsquo;une image custom pour un outil que j&amp;rsquo;utilisais énormément &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=xwiki" target="_blank" rel="noopener"
&gt;XWiki&lt;/a&gt;, un outil de Knowledge management open source (et français) que j&amp;rsquo;apprécie particulièrement et qui remplace avantageusement un Confluence (si vous voulez mon avis).&lt;/p&gt;
&lt;p&gt;A l&amp;rsquo;époque, mon image fournissait un XWiki prêt à l&amp;rsquo;emploi avec Tomcat 8 et le driver JDBC pour postgresql.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/zwindler/docker-xwiki" target="_blank" rel="noopener"
&gt;github.com/zwindler/docker-xwiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&amp;rsquo;avais fait ce projet car les images officielles du projet étaient encore balbutiantes (ça date !) et ne proposaient pas cette alternative.&lt;/p&gt;
&lt;p&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;J&amp;rsquo;avais d&amp;rsquo;ailleurs écrit un article pour l&amp;rsquo;occasion (Installer XWiki 8.2.1 avec Docker (compose) en 2 lignes de commandes)&lt;/a&gt; et fourni au fil des mois suivants des manifests pour Kubernetes.&lt;/p&gt;
&lt;h2 id="et-aujourdhui-"&gt;Et aujourd&amp;rsquo;hui ?
&lt;/h2&gt;&lt;p&gt;Ca fait bien longtemps que ce projet n&amp;rsquo;a plus aucun intérêt, même si mes images ont été téléchargées environ 30000 fois (quand même !), avec un dernier téléchargement l&amp;rsquo;an dernier, malgré une version vielle de plus de 6 ans (mais pourquoiiiiii ?).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://hub.docker.com/repository/docker/zwindler/xwiki-tomcat8/general" target="_blank" rel="noopener"
&gt;hub.docker.com - zwindler/xwiki-tomcat8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les images officielles proposent désormais (depuis bien longtemps) toutes les options les plus courantes pour toutes les versions supportées&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/11/dockerhub_xwiki.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="pourtant-"&gt;Pourtant ?!?
&lt;/h2&gt;&lt;p&gt;Pourtant, début novembre, j&amp;rsquo;ai reçu une issue, d&amp;rsquo;un utilisateur qui m&amp;rsquo;informait qu&amp;rsquo;il ne pouvait pas rebuild mon image car l&amp;rsquo;URL permettant de télécharger les artefacts WAR ne répondait plus (effectivement, elle a changé).&lt;/p&gt;
&lt;p&gt;Même si au début j&amp;rsquo;étais un peu interloqué, je me suis dis que ça pouvait être fun de remettre les mains dedans et de tenter de mettre à jour mon image sur toute la stack, pour voir si ça fonctionne encore.&lt;/p&gt;
&lt;h2 id="voyons-voir-ce-qui-a-changé-depuis-2016"&gt;Voyons voir ce qui a changé depuis 2016&amp;hellip;
&lt;/h2&gt;&lt;p&gt;Évidemment, beaucoup de choses !&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;abord, les versions de XWiki (de 10 à 14), qui ont forcément évoluées, ainsi que cette fameuse URL de téléchargement des artefacts qui avait changé.&lt;/p&gt;
&lt;p&gt;La version de postgres est passée de 9.5 à 16, les versions du driver JDBC ont évoluées de plusieurs mineures.&lt;/p&gt;
&lt;p&gt;Plus impactant, tomcat est passé de la version 8 à la version 10, avec un gros breaking change entre la 9 et la 10, notamment à cause de JEE, renommé en JakartaEE !&lt;/p&gt;
&lt;p&gt;Ca parlera aux Javaistes ;-)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/11/javax.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Plus anecdotique, le MAINTAINER a disparu depuis bien longtemps des Dockerfile (remplacé par un LABEL opencontainers), le MaxPermSize n&amp;rsquo;existe plus en Java et le format des fichiers docker-compose est passé en version 3.&lt;/p&gt;
&lt;h2 id="les-modifs"&gt;Les modifs
&lt;/h2&gt;&lt;p&gt;Pour le fun, j&amp;rsquo;ai donc réparé mon image pour qu&amp;rsquo;elle marche (et pas plus), puis j&amp;rsquo;ai passé le repo en readonly, pour la postérité, en prenant soin d&amp;rsquo;informer l&amp;rsquo;auteur de l&amp;rsquo;issue qu&amp;rsquo;il valait mieux regarder du côté des images officielles ;-).&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/zwindler/docker-xwiki/commit/c5955f1c35f809cdf3b4f56b20cc204a37a27f17" target="_blank" rel="noopener"
&gt;Le code de fix est disponible ici, pour les curieux/curieuses&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mais&amp;hellip; ça fonctionne :-p&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/11/xwiki-14.avif"
loading="lazy"
&gt;&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><item><title>Installer XWiki 8.2.1 avec Docker (compose) en 2 lignes de commandes</title><link>https://blog.zwindler.fr/2016/09/15/installer-xwiki-8-2-1-avec-docker-compose-en-2-lignes-de-commandes/</link><pubDate>Thu, 15 Sep 2016 11:00:28 +0000</pubDate><guid>https://blog.zwindler.fr/2016/09/15/installer-xwiki-8-2-1-avec-docker-compose-en-2-lignes-de-commandes/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/09/article_docker_xwiki.webp" alt="Featured image of post Installer XWiki 8.2.1 avec Docker (compose) en 2 lignes de commandes" /&gt;&lt;h2 id="automatiser-linstallation-du-xwiki-avec-docker-compose"&gt;Automatiser l’installation du XWiki avec Docker compose
&lt;/h2&gt;&lt;p&gt;Pour ceux qui ne le savent, XWiki est une plateforme collaborative de gestion de la connaissance (généralement appelé wiki, KMDB en ITIL). L’exemple le plus connu de wiki est bien entendu Wikipedia qui tourne par contre lui sous Mediawiki (un autre wiki, moins convivial mais très répandu). J’ai déjà écris pas mal au sujet du XWiki donc si vous voulez un petit tour d’horizon de ce qu’on peut faire avec, vous pouvez &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=xwiki" &gt;cliquer ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je commence à en avoir installé un certain nombre :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;que ce soit pour tester les nouvelles version&lt;/li&gt;
&lt;li&gt;en recette ou en production pour de nouvelles équipes&lt;/li&gt;
&lt;li&gt;faire des tests sur Docker&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si l’installation d’un XWiki est simplissime si vous utilisez les outils préconfigurés par défaut dans l’installeur JAR, l’installation d’une instance XWiki avec Tomcat et PostgreSQL est un peu plus complexe. Du coup, j’ai eu besoin à plusieurs reprise d’ouvrir mon propre tutoriel qui guide pas à pas &lt;a class="link" href="https://blog.zwindler.fr/2015/12/16/installation-de-xwiki-redhat-7/" &gt;l’installation de la version 7 de XWiki sur un Redhat Entreprise Linux 7 (ou CentOS)&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="vous-avez-dit-docker-"&gt;Vous avez dit Docker ?
&lt;/h2&gt;&lt;p&gt;Et c’est notamment grâce au besoin que j’ai eu de faire des tests sur Docker que j’en suis venu à réaliser une image Docker XWiki.&lt;/p&gt;
&lt;p&gt;XWiki était le parfait exemple pour s’initier à :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la création d’un service multi-conteneurs séparés par Tiers (Tomcat, PostgreSQL)&lt;/li&gt;
&lt;li&gt;la rédaction d’un DockerFile qui automatise entièrement l’installation et la configuration de l’application java XWiki à partir de l’image standard Tomcat 8&lt;/li&gt;
&lt;li&gt;l’ajout d’une orchestration de base avec Docker Compose&lt;/li&gt;
&lt;li&gt;la mise en ligne d’une image publique avec Docker Hub&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un des avantages de Docker, c’est que grâce à l’aspect « portable » des conteneurs :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avec ce conteneur, je peux garantir que les fichiers de configuration que j&amp;rsquo;embarque avec l’image seront compatibles.&lt;/li&gt;
&lt;li&gt;Sans conteneur, avec un serveur Tomcat déjà existant et en fonction des fichiers de configurations embarqués selon telle ou telle distribution, les instructions que je donne dans &lt;a class="link" href="https://blog.zwindler.fr/2015/12/16/installation-de-xwiki-redhat-7/" &gt;mon article « pas à pas »&lt;/a&gt; pourraient ne pas toujours fonctionner.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pour-les-plus-pressés"&gt;Pour les plus pressés
&lt;/h2&gt;&lt;p&gt;Quelque soit la méthode que vous choisirez, le XWiki sera opérationnel et accessible sur le port 8080 à l’issue de ces commandes. Il faudra juste passer le &lt;a class="link" href="https://blog.zwindler.fr/2015/12/16/installation-de-xwiki-redhat-7/" &gt;« First Installation Wizard »&lt;/a&gt; et &lt;a class="link" href="https://blog.zwindler.fr/2016/09/01/personnalisation-de-base-apres-installation-mise-a-jour-dun-xwiki/" &gt;commencer à configurer le XWiki&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="avec-docker-compose"&gt;Avec Docker Compose
&lt;/h3&gt;&lt;p&gt;Docker compose se charge pour vous, à partir du fichier &lt;strong&gt;&lt;em&gt;docker-compose.yml&lt;/em&gt;&lt;/strong&gt;, de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;télécharger/builder l’image des conteneurs Postgresql et XWiki&lt;/li&gt;
&lt;li&gt;configurer ces conteneurs&lt;/li&gt;
&lt;li&gt;démarrer les conteneurs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C’est donc forcément plus simple de le faire marcher en 2 lignes de commandes ;-).&lt;/p&gt;
&lt;p&gt;[Edit]&lt;br&gt;
A priori il n’est plus nécessaire de faire un « &lt;strong&gt;chmod +x xwiki-tomcat/xwiki-tomcat-entrypoint.sh&lt;/strong&gt; » sinon ça ne fonctionne pas, j’ai corrigé les permissions sur le github&lt;br&gt;
[/Edit]&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone https://github.com/zwindler/docker-xwiki.git &amp;amp;&amp;amp; cd docker-xwiki
docker-compose -f compose/docker-compose.yml up -d
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="avec-docker-depuis-les-sources"&gt;Avec Docker depuis les sources
&lt;/h3&gt;&lt;p&gt;Avec Docker uniquement, il faudra forcément tout faire à la main. Donc il faudra créer le network, démarrer successivement l’image PostgreSQL puis l’image Tomcat modifiée par mes soins.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker network create -d bridge xwiki-nw
docker run --net=xwiki-nw -itd --name xwiki-postgres -e POSTGRES_DB=xwiki -e POSTGRES_USER=xwiki -e POSTGRES_PASSWORD=xwiki postgres
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;git clone https://github.com/zwindler/docker-xwiki.git &amp;amp;&amp;amp; cd docker-xwiki
chmod +x xwiki-tomcat/xwiki-tomcat-entrypoint.sh
docker build -t zwindler/xwiki-tomcat8:latest .
docker run --net=xwiki-nw -itd --name xwiki-tomcat -p 8080:8080 -e POSTGRES_INSTANCE=xwiki-postgres zwindler/xwiki-tomcat8
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="avec-docker-et-docker-hub"&gt;Avec Docker et Docker Hub
&lt;/h3&gt;&lt;p&gt;Un cran plus simple que la version précédente car je viens d’uploader l’image zwindler/xwiki-tomcat sur Docker Hub. Elle est donc automatiquement téléchargée depuis Docker hub lors de la commande &lt;strong&gt;docker run&lt;/strong&gt;. Pas besoin de « chmod » ni de builder l’image.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker network create -d bridge xwiki-nw
docker run --net=xwiki-nw -itd --name xwiki-postgres -e POSTGRES_DB=xwiki -e POSTGRES_USER=xwiki -e POSTGRES_PASSWORD=xwiki postgres
docker run --net=xwiki-nw -itd --name xwiki-tomcat -p 8080:8080 -e POSTGRES_INSTANCE=xwiki-postgres zwindler/xwiki-tomcat8
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="limage-en-question"&gt;L’image en question
&lt;/h2&gt;&lt;p&gt;L’ensemble des sources sont disponibles sur &lt;a class="link" href="https://github.com/zwindler/docker-xwiki" target="_blank" rel="noopener"
&gt;Github dans mon repository docker-xwiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voici le contenu du DockerFile :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;FROM tomcat:8-jre8
MAINTAINER Denis GERMAIN &amp;lt;denis@example.com&amp;gt;
ENV POSTGRES_INSTANCE=xwiki-pgsql
ENV POSTGRES_PORT=5432
ENV POSTGRES_DB=xwiki
ENV POSTGRES_USER=xwiki
ENV POSTGRES_PASSWORD=xwiki
RUN rm -rf webapps/* &amp;amp;&amp;amp; \
curl -L \
&amp;#39;http://download.forge.ow2.org/xwiki/xwiki-enterprise-web-8.2.1.war&amp;#39; \
-o xwiki.war &amp;amp;&amp;amp; \
unzip -d webapps/xwiki xwiki.war &amp;amp;&amp;amp; \
rm -f xwiki.war
RUN curl -L \
&amp;#39;https://jdbc.postgresql.org/download/postgresql-9.4.1208.jar&amp;#39; \
-o &amp;#39;webapps/xwiki/WEB-INF/lib/postgresql-9.4-1208.jdbc42.jar&amp;#39;
COPY hibernate.cfg.xml webapps/xwiki/WEB-INF/
COPY xwiki.cfg webapps/xwiki/WEB-INF/
COPY setenv.sh bin/setenv.sh
RUN sed -i &amp;#34;s/redirectPort=\&amp;#34;8443\&amp;#34; /redirectPort=\&amp;#34;8443\&amp;#34; URIEncoding=\&amp;#34;UTF-8\&amp;#34; /&amp;#34; conf/server.xml
COPY xwiki-tomcat-entrypoint.sh /
ENTRYPOINT [&amp;#34;/xwiki-tomcat-entrypoint.sh&amp;#34;]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Des variables d’environnement ENV sont à votre disposition pour adapter à votre contexte (on en parlera un peu plus loin). La première étape consiste à télécharger la dernière version en date du XWiki, puis le pilote JDBC PostgreSQL correspondant.&lt;/p&gt;
&lt;p&gt;Les fichiers de Tomcat sont adaptés pour un fonctionnement avec XWiki (Xmx java, autorisation des « / » dans les URLs, &amp;hellip;) et les fichiers de configuration de XWiki sont paramétrés pour accepter l’instance PostgreSQL.&lt;/p&gt;
&lt;h2 id="personnalisation"&gt;Personnalisation
&lt;/h2&gt;&lt;p&gt;Pour permettre un peu plus de souplesse dans l’utilisation de la base de données, j’ai volontairement ajouté des variables d’environnement et un script « ENTRYPOINT ». Ce script sert à paramétrer à la première exécution les valeurs définies en début de DockerFile (ENV).&lt;/p&gt;
&lt;p&gt;Ceci permet à la fois de mettre à disposition une image Docker clé en main si l’utilisateur ne souhaite rien modifier et tout laisser par défaut, ou à l’inverse, de fournir des variables qui lui sont propres et personnaliser automatiquement son instance.&lt;/p&gt;
&lt;p&gt;Vous pourrez ainsi par exemple changer le mot de passe et/ou le nom de l’instance PostgreSQL (soit via modification du docker-compose.yml, soit directement en modifiant le DockerFile).&lt;/p&gt;
&lt;h2 id="problème-allow_encoded_slashtrue"&gt;Problème ALLOW_ENCODED_SLASH=true
&lt;/h2&gt;&lt;p&gt;Malgré l’ajout de &lt;em&gt;ALLOW_ENCODED_SLASH=true&lt;/em&gt; dans &lt;strong&gt;catalina.properties&lt;/strong&gt;, j’avais des problèmes pour ouvrir les pages avec des / dans les noms de pages.&lt;/p&gt;
&lt;p&gt;J’en ai profité pour essayer de déplacer l’application du paramètres et l’intégrer au niveau du setenv.sh avec la variable d’environnement CATALINA_OPTS. Ca n’a pas corrigé le problème (situé à un autre niveau) mais a permis de simplifier le Dockerfile, ce qui est toujours bon à prendre.&lt;/p&gt;
&lt;p&gt;En réalité, la variable était bien prise en compte dans les deux cas. Je l’avais vérifié et cela marchait depuis le début. En réalité, j’ai un reverse proxy Apache (ProxyPass) qui lui aussi fout le boxon avec les « / » dans mes titres de pages de XWiki.&lt;/p&gt;
&lt;p&gt;La réponse suivante &lt;a class="link" href="http://stackoverflow.com/a/9933890" target="_blank" rel="noopener"
&gt;sur StackOverflow explique très bien ce qu’il se passe&lt;/a&gt;. Pour autant dans mon cas, impossible d’accéder à ces pages, quelque soit le paramètre essayé, dans le cas où le XWiki est derrière mon proxy Apache. Je peux y accéder sans, je vais donc devoir les renommer pour contourner le problème. De toute façon, ça ne me plait pas que ces pages aient un « / » dans leur URL ;-).&lt;/p&gt;</description></item></channel></rss>