Un pilote Hetzner Cloud pour Molecule.
Ce plugin vous permet d'utiliser les serveurs Hetzner Cloud à la demande pour vos tests d'intégration de molécules.
$ pip install molecule-hetznercloud
Ce projet adhère au versioning sémantique.
$ pip install --upgrade molecule-hetznercloud
molecule.yml
, renommez le nom du pilote de molécule ( driver.name
) en molecule_hetznercloud
: driver:
- name: hetznercloud
+ name: molecule_hetznercloud
molecule.yml
, le champ nom des volumes ( platforms[].volumes[].name
) est désormais obligatoire. Si le champ est manquant, vous DEVEZ l'ajouter : platforms:
- name: instance-1
image: debian-12
volumes:
- - size: 20
+ - name: volume-1
+ size: 20
Chaque nom de ressource (serveurs, volumes, réseaux) est préfixé par un hachage (32 caractères) basé sur le rôle et le chemin du scénario. Cela signifie que vous POUVEZ réutiliser les mêmes noms (par exemple instance-1
) dans vos scénarios. Les noms de ressources NE DOIVENT pas dépasser leur longueur maximale, par exemple, la longueur maximale du nom du serveur est de 63 caractères, avec le préfixe, il ne vous reste que 31 caractères pour votre nom.
Dans vos fichiers molecule.yml
, le champ type de serveur de plateformes ( platforms[].server_type
) est désormais par défaut cx22
. Si vous utilisez déjà la valeur par défaut, vous POUVEZ supprimer le champ :
platforms:
- name: instance-1
image: debian-12
- server_type: cx22
Pour communiquer avec l'API Hetzner Cloud, vous devez exposer une variable d'environnement HCLOUD_TOKEN
. Découvrez comment obtenir un jeton API Hetzner Cloud dans la documentation d'authentification.
$ export HCLOUD_TOKEN= " set_the_hcloud_token_here "
Configurez ensuite un nouveau scénario de molécule à l’aide du plugin pilote.
$ molecule init scenario --driver-name molecule_hetznercloud
Avertissement
Avec la molécule 6, la commande molecule init scenario
a abandonné la prise en charge de la configuration fournie par le pilote. Si vous utilisez une molécule >=6, veuillez copier l'exemple ci-dessous et collez-le dans le fichier molecule.yml
de votre scénario. Voir ce commit pour plus de détails.
Votre molecule/default/molecule.yml
devrait alors ressembler à ce qui suit.
---
driver :
name : molecule_hetznercloud
platforms :
- # Name of the Server to create (must be unique per Project and a valid hostname as per RFC 1123).
# required
name : instance-1
# Name of the Image the Server is created from.
# required
image : debian-12
# Name of the Server type this Server should be created with.
# default: cx22
server_type : cx22
# Name of Location to create Server in (must not be used together with datacenter).
# default: omit
location : hel1
# Name of Datacenter to create Server in (must not be used together with location).
# default: omit
datacenter : null
# Cloud-Init user data to use during Server creation. This field is limited to 32KiB.
# default: omit
user_data : null
# List of volumes to attach to the server.
volumes :
- # Name of the volume.
# required
name : volume-1
# Size of the Volume in GB.
# default: 10
size : 10
# Dictionary of private networks the server should be attached to.
networks :
# Name of the network
network-1 :
# IP range of the whole network which must span all included subnets. Must be one of the private IPv4 ranges of RFC1918.
# If multiple hosts using the same network, you may only define it once.
# required
ip_range : 10.0.0.0/16
subnet :
# IP to assign to the server.
# required
ip : 10.0.0.1/24
# Type of subnetwork.
# default: cloud
type : cloud
# Name of network zone.
# default: eu-central
network_zone : eu-central
network-2 :
ip_range : 10.1.0.0/16
subnet :
ip : 10.1.0.1/24
Note
Le networks.ip_range
est important pour la création. Si vous disposez de plusieurs hôtes, vous ne pouvez les définir qu'une seule fois.
Note
Vous pouvez lister les types de serveurs et les images disponibles à l'aide de l'outil de ligne de commande hcloud
:
# List server types
$ hcloud server-type list --sort name
# List images for the x86 architecture
$ hcloud image list --type system --architecture x86 --sort name
Testez ensuite votre rôle.
$ molecule test
Pour faciliter le débogage initial afin de démarrer les choses, exposez également les variables d'environnement suivantes.
$ export MOLECULE_NO_LOG=False # not so verbose, helpful
$ export MOLECULE_DEBUG=True # very verbose, last ditch effort
Vous pouvez également définir un espace de noms de ressources personnalisé en exposant les variables d'environnement suivantes, par exemple dans les workflows CI :
$ export RESOURCE_NAMESPACE=e121dc64ff615ccdfac71bb5c00296b9 # Ensure the value length is <= 32
Exécutez des tests unitaires :
make test
Exécuter des tests d'intégration
export HCLOUD_TOKEN= " set_the_hcloud_token_here "
make integration
Le projet était initialement maintenu par @decentral1se. Après une longue période de recherche de nouveaux mainteneurs, le projet a été archivé début 2023.
En septembre 2023, le code a été réécrit par @jooola et le projet a été réactivé pour poursuivre le développement.
La licence LGPLv3.