Um driver Hetzner Cloud para Molecule.
Este plugin permite que você use servidores Hetzner Cloud sob demanda para seus testes de integração de moléculas.
$ pip install molecule-hetznercloud
Este projeto segue o Versionamento Semântico.
$ pip install --upgrade molecule-hetznercloud
molecule.yml
, renomeie o nome do driver da molécula ( driver.name
) para molecule_hetznercloud
: driver:
- name: hetznercloud
+ name: molecule_hetznercloud
molecule.yml
, o campo nome dos volumes ( platforms[].volumes[].name
) agora é obrigatório. Se o campo estiver faltando, você DEVE adicioná-lo: platforms:
- name: instance-1
image: debian-12
volumes:
- - size: 20
+ - name: volume-1
+ size: 20
Cada nome de recurso (servidores, volumes, redes) é prefixado com um hash (32 caracteres) com base na função e no caminho do cenário. Isso significa que você PODE reutilizar os mesmos nomes (por exemplo, instance-1
) em seus cenários. Os nomes dos recursos NÃO DEVEM exceder seu comprimento máximo, por exemplo, o comprimento máximo do nome do servidor é de 63 caracteres, com o prefixo você só tem 31 caracteres restantes para o seu nome.
Em seus arquivos molecule.yml
, o campo de tipo de servidor de plataformas ( platforms[].server_type
) agora é padronizado como cx22
. Se você já usa o padrão, PODE remover o campo:
platforms:
- name: instance-1
image: debian-12
- server_type: cx22
Para se comunicar com a API Hetzner Cloud, você precisa expor uma variável de ambiente HCLOUD_TOKEN
. Saiba mais sobre como obter um token da API Hetzner Cloud na documentação de autenticação.
$ export HCLOUD_TOKEN= " set_the_hcloud_token_here "
Em seguida, configure um novo cenário de molécula usando o plugin do driver.
$ molecule init scenario --driver-name molecule_hetznercloud
Aviso
Com a molécula 6, o comando molecule init scenario
abandonou o suporte para configuração fornecida pelo driver. Se você estiver usando molécula >=6, copie o exemplo abaixo e cole-o em seu arquivo de cenário molecule.yml
. Veja este commit para detalhes.
Sua molecule/default/molecule.yml
deve então ter a seguinte aparência.
---
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
Observação
O networks.ip_range
é importante para a criação. Se você tiver vários hosts, poderá defini-los apenas uma vez.
Observação
Você pode listar os tipos de servidores e imagens disponíveis usando a ferramenta de linha de comando 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
Em seguida, teste sua função.
$ molecule test
Para facilitar a depuração inicial para começar, exponha também as seguintes variáveis de ambiente.
$ export MOLECULE_NO_LOG=False # not so verbose, helpful
$ export MOLECULE_DEBUG=True # very verbose, last ditch effort
Você também pode definir um namespace de recurso personalizado expondo as seguintes variáveis de ambiente, por exemplo, em fluxos de trabalho de CI:
$ export RESOURCE_NAMESPACE=e121dc64ff615ccdfac71bb5c00296b9 # Ensure the value length is <= 32
Execute testes de unidade:
make test
Execute testes de integração
export HCLOUD_TOKEN= " set_the_hcloud_token_here "
make integration
O projeto foi inicialmente mantido por @decentral1se. Após um longo período buscando novos mantenedores, o projeto foi arquivado no início de 2023.
Em setembro de 2023, o código foi reescrito por @jooola e o projeto foi reativado para continuar o desenvolvimento.
A licença LGPLv3.