86 lines
1.9 KiB
V
86 lines
1.9 KiB
V
module herocontainers
|
|
|
|
import freeflowuniverse.herolib.osal
|
|
import freeflowuniverse.herolib.ui.console
|
|
import json
|
|
|
|
fn (mut e CEngine) builders_load() ! {
|
|
cmd := 'buildah containers --json'
|
|
out := osal.execute_silent(cmd)!
|
|
mut r := json.decode([]Builder, out) or { return error('Failed to decode JSON: ${err}') }
|
|
for mut item in r {
|
|
item.engine = &e
|
|
}
|
|
e.builders = r
|
|
}
|
|
|
|
@[params]
|
|
pub struct BuilderNewArgs {
|
|
pub mut:
|
|
name string = 'default'
|
|
from string = 'docker.io/archlinux:latest'
|
|
// arch_scratch bool // means start from scratch with arch linux
|
|
delete bool = true
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_new(args_ BuilderNewArgs) !Builder {
|
|
mut args := args_
|
|
if args.delete {
|
|
e.builder_delete(args.name)!
|
|
}
|
|
osal.exec(cmd: 'buildah --name ${args.name} from ${args.from}')!
|
|
e.builders_load()!
|
|
return e.builder_get(args.name)
|
|
}
|
|
|
|
// get buildah containers
|
|
pub fn (mut e CEngine) builders_get() ![]Builder {
|
|
if e.builders.len == 0 {
|
|
e.builders_load()!
|
|
}
|
|
return e.builders
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_exists(name string) !bool {
|
|
r := e.builders_get()!
|
|
res := r.filter(it.containername == name)
|
|
if res.len == 1 {
|
|
return true
|
|
}
|
|
if res.len > 1 {
|
|
panic('bug')
|
|
}
|
|
return false
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_get(name string) !Builder {
|
|
r := e.builders_get()!
|
|
res := r.filter(it.containername == name)
|
|
if res.len == 1 {
|
|
return res[0]
|
|
}
|
|
if res.len > 1 {
|
|
panic('bug')
|
|
}
|
|
return error('couldnt find builder with name ${name}')
|
|
}
|
|
|
|
pub fn (mut e CEngine) builders_delete_all() ! {
|
|
console.print_debug("remove all")
|
|
osal.execute_stdout('buildah rm -a')!
|
|
e.builders_load()!
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_delete(name string) ! {
|
|
if e.builder_exists(name)! {
|
|
console.print_debug("remove ${name}")
|
|
osal.execute_stdout('buildah rm ${name}')!
|
|
e.builders_load()!
|
|
}
|
|
}
|
|
|
|
pub fn (mut e CEngine) builder_names() ![]string {
|
|
r := e.builders_get()!
|
|
return r.map(it.containername)
|
|
}
|