Un controlador de Hetzner Cloud para Molecule.
Este complemento le permite utilizar servidores Hetzner Cloud bajo demanda para sus pruebas de integración de moléculas.
$ pip install molecule-hetznercloud
Este proyecto se adhiere al Versionado Semántico.
$ pip install --upgrade molecule-hetznercloud
molecule.yml
, cambie el nombre del controlador de la molecula ( driver.name
) a molecule_hetznercloud
: driver:
- name: hetznercloud
+ name: molecule_hetznercloud
molecule.yml
, el campo de nombre de volumen ( platforms[].volumes[].name
) ahora es obligatorio. Si falta el campo, DEBE agregarlo: platforms:
- name: instance-1
image: debian-12
volumes:
- - size: 20
+ - name: volume-1
+ size: 20
Cada nombre de recurso (servidores, volúmenes, redes) tiene como prefijo un hash (32 caracteres) según la función y la ruta del escenario. Esto significa que PUEDE reutilizar los mismos nombres (por ejemplo, instance-1
) en todos sus escenarios. Los nombres de los recursos no DEBEN exceder su longitud máxima, por ejemplo, la longitud máxima del nombre del servidor es de 63 caracteres, con el prefijo solo le quedan 31 caracteres para su nombre.
En sus archivos molecule.yml
, el campo tipo de servidor de plataformas ( platforms[].server_type
) ahora tiene como valor predeterminado cx22
. Si ya utiliza el valor predeterminado, PUEDE eliminar el campo:
platforms:
- name: instance-1
image: debian-12
- server_type: cx22
Para comunicarse con la API de Hetzner Cloud, debe exponer una variable de entorno HCLOUD_TOKEN
. Obtenga más información sobre cómo obtener un token API de Hetzner Cloud en la documentación de autenticación.
$ export HCLOUD_TOKEN= " set_the_hcloud_token_here "
Luego configure un nuevo escenario de molécula usando el complemento del controlador.
$ molecule init scenario --driver-name molecule_hetznercloud
Advertencia
Con la molécula 6, el comando molecule init scenario
dejó de admitir la configuración proporcionada por el controlador. Si está utilizando molécula>=6, copie el siguiente ejemplo y péguelo en el archivo molecule.yml
de su escenario. Consulte este compromiso para obtener más detalles.
Su molecule/default/molecule.yml
debería tener el siguiente aspecto.
---
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
Nota
El networks.ip_range
es importante para la creación. Si tiene varios hosts, solo puede definirlos una vez.
Nota
Puede enumerar los tipos de servidores y las imágenes disponibles utilizando la herramienta de línea de comandos 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
Entonces prueba tu papel.
$ molecule test
Para facilitar la depuración inicial y comenzar a trabajar, exponga también las siguientes variables de entorno.
$ export MOLECULE_NO_LOG=False # not so verbose, helpful
$ export MOLECULE_DEBUG=True # very verbose, last ditch effort
También puede definir un espacio de nombres de recursos personalizado exponiendo las siguientes variables de entorno, por ejemplo en flujos de trabajo de CI:
$ export RESOURCE_NAMESPACE=e121dc64ff615ccdfac71bb5c00296b9 # Ensure the value length is <= 32
Ejecute pruebas unitarias:
make test
Ejecutar pruebas de integración
export HCLOUD_TOKEN= " set_the_hcloud_token_here "
make integration
El proyecto fue mantenido inicialmente por @decentral1se. Después de un largo período buscando nuevos mantenedores, el proyecto se archivó a principios de 2023.
En septiembre de 2023, @jooola reescribió el código y el proyecto se reactivó para continuar con el desarrollo.
La licencia LGPLv3.