Files
herolib/lib/virt/hetznermanager/play.v
2025-08-29 09:48:44 +02:00

113 lines
3.1 KiB
V

// File: lib/virt/hetznermanager/play.v
module hetznermanager
import freeflowuniverse.herolib.core.playbook { PlayBook }
// play processes playbook actions for the hetznermanager module.
// It allows configuring and managing Hetzner servers through heroscript.
pub fn play2(mut plbook PlayBook) ! {
// Handle rescue actions
for mut action in plbook.find(filter: 'hetznermanager.server_rescue')! {
mut p := action.params
mut cl := get(name: p.get_default('instance', 'default')!)!
id := p.get_int_default('id', 0)!
server_name := p.get_default('server_name', '')!
wait := p.get_default_true('wait')
hero_install := p.get_default_false('hero_install')
reset := p.get_default_false('reset')
retry := p.get_int_default('retry', 3)!
if server_name == '' && id == 0 {
return error("For ${action.actor}.${action.name}, either 'server_name' or 'id' must be provided.")
}
cl.server_rescue(
id: id
name: server_name
wait: wait
hero_install: hero_install
reset: reset
retry: retry
)!
action.done = true
}
// Handle ubuntu install actions
for mut action in plbook.find(filter: 'hetznermanager.ubuntu_install')! {
mut p := action.params
mut cl := get(name: p.get_default('instance', 'default')!)!
id := p.get_int_default('id', 0)!
server_name := p.get_default('server_name', '')!
wait := p.get_default_true('wait')
hero_install := p.get_default_false('hero_install')
hero_install_compile := p.get_default_false('hero_install_compile')
raid := p.get_default_false('raid')
if server_name == '' && id == 0 {
return error("For ${action.actor}.${action.name}, either 'server_name' or 'id' must be provided.")
}
cl.ubuntu_install(
id: id
name: server_name
wait: wait
hero_install: hero_install
hero_install_compile: hero_install_compile
raid: raid
)!
action.done = true
}
// Handle server reset actions
for mut action in plbook.find(filter: 'hetznermanager.server_reset')! {
mut p := action.params
mut cl := get(name: p.get_default('instance', 'default')!)!
id := p.get_int_default('id', 0)!
server_name := p.get_default('server_name', '')!
wait := p.get_default_true('wait')
msg := p.get_default('msg', '')!
if server_name == '' && id == 0 {
return error("For ${action.actor}.${action.name}, either 'server_name' or 'id' must be provided.")
}
cl.server_reset(
id: id
name: server_name
wait: wait
msg: msg
)!
action.done = true
}
// Handle SSH key creation
for mut action in plbook.find(filter: 'hetznermanager.key_create')! {
mut p := action.params
mut cl := get(name: p.get_default('instance', 'default')!)!
key_name := p.get('key_name')!
data := p.get('data')!
cl.key_create(key_name, data)!
action.done = true
}
// Handle SSH key deletion
for mut action in plbook.find(filter: 'hetznermanager.key_delete')! {
mut p := action.params
mut cl := get(name: p.get_default('instance', 'default')!)!
key_name := p.get('key_name')!
cl.key_delete(key_name)!
action.done = true
}
}