Cloudbase-init

Cloudbase-init 

Aka Jean-Claude base Init 

Chez Geco-iT,  nous utilisons l’hyperviseur Proxmox depuis de nombreuses années, en l’adaptant à nos besoins pour faciliter le déploiement et la gestion des Machines Virtuelles.

Cloud-Init est quelque chose sur lequel nous comptons beaucoup pour automatiser le processus d’initialisation de nos instances cloud linux pendant le démarrage du système.

Malheureusement, nous ne pouvions pas avoir la même option pour les machines virtuelles exécutant Microsoft Windows, même s’il existait des solutions tierces comme Cloudbase-Init, elles ne sont pas prises en charge nativement par la version actuelle de Proxmox.

Et c’était notre motivation, de patcher Proxmox pour que Windows fonctionne avec cloud-init, avec l’aide des membres du forum Proxmox et en particulier Kenzim, qui nous a montré la possibilité d’une telle implémentation.

Cloudbase-Init :

Il s’agit d’un projet open source fourni par Cloudbase Solutions pour permettre l’initialisation d’une nouvelle instance executant Windows. Le but est d’être l’équivalent du projet Cloud-Init qui est utilisé sur les images Linux.

Cloudbase-Init fonctionne avec différents services pour fournir les métadonnées nécessaires aux fonctionnalités ci-dessous. Dans notre cas, le service qui sera utilisé est le service OpenStack Config Drive qui récupère les informations du lecteur cloud-init déjà généré par Proxmox mais dans lequel il manque certaines données nécessaires dans son état actuel.

Il est déployé en tant que service dans Windows pour prendre en charge toutes les actions d’initialisation des utilisateurs, telles que :

  • Extension de volume de disque
  • Création d’utilisateur
  • Génération et injection de mots de passe
  • Exécution de scripts personnalisés avec Powershell, CMD, Bash ou Python
  • Configuration réseaux statiques
  • Modification du nom d’hôte
  • Déploiement de clé SSH publique

et d’autres fonctionnalités présentes sur  la documentation Cloudbase-Init.

Nous avons trouvé quelques fonctionnalités manquantes qui, selon nous, devraient être incluses dans le produit. Ce sont la configuration du réseau DHCP lorsque nous voulons modifier un adaptateur réseau statique vers DHCP et l’activation de l’utilisateur Administrateur si nous fournissons son nom dans les métadonnées. Nous avons donc inclus dans ce document deux scripts python à déployer avec Cloudbase-Init pour effectuer ces actions.

Patchons Proxmox ! 

Comme mentionné précédemment le fichier métadonnées fourni par le service cloud-init de Proxmox ne peut pas être utilisé par Cloudbase-Init. Nous avons compris que Cloudbase-Init ne prend pas encore en charge l’initialisation avec User_Data et, de par sa conception, il ne peut pas non plus utiliser de mots de passe hachés provenant des métadonnées.

Proxmox génère également un fichier META_DATA.json qui inclut l’UUID et le chemin de configuration réseau. Nous allons patcher Proxmox pour inclure toutes les autres variables nécessaires dans ce fichier META_DATA afin que Cloudbase-Init puisse fonctionner avec plaisir par la suite.

Vous pouvez voir le contenu du lecteur comme ci-dessous : 

config-2/
└── OPENSTACK
    └── CONTENT
        └── 0000 #Fichier incluant la configuration réseau
    └── LATEST
        ├── META_DATA.json #Nous allons patcher le processus de génération de ce fichier pour l'utiliser avec Cloudbase-Init
        └── USER_DATA #Fichier qui n'est pas encore pris en charge par Cloudbase-Init

Il y a deux fichiers que nous devons modifier;

  • Qemu.pm pour obtenir le mot de passe en clair dans le fichier META_DATA lorsqu’il s’agit d’une machine virtuelle Windows.
  • Cloudinit.pm pour générer un fichier Json de META_DATA avec des variables compatibles avec Cloudbase-Init.

Nous avons fourni des fichiers de correctifs pour deux versions différentes ( 6.4-2 et 7.1-4), si vous utilisez ces versions de Qemu-Server, vous pouvez simplement les télécharger et appliquer les correctifs avec la manipulation suivante :

# Vérifiez la version de votre qemu-server
apt show qemu-server |grep "Version"
 
# Si votre version est 6.4-2 ou 7.1-4, téléchargez le correctif correspondant à partir de notre repo git et continuez, sinon continuez le correctif manuel ci-dessous.
 
