Workflows d’automatisation

Scripts iPXE personnalisés via l’API

Enregistrez un script iPXE sur un service bare metal, passez le serveur en démarrage réseau pour l’exécuter, puis revenez au disque local après installation.

Un script iPXE personnalisé remplace la liste d’images par le programme d’installation ou système live de votre choix. Lorsqu’un serveur en mode PXE démarre depuis le réseau, le provisionnement recherche la MAC du port de démarrage et fournit le script enregistré sur ce service. Son exécution exige donc le script enregistré, le mode PXE et un redémarrage. Les trois appels iPXE, lecture comprise, nécessitent organization.baremetal.update.

1. Enregistrer le script

Définir le script iPXE enregistre 1 à 65 536 caractères et remplace tout script précédent. Le script commence par #!ipxe, comme tout script iPXE, et figure dans le corps comme une chaîne JSON unique avec \n entre les lignes :

curl --request PUT \
  --url https://api.serverside.com/v1/baremetal/{serviceId}/ipxe \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "script": "#!ipxe\nchain --autofree http://boot.netboot.xyz"
}
'

L’appel répond 200 avec le script enregistré. Cet exemple charge netboot.xyz, un menu public de programmes d’installation. Une installation sans intervention charge plutôt un noyau et un initrd avec les arguments requis :

#!ipxe
kernel http://mirror.example.com/debian/linux auto=true priority=critical url=http://config.example.com/preseed.cfg
initrd http://mirror.example.com/debian/initrd.gz
boot

Obtenir le script iPXE renvoie le script enregistré, ou null s’il n’y en a pas.

Un nouveau serveur peut disposer de son script dès le départ. Un article de commande ou Créer un service bare metal envoyant bootMode à PXE avec ipxeScript démarre une fois sur ce script dès que le provisionnement a configuré le réseau. Les étapes 1 et 2 sont donc déjà faites.

2. Démarrer depuis le réseau

En mode PXE, le VLAN natif du serveur est notre réseau de provisionnement ; tous les réseaux rattachés arrivent tagués, y compris ceux rattachés comme natifs. Ceux possédant un localVlanId utilisent cet ID ; les réseaux gérés par la plateforme sans ID utilisent le VLAN 10. Chaque réseau dans les interfaces du serveur expose son tag dans provisioningVlanId. La modification du commutateur peut interrompre le système en cours avant le redémarrage. Gardez une console distante ouverte et configurez le système pour ces VLAN. Le réseau de provisionnement fournit DHCP IPv4 et Internet ; le programme d’installation peut donc accéder aux miroirs publics sans VLAN.

Définissez le mode de démarrage sur PXE :

curl --request PUT \
  --url https://api.serverside.com/v1/baremetal/{serviceId}/boot-mode \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "bootMode": "PXE"
}
'

La modification du commutateur s’exécute après la réponse. L’appel répond 202 avec status (APPLYING) et since, ou 204 si le serveur était déjà dans ce mode. Pendant un déploiement ou test, il répond 409 OPERATION_IN_PROGRESS ; pendant une autre modification réseau, 409 NETWORK_CHANGE_IN_PROGRESS avec un Retry-After de 10 secondes.

Appelez Obtenir l’état du service jusqu’à ce que networkChange soit null, ce qui indique que les commutateurs appliquent la nouvelle configuration ; FAILED indique un échec d’application. Redémarrez ensuite le serveur avec une commande d’alimentation :

curl --request POST \
  --url https://api.serverside.com/v1/baremetal/{serviceId}/power \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "command": "FORCE_RESTART"
}
'

Une session console montre l’exécution du script.

3. Revenir au disque local

En mode PXE, toute commande d’alimentation qui démarre le serveur le fait depuis le réseau et relance le script. Un redémarrage depuis le système peut ne pas le faire : certains contrôleurs abandonnent le paramètre de démarrage réseau après un démarrage, puis le serveur suit son ordre habituel. Une fois le disque écrit par le programme d’installation, rétablissez le mode :

curl --request PUT \
  --url https://api.serverside.com/v1/baremetal/{serviceId}/boot-mode \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "bootMode": "LOCAL_DISK"
}
'

Une fois revenu à LOCAL_DISK, les réseaux natifs sont de nouveau non tagués ; les réseaux explicitement tagués gardent leurs ID VLAN habituels. Déplacez les adresses et routes natives vers l’interface ou le bond parent, retirez le DHCP de provisionnement et enregistrez la configuration normale du système installé avant de redémarrer.

Supprimer le script iPXE efface le script enregistré lorsque vous n’en avez plus besoin et répond 204. Un serveur laissé en mode PXE sans script démarre plutôt notre image d’installation, qui l’éteint.

Revenez aussi à LOCAL_DISK avant un déploiement depuis les images et attendez la disparition de networkChange : un déploiement demandé pendant l’application répond 409 NETWORK_CHANGE_IN_PROGRESS. Avec un script enregistré, un serveur en PXE peut démarrer votre script au lieu du programme d’installation nécessaire au déploiement.