Molecule 用の Hetzner Cloud ドライバー。
このプラグインを使用すると、分子統合テストにオンデマンドの Hetzner Cloud サーバーを使用できるようになります。
$ 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
警告
Molecule 6 では、 molecule init scenario
コマンドはドライバー提供の構成のサポートを削除しました。 module >=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
は作成時に重要です。複数のホストがある場合、定義できるのは 1 回だけです。
注記
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 ライセンス。