114 lines
3.0 KiB
V
114 lines
3.0 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.action}, 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.action}, 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.action}, 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(name: key_name, data: 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(name: key_name)!
|
|
|
|
action.done = true
|
|
}
|
|
} |