feat: Implement agent heartbeat with mTLS and node status tracking
This commit is contained in:
@ -265,6 +265,10 @@ func runInit(cmd *cobra.Command, args []string) {
|
||||
joinHandler := api.NewJoinHandler(etcdStore, caKeyPath, caCertPath)
|
||||
apiServer.RegisterJoinHandler(joinHandler)
|
||||
log.Printf("Registered join handler with CA key: %s, CA cert: %s", caKeyPath, caCertPath)
|
||||
|
||||
// Register the node status handler
|
||||
nodeStatusHandler := api.NewNodeStatusHandler(etcdStore)
|
||||
apiServer.RegisterNodeStatusHandler(nodeStatusHandler)
|
||||
|
||||
// Start the server in a goroutine
|
||||
go func() {
|
||||
@ -333,7 +337,8 @@ func runJoin(cmd *cobra.Command, args []string) {
|
||||
pkiDir := filepath.Join(os.Getenv("HOME"), ".kat-agent", nodeName, "pki")
|
||||
|
||||
// Join the cluster
|
||||
if err := cli.JoinCluster(leaderAPI, advertiseAddr, nodeName, leaderCACert, pkiDir); err != nil {
|
||||
joinResp, err := cli.JoinCluster(leaderAPI, advertiseAddr, nodeName, leaderCACert, pkiDir)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to join cluster: %v", err)
|
||||
}
|
||||
|
||||
@ -343,20 +348,36 @@ func runJoin(cmd *cobra.Command, args []string) {
|
||||
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
|
||||
defer stop()
|
||||
|
||||
// Stay up in an idle loop until interrupted
|
||||
log.Printf("Node %s is now running. Press Ctrl+C to exit.", nodeName)
|
||||
ticker := time.NewTicker(30 * time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
log.Println("Received shutdown signal. Exiting...")
|
||||
return
|
||||
case <-ticker.C:
|
||||
log.Printf("Node %s is still running...", nodeName)
|
||||
}
|
||||
// Create and start the agent with heartbeating
|
||||
agent, err := agent.NewAgent(
|
||||
joinResp.NodeName,
|
||||
joinResp.NodeUID,
|
||||
leaderAPI,
|
||||
advertiseAddr,
|
||||
pkiDir,
|
||||
15, // Default heartbeat interval in seconds
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create agent: %v", err)
|
||||
}
|
||||
|
||||
// Setup mTLS client
|
||||
if err := agent.SetupMTLSClient(); err != nil {
|
||||
log.Fatalf("Failed to setup mTLS client: %v", err)
|
||||
}
|
||||
|
||||
// Start heartbeating
|
||||
if err := agent.StartHeartbeat(ctx); err != nil {
|
||||
log.Fatalf("Failed to start heartbeat: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("Node %s is now running with heartbeat. Press Ctrl+C to exit.", nodeName)
|
||||
|
||||
// Wait for shutdown signal
|
||||
<-ctx.Done()
|
||||
log.Println("Received shutdown signal. Stopping heartbeat...")
|
||||
agent.StopHeartbeat()
|
||||
log.Println("Exiting...")
|
||||
}
|
||||
|
||||
func runVerify(cmd *cobra.Command, args []string) {
|
||||
|
Reference in New Issue
Block a user