# Lancez ci-dessous comme test pour voir si vous pouvez appliquer le fichier de correctif, modifiez le chemin d'accès à l'endroit où vous avez téléchargé les fichiers et exécutez-le pour les deux fichiers de patch.
patch --force --forward --backup -p0 --directory / --input "/absolute/path/to/patchfile.pm.patch" --dry-run && echo "You can apply patch" || { echo "Can't apply patch!";}
 
# Si le résultat est "Impossible d'appliquer le correctif !", vous pouvez taper "apt reinstall qemu-server" pour réinstaller les fichiers qemu-server (Attention! Si vous avez déjà apporté des modifications aux fichiers qemu-server, ils seront perdus!)
 
# Appliquez le patch si le résultat est "Vous pouvez appliquer le patch"
patch --force --forward --backup -p0 --directory / --input "/absolute/path/to/patchfile.pm.patch"

Si vous souhaitez rétablir le correctif:

patch --force --reverse --backup -p0 --directory / --input "/absolute/path/to/patchfile.pm.patch"

Si vous souhaitez appliquer le correctif manuellement ou si vous souhaitez plus d’explications sur le correctif, vous pouvez suivre ce lien: Manual Patching

  • Créez une machine virtuelle Windows dans proxmox. (N'oubliez pas de choisir le type de système d'exploitation : Microsoft Windows)
  • Allez dans la section Matériel de votre VM, ajoutez Cloud-Init Drive et Serial Port 0
  • Connectez-vous en tant qu’Administrateur, configurez Windows selon vos besoins et procédez à l’installation de Cloudbase-Init.

Installez Cloudbase-Init Continous Build à partir du site officiel.

Pourquoi le Continous Build? Parce que la version stable date de 2020 et n’inclut pas les fonctionnalités dont nous avons besoin.

Nous avons trois scripts qui proposent certaines fonctionnalités que Cloudbase-Init n’a pas ;

  • Activation de l’utilisateur Administrateur lorsque son nom est donné à Cloudbase-Init.
  • Activation de DHCP sur les adaptateurs réseau.
  • Éjection du lecteur de métadonnées car il contient un mot de passe en clair

Déplacez ces scripts dans Cloudbase Solutions\Cloudbase-Init\LocalScripts\ dans votre program files de votre machine virtuelle Windows.

Copiez ces deux fichiers de configuration dans C:\Program Files\Cloudbase Solutions \Cloudbase-Init\conf.

Dans ces fichiers, vous trouverez le nom d’administrateur par défaut et le groupe d’utilisateurs qui seront utilisés lors de la création de l’utilisateur. Vous pouvez lancer notre ModifyConf.ps1 script pour modifier ce fichier afin d’obtenir le nom d’utilisateur et le groupe corrects de votre langue Windows.

Ce script powershell a quelques fonctionnalités.

  • Supprime l’utilisateur « cloudbase-init », délègue le service « cloudbase-init » à l’utilisateur Systeme local et modifie le chemin d’exécution du script pour utiliser également l’utilisateur système local.
  • Installe OpenSSH-Server à partir des fonctionnalités optionnelles de Windows.
  • Supprime un package de langue de Microsoft Store qui provoque une erreur lors de la génération de sysprep.

Faites un clic droit et exécutez ce script après avoir installé et configuré Cloudbase-Init Continous Build.

Lorsque tout est installé, exécutez simplement la commande ci-dessous dans powershell pour lancer sysprep :

cd ‘C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf’
C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /unattend:Unattend.xml

Créez un Template à partir de la machine virtuelle que nous venons de créer et clonez-en une Full Clon pour tester le cloud-init!

Pour lancer notre premier test, tout ce que nous avons à faire est de remplir les informations cloud-init comme ceci :

Et lancez la machine!

Vous pouvez surveiller les logs en lançant une console xterm.js sur votre machine une fois celle-ci démarrée.

J’espère avoir pu vous aider à utiliser Cloudbase-Init avec Proxmox. Il n’y a vraiment aucune limitation pour Cloudbase-Init car il comprend plusieurs services et des dizaines de plugins avec la possibilité de créer votre propre script. Nous utiliserons également ce produit à l’avenir pour de nombreuses solutions où l’automatisation sera nécessaire sur une machine Windows. Ce produit nous ouvre la voie pour activer l’infrastructure en tant que code. De telles solutions sont déjà en développement dans geco en utilisant Docker et Ansible. Nous aimons redonner à la communauté en tant que Geco-iT car sans communauté nous n’aurions rien à trouver dans Google. 

Can Soylu, alternant systèmes et réseaux

Comments are closed.