@@ -328,6 +328,13 @@ func (s *Supervisor) Start() error {
328
328
return fmt .Errorf ("failed loading initial config: %w" , err )
329
329
}
330
330
331
+ if s .config .Agent .ValidateConfig {
332
+ err = s .validateConfig ()
333
+ if err != nil {
334
+ return err
335
+ }
336
+ }
337
+
331
338
s .commander , err = commander .NewCommander (
332
339
s .telemetrySettings .Logger ,
333
340
s .config .Storage .Directory ,
@@ -354,17 +361,7 @@ func (s *Supervisor) Start() error {
354
361
}
355
362
356
363
func (s * Supervisor ) getFeatureGates () error {
357
- cmd , err := commander .NewCommander (
358
- s .telemetrySettings .Logger ,
359
- s .config .Storage .Directory ,
360
- s .config .Agent ,
361
- "featuregate" ,
362
- )
363
- if err != nil {
364
- return err
365
- }
366
-
367
- stdout , _ , err := cmd .StartOneShot ()
364
+ stdout , _ , err := s .runCommand ("featuregate" )
368
365
if err != nil {
369
366
return err
370
367
}
@@ -388,6 +385,28 @@ func (s *Supervisor) getFeatureGates() error {
388
385
return nil
389
386
}
390
387
388
+ func (s * Supervisor ) validateConfig () error {
389
+ _ , stderr , err := s .runCommand ("validate" , "--config" , s .agentConfigFilePath ())
390
+ if err != nil {
391
+ return fmt .Errorf ("error running validate command:%s" , stderr )
392
+ }
393
+ return nil
394
+ }
395
+
396
+ func (s * Supervisor ) runCommand (args ... string ) ([]byte , []byte , error ) {
397
+ cmd , err := commander .NewCommander (
398
+ s .telemetrySettings .Logger ,
399
+ s .config .Storage .Directory ,
400
+ s .config .Agent ,
401
+ args ... ,
402
+ )
403
+ if err != nil {
404
+ return nil , nil , err
405
+ }
406
+
407
+ return cmd .StartOneShot ()
408
+ }
409
+
391
410
func (s * Supervisor ) createTemplates () error {
392
411
var err error
393
412
@@ -1568,6 +1587,13 @@ func (s *Supervisor) onMessage(ctx context.Context, msg *types.MessageData) {
1568
1587
s .telemetrySettings .Logger .Error ("The OpAMP client failed to update the effective config" , zap .Error (err ))
1569
1588
}
1570
1589
1590
+ if s .config .Agent .ValidateConfig {
1591
+ err = s .validateConfig ()
1592
+ if err != nil {
1593
+ s .telemetrySettings .Logger .Error ("The OpAMP client failed to validate the effective config" , zap .Error (err ))
1594
+ }
1595
+ }
1596
+
1571
1597
s .telemetrySettings .Logger .Debug ("Config is changed. Signal to restart the agent" )
1572
1598
// Signal that there is a new config.
1573
1599
select {
0 commit comments