J'ai une relation d'amour et de haine avec Terraform. Cet outil est formidable pour discuter avec les providers de cloud et faire de la remédiation, en revanche je me casse régulièrement les dents sur le langage hcl que je trouve extrêmement limité et frustrant. Trois exemples :
Les variables : Toute variable doit être déclarée, typée et contenir une valeur, même si on ne s'en sert pas. Une variable ne peut pas être égale à une autre. Pas de dictionnaire.
Pas de if, pas de loop : On doit ruser avec count mais on perd grandement en souplesse et en lisibilité.
pas DRY: (Don't Repeat Yourself) on ne peut pas utiliser du code commun et envoyer des variables en fonction de l'environnement, donc on duplique pas mal de code. Ce problème est réglé par Terragrunt que je recommande.
C'est principalement pour ces deux raisons que je considère qu'il est très difficile voire impossible de faire du code générique sur Terraform. On ne peut pas créer un module qui gère tous les cas possibles à l'aide des variables, on devra obligatoirement imposer des choix.
Terraform 0.12 est une version qui était très attendue depuis près de 1 an car promettant de lever pas mal de limitations du hcl. Et en effet la nouvelle version du langage nous apporte des nouveautés très appréciables. Mes 3 préférées sont :
First-class expression syntax :
${var.foo} devient var.foo
${var.foo["key"]} devient var.foo.key
${var.foo[count.index]} devient var.foo (mon préféré)
Generalized type system :Les variables peuvent être des "object" composés de clés de différents types. Les objets eux-mêmes peuvent faire partie d'une liste: exemple. C'est peut-être le plus gros progrès de cette version.
Iteration constructs : Arrivée des boucles for et des boucles dynamiques, semble en pratique plus limité que ce qu'on pourrait croire mais c'est bon à prendre. Exemple.
Terraform 0.12 couplé à Terragrunt offre une plus grande souplesse et évite de se répéter. J'ai entamé la migration de mes projets pour profiter de ces nouveautés, et j'en suis très content. Merci Terraform :)
It took me some time to figure out how to use Azure tags as a filter for Ansible. Well it's not that hard, azure_rm.py will automatically generate groups based on tags with this pattern:
Tag: role:webserver
Becomes group: role_webserver
Yes, that's the trick, ":" becomes "_". Let's say you want to run a playbook only on machines tagged with role:webserver, just use the following command:
Qu'est-ce que le cloud ? C'est d'abord un terme commercial qui veut dire "je veux tes données, tes logiciels, tes bottes et ta moto je m'en occupe pour toi". Mais pas toujours heureusement car on peut avoir du cloud géré par soi même et c'est même une solution avantageuse. Le cloud c'est un ensemble de services synchronisé ou au moins accessibles depuis plusieurs endroits. Par exemple si j'ajoute un élément dans mon calendrier sur Thunderbird je veux qu'il apparaisse sur mon téléphone automatiquement et ça c'est possible avec le cloud. Il existe de nombreuses solutions propriétaires mais aussi des libres. Avant d'aller plus loin voici mes besoins :
E-mail
Agenda
Contacts
Fichiers (dropbox-like)
J'utilise depuis 2 ans YunoHost qui est une solution libre prête à l'emploi pour installer son propre serveur de "cloud". Techniquement c'est Debian + un ensemble de services de base (LDAP, MySQL, XMPP, SMTP, IMAP) auxquels des "applications" viennent se greffer. Le tout est géré par une interface Web et un portail SSO (authentification 1 fois puis accès à toutes les applications).
L'installation se fait soit avec une ISO soit un script à exécuter sur Debian 7 ou 8. Ensuite on se connecte à l'interface d'administration web puis on créé ses domaines, ses utilisateurs, et on installe ses applications comme par exemple Roundcube pour les e-mail. L'application sera automatiquement configurée pour se connecter au serveur mail et au LDAP afin d'authentifier les utilisateurs, c'est aussi simple que ça.
Voici quelques applications que j'utilise :
Baikal : serveur caldav/carddav pour agenda/contacts.
Z-Push : connecteur ActiveSync pour mon Windows Phone.
Seafile : Dropbox-like avec interface web et client lourd.
TinyTinyRSS : lecteur de flux RSS.
DokuWiki : wiki perso.
Zerobin : pour copier-coller du texte et le partager en 1 lien.
Jirafeau : partage rapide de fichiers.
Movim : que j'utilise comme client XMPP web.
YunoHost a une belle interface, c'est coloré, c'est sexy, c'est moderne. L'équipe est sympathique et souvent disponible sur leur salon XMPP (support@conference.yunohost.org). Et si vous voulez packager vos propres applications, le système est assez simple. Il faut faire des scripts bash faisant appel à des fonctions de l'api yunohost (exemple : création d'une database et d'un utilisateur) puis stocker le tout sur github. L'URL du dépôt sera ensuite utilisée pour installer l'application.
Utilisateur de Yunohost depuis deux ans je suis plus que satisfait, c'est une excellente solution pour celui qui veut avoir son propre serveur sur Linux mais n'a pas le temps ou les compétences pour tout configurer soit-même. Je recommande.