engine: resources: Add hetzner:vm resource
Hetzner cloud resource using hcloud-go. Requires polling via Meta:poll param. This first commit provides a stable vm resource with support for the basic functions of creating, deleting and updating a live server instance. SSH key handling does still require some attention to make sure checkapply can detect and update live changes to the specified keylist. A dedicated hetzner:sshkeys resource might be in order to make sure the keyset is handled correctly if there are multiple hetzner:vm resources running under the same Hetzner project. All remarks for future improvements are indicated with a TODO prefix
This commit is contained in:
committed by
James Shubin
parent
0ab2406db9
commit
b26f842de1
51
examples/lang/hetzner_vm0.mcl
Normal file
51
examples/lang/hetzner_vm0.mcl
Normal file
@@ -0,0 +1,51 @@
|
||||
import "os"
|
||||
#import "deploy"
|
||||
|
||||
# read token from a local path outside repo:
|
||||
$f = "../localsecrets/apitoken.txt"
|
||||
$token = os.readfile($f)
|
||||
|
||||
# alternatively, read from the deploy:
|
||||
# $token = deploy.readfile(...)
|
||||
|
||||
# or give the string directly:
|
||||
# $token = "..."
|
||||
|
||||
hetzner:vm "resourcedemo" {
|
||||
# generate a token on https://console.hetzner.cloud
|
||||
# NOTE: SSH keys must also be registered via console
|
||||
apitoken => $token,
|
||||
|
||||
# set server state (``, `absent`,`exists`, `running`, `off`)
|
||||
# default: undefined state. Don't specify this param, or set ""
|
||||
state => "absent",
|
||||
|
||||
# choose server protection policy (``, `ignore`, `ifneeded`)
|
||||
# default: `` throws error to prevent destructive rebuilds
|
||||
allowrebuild => "",
|
||||
|
||||
# serverconfig params: full options must be requested from Hetzner API
|
||||
# static reference on https://github.com/JefMasereel/hcloud-go-getopts
|
||||
# for example:
|
||||
servertype => "cx11", # `cx11`, `cx21`, `cx31`
|
||||
datacenter => "hel1-dc2", # `nbg1-dc3`, `fsn1-dc14`, `hel1-dc2`
|
||||
image => "debian-10", # `centos-7`, `ubuntu-18.04`, `debian-10`
|
||||
|
||||
# provide a cloud-init script that will be run at server creation (optional)
|
||||
userdata => "",
|
||||
|
||||
# set rescue mode (`linux32`/`linux64`/`freebsd64`/``)
|
||||
# default: `` disables rescue mode
|
||||
serverrescuemode => "linux64",
|
||||
|
||||
# list the SSH keys to be enabled when using rescue mode
|
||||
# note: must be a subset of the keys registered with the project!
|
||||
serverrescuekeys => ["bootstrap-test-key",],
|
||||
|
||||
# set wait interval and timeout in seconds
|
||||
waitinterval => 1,
|
||||
waittimeout => 5*60,
|
||||
|
||||
# set polling interval in seconds
|
||||
Meta:poll => 10,
|
||||
}
|
||||
Reference in New Issue
Block a user