kairos-agent/internal/agent/agent.go
Itxaka fbb64f2a82
Run tests in parallel and output github formats on workflow (#543)
* Run tests in parallel and output github formats on workflow

Signed-off-by: Itxaka <itxaka@kairos.io>

* Fix broken parallel tests

We were using a fixed file for the tests which several tests could be
accessing at the same time.

This fixes it by setting a temp random file at the test start

Signed-off-by: Itxaka <itxaka@kairos.io>

* Fix the tests logging to stdout

Signed-off-by: Itxaka <itxaka@kairos.io>

* Drop the verbose

Signed-off-by: Itxaka <itxaka@kairos.io>

* Fix agent test

Signed-off-by: Itxaka <itxaka@kairos.io>

* Let the event consumer create the logfile or whatever

Signed-off-by: Itxaka <itxaka@kairos.io>

* Drop Focus

Signed-off-by: Itxaka <itxaka@kairos.io>

---------

Signed-off-by: Itxaka <itxaka@kairos.io>
2024-09-17 17:51:11 +02:00

72 lines
1.9 KiB
Go

package agent
import (
"fmt"
hook "github.com/kairos-io/kairos-agent/v2/internal/agent/hooks"
"github.com/kairos-io/kairos-agent/v2/internal/bus"
config "github.com/kairos-io/kairos-agent/v2/pkg/config"
v1 "github.com/kairos-io/kairos-agent/v2/pkg/types/v1"
events "github.com/kairos-io/kairos-sdk/bus"
"github.com/kairos-io/kairos-sdk/collector"
"github.com/kairos-io/kairos-sdk/machine"
"github.com/kairos-io/kairos-sdk/utils"
"os"
)
// Run starts the agent provider emitting the bootstrap event.
func Run(opts ...Option) error {
o := &Options{}
if err := o.Apply(opts...); err != nil {
return err
}
os.MkdirAll("/usr/local/.kairos", 0600) //nolint:errcheck
// Reads config
c, err := config.Scan(collector.Directories(o.Dir...))
if err != nil {
return err
}
utils.SetEnv(c.Env)
bf := machine.BootFrom()
if c.Install != nil && c.Install.Auto && (bf == machine.NetBoot || bf == machine.LiveCDBoot) {
// Don't go ahead if we are asked to install from a booting live medium
fmt.Println("Agent run aborted. Installation being performed from live medium")
return nil
}
fileName := "/var/log/kairos/agent-provider.log"
if !machine.SentinelExist("firstboot") {
spec := v1.EmptySpec{}
if err := hook.Run(*c, &spec, hook.FirstBoot...); err != nil {
return err
}
// Re-load providers
bus.Reload()
err = machine.CreateSentinel("firstboot")
if c.FailOnBundleErrors && err != nil {
return err
}
// Re-read config files
c, err = config.Scan(collector.Directories(o.Dir...))
if err != nil {
return err
}
}
configStr, err := c.Config.String()
if err != nil {
panic(err)
}
_, err = bus.Manager.Publish(events.EventBootstrap, events.BootstrapPayload{APIAddress: o.APIAddress, Config: configStr, Logfile: fileName})
if o.Restart && err != nil {
fmt.Println("Warning: Agent failed, restarting: ", err.Error())
return Run(opts...)
}
return err
}