Skip to content

Commit 7b154d9

Browse files
authored
Merge pull request #74 from kubev2v/fix-console-change-mode
fix switch mode from connected to disconnected
2 parents 42fd4ae + cd2677b commit 7b154d9

File tree

3 files changed

+62
-29
lines changed

3 files changed

+62
-29
lines changed

cmd/run.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ func NewRunCommand(cfg *config.Configuration) *cobra.Command {
111111
// create inspector service
112112
inspectorSrv := services.NewInspectorService(sched, s).WithBuilder(models.UnimplementedInspectorWorkBuilder{})
113113

114-
consoleSrv := services.NewConsoleService(cfg.Agent, sched, consoleClient, collectorSrv, s)
114+
consoleSrv, err := services.NewConsoleService(cfg.Agent, sched, consoleClient, collectorSrv, s)
115+
if err != nil {
116+
return fmt.Errorf("failed to create console service: %w", err)
117+
}
115118
inventorySrv := services.NewInventoryService(s)
116119
vmSrv := services.NewVMService(s)
117120

internal/services/console.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ type Console struct {
4646
legacyStatusEnabled bool
4747
}
4848

49-
func NewConsoleService(cfg config.Agent, s *scheduler.Scheduler, client *console.Client, collector Collector, st *store.Store) *Console {
49+
func NewConsoleService(cfg config.Agent, s *scheduler.Scheduler, client *console.Client, collector Collector, st *store.Store) (*Console, error) {
5050
targetStatus, err := models.ParseConsoleStatusType(cfg.Mode)
5151
if err != nil {
5252
targetStatus = models.ConsoleStatusDisconnected
@@ -61,15 +61,20 @@ func NewConsoleService(cfg config.Agent, s *scheduler.Scheduler, client *console
6161
if err == nil && config.AgentMode == models.AgentModeConnected {
6262
defaultStatus.Target = models.ConsoleStatusConnected
6363
}
64+
6465
c := newConsoleService(cfg, s, client, collector, st, defaultStatus)
6566

67+
if err := c.store.Configuration().Save(context.Background(), &models.Configuration{AgentMode: models.AgentMode(defaultStatus.Target)}); err != nil {
68+
return nil, err
69+
}
70+
6671
if defaultStatus.Target == models.ConsoleStatusConnected {
6772
go c.run()
6873
}
6974

7075
zap.S().Named("console_service").Infow("agent mode", "current", defaultStatus.Current, "target", defaultStatus.Target)
7176

72-
return c
77+
return c, nil
7378
}
7479

7580
func newConsoleService(cfg config.Agent, s *scheduler.Scheduler, client *console.Client, collector Collector, store *store.Store, defaultStatus models.ConsoleStatus) *Console {
@@ -121,7 +126,6 @@ func (c *Console) SetMode(ctx context.Context, mode models.AgentMode) error {
121126
case models.AgentModeConnected:
122127
c.state.SetTarget(models.ConsoleStatusConnected)
123128
zap.S().Debugw("starting run loop for connected mode")
124-
c.close = make(chan any, 1)
125129
go c.run()
126130
case models.AgentModeDisconnected:
127131
c.state.SetTarget(models.ConsoleStatusDisconnected)
@@ -158,6 +162,7 @@ func (c *Console) Status() models.ConsoleStatus {
158162
func (c *Console) run() {
159163
c.state.SetCurrent(models.ConsoleStatusConnected)
160164
tick := time.NewTicker(c.updateInterval)
165+
c.close = make(chan any, 1)
161166
defer func() {
162167
tick.Stop()
163168
c.state.SetCurrent(models.ConsoleStatusDisconnected)

internal/services/console_test.go

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ var _ = Describe("Console Service", func() {
9696
Expect(err).NotTo(HaveOccurred())
9797

9898
cfg.Mode = "disconnected"
99-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
99+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
100+
Expect(err).NotTo(HaveOccurred())
100101
Expect(consoleSrv).NotTo(BeNil())
101102

102103
status := consoleSrv.Status()
@@ -116,7 +117,8 @@ var _ = Describe("Console Service", func() {
116117
Expect(err).NotTo(HaveOccurred())
117118

118119
cfg.Mode = "disconnected"
119-
_ = services.NewConsoleService(cfg, sched, client, collector, st)
120+
_, err = services.NewConsoleService(cfg, sched, client, collector, st)
121+
Expect(err).NotTo(HaveOccurred())
120122

121123
// Wait longer than updateInterval (50ms) to ensure no requests are fired
122124
Consistently(requestReceived, 150*time.Millisecond).ShouldNot(Receive())
@@ -140,7 +142,8 @@ var _ = Describe("Console Service", func() {
140142
client, err := console.NewConsoleClient(server.URL, "")
141143
Expect(err).NotTo(HaveOccurred())
142144

143-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
145+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
146+
Expect(err).NotTo(HaveOccurred())
144147
Expect(consoleSrv).NotTo(BeNil())
145148

146149
status := consoleSrv.Status()
@@ -166,7 +169,8 @@ var _ = Describe("Console Service", func() {
166169
client, err := console.NewConsoleClient(server.URL, "")
167170
Expect(err).NotTo(HaveOccurred())
168171

169-
_ = services.NewConsoleService(cfg, sched, client, collector, st)
172+
_, err = services.NewConsoleService(cfg, sched, client, collector, st)
173+
Expect(err).NotTo(HaveOccurred())
170174

171175
Eventually(requestReceived, 500*time.Millisecond).Should(Receive())
172176
})
@@ -187,7 +191,8 @@ var _ = Describe("Console Service", func() {
187191
client, err := console.NewConsoleClient(server.URL, "")
188192
Expect(err).NotTo(HaveOccurred())
189193

190-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
194+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
195+
Expect(err).NotTo(HaveOccurred())
191196
Expect(consoleSrv).NotTo(BeNil())
192197

193198
status := consoleSrv.Status()
@@ -206,7 +211,8 @@ var _ = Describe("Console Service", func() {
206211
client, err := console.NewConsoleClient(server.URL, "")
207212
Expect(err).NotTo(HaveOccurred())
208213

209-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
214+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
215+
Expect(err).NotTo(HaveOccurred())
210216
Expect(consoleSrv).NotTo(BeNil())
211217

212218
err = consoleSrv.SetMode(context.Background(), models.AgentModeConnected)
@@ -231,7 +237,8 @@ var _ = Describe("Console Service", func() {
231237
client, err := console.NewConsoleClient(server.URL, "")
232238
Expect(err).NotTo(HaveOccurred())
233239

234-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
240+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
241+
Expect(err).NotTo(HaveOccurred())
235242
err = consoleSrv.SetMode(context.Background(), models.AgentModeConnected)
236243
Expect(err).NotTo(HaveOccurred())
237244

@@ -251,7 +258,8 @@ var _ = Describe("Console Service", func() {
251258
client, err := console.NewConsoleClient(server.URL, "")
252259
Expect(err).NotTo(HaveOccurred())
253260

254-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
261+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
262+
Expect(err).NotTo(HaveOccurred())
255263

256264
err = consoleSrv.SetMode(context.Background(), models.AgentModeConnected)
257265
Expect(err).NotTo(HaveOccurred())
@@ -274,7 +282,8 @@ var _ = Describe("Console Service", func() {
274282
client, err := console.NewConsoleClient(server.URL, "")
275283
Expect(err).NotTo(HaveOccurred())
276284

277-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
285+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
286+
Expect(err).NotTo(HaveOccurred())
278287
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
279288

280289
Eventually(requestReceived, 500*time.Millisecond).Should(Receive())
@@ -303,7 +312,8 @@ var _ = Describe("Console Service", func() {
303312
client, err := console.NewConsoleClient(server.URL, "")
304313
Expect(err).NotTo(HaveOccurred())
305314

306-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
315+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
316+
Expect(err).NotTo(HaveOccurred())
307317

308318
status := consoleSrv.Status()
309319

@@ -332,7 +342,8 @@ var _ = Describe("Console Service", func() {
332342
// Set collector to collected status so inventory would be sent if not blocked
333343
collector.SetState(models.CollectorStateCollected)
334344

335-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
345+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
346+
Expect(err).NotTo(HaveOccurred())
336347
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
337348

338349
Eventually(statusReceived, 500*time.Millisecond).Should(Receive())
@@ -366,7 +377,8 @@ var _ = Describe("Console Service", func() {
366377
// Set collector to collected status so inventory would be sent if not blocked
367378
collector.SetState(models.CollectorStateCollected)
368379

369-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
380+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
381+
Expect(err).NotTo(HaveOccurred())
370382
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
371383

372384
Eventually(statusReceived, 500*time.Millisecond).Should(Receive())
@@ -392,7 +404,8 @@ var _ = Describe("Console Service", func() {
392404
client, err := console.NewConsoleClient(server.URL, "")
393405
Expect(err).NotTo(HaveOccurred())
394406

395-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
407+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
408+
Expect(err).NotTo(HaveOccurred())
396409
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
397410

398411
// Should receive multiple requests despite errors
@@ -422,7 +435,8 @@ var _ = Describe("Console Service", func() {
422435
err = st.Inventory().Save(context.Background(), []byte(`{"vms": [{"name": "vm1"}]}`))
423436
Expect(err).NotTo(HaveOccurred())
424437

425-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
438+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
439+
Expect(err).NotTo(HaveOccurred())
426440
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
427441

428442
// Should receive status update
@@ -450,7 +464,8 @@ var _ = Describe("Console Service", func() {
450464

451465
// No inventory saved to store
452466

453-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
467+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
468+
Expect(err).NotTo(HaveOccurred())
454469
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
455470

456471
// Should receive status update
@@ -477,7 +492,8 @@ var _ = Describe("Console Service", func() {
477492
err = st.Inventory().Save(context.Background(), []byte(`{"vms": [{"name": "vm1"}]}`))
478493
Expect(err).NotTo(HaveOccurred())
479494

480-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
495+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
496+
Expect(err).NotTo(HaveOccurred())
481497
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
482498

483499
// Wait for multiple ticks
@@ -517,7 +533,8 @@ var _ = Describe("Console Service", func() {
517533
err = st.Inventory().Save(context.Background(), []byte(`{"vms": [{"name": "vm1"}]}`))
518534
Expect(err).NotTo(HaveOccurred())
519535

520-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
536+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
537+
Expect(err).NotTo(HaveOccurred())
521538
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
522539

523540
// Wait for first tick (status OK, inventory OK) and second tick (status 410, loop exits)
@@ -564,7 +581,8 @@ var _ = Describe("Console Service", func() {
564581
err = st.Inventory().Save(context.Background(), []byte(`{"vms": [{"name": "vm1"}]}`))
565582
Expect(err).NotTo(HaveOccurred())
566583

567-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
584+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
585+
Expect(err).NotTo(HaveOccurred())
568586
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
569587

570588
// Wait for first inventory request to complete
@@ -601,7 +619,8 @@ var _ = Describe("Console Service", func() {
601619
Expect(err).NotTo(HaveOccurred())
602620

603621
// No inventory in store - inventory dispatch will return sentinel error
604-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
622+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
623+
Expect(err).NotTo(HaveOccurred())
605624
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
606625

607626
// Wait for first tick to complete (status fails, inventory unchanged)
@@ -625,7 +644,8 @@ var _ = Describe("Console Service", func() {
625644
client, err := console.NewConsoleClient(server.URL, "")
626645
Expect(err).NotTo(HaveOccurred())
627646

628-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
647+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
648+
Expect(err).NotTo(HaveOccurred())
629649
err = consoleSrv.SetMode(context.Background(), models.AgentModeConnected)
630650
Expect(err).NotTo(HaveOccurred())
631651

@@ -653,7 +673,8 @@ var _ = Describe("Console Service", func() {
653673
client, err := console.NewConsoleClient(server.URL, "")
654674
Expect(err).NotTo(HaveOccurred())
655675

656-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
676+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
677+
Expect(err).NotTo(HaveOccurred())
657678
err = consoleSrv.SetMode(context.Background(), models.AgentModeConnected)
658679
Expect(err).NotTo(HaveOccurred())
659680

@@ -690,7 +711,8 @@ var _ = Describe("Console Service", func() {
690711
Expect(err).NotTo(HaveOccurred())
691712

692713
// Create service but don't start the loop (stay in disconnected mode)
693-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
714+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
715+
Expect(err).NotTo(HaveOccurred())
694716

695717
// Stop should not block even though loop was never started
696718
done := make(chan struct{})
@@ -719,7 +741,8 @@ var _ = Describe("Console Service", func() {
719741
client, err := console.NewConsoleClient(server.URL, "")
720742
Expect(err).NotTo(HaveOccurred())
721743

722-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
744+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
745+
Expect(err).NotTo(HaveOccurred())
723746
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
724747

725748
// Collect request times
@@ -768,7 +791,8 @@ var _ = Describe("Console Service", func() {
768791
err = st.Inventory().Save(context.Background(), []byte(`{"vms": [{"name": "vm1"}]}`))
769792
Expect(err).NotTo(HaveOccurred())
770793

771-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
794+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
795+
Expect(err).NotTo(HaveOccurred())
772796
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
773797

774798
// Wait for recovery
@@ -795,7 +819,8 @@ var _ = Describe("Console Service", func() {
795819
client, err := console.NewConsoleClient(server.URL, "")
796820
Expect(err).NotTo(HaveOccurred())
797821

798-
consoleSrv := services.NewConsoleService(cfg, sched, client, collector, st)
822+
consoleSrv, err := services.NewConsoleService(cfg, sched, client, collector, st)
823+
Expect(err).NotTo(HaveOccurred())
799824
Expect(consoleSrv.SetMode(context.Background(), models.AgentModeConnected)).To(BeNil())
800825

801826
// Wait for multiple tick intervals

0 commit comments

Comments
 (0)