fixed installers
This commit is contained in:
@@ -1,20 +1,27 @@
|
||||
#!/usr/bin/env -S v -n -w -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||
#!/usr/bin/env -S v -n -w -cg -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||
|
||||
import freeflowuniverse.herolib.data.dbfs
|
||||
import freeflowuniverse.herolib.installers.lang.vlang
|
||||
import freeflowuniverse.herolib.installers.db.redis as redis_installer
|
||||
import freeflowuniverse.herolib.installers.infra.coredns as coredns_installer
|
||||
import freeflowuniverse.herolib.installers.sysadmintools.daguserver as dagu_installer
|
||||
import freeflowuniverse.herolib.installers.sysadmintools.b2 as b2_installer
|
||||
import freeflowuniverse.herolib.installers.net.mycelium as mycelium_installer
|
||||
import freeflowuniverse.herolib.osal.screen
|
||||
|
||||
import freeflowuniverse.herolib.installers.lang.rust
|
||||
import freeflowuniverse.herolib.installers.lang.python
|
||||
import freeflowuniverse.herolib.installers.lang.nodejs
|
||||
import freeflowuniverse.herolib.installers.lang.golang
|
||||
|
||||
|
||||
// import freeflowuniverse.herolib.data.dbfs
|
||||
// import freeflowuniverse.herolib.installers.lang.vlang
|
||||
// import freeflowuniverse.herolib.installers.db.redis as redis_installer
|
||||
// import freeflowuniverse.herolib.installers.infra.coredns as coredns_installer
|
||||
// import freeflowuniverse.herolib.installers.sysadmintools.daguserver as dagu_installer
|
||||
// import freeflowuniverse.herolib.installers.sysadmintools.b2 as b2_installer
|
||||
// import freeflowuniverse.herolib.installers.net.mycelium as mycelium_installer
|
||||
// import freeflowuniverse.herolib.osal.screen
|
||||
// import freeflowuniverse.herolib.osal
|
||||
|
||||
// redis_installer.new()!
|
||||
// dagu_installer.install(passwd:"1234",secret:"1234",restart:true)!
|
||||
|
||||
// coredns_installer.install()!
|
||||
mycelium_installer.install()!
|
||||
// mycelium_installer.install()!
|
||||
// mycelium_installer.restart()!
|
||||
|
||||
// mut screens:=screen.new()!
|
||||
@@ -22,6 +29,10 @@ mycelium_installer.install()!
|
||||
|
||||
// dagu_installer.check(secret:"1234")!
|
||||
|
||||
vlang.v_analyzer_install()!
|
||||
// vlang.v_analyzer_install()!
|
||||
|
||||
// b2_installer.install()!
|
||||
|
||||
// rust.install(reset:false)!
|
||||
|
||||
nodejs.install(reset:false)!
|
||||
@@ -28,6 +28,7 @@ pub enum Cat {
|
||||
installer
|
||||
}
|
||||
|
||||
//creates the heroscript from the GenModel as part of GenerateArgs
|
||||
pub fn gen_model_set(args GenerateArgs) ! {
|
||||
console.print_debug('Code generator set: ${args}')
|
||||
model := args.model or { return error('model is none') }
|
||||
@@ -40,6 +41,7 @@ pub fn gen_model_set(args GenerateArgs) ! {
|
||||
pathlib.template_write(heroscript_templ, '${args.path}/.heroscript', true)!
|
||||
}
|
||||
|
||||
//loads the heroscript and return the model
|
||||
pub fn gen_model_get(path string, create bool) !GenModel {
|
||||
console.print_debug('play installer code for path: ${path}')
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
import freeflowuniverse.herolib.core.texttools
|
||||
import freeflowuniverse.herolib.core.pathlib
|
||||
import freeflowuniverse.herolib.installers.ulist
|
||||
import freeflowuniverse.herolib.installers.base
|
||||
|
||||
@if model.startupmanager
|
||||
import freeflowuniverse.herolib.osal.systemd
|
||||
@@ -11,7 +13,6 @@ import freeflowuniverse.herolib.osal.zinit
|
||||
@end
|
||||
|
||||
@if model.build
|
||||
import freeflowuniverse.herolib.installers.ulist
|
||||
import freeflowuniverse.herolib.installers.lang.golang
|
||||
import freeflowuniverse.herolib.installers.lang.rust
|
||||
import freeflowuniverse.herolib.installers.lang.python
|
||||
@@ -36,7 +37,7 @@ fn startupcmd () ![]zinit.ZProcessNewArgs{
|
||||
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
//THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of ${model.name}
|
||||
@@ -80,7 +81,7 @@ fn stop_post()!{
|
||||
|
||||
@if model.cat == .installer
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
//THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('??{osal.profile_path_source_and()} ${model.name} version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -103,7 +104,7 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
//uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: '${model.name}'
|
||||
// source: '??{gitpath}/target/x86_64-unknown-linux-musl/release/${model.name}'
|
||||
@@ -111,7 +112,7 @@ fn upload() ! {
|
||||
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install ${model.name}')
|
||||
//THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -143,7 +144,7 @@ fn install() ! {
|
||||
}
|
||||
|
||||
@if model.build
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
//url := 'https://github.com/threefoldtech/${model.name}'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -174,7 +175,7 @@ fn build() ! {
|
||||
}
|
||||
@end
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
@@ -21,13 +21,15 @@ __global (
|
||||
|
||||
/////////FACTORY
|
||||
|
||||
|
||||
@if model.singleton == false
|
||||
|
||||
^^[params]
|
||||
pub struct ArgsGet{
|
||||
pub mut:
|
||||
name string
|
||||
}
|
||||
|
||||
@if model.hasconfig
|
||||
fn args_get (args_ ArgsGet) ArgsGet {
|
||||
mut model:=args_
|
||||
if model.name == ""{
|
||||
@@ -41,7 +43,7 @@ fn args_get (args_ ArgsGet) ArgsGet {
|
||||
|
||||
pub fn get(args_ ArgsGet) !&${model.classname} {
|
||||
mut args := args_get(args_)
|
||||
if !(args.name in ${args.name}_global) {
|
||||
if !(args.name in ${model.name}_global) {
|
||||
if args.name=="default"{
|
||||
if ! config_exists(args){
|
||||
if default{
|
||||
@@ -52,36 +54,32 @@ pub fn get(args_ ArgsGet) !&${model.classname} {
|
||||
load(args)!
|
||||
}
|
||||
}
|
||||
return ${args.name}_global[args.name] or {
|
||||
println(${args.name}_global)
|
||||
panic("could not get config for ${args.name} with name:??{model.name}")
|
||||
return ${model.name}_global[args.name] or {
|
||||
println(${model.name}_global)
|
||||
panic("could not get config for ??{args.name} with name:??{model.name}")
|
||||
}
|
||||
}
|
||||
|
||||
@else
|
||||
pub fn get(args_ ArgsGet) !&${model.classname} {
|
||||
return &${model.classname}{}
|
||||
}
|
||||
@end
|
||||
|
||||
@if model.hasconfig
|
||||
|
||||
//set the model in mem and the config on the filesystem
|
||||
fn set(o ${model.classname})! {
|
||||
pub fn set(o ${model.classname})! {
|
||||
mut o2:=obj_init(o)!
|
||||
${model.name}_global[o.name] = &o2
|
||||
${model.name}_default = o.name
|
||||
}
|
||||
|
||||
//check we find the config on the filesystem
|
||||
fn exists(args_ ArgsGet) bool {
|
||||
pub fn exists(args_ ArgsGet) bool {
|
||||
mut model := args_get(args_)
|
||||
mut context:=base.context() or { panic("bug") }
|
||||
return context.hero_config_exists("${model.name}",model.name)
|
||||
}
|
||||
|
||||
//load the config error if it doesn't exist
|
||||
fn load(args_ ArgsGet) ! {
|
||||
pub fn load(args_ ArgsGet) ! {
|
||||
mut model := args_get(args_)
|
||||
mut context:=base.context()!
|
||||
mut heroscript := context.hero_config_get("${model.name}",model.name)!
|
||||
@@ -89,15 +87,12 @@ fn load(args_ ArgsGet) ! {
|
||||
}
|
||||
|
||||
//save the config to the filesystem in the context
|
||||
fn save(o ${model.classname})! {
|
||||
mut model := args_get(args_)
|
||||
pub fn save(o ${model.classname})! {
|
||||
mut context:=base.context()!
|
||||
heroscript := encoderhero.encode[${model.classname}](o2)!
|
||||
heroscript := encoderhero.encode[${model.classname}](o)!
|
||||
context.hero_config_set("${model.name}",model.name,heroscript)!
|
||||
}
|
||||
|
||||
|
||||
|
||||
^^[params]
|
||||
pub struct PlayArgs {
|
||||
pub mut:
|
||||
@@ -120,13 +115,14 @@ pub fn play(args_ PlayArgs) ! {
|
||||
}
|
||||
|
||||
@if model.hasconfig
|
||||
mut install_actions := plbook.find(filter: '${model.name}.configure')!
|
||||
if install_actions.len > 0 {
|
||||
for install_action in install_actions {
|
||||
mut p := install_action.params
|
||||
mut configure_actions := plbook.find(filter: '${model.name}.configure')!
|
||||
if configure_actions.len > 0 {
|
||||
for config_action in configure_actions {
|
||||
mut p := config_action.params
|
||||
mycfg:=cfg_play(p)!
|
||||
console.print_debug("install action ${model.name}.configure\n??{mycfg}")
|
||||
set(mycfg)!
|
||||
save(mycfg)!
|
||||
}
|
||||
}
|
||||
@end
|
||||
@@ -139,11 +135,11 @@ pub fn play(args_ PlayArgs) ! {
|
||||
reset:=p.get_default_false("reset")
|
||||
if other_action.name == "destroy" || reset{
|
||||
console.print_debug("install action ${model.name}.destroy")
|
||||
destroy()!
|
||||
destroy_()!
|
||||
}
|
||||
if other_action.name == "install"{
|
||||
console.print_debug("install action ${model.name}.install")
|
||||
install()!
|
||||
install_()!
|
||||
}
|
||||
}
|
||||
@if model.startupmanager
|
||||
@@ -180,6 +176,17 @@ pub fn play(args_ PlayArgs) ! {
|
||||
//////////////////////////# LIVE CYCLE MANAGEMENT FOR INSTALLERS ///////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@if model.hasconfig
|
||||
//load from disk and make sure is properly intialized
|
||||
pub fn (mut self ${model.classname}) reload() ! {
|
||||
switch(self.name)
|
||||
self=obj_init(self)!
|
||||
}
|
||||
@end
|
||||
|
||||
@if model.startupmanager
|
||||
|
||||
fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManager {
|
||||
// unknown
|
||||
// screen
|
||||
@@ -201,15 +208,6 @@ fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManag
|
||||
}
|
||||
}
|
||||
|
||||
@if model.hasconfig
|
||||
//load from disk and make sure is properly intialized
|
||||
pub fn (mut self ${model.classname}) reload() ! {
|
||||
switch(self.name)
|
||||
self=obj_init(self)!
|
||||
}
|
||||
@end
|
||||
|
||||
@if model.startupmanager
|
||||
pub fn (mut self ${model.classname}) start() ! {
|
||||
switch(self.name)
|
||||
if self.running()!{
|
||||
@@ -218,8 +216,8 @@ pub fn (mut self ${model.classname}) start() ! {
|
||||
|
||||
console.print_header('${model.name} start')
|
||||
|
||||
if ! installed()!{
|
||||
install()!
|
||||
if ! installed_()!{
|
||||
install_()!
|
||||
}
|
||||
|
||||
configure()!
|
||||
@@ -291,17 +289,50 @@ pub mut:
|
||||
reset bool
|
||||
}
|
||||
|
||||
pub fn (mut self ${model.classname}) install(model InstallArgs) ! {
|
||||
switch(self.name)
|
||||
if model.reset || (!installed()!) {
|
||||
install()!
|
||||
@if model.singleton
|
||||
|
||||
pub fn install(args InstallArgs) ! {
|
||||
if args.reset {
|
||||
destroy()!
|
||||
}
|
||||
if ! (installed_()!){
|
||||
install_()!
|
||||
}
|
||||
}
|
||||
|
||||
pub fn destroy() ! {
|
||||
destroy_()!
|
||||
}
|
||||
|
||||
@if model.build
|
||||
pub fn build() ! {
|
||||
build_()!
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
@else
|
||||
|
||||
//switch instance to be used for ${model.name}
|
||||
pub fn switch(name string) {
|
||||
${model.name}_default = name
|
||||
}
|
||||
|
||||
|
||||
pub fn (mut self ${model.classname}) install(args InstallArgs) ! {
|
||||
switch(self.name)
|
||||
if args.reset {
|
||||
destroy_()!
|
||||
}
|
||||
if ! (installed_()!){
|
||||
install_()!
|
||||
}
|
||||
}
|
||||
|
||||
@if model.build
|
||||
pub fn (mut self ${model.classname}) build() ! {
|
||||
switch(self.name)
|
||||
build()!
|
||||
build_()!
|
||||
}
|
||||
@end
|
||||
|
||||
@@ -310,13 +341,11 @@ pub fn (mut self ${model.classname}) destroy() ! {
|
||||
@if model.startupmanager
|
||||
self.stop() or {}
|
||||
@end
|
||||
destroy()!
|
||||
destroy_()!
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@end
|
||||
|
||||
|
||||
//switch instance to be used for ${model.name}
|
||||
pub fn switch(name string) {
|
||||
${model.name}_default = name
|
||||
}
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
module base
|
||||
|
||||
import freeflowuniverse.herolib.core.pathlib
|
||||
import freeflowuniverse.herolib.core.texttools
|
||||
import os
|
||||
|
||||
const scriptspath = os.dir(@FILE) + '/../../../scripts'
|
||||
|
||||
fn script_write(mybase string, name string, cmd_ string) ! {
|
||||
cmd := texttools.dedent(cmd_)
|
||||
mut out := '${mybase}\n'
|
||||
for line in cmd.split_into_lines() {
|
||||
out += '${line}\n'
|
||||
}
|
||||
mut p := pathlib.get_file(path: '${scriptspath}/${name}.sh', create: true)!
|
||||
p.write(out)!
|
||||
os.chmod(p.path, 0o777)!
|
||||
}
|
||||
|
||||
pub fn bash_installers_package() !string {
|
||||
l := '
|
||||
1_init.sh
|
||||
2_myplatform.sh
|
||||
3_gittools.sh
|
||||
4_package.sh
|
||||
5_exec.sh
|
||||
6_reset.sh
|
||||
7_zinit.sh
|
||||
8_osupdate.sh
|
||||
9_redis.sh
|
||||
10_installer_v.sh
|
||||
11_installer_herolib.sh
|
||||
12_installer_hero.sh
|
||||
13_s3.sh
|
||||
20_installers.sh
|
||||
'
|
||||
mut out := ''
|
||||
for mut name in l.split_into_lines() {
|
||||
name = name.trim_space()
|
||||
if name == '' {
|
||||
continue
|
||||
}
|
||||
mut p := pathlib.get_file(path: '${scriptspath}/lib/${name}', create: false)!
|
||||
c := p.read()!
|
||||
out += c
|
||||
}
|
||||
|
||||
script_write(out, 'baselib', '')!
|
||||
|
||||
script_write(out, 'installer', "
|
||||
freeflow_dev_env_install
|
||||
echo 'V & hero INSTALL OK'
|
||||
")!
|
||||
|
||||
script_write(out, 'build_hero', "
|
||||
hero_build
|
||||
echo 'BUILD HERO OK'
|
||||
")!
|
||||
|
||||
script_write(out, 'install_hero', "
|
||||
hero_install
|
||||
echo 'INSTALL HERO OK'
|
||||
")!
|
||||
|
||||
script_write(out, 'githubactions', "
|
||||
hero_build
|
||||
hero_test
|
||||
hero_upload
|
||||
echo 'OK'
|
||||
")!
|
||||
|
||||
mut p4 := pathlib.get_dir(path: '${scriptspath}', create: false)!
|
||||
return p4.path
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -ux -o pipefail
|
||||
|
||||
# Function to check if a command exists
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
|
||||
if command_exists brew; then
|
||||
# Uninstall Homebrew and all installed packages
|
||||
echo "Uninstalling Homebrew and all packages..."
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)"
|
||||
|
||||
# Verify removal and cleanup any remaining files
|
||||
echo "Cleaning up remaining files and verifying removal..."
|
||||
brew cleanup 2>/dev/null
|
||||
|
||||
sudo rm -rf /opt/homebrew
|
||||
|
||||
echo "Uninstallation process completed for brew."
|
||||
fi
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -u -o pipefail
|
||||
|
||||
# Function to check if a command exists
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# Stop all running Docker containers and remove Docker images, containers, and volumes
|
||||
if command_exists docker; then
|
||||
echo "Removing all Docker containers, images, and volumes..."
|
||||
docker stop $(docker ps -a -q) 2>/dev/null
|
||||
docker rm $(docker ps -a -q) 2>/dev/null
|
||||
docker rmi $(docker images -q) 2>/dev/null
|
||||
docker volume rm $(docker volume ls -q) 2>/dev/null
|
||||
docker system prune -a -f --volumes 2>/dev/null
|
||||
osascript -e 'quit app "Docker"'
|
||||
sudo rm -rf /Applications/Docker.app
|
||||
rm -f ~/Library/Preferences/com.docker.docker.plist
|
||||
rm -rf ~/Library/Saved\ Application\ State/com.electron.docker-frontend.savedState
|
||||
rm -rf ~/Library/Containers/com.docker.docker
|
||||
rm -rf ~/Library/Containers/com.docker.helper
|
||||
rm -rf ~/Library/Application\ Support/Docker\ Desktop
|
||||
rm -rf ~/.docker
|
||||
else
|
||||
echo "Docker is not installed. Skipping Docker cleanup."
|
||||
fi
|
||||
|
||||
|
||||
# Remove binaries from ~/hero/bin
|
||||
echo "Removing binaries from ~/hero/bin..."
|
||||
rm -f ~/hero/bin/lima*
|
||||
rm -f ~/hero/bin/docker*
|
||||
rm -f ~/hero/bin/herocontainers*
|
||||
rm -f ~/hero/bin/kube*
|
||||
|
||||
# Remove Lima VMs
|
||||
if command_exists limactl; then
|
||||
echo "Removing Lima VMs..."
|
||||
limactl stop $(limactl list --quiet) 2>/dev/null
|
||||
limactl delete --force $(limactl list --quiet) 2>/dev/null
|
||||
limactl list
|
||||
rm -rf ~/.lima
|
||||
else
|
||||
echo "limactl is not installed. Skipping Lima VM removal."
|
||||
fi
|
||||
|
||||
echo "Remove containers process completed."
|
||||
@@ -1,43 +0,0 @@
|
||||
module base
|
||||
|
||||
import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
import os
|
||||
|
||||
const templatespath = os.dir(@FILE) + '/templates'
|
||||
|
||||
// install base will return true if it was already installed
|
||||
pub fn osx_uninstall_containers() ! {
|
||||
console.print_header('Uninstall Containers')
|
||||
pl := osal.platform()
|
||||
if pl != .osx {
|
||||
return error('only support OSX')
|
||||
}
|
||||
|
||||
containers_uninstall_file := $embed_file('templates/containers_uninstall.sh')
|
||||
osal.exec(
|
||||
cmd: containers_uninstall_file.to_string()
|
||||
stdout: false
|
||||
ignore_error: false
|
||||
shell: true
|
||||
) or { return error('cannot uninstall containers, something went wrong.\n${err}') }
|
||||
|
||||
// will never come here because of shell: true
|
||||
console.print_header('Removed brew and docker ...')
|
||||
}
|
||||
|
||||
// pub fn osx_uninstall_brew() ! {
|
||||
// console.print_header('Uninstall Brew')
|
||||
// pl := osal.platform()
|
||||
// if pl != .osx {
|
||||
// return error("only support OSX")
|
||||
// }
|
||||
// return error('cannot uninstall containers, something went wrong.\n${err}')
|
||||
|
||||
// brew_uninstall_file:=$embed_file('templates/brew_uninstall.sh')
|
||||
// osal.exec(cmd: brew_uninstall_file.to_string(), stdout: true, ignore_error:false, shell: true
|
||||
// ) or { return error('cannot uninstall brew, something went wrong.\n${err}') }
|
||||
|
||||
// //will never come here because of shell: true
|
||||
// console.print_header('Removed brew and docker ...')
|
||||
// }
|
||||
@@ -8,7 +8,7 @@ import freeflowuniverse.herolib.installers.ulist
|
||||
// import freeflowuniverse.herolib.installers.lang.rust
|
||||
import os
|
||||
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} meilisearch -V')
|
||||
if res.exit_code != 0 {
|
||||
return false
|
||||
@@ -24,7 +24,7 @@ fn installed() !bool {
|
||||
return true
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install meilisearch')
|
||||
mut url := ''
|
||||
|
||||
@@ -55,7 +55,7 @@ fn install() ! {
|
||||
)!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// mut installer := get()!
|
||||
// url := 'https://github.com/threefoldtech/meilisearch'
|
||||
|
||||
@@ -94,7 +94,7 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// mut installer := get()!
|
||||
// installers.upload(
|
||||
// cmdname: 'meilisearch'
|
||||
@@ -117,7 +117,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of meilisearch
|
||||
@@ -151,7 +151,7 @@ fn stop_pre() ! {
|
||||
fn stop_post() ! {
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("meilisearch")!
|
||||
|
||||
|
||||
@@ -3,11 +3,11 @@ module postgresql
|
||||
import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.osal.zinit
|
||||
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
return true
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
osal.execute_silent('podman pull docker.io/library/postgres:latest')!
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut mydb := get()!
|
||||
mydb.check() or { return false }
|
||||
return true
|
||||
@@ -47,7 +47,7 @@ fn stop_pre() ! {
|
||||
fn stop_post() ! {
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
mut mydb := get()!
|
||||
mydb.destroy()!
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import freeflowuniverse.herolib.installers.base
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
// install zdb will return true if it was already installed
|
||||
pub fn build() ! {
|
||||
pub fn build_() ! {
|
||||
base.install()!
|
||||
console.print_header('package_install install zdb')
|
||||
if !osal.done_exists('install_zdb') && !osal.cmd_exists('zdb') {
|
||||
|
||||
@@ -24,7 +24,7 @@ pub mut:
|
||||
rotateperiod int = 1200 // 20 min
|
||||
}
|
||||
|
||||
pub fn install(args_ InstallArgs) ! {
|
||||
pub fn install_(args_ InstallArgs) ! {
|
||||
mut args := args_
|
||||
version := '2.0.7'
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of zerodb
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} zerodb version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'zerodb'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/zerodb'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install zerodb')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/zerodb'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import freeflowuniverse.herolib.develop.gittools
|
||||
import freeflowuniverse.herolib.installers.zinit
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
pub fn install() ! {
|
||||
pub fn install_() ! {
|
||||
rust.install()!
|
||||
zinit.install()!
|
||||
console.print_header('install rfs')
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of zerofs
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} zerofs version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'zerofs'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/zerofs'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install zerofs')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/zerofs'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ pub mut:
|
||||
example bool // if true we will install examples
|
||||
}
|
||||
|
||||
pub fn install(args_ InstallArgs) ! {
|
||||
pub fn install_(args_ InstallArgs) ! {
|
||||
mut args := args_
|
||||
version := '1.11.1'
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.core.pathlib
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
pub fn install() ! {
|
||||
pub fn install_() ! {
|
||||
if osal.platform() != .ubuntu || osal.platform() != .arch {
|
||||
return error('only support ubuntu and arch for now')
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import json
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} livekit-server -v')
|
||||
if res.exit_code != 0 {
|
||||
return false
|
||||
@@ -25,7 +25,7 @@ fn installed() !bool {
|
||||
return true
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install livekit')
|
||||
mut installer := get()!
|
||||
osal.execute_silent('
|
||||
@@ -45,7 +45,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
|
||||
myport := installer.nr * 2 + 7880
|
||||
@@ -90,7 +90,7 @@ fn stop_post() ! {
|
||||
// Post-stop cleanup if needed
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
mut installer := get()!
|
||||
os.rm(installer.configpath) or {}
|
||||
os.rm('livekit-server') or {}
|
||||
|
||||
@@ -8,7 +8,7 @@ import freeflowuniverse.herolib.installers.ulist
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} go version')
|
||||
if res.exit_code == 0 {
|
||||
r := res.output.split_into_lines()
|
||||
@@ -29,7 +29,7 @@ fn installed() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install golang')
|
||||
base.install()!
|
||||
//destroy()!
|
||||
@@ -62,7 +62,7 @@ fn install() ! {
|
||||
osal.profile_path_add_remove(paths2add: '${go_dest}/bin')!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
}
|
||||
|
||||
// get the Upload List of the files
|
||||
@@ -72,7 +72,7 @@ fn ulist_get() !ulist.UList {
|
||||
return ulist.UList{}
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
console.print_debug('golang destroy')
|
||||
|
||||
osal.package_remove('golang')!
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
default: true
|
||||
title: ""
|
||||
templates: false
|
||||
build: true
|
||||
startupmanager: true
|
||||
build: false
|
||||
startupmanager: false
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import freeflowuniverse.herolib.osal
|
||||
// reset bool
|
||||
// }
|
||||
|
||||
// pub fn install(args_ InstallArgs) ! {
|
||||
// pub fn install_(args_ InstallArgs) ! {
|
||||
// _ := args_
|
||||
// pl := osal.platform()
|
||||
// if pl == .arch {
|
||||
|
||||
@@ -4,184 +4,64 @@ import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
import freeflowuniverse.herolib.core.texttools
|
||||
import freeflowuniverse.herolib.core.pathlib
|
||||
import freeflowuniverse.herolib.osal.systemd
|
||||
import freeflowuniverse.herolib.osal.zinit
|
||||
import freeflowuniverse.herolib.installers.ulist
|
||||
import freeflowuniverse.herolib.installers.lang.golang
|
||||
import freeflowuniverse.herolib.installers.lang.rust
|
||||
import freeflowuniverse.herolib.installers.lang.python
|
||||
import freeflowuniverse.herolib.installers.base
|
||||
|
||||
|
||||
|
||||
import os
|
||||
|
||||
fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
mut installer := get()!
|
||||
mut res := []zinit.ZProcessNewArgs{}
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res << zinit.ZProcessNewArgs{
|
||||
// name: 'nodejs'
|
||||
// cmd: 'nodejs server'
|
||||
// env: {
|
||||
// 'HOME': '/root'
|
||||
// }
|
||||
// }
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of nodejs
|
||||
// curl http://localhost:3333/api/v1/s --oauth2-bearer 1234 works
|
||||
// url:='http://127.0.0.1:${cfg.port}/api/v1'
|
||||
// mut conn := httpconnection.new(name: 'nodejs', url: url)!
|
||||
|
||||
// if cfg.secret.len > 0 {
|
||||
// conn.default_header.add(.authorization, 'Bearer ${cfg.secret}')
|
||||
// }
|
||||
// conn.default_header.add(.content_type, 'application/json')
|
||||
// console.print_debug("curl -X 'GET' '${url}'/tags --oauth2-bearer ${cfg.secret}")
|
||||
// r := conn.get_json_dict(prefix: 'tags', debug: false) or {return false}
|
||||
// println(r)
|
||||
// if true{panic("ssss")}
|
||||
// tags := r['Tags'] or { return false }
|
||||
// console.print_debug(tags)
|
||||
// console.print_debug('nodejs is answering.')
|
||||
return false
|
||||
}
|
||||
|
||||
fn start_pre() ! {
|
||||
}
|
||||
|
||||
fn start_post() ! {
|
||||
}
|
||||
|
||||
fn stop_pre() ! {
|
||||
}
|
||||
|
||||
fn stop_post() ! {
|
||||
}
|
||||
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} nodejs version')
|
||||
// if res.exit_code != 0 {
|
||||
// return false
|
||||
// }
|
||||
// r := res.output.split_into_lines().filter(it.trim_space().len > 0)
|
||||
// if r.len != 1 {
|
||||
// return error("couldn't parse nodejs version.\n${res.output}")
|
||||
// }
|
||||
// if texttools.version(version) == texttools.version(r[0]) {
|
||||
// return true
|
||||
// }
|
||||
return false
|
||||
fn installed_() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// get the Upload List of the files
|
||||
//get the Upload List of the files
|
||||
fn ulist_get() !ulist.UList {
|
||||
// optionally build a UList which is all paths which are result of building, is then used e.g. in upload
|
||||
return ulist.UList{}
|
||||
//optionally build a UList which is all paths which are result of building, is then used e.g. in upload
|
||||
return ulist.UList{}
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'nodejs'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/nodejs'
|
||||
// )!
|
||||
//uploads to S3 server if configured
|
||||
fn upload_() ! {
|
||||
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
console.print_header('install nodejs')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
// if osal.is_linux_arm() {
|
||||
// url = 'https://github.com/nodejs-dev/nodejs/releases/download/v${version}/nodejs_${version}_linux_arm64.tar.gz'
|
||||
// } else if osal.is_linux_intel() {
|
||||
// url = 'https://github.com/nodejs-dev/nodejs/releases/download/v${version}/nodejs_${version}_linux_amd64.tar.gz'
|
||||
// } else if osal.is_osx_arm() {
|
||||
// url = 'https://github.com/nodejs-dev/nodejs/releases/download/v${version}/nodejs_${version}_darwin_arm64.tar.gz'
|
||||
// } else if osal.is_osx_intel() {
|
||||
// url = 'https://github.com/nodejs-dev/nodejs/releases/download/v${version}/nodejs_${version}_darwin_amd64.tar.gz'
|
||||
// } else {
|
||||
// return error('unsported platform')
|
||||
// }
|
||||
|
||||
// mut dest := osal.download(
|
||||
// url: url
|
||||
// minsize_kb: 9000
|
||||
// expand_dir: '/tmp/nodejs'
|
||||
// )!
|
||||
|
||||
// //dest.moveup_single_subdir()!
|
||||
|
||||
// mut binpath := dest.file_get('nodejs')!
|
||||
// osal.cmd_add(
|
||||
// cmdname: 'nodejs'
|
||||
// source: binpath.path
|
||||
// )!
|
||||
fn install_() ! {
|
||||
console.print_header('install nodejs')
|
||||
osal.package_install('pnpm')!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
// url := 'https://github.com/threefoldtech/nodejs'
|
||||
|
||||
// make sure we install base on the node
|
||||
// if osal.platform() != .ubuntu {
|
||||
// return error('only support ubuntu for now')
|
||||
// }
|
||||
// golang.install()!
|
||||
fn destroy_() ! {
|
||||
|
||||
// console.print_header('build nodejs')
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
// gitpath := gittools.get_repo(coderoot: '/tmp/builder', url: url, reset: true, pull: true)!
|
||||
// osal.process_kill_recursive(name:'zinit')!
|
||||
// osal.cmd_delete('zinit')!
|
||||
|
||||
osal.package_remove('
|
||||
pnpm
|
||||
')!
|
||||
|
||||
// //will remove all paths where go/bin is found
|
||||
// osal.profile_path_add_remove(paths2delete:"go/bin")!
|
||||
|
||||
// osal.rm("
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// /var/lib/containers
|
||||
// /var/lib/podman
|
||||
// /var/lib/buildah
|
||||
// /tmp/podman
|
||||
// /tmp/conmon
|
||||
// ")!
|
||||
|
||||
// cmd := '
|
||||
// cd ${gitpath}
|
||||
// source ~/.cargo/env
|
||||
// exit 1 #todo
|
||||
// '
|
||||
// osal.execute_stdout(cmd)!
|
||||
//
|
||||
// //now copy to the default bin path
|
||||
// mut binpath := dest.file_get('...')!
|
||||
// adds it to path
|
||||
// osal.cmd_add(
|
||||
// cmdname: 'griddriver2'
|
||||
// source: binpath.path
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
// osal.process_kill_recursive(name:'zinit')!
|
||||
// osal.cmd_delete('zinit')!
|
||||
|
||||
// osal.package_remove('
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// ')!
|
||||
|
||||
// //will remove all paths where go/bin is found
|
||||
// osal.profile_path_add_remove(paths2delete:"go/bin")!
|
||||
|
||||
// osal.rm("
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// /var/lib/containers
|
||||
// /var/lib/podman
|
||||
// /var/lib/buildah
|
||||
// /tmp/podman
|
||||
// /tmp/conmon
|
||||
// ")!
|
||||
}
|
||||
|
||||
@@ -1,153 +1,54 @@
|
||||
|
||||
module nodejs
|
||||
|
||||
import freeflowuniverse.herolib.core.base
|
||||
import freeflowuniverse.herolib.core.playbook
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
import freeflowuniverse.herolib.sysadmin.startupmanager
|
||||
import freeflowuniverse.herolib.osal.zinit
|
||||
import time
|
||||
|
||||
__global (
|
||||
nodejs_global map[string]&NodeJS
|
||||
nodejs_default string
|
||||
nodejs_global map[string]&NodeJS
|
||||
nodejs_default string
|
||||
)
|
||||
|
||||
/////////FACTORY
|
||||
|
||||
@[params]
|
||||
pub struct ArgsGet {
|
||||
pub mut:
|
||||
name string
|
||||
}
|
||||
|
||||
pub fn get(args_ ArgsGet) !&NodeJS {
|
||||
return &NodeJS{}
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////# LIVE CYCLE MANAGEMENT FOR INSTALLERS ///////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManager {
|
||||
// unknown
|
||||
// screen
|
||||
// zinit
|
||||
// tmux
|
||||
// systemd
|
||||
match cat {
|
||||
.zinit {
|
||||
console.print_debug('startupmanager: zinit')
|
||||
return startupmanager.get(cat: .zinit)!
|
||||
}
|
||||
.systemd {
|
||||
console.print_debug('startupmanager: systemd')
|
||||
return startupmanager.get(cat: .systemd)!
|
||||
}
|
||||
else {
|
||||
console.print_debug('startupmanager: auto')
|
||||
return startupmanager.get()!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (mut self NodeJS) start() ! {
|
||||
switch(self.name)
|
||||
if self.running()! {
|
||||
return
|
||||
}
|
||||
|
||||
console.print_header('nodejs start')
|
||||
|
||||
if !installed()! {
|
||||
install()!
|
||||
}
|
||||
|
||||
configure()!
|
||||
|
||||
start_pre()!
|
||||
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
|
||||
console.print_debug('starting nodejs with ${zprocess.startuptype}...')
|
||||
|
||||
sm.new(zprocess)!
|
||||
|
||||
sm.start(zprocess.name)!
|
||||
}
|
||||
|
||||
start_post()!
|
||||
|
||||
for _ in 0 .. 50 {
|
||||
if self.running()! {
|
||||
return
|
||||
}
|
||||
time.sleep(100 * time.millisecond)
|
||||
}
|
||||
return error('nodejs did not install properly.')
|
||||
}
|
||||
|
||||
pub fn (mut self NodeJS) install_start(model InstallArgs) ! {
|
||||
switch(self.name)
|
||||
self.install(model)!
|
||||
self.start()!
|
||||
}
|
||||
|
||||
pub fn (mut self NodeJS) stop() ! {
|
||||
switch(self.name)
|
||||
stop_pre()!
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
sm.stop(zprocess.name)!
|
||||
}
|
||||
stop_post()!
|
||||
}
|
||||
|
||||
pub fn (mut self NodeJS) restart() ! {
|
||||
switch(self.name)
|
||||
self.stop()!
|
||||
self.start()!
|
||||
}
|
||||
|
||||
pub fn (mut self NodeJS) running() !bool {
|
||||
switch(self.name)
|
||||
|
||||
// walk over the generic processes, if not running return
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
r := sm.running(zprocess.name)!
|
||||
if r == false {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return running()!
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct InstallArgs {
|
||||
pub struct InstallArgs{
|
||||
pub mut:
|
||||
reset bool
|
||||
reset bool
|
||||
}
|
||||
|
||||
pub fn (mut self NodeJS) install(model InstallArgs) ! {
|
||||
switch(self.name)
|
||||
if model.reset || (!installed()!) {
|
||||
install()!
|
||||
}
|
||||
|
||||
pub fn install(args InstallArgs) ! {
|
||||
if args.reset {
|
||||
destroy()!
|
||||
}
|
||||
if ! (installed_()!){
|
||||
install_()!
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (mut self NodeJS) build() ! {
|
||||
switch(self.name)
|
||||
build()!
|
||||
pub fn destroy() ! {
|
||||
destroy_()!
|
||||
}
|
||||
|
||||
pub fn (mut self NodeJS) destroy() ! {
|
||||
switch(self.name)
|
||||
self.stop() or {}
|
||||
destroy()!
|
||||
}
|
||||
|
||||
// switch instance to be used for nodejs
|
||||
pub fn switch(name string) {
|
||||
nodejs_default = name
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
default: true
|
||||
title: ""
|
||||
templates: false
|
||||
build: true
|
||||
startupmanager: true
|
||||
build: false
|
||||
startupmanager: false
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
module python
|
||||
|
||||
import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.installers.base
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
pub fn install() ! {
|
||||
if !osal.done_exists('install_python')
|
||||
&& (!osal.cmd_exists('python') && !osal.cmd_exists('python3')) {
|
||||
base.install()!
|
||||
console.print_header('package install python')
|
||||
osal.package_install('python3')!
|
||||
|
||||
pl := osal.platform()
|
||||
if pl == .arch {
|
||||
osal.package_install('python-pipx,python-pip,sqlite')!
|
||||
} else if pl == .ubuntu {
|
||||
osal.package_install('python-pipx,python-pip,sqlite')!
|
||||
} else {
|
||||
return error('only support arch & ubuntu.')
|
||||
}
|
||||
}
|
||||
|
||||
// console.print_header('python already done')
|
||||
}
|
||||
|
||||
pub fn check() ! {
|
||||
// todo: do a monitoring check to see if it works
|
||||
// cmd := '
|
||||
// '
|
||||
// r := osal.execute_silent(cmd)!
|
||||
// console.print_debug(r)
|
||||
}
|
||||
@@ -4,184 +4,84 @@ import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
import freeflowuniverse.herolib.core.texttools
|
||||
import freeflowuniverse.herolib.core.pathlib
|
||||
import freeflowuniverse.herolib.osal.systemd
|
||||
import freeflowuniverse.herolib.osal.zinit
|
||||
import freeflowuniverse.herolib.installers.ulist
|
||||
import freeflowuniverse.herolib.installers.lang.golang
|
||||
import freeflowuniverse.herolib.installers.lang.rust
|
||||
import freeflowuniverse.herolib.installers.lang.python
|
||||
import freeflowuniverse.herolib.installers.base
|
||||
|
||||
|
||||
|
||||
import os
|
||||
|
||||
fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
mut installer := get()!
|
||||
mut res := []zinit.ZProcessNewArgs{}
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res << zinit.ZProcessNewArgs{
|
||||
// name: 'python'
|
||||
// cmd: 'python server'
|
||||
// env: {
|
||||
// 'HOME': '/root'
|
||||
// }
|
||||
// }
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of python
|
||||
// curl http://localhost:3333/api/v1/s --oauth2-bearer 1234 works
|
||||
// url:='http://127.0.0.1:${cfg.port}/api/v1'
|
||||
// mut conn := httpconnection.new(name: 'python', url: url)!
|
||||
|
||||
// if cfg.secret.len > 0 {
|
||||
// conn.default_header.add(.authorization, 'Bearer ${cfg.secret}')
|
||||
// }
|
||||
// conn.default_header.add(.content_type, 'application/json')
|
||||
// console.print_debug("curl -X 'GET' '${url}'/tags --oauth2-bearer ${cfg.secret}")
|
||||
// r := conn.get_json_dict(prefix: 'tags', debug: false) or {return false}
|
||||
// println(r)
|
||||
// if true{panic("ssss")}
|
||||
// tags := r['Tags'] or { return false }
|
||||
// console.print_debug(tags)
|
||||
// console.print_debug('python is answering.')
|
||||
return false
|
||||
}
|
||||
|
||||
fn start_pre() ! {
|
||||
}
|
||||
|
||||
fn start_post() ! {
|
||||
}
|
||||
|
||||
fn stop_pre() ! {
|
||||
}
|
||||
|
||||
fn stop_post() ! {
|
||||
}
|
||||
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} python version')
|
||||
// if res.exit_code != 0 {
|
||||
// return false
|
||||
// }
|
||||
// r := res.output.split_into_lines().filter(it.trim_space().len > 0)
|
||||
// if r.len != 1 {
|
||||
// return error("couldn't parse python version.\n${res.output}")
|
||||
// }
|
||||
// if texttools.version(version) == texttools.version(r[0]) {
|
||||
// return true
|
||||
// }
|
||||
return false
|
||||
fn installed_() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// get the Upload List of the files
|
||||
//get the Upload List of the files
|
||||
fn ulist_get() !ulist.UList {
|
||||
// optionally build a UList which is all paths which are result of building, is then used e.g. in upload
|
||||
return ulist.UList{}
|
||||
//optionally build a UList which is all paths which are result of building, is then used e.g. in upload
|
||||
return ulist.UList{}
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'python'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/python'
|
||||
// )!
|
||||
fn upload_() ! {
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
console.print_header('install python')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
// if osal.is_linux_arm() {
|
||||
// url = 'https://github.com/python-dev/python/releases/download/v${version}/python_${version}_linux_arm64.tar.gz'
|
||||
// } else if osal.is_linux_intel() {
|
||||
// url = 'https://github.com/python-dev/python/releases/download/v${version}/python_${version}_linux_amd64.tar.gz'
|
||||
// } else if osal.is_osx_arm() {
|
||||
// url = 'https://github.com/python-dev/python/releases/download/v${version}/python_${version}_darwin_arm64.tar.gz'
|
||||
// } else if osal.is_osx_intel() {
|
||||
// url = 'https://github.com/python-dev/python/releases/download/v${version}/python_${version}_darwin_amd64.tar.gz'
|
||||
// } else {
|
||||
// return error('unsported platform')
|
||||
// }
|
||||
fn install_() ! {
|
||||
console.print_header('install python')
|
||||
base.install()!
|
||||
|
||||
// mut dest := osal.download(
|
||||
// url: url
|
||||
// minsize_kb: 9000
|
||||
// expand_dir: '/tmp/python'
|
||||
// )!
|
||||
osal.package_install('python3')!
|
||||
pl := osal.platform()
|
||||
if pl == .arch {
|
||||
osal.package_install('python-pipx,sqlite')!
|
||||
} else if pl == .ubuntu {
|
||||
osal.package_install('python-pipx,sqlite')!
|
||||
} else if pl == .osx {
|
||||
osal.package_install('pipx,sqlite')!
|
||||
|
||||
// //dest.moveup_single_subdir()!
|
||||
|
||||
// mut binpath := dest.file_get('python')!
|
||||
// osal.cmd_add(
|
||||
// cmdname: 'python'
|
||||
// source: binpath.path
|
||||
// )!
|
||||
} else {
|
||||
return error('only support osx, arch & ubuntu.')
|
||||
}
|
||||
osal.execute_silent("pipx install uv")!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
// url := 'https://github.com/threefoldtech/python'
|
||||
|
||||
// make sure we install base on the node
|
||||
// if osal.platform() != .ubuntu {
|
||||
// return error('only support ubuntu for now')
|
||||
// }
|
||||
// golang.install()!
|
||||
fn destroy_() ! {
|
||||
|
||||
// console.print_header('build python')
|
||||
panic("implement")
|
||||
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
// osal.process_kill_recursive(name:'zinit')!
|
||||
// osal.cmd_delete('zinit')!
|
||||
|
||||
// osal.package_remove('
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// ')!
|
||||
|
||||
// //will remove all paths where go/bin is found
|
||||
// osal.profile_path_add_remove(paths2delete:"go/bin")!
|
||||
|
||||
// osal.rm("
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// /var/lib/containers
|
||||
// /var/lib/podman
|
||||
// /var/lib/buildah
|
||||
// /tmp/podman
|
||||
// /tmp/conmon
|
||||
// ")!
|
||||
|
||||
// gitpath := gittools.get_repo(coderoot: '/tmp/builder', url: url, reset: true, pull: true)!
|
||||
|
||||
// cmd := '
|
||||
// cd ${gitpath}
|
||||
// source ~/.cargo/env
|
||||
// exit 1 #todo
|
||||
// '
|
||||
// osal.execute_stdout(cmd)!
|
||||
//
|
||||
// //now copy to the default bin path
|
||||
// mut binpath := dest.file_get('...')!
|
||||
// adds it to path
|
||||
// osal.cmd_add(
|
||||
// cmdname: 'griddriver2'
|
||||
// source: binpath.path
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
// osal.process_kill_recursive(name:'zinit')!
|
||||
// osal.cmd_delete('zinit')!
|
||||
|
||||
// osal.package_remove('
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// ')!
|
||||
|
||||
// //will remove all paths where go/bin is found
|
||||
// osal.profile_path_add_remove(paths2delete:"go/bin")!
|
||||
|
||||
// osal.rm("
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// /var/lib/containers
|
||||
// /var/lib/podman
|
||||
// /var/lib/buildah
|
||||
// /tmp/podman
|
||||
// /tmp/conmon
|
||||
// ")!
|
||||
}
|
||||
|
||||
@@ -1,153 +1,54 @@
|
||||
|
||||
module python
|
||||
|
||||
import freeflowuniverse.herolib.core.base
|
||||
import freeflowuniverse.herolib.core.playbook
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
import freeflowuniverse.herolib.sysadmin.startupmanager
|
||||
import freeflowuniverse.herolib.osal.zinit
|
||||
import time
|
||||
|
||||
__global (
|
||||
python_global map[string]&Python
|
||||
python_default string
|
||||
python_global map[string]&Python
|
||||
python_default string
|
||||
)
|
||||
|
||||
/////////FACTORY
|
||||
|
||||
@[params]
|
||||
pub struct ArgsGet {
|
||||
pub mut:
|
||||
name string
|
||||
}
|
||||
|
||||
pub fn get(args_ ArgsGet) !&Python {
|
||||
return &Python{}
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////# LIVE CYCLE MANAGEMENT FOR INSTALLERS ///////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManager {
|
||||
// unknown
|
||||
// screen
|
||||
// zinit
|
||||
// tmux
|
||||
// systemd
|
||||
match cat {
|
||||
.zinit {
|
||||
console.print_debug('startupmanager: zinit')
|
||||
return startupmanager.get(cat: .zinit)!
|
||||
}
|
||||
.systemd {
|
||||
console.print_debug('startupmanager: systemd')
|
||||
return startupmanager.get(cat: .systemd)!
|
||||
}
|
||||
else {
|
||||
console.print_debug('startupmanager: auto')
|
||||
return startupmanager.get()!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (mut self Python) start() ! {
|
||||
switch(self.name)
|
||||
if self.running()! {
|
||||
return
|
||||
}
|
||||
|
||||
console.print_header('python start')
|
||||
|
||||
if !installed()! {
|
||||
install()!
|
||||
}
|
||||
|
||||
configure()!
|
||||
|
||||
start_pre()!
|
||||
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
|
||||
console.print_debug('starting python with ${zprocess.startuptype}...')
|
||||
|
||||
sm.new(zprocess)!
|
||||
|
||||
sm.start(zprocess.name)!
|
||||
}
|
||||
|
||||
start_post()!
|
||||
|
||||
for _ in 0 .. 50 {
|
||||
if self.running()! {
|
||||
return
|
||||
}
|
||||
time.sleep(100 * time.millisecond)
|
||||
}
|
||||
return error('python did not install properly.')
|
||||
}
|
||||
|
||||
pub fn (mut self Python) install_start(model InstallArgs) ! {
|
||||
switch(self.name)
|
||||
self.install(model)!
|
||||
self.start()!
|
||||
}
|
||||
|
||||
pub fn (mut self Python) stop() ! {
|
||||
switch(self.name)
|
||||
stop_pre()!
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
sm.stop(zprocess.name)!
|
||||
}
|
||||
stop_post()!
|
||||
}
|
||||
|
||||
pub fn (mut self Python) restart() ! {
|
||||
switch(self.name)
|
||||
self.stop()!
|
||||
self.start()!
|
||||
}
|
||||
|
||||
pub fn (mut self Python) running() !bool {
|
||||
switch(self.name)
|
||||
|
||||
// walk over the generic processes, if not running return
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
r := sm.running(zprocess.name)!
|
||||
if r == false {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return running()!
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct InstallArgs {
|
||||
pub struct InstallArgs{
|
||||
pub mut:
|
||||
reset bool
|
||||
reset bool
|
||||
}
|
||||
|
||||
pub fn (mut self Python) install(model InstallArgs) ! {
|
||||
switch(self.name)
|
||||
if model.reset || (!installed()!) {
|
||||
install()!
|
||||
}
|
||||
|
||||
pub fn install(args InstallArgs) ! {
|
||||
if args.reset {
|
||||
destroy()!
|
||||
}
|
||||
if ! (installed_()!){
|
||||
install_()!
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (mut self Python) build() ! {
|
||||
switch(self.name)
|
||||
build()!
|
||||
pub fn destroy() ! {
|
||||
destroy_()!
|
||||
}
|
||||
|
||||
pub fn (mut self Python) destroy() ! {
|
||||
switch(self.name)
|
||||
self.stop() or {}
|
||||
destroy()!
|
||||
}
|
||||
|
||||
// switch instance to be used for python
|
||||
pub fn switch(name string) {
|
||||
python_default = name
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
default: true
|
||||
title: ""
|
||||
templates: false
|
||||
build: true
|
||||
startupmanager: true
|
||||
build: false
|
||||
startupmanager: false
|
||||
|
||||
|
||||
@@ -4,126 +4,54 @@ import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
import freeflowuniverse.herolib.core.texttools
|
||||
import freeflowuniverse.herolib.core.pathlib
|
||||
import freeflowuniverse.herolib.osal.systemd
|
||||
import freeflowuniverse.herolib.osal.zinit
|
||||
import freeflowuniverse.herolib.installers.ulist
|
||||
import freeflowuniverse.herolib.installers.lang.golang
|
||||
import freeflowuniverse.herolib.installers.lang.rust
|
||||
import freeflowuniverse.herolib.installers.lang.python
|
||||
import freeflowuniverse.herolib.installers.base
|
||||
|
||||
|
||||
import os
|
||||
|
||||
fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
mut installer := get()!
|
||||
mut res := []zinit.ZProcessNewArgs{}
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res << zinit.ZProcessNewArgs{
|
||||
// name: 'rust'
|
||||
// cmd: 'rust server'
|
||||
// env: {
|
||||
// 'HOME': '/root'
|
||||
// }
|
||||
// }
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of rust
|
||||
// curl http://localhost:3333/api/v1/s --oauth2-bearer 1234 works
|
||||
// url:='http://127.0.0.1:${cfg.port}/api/v1'
|
||||
// mut conn := httpconnection.new(name: 'rust', url: url)!
|
||||
|
||||
// if cfg.secret.len > 0 {
|
||||
// conn.default_header.add(.authorization, 'Bearer ${cfg.secret}')
|
||||
// }
|
||||
// conn.default_header.add(.content_type, 'application/json')
|
||||
// console.print_debug("curl -X 'GET' '${url}'/tags --oauth2-bearer ${cfg.secret}")
|
||||
// r := conn.get_json_dict(prefix: 'tags', debug: false) or {return false}
|
||||
// println(r)
|
||||
// if true{panic("ssss")}
|
||||
// tags := r['Tags'] or { return false }
|
||||
// console.print_debug(tags)
|
||||
// console.print_debug('rust is answering.')
|
||||
return false
|
||||
}
|
||||
|
||||
fn start_pre() ! {
|
||||
}
|
||||
|
||||
fn start_post() ! {
|
||||
}
|
||||
|
||||
fn stop_pre() ! {
|
||||
}
|
||||
|
||||
fn stop_post() ! {
|
||||
}
|
||||
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} rust version')
|
||||
// if res.exit_code != 0 {
|
||||
// return false
|
||||
// }
|
||||
// r := res.output.split_into_lines().filter(it.trim_space().len > 0)
|
||||
// if r.len != 1 {
|
||||
// return error("couldn't parse rust version.\n${res.output}")
|
||||
// }
|
||||
// if texttools.version(version) == texttools.version(r[0]) {
|
||||
// return true
|
||||
// }
|
||||
return false
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} rustc -V')
|
||||
if res.exit_code != 0 {
|
||||
return false
|
||||
}
|
||||
r := res.output.split_into_lines().filter(it.trim_space().len > 0)
|
||||
if r.len != 1 {
|
||||
return error("couldn't parse rust version.\n${res.output}")
|
||||
}
|
||||
myversion := r[0].all_after_first("rustc").all_before("(")
|
||||
if texttools.version(version) == texttools.version(myversion) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// get the Upload List of the files
|
||||
//get the Upload List of the files
|
||||
fn ulist_get() !ulist.UList {
|
||||
// optionally build a UList which is all paths which are result of building, is then used e.g. in upload
|
||||
return ulist.UList{}
|
||||
//optionally build a UList which is all paths which are result of building, is then used e.g. in upload
|
||||
return ulist.UList{}
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'rust'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/rust'
|
||||
// )!
|
||||
//uploads to S3 server if configured
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'rust'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/rust'
|
||||
// )!
|
||||
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
console.print_header('install rust')
|
||||
mut args := args_
|
||||
version := '1.78.0'
|
||||
|
||||
res := os.execute('rustc -V')
|
||||
if res.exit_code == 0 {
|
||||
r := res.output.split_into_lines()
|
||||
.filter(it.contains('rustc'))
|
||||
|
||||
if r.len != 1 {
|
||||
return error("couldn't parse rust version, expected 'rustc 1.' on 1 row.\n${res.output}")
|
||||
}
|
||||
mut vstring := r[0] or { panic('bug') }
|
||||
vstring = vstring.all_after_first(' ').all_before('(').trim_space()
|
||||
if texttools.version(version) > texttools.version(vstring) {
|
||||
args.reset = true
|
||||
}
|
||||
} else {
|
||||
args.reset = true
|
||||
}
|
||||
|
||||
if args.reset == false {
|
||||
return
|
||||
}
|
||||
fn install_() ! {
|
||||
console.print_header('install rust')
|
||||
version := '1.83.0'
|
||||
|
||||
base.install()!
|
||||
|
||||
pl := osal.platform()
|
||||
console.print_header('start install rust')
|
||||
|
||||
if pl == .ubuntu {
|
||||
osal.package_install('build-essential,openssl,pkg-config,libssl-dev,gcc')!
|
||||
@@ -140,63 +68,48 @@ fn install() ! {
|
||||
return
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
// url := 'https://github.com/threefoldtech/rust'
|
||||
|
||||
// make sure we install base on the node
|
||||
// if osal.platform() != .ubuntu {
|
||||
// return error('only support ubuntu for now')
|
||||
// }
|
||||
// golang.install()!
|
||||
fn destroy_() ! {
|
||||
|
||||
// console.print_header('build rust')
|
||||
osal.package_remove('
|
||||
rust
|
||||
')!
|
||||
|
||||
// gitpath := gittools.get_repo(coderoot: '/tmp/builder', url: url, reset: true, pull: true)!
|
||||
osal.exec(cmd:'
|
||||
#!/bin/bash
|
||||
|
||||
# Script to uninstall Rust and Rust-related files
|
||||
# Use at your own risk. Make sure to backup your data if necessary.
|
||||
|
||||
echo "Starting Rust uninstallation process..."
|
||||
|
||||
# Step 1: Check if rustup is installed
|
||||
if command -v rustup > /dev/null 2>&1; then
|
||||
echo "Rustup found. Proceeding with uninstallation."
|
||||
rustup self uninstall -y
|
||||
else
|
||||
echo "Rustup is not installed. Skipping rustup uninstallation."
|
||||
fi
|
||||
|
||||
# Step 2: Remove cargo and rustc binaries
|
||||
echo "Removing cargo and rustc binaries if they exist..."
|
||||
rm -f ~/.cargo/bin/cargo
|
||||
rm -f ~/.cargo/bin/rustc
|
||||
|
||||
# Step 3: Remove Rust-related directories
|
||||
echo "Removing Rust-related directories..."
|
||||
rm -rf ~/.cargo
|
||||
rm -rf ~/.rustup
|
||||
|
||||
echo "Rust uninstallation process completed."
|
||||
|
||||
',debug:false)!
|
||||
|
||||
osal.rm("
|
||||
rustc
|
||||
rustup
|
||||
cargo
|
||||
")!
|
||||
|
||||
// cmd := '
|
||||
// cd ${gitpath}
|
||||
// source ~/.cargo/env
|
||||
// exit 1 #todo
|
||||
// '
|
||||
// osal.execute_stdout(cmd)!
|
||||
//
|
||||
// //now copy to the default bin path
|
||||
// mut binpath := dest.file_get('...')!
|
||||
// adds it to path
|
||||
// osal.cmd_add(
|
||||
// cmdname: 'griddriver2'
|
||||
// source: binpath.path
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
// osal.process_kill_recursive(name:'zinit')!
|
||||
// osal.cmd_delete('zinit')!
|
||||
|
||||
// osal.package_remove('
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// ')!
|
||||
|
||||
// //will remove all paths where go/bin is found
|
||||
// osal.profile_path_add_remove(paths2delete:"go/bin")!
|
||||
|
||||
// osal.rm("
|
||||
// podman
|
||||
// conmon
|
||||
// buildah
|
||||
// skopeo
|
||||
// runc
|
||||
// /var/lib/containers
|
||||
// /var/lib/podman
|
||||
// /var/lib/buildah
|
||||
// /tmp/podman
|
||||
// /tmp/conmon
|
||||
// ")!
|
||||
}
|
||||
|
||||
@@ -1,153 +1,54 @@
|
||||
|
||||
module rust
|
||||
|
||||
import freeflowuniverse.herolib.core.base
|
||||
import freeflowuniverse.herolib.core.playbook
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
import freeflowuniverse.herolib.sysadmin.startupmanager
|
||||
import freeflowuniverse.herolib.osal.zinit
|
||||
import time
|
||||
|
||||
__global (
|
||||
rust_global map[string]&RustInstaller
|
||||
rust_default string
|
||||
rust_global map[string]&RustInstaller
|
||||
rust_default string
|
||||
)
|
||||
|
||||
/////////FACTORY
|
||||
|
||||
@[params]
|
||||
pub struct ArgsGet {
|
||||
pub mut:
|
||||
name string
|
||||
}
|
||||
|
||||
pub fn get(args_ ArgsGet) !&RustInstaller {
|
||||
return &RustInstaller{}
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////# LIVE CYCLE MANAGEMENT FOR INSTALLERS ///////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManager {
|
||||
// unknown
|
||||
// screen
|
||||
// zinit
|
||||
// tmux
|
||||
// systemd
|
||||
match cat {
|
||||
.zinit {
|
||||
console.print_debug('startupmanager: zinit')
|
||||
return startupmanager.get(cat: .zinit)!
|
||||
}
|
||||
.systemd {
|
||||
console.print_debug('startupmanager: systemd')
|
||||
return startupmanager.get(cat: .systemd)!
|
||||
}
|
||||
else {
|
||||
console.print_debug('startupmanager: auto')
|
||||
return startupmanager.get()!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (mut self RustInstaller) start() ! {
|
||||
switch(self.name)
|
||||
if self.running()! {
|
||||
return
|
||||
}
|
||||
|
||||
console.print_header('rust start')
|
||||
|
||||
if !installed()! {
|
||||
install()!
|
||||
}
|
||||
|
||||
configure()!
|
||||
|
||||
start_pre()!
|
||||
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
|
||||
console.print_debug('starting rust with ${zprocess.startuptype}...')
|
||||
|
||||
sm.new(zprocess)!
|
||||
|
||||
sm.start(zprocess.name)!
|
||||
}
|
||||
|
||||
start_post()!
|
||||
|
||||
for _ in 0 .. 50 {
|
||||
if self.running()! {
|
||||
return
|
||||
}
|
||||
time.sleep(100 * time.millisecond)
|
||||
}
|
||||
return error('rust did not install properly.')
|
||||
}
|
||||
|
||||
pub fn (mut self RustInstaller) install_start(model InstallArgs) ! {
|
||||
switch(self.name)
|
||||
self.install(model)!
|
||||
self.start()!
|
||||
}
|
||||
|
||||
pub fn (mut self RustInstaller) stop() ! {
|
||||
switch(self.name)
|
||||
stop_pre()!
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
sm.stop(zprocess.name)!
|
||||
}
|
||||
stop_post()!
|
||||
}
|
||||
|
||||
pub fn (mut self RustInstaller) restart() ! {
|
||||
switch(self.name)
|
||||
self.stop()!
|
||||
self.start()!
|
||||
}
|
||||
|
||||
pub fn (mut self RustInstaller) running() !bool {
|
||||
switch(self.name)
|
||||
|
||||
// walk over the generic processes, if not running return
|
||||
for zprocess in startupcmd()! {
|
||||
mut sm := startupmanager_get(zprocess.startuptype)!
|
||||
r := sm.running(zprocess.name)!
|
||||
if r == false {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return running()!
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct InstallArgs {
|
||||
pub struct InstallArgs{
|
||||
pub mut:
|
||||
reset bool
|
||||
reset bool
|
||||
}
|
||||
|
||||
pub fn (mut self RustInstaller) install(model InstallArgs) ! {
|
||||
switch(self.name)
|
||||
if model.reset || (!installed()!) {
|
||||
install()!
|
||||
}
|
||||
|
||||
pub fn install(args InstallArgs) ! {
|
||||
if args.reset {
|
||||
destroy()!
|
||||
}
|
||||
if ! (installed_()!){
|
||||
install_()!
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (mut self RustInstaller) build() ! {
|
||||
switch(self.name)
|
||||
build()!
|
||||
pub fn destroy() ! {
|
||||
destroy_()!
|
||||
}
|
||||
|
||||
pub fn (mut self RustInstaller) destroy() ! {
|
||||
switch(self.name)
|
||||
self.stop() or {}
|
||||
destroy()!
|
||||
}
|
||||
|
||||
// switch instance to be used for rust
|
||||
pub fn switch(name string) {
|
||||
rust_default = name
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,27 +1,29 @@
|
||||
module rust
|
||||
|
||||
import freeflowuniverse.herolib.data.paramsparser
|
||||
import os
|
||||
|
||||
pub const version = '1.78.0'
|
||||
pub const version = '1.83.0'
|
||||
const singleton = true
|
||||
const default = true
|
||||
|
||||
// THIS THE THE SOURCE OF THE INFORMATION OF THIS FILE, HERE WE HAVE THE CONFIG OBJECT CONFIGURED AND MODELLED
|
||||
|
||||
//THIS THE THE SOURCE OF THE INFORMATION OF THIS FILE, HERE WE HAVE THE CONFIG OBJECT CONFIGURED AND MODELLED
|
||||
@[heap]
|
||||
pub struct RustInstaller {
|
||||
pub mut:
|
||||
name string = 'default'
|
||||
name string = 'default'
|
||||
}
|
||||
|
||||
fn obj_init(obj_ RustInstaller) !RustInstaller {
|
||||
// never call get here, only thing we can do here is work on object itself
|
||||
mut obj := obj_
|
||||
panic('implement')
|
||||
return obj
|
||||
|
||||
fn obj_init(obj_ RustInstaller)!RustInstaller{
|
||||
//never call get here, only thing we can do here is work on object itself
|
||||
mut obj:=obj_
|
||||
return obj
|
||||
}
|
||||
|
||||
// called before start if done
|
||||
//called before start if done
|
||||
fn configure() ! {
|
||||
// mut installer := get()!
|
||||
//mut installer := get()!
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -177,7 +177,7 @@ pub fn check() bool {
|
||||
}
|
||||
|
||||
// install mycelium will return true if it was already installed
|
||||
pub fn build() ! {
|
||||
pub fn build_() ! {
|
||||
rust.install()!
|
||||
console.print_header('build mycelium')
|
||||
if !osal.done_exists('build_mycelium') && !osal.cmd_exists('mycelium') {
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of mycelium
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} mycelium version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'mycelium'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/mycelium'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install mycelium')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/mycelium'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ pub fn start() ! {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn running() !bool {
|
||||
pub fn running_() !bool {
|
||||
mut scr := screen.new(reset: false)!
|
||||
name := 'yggdrasil'
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of yggdrasil
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} yggdrasil version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'yggdrasil'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/yggdrasil'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install yggdrasil')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/yggdrasil'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of actrunner
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} actrunner version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'actrunner'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/actrunner'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install actrunner')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/actrunner'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of b2
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} b2 version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'b2'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/b2'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install b2')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/b2'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of fungistor
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} fungistor version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'fungistor'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/fungistor'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install fungistor')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/fungistor'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of garage_s3
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} garage_s3 version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'garage_s3'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/garage_s3'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install garage_s3')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/garage_s3'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of grafana
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} grafana version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'grafana'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/grafana'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install grafana')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/grafana'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of prometheus
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} prometheus version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'prometheus'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/prometheus'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install prometheus')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/prometheus'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ import time
|
||||
// // port int = 8888
|
||||
// }
|
||||
|
||||
// pub fn install(args_ InstallArgs) ! {
|
||||
// pub fn install_(args_ InstallArgs) ! {
|
||||
// install_prometheus(args_)!
|
||||
// install_alertmanager(args_)!
|
||||
// install_node_exporter(args_)!
|
||||
|
||||
@@ -7,7 +7,7 @@ import freeflowuniverse.herolib.core.httpconnection
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} rclone version')
|
||||
if res.exit_code != 0 {
|
||||
return false
|
||||
@@ -23,7 +23,7 @@ fn installed() !bool {
|
||||
return true
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install rclone')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
mut url := ''
|
||||
@@ -64,7 +64,7 @@ fn configure() ! {
|
||||
// implement if steps need to be done for configuration
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
}
|
||||
|
||||
fn start_pre() ! {
|
||||
|
||||
@@ -16,7 +16,7 @@ pub mut:
|
||||
}
|
||||
|
||||
// install restic will return true if it was already installed
|
||||
pub fn build(args BuildArgs) ! {
|
||||
pub fn build_(args BuildArgs) ! {
|
||||
// make sure we install base on the node
|
||||
if osal.platform() != .ubuntu {
|
||||
return error('only support ubuntu for now')
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of restic
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} restic version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'restic'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/restic'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install restic')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/restic'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ pub mut:
|
||||
}
|
||||
|
||||
// install s3cas will return true if it was already installed
|
||||
pub fn build(args BuildArgs) ! {
|
||||
pub fn build_(args BuildArgs) ! {
|
||||
// make sure we install base on the node
|
||||
if osal.platform() != .ubuntu {
|
||||
return error('only support ubuntu for now')
|
||||
|
||||
@@ -7,7 +7,7 @@ import freeflowuniverse.herolib.installers.rclone
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
// install s3 will return true if it was already installed
|
||||
pub fn install() ! {
|
||||
pub fn install_() ! {
|
||||
base.install()!
|
||||
zinitinstaller.install()!
|
||||
rclone.install()!
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of s3
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} s3 version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 's3'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/s3'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install s3')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/s3'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import freeflowuniverse.herolib.osal.systemd
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
cmd := 'zinit --version'
|
||||
// console.print_debug(cmd)
|
||||
res := os.execute(cmd)
|
||||
@@ -28,7 +28,7 @@ fn installed() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install zinit')
|
||||
if !osal.is_linux() {
|
||||
return error('only support linux for now')
|
||||
@@ -52,7 +52,7 @@ fn install() ! {
|
||||
console.print_header('install zinit done')
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
if !osal.is_linux() {
|
||||
return error('only support linux for now')
|
||||
}
|
||||
@@ -91,7 +91,7 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
}
|
||||
|
||||
fn startupcmd() ![]ZProcessNewArgs {
|
||||
@@ -106,7 +106,7 @@ fn startupcmd() ![]ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
cmd := 'zinit list'
|
||||
return osal.execute_ok(cmd)
|
||||
}
|
||||
@@ -123,7 +123,7 @@ fn stop_pre() ! {
|
||||
fn stop_post() ! {
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
mut systemdfactory := systemd.new()!
|
||||
systemdfactory.destroy('zinit')!
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import freeflowuniverse.herolib.core.texttools
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} griddriver --version')
|
||||
if res.exit_code != 0 {
|
||||
return false
|
||||
@@ -27,12 +27,12 @@ fn installed() !bool {
|
||||
return true
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
// console.print_header('install griddriver')
|
||||
build()!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
console.print_header('build griddriver')
|
||||
mut installer := golang.get()!
|
||||
installer.install()!
|
||||
@@ -66,7 +66,7 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// mut installer := get()!
|
||||
// installers.upload(
|
||||
// cmdname: 'griddriver'
|
||||
@@ -74,7 +74,7 @@ fn upload() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut installer := get()!
|
||||
// cmd:="
|
||||
// systemctl disable griddriver_scheduler.service
|
||||
|
||||
@@ -14,7 +14,7 @@ pub mut:
|
||||
uninstall bool
|
||||
}
|
||||
|
||||
pub fn install(args_ InstallArgs) ! {
|
||||
pub fn install_(args_ InstallArgs) ! {
|
||||
mut args := args_
|
||||
version := '0.14.0'
|
||||
|
||||
@@ -38,7 +38,7 @@ pub fn install(args_ InstallArgs) ! {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn build() ! {
|
||||
pub fn build_() ! {
|
||||
mut g := golang.get()!
|
||||
g.install()!
|
||||
console.print_header('build tfrobot')
|
||||
|
||||
@@ -11,7 +11,7 @@ pub mut:
|
||||
reset bool
|
||||
}
|
||||
|
||||
pub fn upload(args_ UploadArgs) ! {
|
||||
pub fn upload_(args_ UploadArgs) ! {
|
||||
//_ := args_
|
||||
panic('to implement')
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import freeflowuniverse.herolib.installers.lang.golang
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} buildah -v')
|
||||
if res.exit_code != 0 {
|
||||
return false
|
||||
@@ -24,12 +24,12 @@ fn installed() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install buildah')
|
||||
build()!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
console.print_header('build buildah')
|
||||
|
||||
osal.package_install('runc,bats,btrfs-progs,git,go-md2man,libapparmor-dev,libglib2.0-dev,libgpgme11-dev,libseccomp-dev,libselinux1-dev,make,skopeo,libbtrfs-dev')!
|
||||
@@ -64,7 +64,7 @@ fn ulist_get() !ulist.UList {
|
||||
return ulist.UList{}
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
osal.package_remove('
|
||||
buildah
|
||||
')!
|
||||
|
||||
@@ -8,7 +8,7 @@ import freeflowuniverse.herolib.installers.ulist
|
||||
// import freeflowuniverse.herolib.installers.lang.rust
|
||||
import os
|
||||
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} cloud-hypervisor --version')
|
||||
if res.exit_code == 0 {
|
||||
r := res.output.split_into_lines().filter(it.contains('cloud-hypervisor'))
|
||||
@@ -27,7 +27,7 @@ fn installed() !bool {
|
||||
return true
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install cloudhypervisor')
|
||||
// mut installer := get()!
|
||||
mut url := ''
|
||||
@@ -59,7 +59,7 @@ fn install() ! {
|
||||
)!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
}
|
||||
|
||||
// get the Upload List of the files
|
||||
@@ -70,7 +70,7 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// mut installer := get()!
|
||||
// installers.upload(
|
||||
// cmdname: 'cloudhypervisor'
|
||||
@@ -78,7 +78,7 @@ fn upload() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
osal.process_kill_recursive(name: 'cloud-hypervisor')!
|
||||
|
||||
osal.package_remove('
|
||||
|
||||
@@ -5,7 +5,7 @@ import freeflowuniverse.herolib.installers.base
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
// install docker will return true if it was already installed
|
||||
pub fn install() ! {
|
||||
pub fn install_() ! {
|
||||
console.print_header('package install install docker')
|
||||
if osal.platform() != .ubuntu {
|
||||
return error('only support ubuntu for now')
|
||||
|
||||
@@ -14,7 +14,7 @@ pub mut:
|
||||
uninstall bool
|
||||
}
|
||||
|
||||
pub fn install(args_ InstallArgs) ! {
|
||||
pub fn install_(args_ InstallArgs) ! {
|
||||
mut args := args_
|
||||
version := '0.22.0'
|
||||
|
||||
|
||||
@@ -6,13 +6,13 @@ import freeflowuniverse.herolib.ui.console
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
return osal.done_exists('install_pacman')
|
||||
}
|
||||
|
||||
// use https://archlinux.org/mirrorlist/
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install pacman')
|
||||
|
||||
if osal.platform() == .arch {
|
||||
@@ -83,7 +83,7 @@ fn install() ! {
|
||||
console.print_header('install done')
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
osal.done_delete('install_pacman')!
|
||||
|
||||
osal.package_remove('
|
||||
|
||||
@@ -8,7 +8,7 @@ import freeflowuniverse.herolib.installers.ulist
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} podman -v')
|
||||
if res.exit_code != 0 {
|
||||
return false
|
||||
@@ -24,7 +24,7 @@ fn installed() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install podman')
|
||||
|
||||
destroy()!
|
||||
@@ -73,7 +73,7 @@ fn install() ! {
|
||||
}
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// mut installer := get()!
|
||||
|
||||
// https://podman.io/docs/installation#building-from-source
|
||||
@@ -155,7 +155,7 @@ fn ulist_get() !ulist.UList {
|
||||
return ulist.UList{}
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
osal.package_remove('
|
||||
podman
|
||||
conmon
|
||||
|
||||
@@ -13,7 +13,7 @@ pub mut:
|
||||
uninstall bool
|
||||
}
|
||||
|
||||
pub fn install(args_ InstallArgs) ! {
|
||||
pub fn install_(args_ InstallArgs) ! {
|
||||
mut args := args_
|
||||
mut version := '10.0.0'
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import freeflowuniverse.herolib.installers.lang.python
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} youki version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -28,13 +28,13 @@ fn installed() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install youki')
|
||||
destroy()!
|
||||
build()!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// mut installer := get()!
|
||||
url := 'https://github.com/containers/youki'
|
||||
|
||||
@@ -73,7 +73,7 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// mut installer := get()!
|
||||
// installers.upload(
|
||||
// cmdname: 'youki'
|
||||
@@ -81,7 +81,7 @@ fn upload() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
osal.package_remove('
|
||||
runc
|
||||
')!
|
||||
|
||||
@@ -6,7 +6,7 @@ import freeflowuniverse.herolib.osal.zinit
|
||||
import os
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} caddy version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -22,7 +22,7 @@ fn installed() !bool {
|
||||
return true
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install caddy')
|
||||
|
||||
mut cfg := get()!
|
||||
@@ -113,7 +113,7 @@ pub fn configure_examples(config WebConfig) ! {
|
||||
configuration_set(content: config_file)!
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut cfg := get()!
|
||||
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
@@ -137,7 +137,7 @@ fn running() !bool {
|
||||
return true
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// cmd:="
|
||||
// systemctl disable caddy_scheduler.service
|
||||
|
||||
@@ -25,7 +25,7 @@ pub const version = '2.8.4'
|
||||
// }
|
||||
|
||||
// // install caddy will return true if it was already installed
|
||||
// pub fn install(args_ InstallArgs) ! {
|
||||
// pub fn install_(args_ InstallArgs) ! {
|
||||
// mut args := args_
|
||||
// version := '2.8.4'
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import os
|
||||
const installername = os.base(os.dir(@FILE))
|
||||
|
||||
// install imagemagick will return true if it was already installed
|
||||
pub fn install() ! {
|
||||
pub fn install_() ! {
|
||||
console.print_header('install ${installername}')
|
||||
if !osal.done_exists('install_${installername}') {
|
||||
osal.package_install('imagemagick')!
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of imagemagick
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} imagemagick version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'imagemagick'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/imagemagick'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install imagemagick')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/imagemagick'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ fn startupcmd() ![]zinit.ZProcessNewArgs {
|
||||
return res
|
||||
}
|
||||
|
||||
fn running() !bool {
|
||||
fn running_() !bool {
|
||||
mut installer := get()!
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// this checks health of lighttpd
|
||||
@@ -64,7 +64,7 @@ fn stop_post() ! {
|
||||
//////////////////// following actions are not specific to instance of the object
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// res := os.execute('${osal.profile_path_source_and()} lighttpd version')
|
||||
// if res.exit_code != 0 {
|
||||
@@ -87,14 +87,14 @@ fn ulist_get() !ulist.UList {
|
||||
}
|
||||
|
||||
// uploads to S3 server if configured
|
||||
fn upload() ! {
|
||||
fn upload_() ! {
|
||||
// installers.upload(
|
||||
// cmdname: 'lighttpd'
|
||||
// source: '${gitpath}/target/x86_64-unknown-linux-musl/release/lighttpd'
|
||||
// )!
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install lighttpd')
|
||||
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
|
||||
// mut url := ''
|
||||
@@ -125,7 +125,7 @@ fn install() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
// url := 'https://github.com/threefoldtech/lighttpd'
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -154,7 +154,7 @@ fn build() ! {
|
||||
// )!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
// mut systemdfactory := systemd.new()!
|
||||
// systemdfactory.destroy("zinit")!
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import os
|
||||
pub const version = '3.4.12'
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('tailwind -h')
|
||||
if res.exit_code == 0 {
|
||||
r := res.output.split_into_lines().filter(it.contains('tailwindcss v'))
|
||||
@@ -26,7 +26,7 @@ fn installed() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
pub fn install() ! {
|
||||
pub fn install_() ! {
|
||||
console.print_header('install tailwind')
|
||||
|
||||
mut url := ''
|
||||
@@ -54,5 +54,5 @@ pub fn install() ! {
|
||||
)!
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import os
|
||||
pub const version = '0.18.0'
|
||||
|
||||
// checks if a certain version or above is installed
|
||||
fn installed() !bool {
|
||||
fn installed_() !bool {
|
||||
res := os.execute('${osal.profile_path_source_and()} zola -V')
|
||||
myversion := res.output.all_after(' ')
|
||||
if res.exit_code == 0 {
|
||||
@@ -24,7 +24,7 @@ fn installed() !bool {
|
||||
return false
|
||||
}
|
||||
|
||||
fn install() ! {
|
||||
fn install_() ! {
|
||||
console.print_header('install zola')
|
||||
|
||||
// make sure we install base on the node
|
||||
@@ -61,7 +61,7 @@ fn install() ! {
|
||||
}
|
||||
|
||||
// install zola will return true if it was already installed
|
||||
fn build() ! {
|
||||
fn build_() ! {
|
||||
rust.install()!
|
||||
console.print_header('install zola')
|
||||
cmd := '
|
||||
@@ -80,5 +80,5 @@ fn build() ! {
|
||||
console.print_header('zola installed')
|
||||
}
|
||||
|
||||
fn destroy() ! {
|
||||
fn destroy_() ! {
|
||||
}
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
module python
|
||||
|
||||
// // remember the requirements list for all pips
|
||||
// pub fn (mut py PythonEnv) freeze(name string) ! {
|
||||
// console.print_debug('Freezing requirements for environment: ${py.name}')
|
||||
// cmd := '
|
||||
// cd ${py.path.path}
|
||||
// source bin/activate
|
||||
// python3 -m pip freeze
|
||||
// '
|
||||
// res := os.execute(cmd)
|
||||
// if res.exit_code > 0 {
|
||||
// console.print_stderr('Failed to freeze requirements: ${res}')
|
||||
// return error('could not execute freeze.\n${res}\n${cmd}')
|
||||
// }
|
||||
// console.print_debug('Successfully froze requirements')
|
||||
// }
|
||||
|
||||
// remember the requirements list for all pips
|
||||
// pub fn (mut py PythonEnv) unfreeze(name string) ! {
|
||||
// // requirements := py.db.get('freeze_${name}')!
|
||||
// mut p := py.path.file_get_new('requirements.txt')!
|
||||
// p.write(requirements)!
|
||||
// cmd := '
|
||||
// cd ${py.path.path}
|
||||
// source bin/activate
|
||||
// python3 -m pip install -r requirements.txt
|
||||
// '
|
||||
// res := os.execute(cmd)
|
||||
// if res.exit_code > 0 {
|
||||
// return error('could not execute unfreeze.\n${res}\n${cmd}')
|
||||
// }
|
||||
// }
|
||||
@@ -1,84 +0,0 @@
|
||||
module python
|
||||
|
||||
import freeflowuniverse.herolib.osal
|
||||
// import freeflowuniverse.herolib.data.dbfs
|
||||
import freeflowuniverse.herolib.core.pathlib
|
||||
import freeflowuniverse.herolib.core.texttools
|
||||
import os
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
|
||||
@[params]
|
||||
pub struct PythonExecArgs {
|
||||
pub mut:
|
||||
cmd string @[required]
|
||||
result_delimiter string = '==RESULT=='
|
||||
ok_delimiter string = '==OK=='
|
||||
python_script_name string // if used will put it in root of the sandbox under that name
|
||||
stdout bool = true
|
||||
}
|
||||
|
||||
pub fn (py PythonEnv) exec(args PythonExecArgs) !string {
|
||||
mut cmd := texttools.dedent(args.cmd)
|
||||
mut debug := false
|
||||
if cmd.contains('DEBUG()') {
|
||||
cmd = cmd.replace('DEBUG()', 'from IPython import embed; embed()')
|
||||
debug = true
|
||||
}
|
||||
|
||||
cmd += "\n\nprint(\"${args.ok_delimiter}\")\n"
|
||||
|
||||
mut scriptpath := ''
|
||||
if args.python_script_name.len > 0 {
|
||||
scriptpath = '${py.path.path}/${args.python_script_name}.py'
|
||||
mut p := pathlib.get_file(path: scriptpath, create: true)!
|
||||
p.write(cmd)!
|
||||
} else {
|
||||
scriptpath = pathlib.temp_write(text: cmd, ext: 'py') or {
|
||||
return error('error: cannot write script to execute: ${err}')
|
||||
}
|
||||
}
|
||||
console.print_debug(' - python script exec: ${scriptpath}')
|
||||
os.chmod(scriptpath, 0o777)!
|
||||
|
||||
cmd2 := '
|
||||
cd ${py.path.path}
|
||||
source bin/activate
|
||||
python3 ${scriptpath}
|
||||
'
|
||||
if args.stdout || debug {
|
||||
console.print_debug(cmd2)
|
||||
}
|
||||
mut job := osal.Job{}
|
||||
if debug {
|
||||
osal.execute_interactive(cmd2)!
|
||||
} else {
|
||||
job = osal.exec(cmd: cmd2, stdout: args.stdout, raise_error: false)!
|
||||
}
|
||||
|
||||
if job.exit_code > 0 {
|
||||
// means error
|
||||
mut msg := ' - error in execution of python script: ${scriptpath}\n'
|
||||
msg += 'ERROR:\n'
|
||||
msg += job.error.str()
|
||||
return error(msg)
|
||||
}
|
||||
|
||||
// console.print_debug(job)
|
||||
|
||||
mut o := []string{}
|
||||
mut start := false
|
||||
for l in job.output.split_into_lines() {
|
||||
if l.trim_space().starts_with(args.result_delimiter) {
|
||||
start = true
|
||||
continue
|
||||
}
|
||||
if l.trim_space().starts_with(args.ok_delimiter) {
|
||||
break
|
||||
}
|
||||
if start {
|
||||
o << l
|
||||
}
|
||||
}
|
||||
|
||||
return o.join_lines()
|
||||
}
|
||||
@@ -1,161 +0,0 @@
|
||||
module python
|
||||
|
||||
import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.core.pathlib
|
||||
import freeflowuniverse.herolib.installers.lang.python
|
||||
import freeflowuniverse.herolib.core.texttools
|
||||
import freeflowuniverse.herolib.core.base
|
||||
import freeflowuniverse.herolib.data.dbfs
|
||||
import freeflowuniverse.herolib.ui.console
|
||||
import os
|
||||
|
||||
pub struct PythonEnv {
|
||||
pub mut:
|
||||
name string
|
||||
path pathlib.Path
|
||||
db dbfs.DB
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct PythonEnvArgs {
|
||||
pub mut:
|
||||
name string = 'default'
|
||||
reset bool
|
||||
}
|
||||
|
||||
pub fn new(args_ PythonEnvArgs) !PythonEnv {
|
||||
console.print_debug('Creating new Python environment with name: ${args_.name}')
|
||||
mut args := args_
|
||||
name := texttools.name_fix(args.name)
|
||||
|
||||
pp := '${os.home_dir()}/hero/python/${name}'
|
||||
console.print_debug('Python environment path: ${pp}')
|
||||
|
||||
mut c := base.context()!
|
||||
mut py := PythonEnv{
|
||||
name: name
|
||||
path: pathlib.get_dir(path: pp, create: true)!
|
||||
db: c.db_get('python_${args.name}')!
|
||||
}
|
||||
|
||||
key_install := 'pips_${py.name}_install'
|
||||
key_update := 'pips_${py.name}_update'
|
||||
if !os.exists('${pp}/bin/activate') {
|
||||
console.print_debug('Python environment directory does not exist, triggering reset')
|
||||
args.reset = true
|
||||
}
|
||||
if args.reset {
|
||||
console.print_debug('Resetting Python environment')
|
||||
py.pips_done_reset()!
|
||||
py.db.delete(key: key_install)!
|
||||
py.db.delete(key: key_update)!
|
||||
}
|
||||
|
||||
toinstall := !py.db.exists(key: key_install)!
|
||||
if toinstall {
|
||||
console.print_debug('Installing Python environment')
|
||||
python.install()!
|
||||
py.init_env()!
|
||||
py.db.set(key: key_install, value: 'done')!
|
||||
console.print_debug('Python environment setup complete')
|
||||
}
|
||||
|
||||
toupdate := !py.db.exists(key: key_update)!
|
||||
if toupdate {
|
||||
console.print_debug('Updating Python environment')
|
||||
py.update()!
|
||||
py.db.set(key: key_update, value: 'done')!
|
||||
console.print_debug('Python environment update complete')
|
||||
}
|
||||
|
||||
return py
|
||||
}
|
||||
|
||||
// comma separated list of packages to install
|
||||
pub fn (py PythonEnv) init_env() ! {
|
||||
console.print_green('Initializing Python virtual environment at: ${py.path.path}')
|
||||
cmd := '
|
||||
cd ${py.path.path}
|
||||
python3 -m venv .
|
||||
'
|
||||
osal.exec(cmd: cmd)!
|
||||
console.print_debug('Virtual environment initialization complete')
|
||||
}
|
||||
|
||||
// comma separated list of packages to install
|
||||
pub fn (py PythonEnv) update() ! {
|
||||
console.print_green('Updating pip in Python environment: ${py.name}')
|
||||
cmd := '
|
||||
cd ${py.path.path}
|
||||
source bin/activate
|
||||
python3 -m pip install --upgrade pip
|
||||
'
|
||||
osal.exec(cmd: cmd)!
|
||||
console.print_debug('Pip update complete')
|
||||
}
|
||||
|
||||
// comma separated list of packages to install
|
||||
pub fn (mut py PythonEnv) pip(packages string) ! {
|
||||
mut to_install := []string{}
|
||||
for i in packages.split(',') {
|
||||
pip := i.trim_space()
|
||||
if !py.pips_done_check(pip)! {
|
||||
to_install << pip
|
||||
console.print_debug('Package to install: ${pip}')
|
||||
}
|
||||
}
|
||||
if to_install.len == 0 {
|
||||
return
|
||||
}
|
||||
console.print_debug('Installing Python packages: ${packages}')
|
||||
packages2 := to_install.join(' ')
|
||||
cmd := '
|
||||
cd ${py.path.path}
|
||||
source bin/activate
|
||||
pip3 install ${packages2} -q
|
||||
'
|
||||
osal.exec(cmd: cmd)!
|
||||
// After successful installation, record the packages as done
|
||||
for pip in to_install {
|
||||
py.pips_done_add(pip)!
|
||||
console.print_debug('Successfully installed package: ${pip}')
|
||||
}
|
||||
}
|
||||
|
||||
pub fn (mut py PythonEnv) pips_done_reset() ! {
|
||||
console.print_debug('Resetting installed packages list for environment: ${py.name}')
|
||||
py.db.delete(key: 'pips_${py.name}')!
|
||||
}
|
||||
|
||||
pub fn (mut py PythonEnv) pips_done() ![]string {
|
||||
// console.print_debug('Getting list of installed packages for environment: ${py.name}')
|
||||
mut res := []string{}
|
||||
pips := py.db.get(key: 'pips_${py.name}') or { '' }
|
||||
for pip_ in pips.split_into_lines() {
|
||||
pip := pip_.trim_space()
|
||||
if pip !in res && pip.len > 0 {
|
||||
res << pip
|
||||
}
|
||||
}
|
||||
// console.print_debug('Found ${res.len} installed packages')
|
||||
return res
|
||||
}
|
||||
|
||||
pub fn (mut py PythonEnv) pips_done_add(name string) ! {
|
||||
console.print_debug('Adding package ${name} to installed packages list')
|
||||
mut pips := py.pips_done()!
|
||||
if name in pips {
|
||||
// console.print_debug('Package ${name} already marked as installed')
|
||||
return
|
||||
}
|
||||
pips << name
|
||||
out := pips.join_lines()
|
||||
py.db.set(key: 'pips_${py.name}', value: out)!
|
||||
console.print_debug('Successfully added package ${name} to installed list')
|
||||
}
|
||||
|
||||
pub fn (mut py PythonEnv) pips_done_check(name string) !bool {
|
||||
// console.print_debug('Checking if package ${name} is installed')
|
||||
mut pips := py.pips_done()!
|
||||
return name in pips
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
module python
|
||||
|
||||
fn test_python() {
|
||||
py := new() or { panic(err) }
|
||||
py.update() or { panic(err) }
|
||||
py.pip('ipython') or { panic(err) }
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
|
||||
## use virtual env
|
||||
|
||||
```v
|
||||
import freeflowuniverse.herolib.lang.python
|
||||
py:=python.new(name:'default')! //a python env with name default
|
||||
py.update()!
|
||||
py.pip("ipython")!
|
||||
|
||||
```
|
||||
|
||||
### to activate an environment and use the installed python
|
||||
|
||||
```bash
|
||||
source ~/hero/python/default/bin/activate
|
||||
```
|
||||
|
||||
|
||||
### how to write python scripts to execute
|
||||
|
||||
```v
|
||||
|
||||
#!/usr/bin/env -S v -gc none -no-retry-compilation -cc tcc -d use_openssl -enable-globals run
|
||||
|
||||
|
||||
import freeflowuniverse.herolib.lang.python
|
||||
import json
|
||||
|
||||
|
||||
pub struct Person {
|
||||
name string
|
||||
age int
|
||||
is_member bool
|
||||
skills []string
|
||||
}
|
||||
|
||||
|
||||
mut py:=python.new(name:'test')! //a python env with name test
|
||||
//py.update()!
|
||||
py.pip("ipython")!
|
||||
|
||||
|
||||
nrcount:=5
|
||||
//this is used in the pythonexample
|
||||
cmd:=$tmpl("pythonexample.py")
|
||||
|
||||
mut res:=""
|
||||
for i in 0..5{
|
||||
println(i)
|
||||
res=py.exec(cmd:cmd)!
|
||||
|
||||
}
|
||||
//res:=py.exec(cmd:cmd)!
|
||||
|
||||
person:=json.decode(Person,res)!
|
||||
println(person)
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
||||
example python script which is in the pythonscripts/ dir
|
||||
|
||||
```py
|
||||
|
||||
import json
|
||||
|
||||
for counter in range(1, @nrcount): # Loop from 1 to the specified param
|
||||
print(f"done_{counter}")
|
||||
|
||||
|
||||
# Define a simple Python structure (e.g., a dictionary)
|
||||
example_struct = {
|
||||
"name": "John Doe",
|
||||
"age": @nrcount,
|
||||
"is_member": True,
|
||||
"skills": ["Python", "Data Analysis", "Machine Learning"]
|
||||
}
|
||||
|
||||
# Convert the structure to a JSON string
|
||||
json_string = json.dumps(example_struct, indent=4)
|
||||
|
||||
# Print the JSON string
|
||||
print("==RESULT==")
|
||||
print(json_string)
|
||||
```
|
||||
|
||||
> see `herolib/examples/lang/python/pythonexample.vsh`
|
||||
|
||||
|
||||
## remark
|
||||
|
||||
This is a slow way how to execute python, is about 2 per second on a fast machine, need to implement something where we keep the python in mem and reading from a queue e.g. redis this will go much faster, but ok for now.
|
||||
|
||||
see also examples dir, there is a working example
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
module python
|
||||
|
||||
import freeflowuniverse.herolib.osal
|
||||
import freeflowuniverse.herolib.core.texttools
|
||||
|
||||
pub fn (py PythonEnv) shell(name_ string) ! {
|
||||
_ := texttools.name_fix(name_)
|
||||
cmd := '
|
||||
cd ${py.path.path}
|
||||
source bin/activate
|
||||
|
||||
'
|
||||
osal.exec(cmd: cmd)!
|
||||
}
|
||||
@@ -25,19 +25,25 @@ fn (err JobError) msg() string {
|
||||
if err.error_type == .args {
|
||||
return 'Error in arguments:\n${err.job.cmd}'
|
||||
}
|
||||
if err.error_type == .timeout {
|
||||
return 'Execution failed timeout\n${err.job}'
|
||||
}
|
||||
mut msg := 'Execution failed with code ${err.job.exit_code}\n'
|
||||
if err.job.cmd.scriptpath.len > 0 {
|
||||
msg += '\nscript path:${err.job.cmd.scriptpath}'
|
||||
}
|
||||
if err.job.output.len > 0 {
|
||||
msg += '\n\n## stdout:\n${err.job.output}'
|
||||
}
|
||||
if err.job.error.len > 0 {
|
||||
msg += '\n\n## stderr:\n${err.job.error}'
|
||||
mut msg := ""
|
||||
if err.job.cmd.ignore_error{
|
||||
return 'Ignore error for ${err.job.cmd.scriptpath}\n'
|
||||
}else{
|
||||
if err.error_type == .timeout {
|
||||
return 'Execution failed timeout\n${err.job}'
|
||||
}
|
||||
msg = 'Execution failed with code ${err.job.exit_code}\n'
|
||||
if err.job.cmd.scriptpath.len > 0 {
|
||||
msg += '\nscript path:${err.job.cmd.scriptpath}'
|
||||
}
|
||||
if err.job.output.len > 0 {
|
||||
msg += '\n\n## stdout:\n${err.job.output}'
|
||||
}
|
||||
if err.job.error.len > 0 {
|
||||
msg += '\n\n## stderr:\n${err.job.error}'
|
||||
}
|
||||
}
|
||||
|
||||
return msg
|
||||
}
|
||||
|
||||
@@ -143,7 +149,8 @@ pub mut:
|
||||
// process os.Process
|
||||
//```
|
||||
// return Job .
|
||||
pub fn exec(cmd Command) !Job {
|
||||
pub fn exec(cmd_ Command) !Job {
|
||||
mut cmd:=cmd_
|
||||
mut job := Job{
|
||||
cmd: cmd
|
||||
}
|
||||
@@ -162,6 +169,9 @@ pub fn exec(cmd Command) !Job {
|
||||
os.execvp(scriptpath, [])!
|
||||
return job
|
||||
}
|
||||
if cmd.ignore_error{
|
||||
cmd.retry=0
|
||||
}
|
||||
if !cmd.async {
|
||||
job.execute_retry() or {
|
||||
// println(err)
|
||||
@@ -177,7 +187,7 @@ pub fn (mut job Job) execute_retry() ! {
|
||||
for x in 0 .. job.cmd.retry + 1 {
|
||||
job.execute() or {
|
||||
if x == job.cmd.retry {
|
||||
// println(job)
|
||||
//println(job)
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -197,25 +207,48 @@ pub fn (mut job Job) execute() ! {
|
||||
job.start = time.now()
|
||||
job.status = .running
|
||||
|
||||
|
||||
job.cmd.scriptpath = cmd_to_script_path(job.cmd)!
|
||||
|
||||
// console.print_debug(" - process execute ${process_args[0]}")
|
||||
if job.cmd.debug{
|
||||
console.print_debug(job)
|
||||
}
|
||||
|
||||
if job.cmd.debug{
|
||||
console.print_debug(" - process execute ${job.cmd.scriptpath}")
|
||||
}
|
||||
mut p := os.new_process(job.cmd.scriptpath)
|
||||
|
||||
if job.cmd.work_folder.len > 0 {
|
||||
p.set_work_folder(job.cmd.work_folder)
|
||||
}
|
||||
if job.cmd.environment.len > 0 {
|
||||
if job.cmd.debug{
|
||||
console.print_debug(" - process setargs ${job.cmd.environment}")
|
||||
}
|
||||
p.set_environment(job.cmd.environment)
|
||||
}
|
||||
p.set_redirect_stdio()
|
||||
// console.print_debug("process setargs ${process_args[1..process_args.len]}")
|
||||
// p.set_args(process_args[1..process_args.len])
|
||||
if job.cmd.stdout {
|
||||
console.print_debug('')
|
||||
}
|
||||
p.run()
|
||||
job.process = p
|
||||
|
||||
//initial check, no point reading the output if we can't get the process starting
|
||||
// NOT OK TO DO BECAUSE IF PROCESS FINISHED WITHOUT ISSUE THEN NOT OK
|
||||
// if ! p.is_alive() {
|
||||
// if job.cmd.debug{
|
||||
// console.print_debug(p)
|
||||
// console.print_stderr(' ########## Process could not get started, result code is: ${p.code}')
|
||||
// }
|
||||
// job.exit_code = p.code
|
||||
// job.status = .error_exec
|
||||
// job.cmd.scriptkeep = true
|
||||
// job.close()!
|
||||
// return
|
||||
// }
|
||||
job.wait()!
|
||||
}
|
||||
|
||||
@@ -226,10 +259,9 @@ pub fn (mut job Job) execute() ! {
|
||||
|
||||
// wait till the job finishes or goes in error
|
||||
pub fn (mut job Job) wait() ! {
|
||||
// if job.status != .running && job.status != .init {
|
||||
// return error('can only wait for running job')
|
||||
// }
|
||||
|
||||
if job.status != .running && job.status != .init {
|
||||
return error('can only wait for running job')
|
||||
}
|
||||
for {
|
||||
job.process()!
|
||||
// console.print_debug(result)
|
||||
@@ -252,14 +284,15 @@ pub fn (mut job Job) process() ! {
|
||||
}
|
||||
mut p := job.process or { return error('there is not process on job') }
|
||||
|
||||
// mut result := job.read()!
|
||||
|
||||
job.read()!
|
||||
// mut result := job.read()
|
||||
if p.is_alive() {
|
||||
job.read()!
|
||||
// result=job.read()!
|
||||
if time.now().unix() > job.start.unix() + job.cmd.timeout * 1000 {
|
||||
// console.print_stderr("TIMEOUT TIMEOUT TIMEOUT TIMEOUT")
|
||||
if job.cmd.debug{
|
||||
console.print_stderr("***TIMEOUT TIMEOUT TIMEOUT TIMEOUT***")
|
||||
}
|
||||
p.signal_pgkill()
|
||||
p.close()
|
||||
job.exit_code = 9999
|
||||
@@ -273,13 +306,16 @@ pub fn (mut job Job) process() ! {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// console.print_stderr(" - process stopped")
|
||||
if ! job.cmd.ignore_error && job.cmd.debug{
|
||||
console.print_stderr(" - process stopped (don't know if error)")
|
||||
}
|
||||
job.read()!
|
||||
job.read()!
|
||||
job.status = .done
|
||||
// result.done = true
|
||||
if p.code > 0 {
|
||||
// console.print_stderr(' ########## Process CODE IS > 0')
|
||||
if job.cmd.debug{
|
||||
console.print_stderr(' ########## Process result code is > 0: ${p.code}')
|
||||
}
|
||||
job.exit_code = p.code
|
||||
job.status = .error_exec
|
||||
job.cmd.scriptkeep = true
|
||||
@@ -356,12 +392,15 @@ pub fn (mut job Job) close() ! {
|
||||
// console.print_debug(job.cmd.scriptpath)
|
||||
os.rm(job.cmd.scriptpath)!
|
||||
}
|
||||
if job.cmd.ignore_error == false && job.cmd.scriptkeep == false && os.exists(job.cmd.scriptpath) {
|
||||
if (job.cmd.ignore_error || job.cmd.scriptkeep == false) && os.exists(job.cmd.scriptpath) {
|
||||
os.rm(job.cmd.scriptpath)!
|
||||
}
|
||||
// job.status = .done
|
||||
|
||||
if job.cmd.raise_error && job.exit_code > 0 {
|
||||
if job.cmd.ignore_error{
|
||||
job.status = .done
|
||||
return
|
||||
}
|
||||
if job.cmd.raise_error && job.exit_code > 0 {
|
||||
return JobError{
|
||||
job: job
|
||||
error_type: .exec
|
||||
|
||||
@@ -8,6 +8,7 @@ import freeflowuniverse.herolib.core.pathlib
|
||||
pub fn cmd_to_script_path(cmd Command) !string {
|
||||
// all will be done over filessytem now
|
||||
mut cmdcontent := texttools.dedent(cmd.cmd)
|
||||
cmdcontent = cmdcontent.trim_space()
|
||||
if !cmdcontent.ends_with('\n') {
|
||||
cmdcontent += '\n'
|
||||
}
|
||||
|
||||
@@ -108,6 +108,12 @@ fn is_sudo_required() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
platform_ := platform()
|
||||
|
||||
if platform_ == .osx {
|
||||
return false
|
||||
}
|
||||
|
||||
// Check if the user has sudo privileges (test with `sudo -v`)
|
||||
sudo_check := os.execute('sudo -v')
|
||||
return sudo_check.exit_code == 0
|
||||
@@ -136,9 +142,9 @@ pub fn package_remove(name_ string) ! {
|
||||
// Platform-specific package removal logic
|
||||
if platform_ == .osx {
|
||||
if cpu == .arm {
|
||||
exec(cmd: 'arch --arm64 brew uninstall ${name}', ignore_error: false)!
|
||||
exec(cmd: 'arch --arm64 brew uninstall ${name}', ignore_error: true)!
|
||||
} else {
|
||||
exec(cmd: 'brew uninstall ${name}', ignore_error: false)!
|
||||
exec(cmd: 'brew uninstall ${name}', ignore_error: true)!
|
||||
}
|
||||
} else if platform_ == .ubuntu {
|
||||
// Use sudo if required
|
||||
@@ -148,7 +154,7 @@ pub fn package_remove(name_ string) ! {
|
||||
'apt remove -y ${name} --allow-change-held-packages'
|
||||
}
|
||||
exec(cmd: cmd, ignore_error: false)!
|
||||
exec(cmd: 'sudo apt autoremove -y', ignore_error: false)!
|
||||
exec(cmd: 'sudo apt autoremove -y', ignore_error: true)!
|
||||
} else if platform_ == .alpine {
|
||||
// Use sudo if required
|
||||
cmd := if use_sudo { 'sudo apk del ${name}' } else { 'apk del ${name}' }
|
||||
@@ -160,7 +166,7 @@ pub fn package_remove(name_ string) ! {
|
||||
} else {
|
||||
'pacman --noconfirm -R ${name}'
|
||||
}
|
||||
exec(cmd: cmd, ignore_error: false)!
|
||||
exec(cmd: cmd, ignore_error: true)!
|
||||
} else {
|
||||
return error('Only ubuntu, alpine, and osx supported for now')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user