@@ -377,6 +377,78 @@ func (s *local) GetVMMetadata(requestCtx context.Context, req *proto.GetVMMetada
377
377
return resp , nil
378
378
}
379
379
380
+ // GetBalloonConfig get balloon configuration, before or after machine startup.
381
+ func (s * local ) GetBalloonConfig (requestCtx context.Context , req * proto.GetBalloonConfigRequest ) (* proto.GetBalloonConfigResponse , error ) {
382
+ client , err := s .shimFirecrackerClient (requestCtx , req .VMID )
383
+ if err != nil {
384
+ return nil , err
385
+ }
386
+
387
+ defer client .Close ()
388
+ resp , err := client .GetBalloonConfig (requestCtx , req )
389
+ if err != nil {
390
+ err = errors .Wrap (err , "shim client failed to get balloon config" )
391
+ s .logger .WithError (err ).Error ()
392
+ return nil , err
393
+ }
394
+
395
+ return resp , nil
396
+ }
397
+
398
+ // UpdateBalloon updates memory size for an existing balloon device, before or after machine startup.
399
+ func (s * local ) UpdateBalloon (requestCtx context.Context , req * proto.UpdateBalloonRequest ) (* empty.Empty , error ) {
400
+ client , err := s .shimFirecrackerClient (requestCtx , req .VMID )
401
+ if err != nil {
402
+ return nil , err
403
+ }
404
+
405
+ defer client .Close ()
406
+ resp , err := client .UpdateBalloon (requestCtx , req )
407
+ if err != nil {
408
+ err = errors .Wrap (err , "shim client failed to update balloon" )
409
+ s .logger .WithError (err ).Error ()
410
+ return nil , err
411
+ }
412
+
413
+ return resp , nil
414
+ }
415
+
416
+ // GetBalloonStats will return the latest balloon device statistics, only if enabled pre-boot.
417
+ func (s * local ) GetBalloonStats (requestCtx context.Context , req * proto.GetBalloonStatsRequest ) (* proto.GetBalloonStatsResponse , error ) {
418
+ client , err := s .shimFirecrackerClient (requestCtx , req .VMID )
419
+ if err != nil {
420
+ return nil , err
421
+ }
422
+
423
+ defer client .Close ()
424
+ resp , err := client .GetBalloonStats (requestCtx , req )
425
+ if err != nil {
426
+ err = errors .Wrap (err , "shim client failed to get balloon statistics" )
427
+ s .logger .WithError (err ).Error ()
428
+ return nil , err
429
+ }
430
+
431
+ return resp , nil
432
+ }
433
+
434
+ // UpdateBalloonStats updates an existing balloon device statistics interval, before or after machine startup.
435
+ func (s * local ) UpdateBalloonStats (requestCtx context.Context , req * proto.UpdateBalloonStatsRequest ) (* empty.Empty , error ) {
436
+ client , err := s .shimFirecrackerClient (requestCtx , req .VMID )
437
+ if err != nil {
438
+ return nil , err
439
+ }
440
+
441
+ defer client .Close ()
442
+ resp , err := client .UpdateBalloonStats (requestCtx , req )
443
+ if err != nil {
444
+ err = errors .Wrap (err , "shim client failed to update balloon interval" )
445
+ s .logger .WithError (err ).Error ()
446
+ return nil , err
447
+ }
448
+
449
+ return resp , nil
450
+ }
451
+
380
452
func (s * local ) newShim (ns , vmID , containerdAddress string , shimSocket * net.UnixListener , fcSocket * net.UnixListener ) (* exec.Cmd , error ) {
381
453
logger := s .logger .WithField ("vmID" , vmID )
382
454
0 commit comments