2022-07-17 08:42:12 +00:00
|
|
|
package agent
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2024-09-19 14:04:02 +00:00
|
|
|
"os"
|
|
|
|
|
2023-07-24 10:28:59 +00:00
|
|
|
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"
|
2024-09-17 15:51:11 +00:00
|
|
|
v1 "github.com/kairos-io/kairos-agent/v2/pkg/types/v1"
|
2023-03-15 14:45:00 +00:00
|
|
|
events "github.com/kairos-io/kairos-sdk/bus"
|
2023-06-14 12:44:22 +00:00
|
|
|
"github.com/kairos-io/kairos-sdk/collector"
|
2023-03-18 09:27:18 +00:00
|
|
|
"github.com/kairos-io/kairos-sdk/machine"
|
|
|
|
"github.com/kairos-io/kairos-sdk/utils"
|
2022-07-17 08:42:12 +00:00
|
|
|
)
|
|
|
|
|
2023-03-10 10:10:03 +00:00
|
|
|
// Run starts the agent provider emitting the bootstrap event.
|
2022-08-08 08:15:15 +00:00
|
|
|
func Run(opts ...Option) error {
|
|
|
|
o := &Options{}
|
|
|
|
if err := o.Apply(opts...); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2022-07-17 08:42:12 +00:00
|
|
|
|
2022-09-17 16:43:51 +00:00
|
|
|
os.MkdirAll("/usr/local/.kairos", 0600) //nolint:errcheck
|
2022-07-17 08:42:12 +00:00
|
|
|
|
|
|
|
// Reads config
|
2023-03-29 14:25:38 +00:00
|
|
|
c, err := config.Scan(collector.Directories(o.Dir...))
|
2022-07-17 08:42:12 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2022-10-30 06:57:08 +00:00
|
|
|
|
|
|
|
utils.SetEnv(c.Env)
|
2022-07-20 22:31:40 +00:00
|
|
|
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
|
|
|
|
}
|
2022-07-17 08:42:12 +00:00
|
|
|
|
2024-09-17 15:51:11 +00:00
|
|
|
fileName := "/var/log/kairos/agent-provider.log"
|
2024-09-19 14:04:02 +00:00
|
|
|
|
2022-10-24 06:34:49 +00:00
|
|
|
if !machine.SentinelExist("firstboot") {
|
2023-07-24 10:28:59 +00:00
|
|
|
spec := v1.EmptySpec{}
|
|
|
|
if err := hook.Run(*c, &spec, hook.FirstBoot...); err != nil {
|
2022-07-17 08:42:12 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2022-07-18 22:02:49 +00:00
|
|
|
// Re-load providers
|
2022-08-20 21:47:16 +00:00
|
|
|
bus.Reload()
|
2022-10-24 06:34:49 +00:00
|
|
|
err = machine.CreateSentinel("firstboot")
|
2022-10-02 22:16:01 +00:00
|
|
|
if c.FailOnBundleErrors && err != nil {
|
2022-07-25 22:26:10 +00:00
|
|
|
return err
|
|
|
|
}
|
2023-01-05 13:15:05 +00:00
|
|
|
|
|
|
|
// Re-read config files
|
2023-03-29 14:25:38 +00:00
|
|
|
c, err = config.Scan(collector.Directories(o.Dir...))
|
2023-01-05 13:15:05 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2022-07-17 08:42:12 +00:00
|
|
|
}
|
2023-03-29 14:25:38 +00:00
|
|
|
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})
|
2022-08-08 08:15:15 +00:00
|
|
|
|
|
|
|
if o.Restart && err != nil {
|
|
|
|
fmt.Println("Warning: Agent failed, restarting: ", err.Error())
|
|
|
|
return Run(opts...)
|
|
|
|
}
|
2022-07-17 08:42:12 +00:00
|
|
|
return err
|
|
|
|
}
|