diff --git a/lib/core/playcmds/factory.v b/lib/core/playcmds/factory.v index 8e1066f8..90b87df6 100644 --- a/lib/core/playcmds/factory.v +++ b/lib/core/playcmds/factory.v @@ -20,6 +20,7 @@ import incubaid.herolib.installers.horus.herorunner import incubaid.herolib.installers.horus.osirisrunner import incubaid.herolib.installers.horus.salrunner import incubaid.herolib.installers.virt.podman +import incubaid.herolib.installers.virt.kubernetes_installer import incubaid.herolib.installers.infra.gitea import incubaid.herolib.builder @@ -80,6 +81,7 @@ pub fn run(args_ PlayArgs) ! { herolib.play(mut plbook)! vlang.play(mut plbook)! podman.play(mut plbook)! + kubernetes_installer.play(mut plbook)! gitea.play(mut plbook)! giteaclient.play(mut plbook)! diff --git a/lib/installers/virt/kubernetes_installer/kubernetes_installer_actions.v b/lib/installers/virt/kubernetes_installer/kubernetes_installer_actions.v index 3854bf28..0f22d3b2 100644 --- a/lib/installers/virt/kubernetes_installer/kubernetes_installer_actions.v +++ b/lib/installers/virt/kubernetes_installer/kubernetes_installer_actions.v @@ -54,6 +54,7 @@ fn (self &KubernetesInstaller) startupcmd() ![]startupmanager.ZProcessNewArgs { res << startupmanager.ZProcessNewArgs{ name: 'k3s_${self.name}' + startuptype: .systemd cmd: cmd env: { 'HOME': os.home_dir() @@ -89,11 +90,10 @@ fn check_ubuntu() ! { } // Check /etc/os-release for Ubuntu - mut os_release := pathlib.get_file(path: '/etc/os-release') or { + content := os.read_file('/etc/os-release') or { return error('Could not read /etc/os-release. Is this Ubuntu?') } - - content := os_release.read()! + if !content.contains('Ubuntu') && !content.contains('ubuntu') { return error('This installer requires Ubuntu. Current OS is not Ubuntu.') } diff --git a/lib/installers/virt/kubernetes_installer/kubernetes_installer_factory_.v b/lib/installers/virt/kubernetes_installer/kubernetes_installer_factory_.v index bd0c0d1e..b5b6058e 100644 --- a/lib/installers/virt/kubernetes_installer/kubernetes_installer_factory_.v +++ b/lib/installers/virt/kubernetes_installer/kubernetes_installer_factory_.v @@ -5,6 +5,7 @@ import incubaid.herolib.core.playbook { PlayBook } import incubaid.herolib.ui.console import json import incubaid.herolib.osal.startupmanager +import incubaid.herolib.osal.core as osal import time __global ( @@ -238,7 +239,12 @@ pub fn (mut self KubernetesInstaller) start() ! { return error('K3s is not installed. Please run install_master, join_master, or install_worker first.') } - configure()! + // Ensure data directory exists + osal.dir_ensure(self.data_dir)! + + // Create manifests directory for auto-apply + manifests_dir := '${self.data_dir}/server/manifests' + osal.dir_ensure(manifests_dir)! for zprocess in self.startupcmd()! { mut sm := startupmanager_get(zprocess.startuptype)! diff --git a/lib/installers/virt/kubernetes_installer/kubernetes_installer_model.v b/lib/installers/virt/kubernetes_installer/kubernetes_installer_model.v index 412bb975..e7d8a181 100644 --- a/lib/installers/virt/kubernetes_installer/kubernetes_installer_model.v +++ b/lib/installers/virt/kubernetes_installer/kubernetes_installer_model.v @@ -37,7 +37,7 @@ pub mut: // your checking & initialization code if needed fn obj_init(mycfg_ KubernetesInstaller) !KubernetesInstaller { mut mycfg := mycfg_ - + // Set default data directory if not provided if mycfg.data_dir == '' { mycfg.data_dir = os.join_path(os.home_dir(), 'hero/var/k3s') @@ -60,10 +60,8 @@ fn obj_init(mycfg_ KubernetesInstaller) !KubernetesInstaller { mycfg.token = rand.hex(32) } - // Validate: join operations require token and master_url - if !mycfg.is_first_master && (mycfg.token == '' || mycfg.master_url == '') { - return error('Joining a cluster requires both token and master_url to be set') - } + // Note: Validation of token/master_url is done in the specific action functions + // (join_master, install_worker) where the context is clear return mycfg }