Molecule 的 Hetzner Cloud 驱动程序。
该插件允许您使用按需 Hetzner 云服务器进行分子集成测试。
$ pip install molecule-hetznercloud
该项目遵循语义版本控制。
$ pip install --upgrade molecule-hetznercloud
molecule.yml
文件中,将分子驱动程序名称 ( driver.name
) 重命名为molecule_hetznercloud
: driver:
- name: hetznercloud
+ name: molecule_hetznercloud
molecule.yml
文件中,卷名称 ( platforms[].volumes[].name
) 字段现在是必需的。如果该字段丢失,您必须添加它: platforms:
- name: instance-1
image: debian-12
volumes:
- - size: 20
+ - name: volume-1
+ size: 20
每个资源(服务器、卷、网络)名称都带有基于角色和场景路径的哈希值(32 个字符)前缀。这意味着您可以在您的场景中重复使用相同的名称(例如instance-1
)。资源名称不得超过其最大长度,例如服务器名称最大长度为 63 个字符,使用前缀后,您的名称只剩下 31 个字符。
在您的molecule.yml
文件中,平台服务器类型 ( platforms[].server_type
) 字段现在默认为cx22
。如果您已经使用默认值,则可以删除该字段:
platforms:
- name: instance-1
image: debian-12
- server_type: cx22
要与 Hetzner Cloud API 通信,您需要公开HCLOUD_TOKEN
环境变量。在身份验证文档中了解有关如何获取 Hetzner Cloud API 令牌的更多信息。
$ export HCLOUD_TOKEN= " set_the_hcloud_token_here "
然后使用驱动程序插件设置一个新的分子场景。
$ molecule init scenario --driver-name molecule_hetznercloud
警告
对于分子 6, molecule init scenario
命令放弃了对驱动程序提供的配置的支持。如果您使用的 molecular >=6,请复制下面的示例并将其粘贴到您的场景molecule.yml
文件中。有关详细信息,请参阅此提交。
您的molecule/default/molecule.yml
应如下所示。
---
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
笔记
networks.ip_range
对于创建很重要。如果您有多个主机,则只能定义一次。
笔记
您可以使用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
然后测试你的角色。
$ molecule test
为了简化初始调试以开始工作,还需公开以下环境变量。
$ export MOLECULE_NO_LOG=False # not so verbose, helpful
$ export MOLECULE_DEBUG=True # very verbose, last ditch effort
您还可以通过公开以下环境变量来定义自定义资源命名空间,例如在 CI 工作流程中:
$ export RESOURCE_NAMESPACE=e121dc64ff615ccdfac71bb5c00296b9 # Ensure the value length is <= 32
运行单元测试:
make test
运行集成测试
export HCLOUD_TOKEN= " set_the_hcloud_token_here "
make integration
该项目最初由@decentral1se 维护。经过长时间寻找新的维护者后,该项目于 2023 年初归档。
2023年9月,代码已被@jooola重写,项目重新启动继续开发。
LGPLv3 许可证。