2022-08-10 18:55:20 +02:00
|
|
|
package role
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
|
2023-07-10 18:10:33 +02:00
|
|
|
"github.com/kairos-io/kairos-agent/v2/pkg/config"
|
2023-03-31 14:31:54 +02:00
|
|
|
"github.com/kairos-io/kairos-sdk/utils"
|
2022-08-10 18:55:20 +02:00
|
|
|
|
2023-07-03 21:07:41 +02:00
|
|
|
providerConfig "github.com/kairos-io/provider-kairos/v2/internal/provider/config"
|
|
|
|
"github.com/kairos-io/provider-kairos/v2/internal/role"
|
2025-03-20 22:25:41 +01:00
|
|
|
common "github.com/kairos-io/provider-kairos/v2/internal/role"
|
2022-08-10 18:55:20 +02:00
|
|
|
service "github.com/mudler/edgevpn/api/client/service"
|
|
|
|
)
|
|
|
|
|
2023-03-31 14:31:54 +02:00
|
|
|
func Worker(cc *config.Config, pconfig *providerConfig.Config) role.Role { //nolint:revive
|
2022-08-10 18:55:20 +02:00
|
|
|
return func(c *service.RoleConfig) error {
|
2025-03-12 11:33:37 +01:00
|
|
|
c.Logger.Info("Starting Worker")
|
2022-08-10 18:55:20 +02:00
|
|
|
|
2022-12-09 16:00:28 +01:00
|
|
|
if pconfig.P2P.Role != "" {
|
2022-08-10 18:55:20 +02:00
|
|
|
// propagate role if we were forced by configuration
|
|
|
|
// This unblocks eventual auto instances to try to assign roles
|
2022-12-09 16:00:28 +01:00
|
|
|
if err := c.Client.Set("role", c.UUID, pconfig.P2P.Role); err != nil {
|
2022-08-10 18:55:20 +02:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-01 17:44:19 +01:00
|
|
|
if role.SentinelExist() {
|
2022-08-10 18:55:20 +02:00
|
|
|
c.Logger.Info("Node already configured, backing off")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2025-03-18 00:26:03 +01:00
|
|
|
cpIP, _ := c.Client.Get("control-plane", "ip")
|
|
|
|
if cpIP == "" {
|
|
|
|
c.Logger.Info("Control plane IP not there still..")
|
2022-08-10 18:55:20 +02:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2025-03-18 00:26:03 +01:00
|
|
|
worker, err := NewK8sWorker(pconfig)
|
2025-03-12 11:33:37 +01:00
|
|
|
if err != nil {
|
|
|
|
return fmt.Errorf("failed to determine k8s distro: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
ip := guessIP(pconfig)
|
2025-03-22 00:53:17 +01:00
|
|
|
if ip != "" {
|
|
|
|
if err := c.Client.Set("ip", c.UUID, ip); err != nil {
|
|
|
|
c.Logger.Error(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-03-20 22:25:41 +01:00
|
|
|
worker.SetRole(common.RoleWorker)
|
2025-03-18 00:26:03 +01:00
|
|
|
worker.SetRoleConfig(c)
|
|
|
|
worker.SetIP(ip)
|
2025-03-12 11:33:37 +01:00
|
|
|
|
2025-03-18 00:26:03 +01:00
|
|
|
workerToken, _ := worker.Token()
|
|
|
|
if workerToken == "" {
|
|
|
|
c.Logger.Info("worker token not there still..")
|
2022-08-10 18:55:20 +02:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2025-03-12 11:33:37 +01:00
|
|
|
utils.SH("kairos-agent run-stage provider-kairos.bootstrap.before.worker") //nolint:errcheck
|
2022-08-10 18:55:20 +02:00
|
|
|
|
2025-03-18 00:26:03 +01:00
|
|
|
err = worker.SetupWorker(cpIP, workerToken)
|
2022-08-10 18:55:20 +02:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2025-03-18 00:26:03 +01:00
|
|
|
k8sBin := worker.K8sBin()
|
2025-03-12 11:33:37 +01:00
|
|
|
if k8sBin == "" {
|
2025-03-18 00:26:03 +01:00
|
|
|
return fmt.Errorf("no %s binary found (?)", worker.Distro())
|
2022-12-05 13:32:05 +01:00
|
|
|
}
|
|
|
|
|
2025-03-20 22:08:06 +01:00
|
|
|
args, err := worker.Args()
|
2025-03-12 11:33:37 +01:00
|
|
|
if err != nil {
|
2022-08-10 18:55:20 +02:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2025-03-18 00:26:03 +01:00
|
|
|
svc, err := worker.Service()
|
2025-03-12 11:33:37 +01:00
|
|
|
if err != nil {
|
|
|
|
return err
|
2022-08-10 18:55:20 +02:00
|
|
|
}
|
|
|
|
|
2025-03-18 00:26:03 +01:00
|
|
|
c.Logger.Info(fmt.Sprintf("Configuring %s worker", worker.Distro()))
|
|
|
|
if err := svc.OverrideCmd(fmt.Sprintf("%s %s %s", k8sBin, worker.Role(), strings.Join(args, " "))); err != nil {
|
2022-08-10 18:55:20 +02:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := svc.Start(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := svc.Enable(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2025-03-12 11:33:37 +01:00
|
|
|
utils.SH("kairos-agent run-stage provider-kairos.bootstrap.after.worker") //nolint:errcheck
|
2022-12-11 18:12:51 +01:00
|
|
|
|
2022-12-01 17:44:19 +01:00
|
|
|
return role.CreateSentinel()
|
2022-08-10 18:55:20 +02:00
|
|
|
}
|
|
|
|
}
|