@@ -422,6 +422,74 @@ func parseNebiusNodeGroupStatus(status *nebiusmk8s.NodeGroupStatus) v1.NodeGroup
422422 return v1 .NodeGroupStatusUnknown
423423}
424424
425+ func (c * NebiusClient ) ModifyNodeGroup (ctx context.Context , args v1.ModifyNodeGroupArgs ) error {
426+ nebiusNodeGroupService := c .sdk .Services ().MK8S ().V1 ().NodeGroup ()
427+
428+ err := validateModifyNodeGroupArgs (args )
429+ if err != nil {
430+ return errors .WrapAndTrace (err )
431+ }
432+
433+ nodeGroup , err := nebiusNodeGroupService .Get (ctx , & nebiusmk8s.GetNodeGroupRequest {
434+ Id : string (args .ID ),
435+ })
436+ if err != nil {
437+ return errors .WrapAndTrace (err )
438+ }
439+
440+ _ , err = nebiusNodeGroupService .Update (ctx , & nebiusmk8s.UpdateNodeGroupRequest {
441+ Metadata : & nebiuscommon.ResourceMetadata {
442+ Id : nodeGroup .Metadata .Id ,
443+ Name : nodeGroup .Metadata .Name ,
444+ ParentId : nodeGroup .Metadata .ParentId ,
445+ Labels : nodeGroup .Metadata .Labels ,
446+ },
447+ Spec : & nebiusmk8s.NodeGroupSpec {
448+ Size : & nebiusmk8s.NodeGroupSpec_Autoscaling {
449+ Autoscaling : & nebiusmk8s.NodeGroupAutoscalingSpec {
450+ MinNodeCount : int64 (args .MinNodeCount ),
451+ MaxNodeCount : int64 (args .MaxNodeCount ),
452+ },
453+ },
454+ Template : & nebiusmk8s.NodeTemplate {
455+ Resources : & nebiusmk8s.ResourcesSpec {
456+ Platform : nodeGroup .Spec .GetTemplate ().GetResources ().GetPlatform (),
457+ Size : & nebiusmk8s.ResourcesSpec_Preset {
458+ Preset : nodeGroup .Spec .GetTemplate ().GetResources ().GetPreset (),
459+ },
460+ },
461+ GpuSettings : & nebiusmk8s.GpuSettings {
462+ DriversPreset : nodeGroup .Spec .GetTemplate ().GetGpuSettings ().GetDriversPreset (),
463+ },
464+ BootDisk : & nebiusmk8s.DiskSpec {
465+ Type : nodeGroup .Spec .GetTemplate ().GetBootDisk ().GetType (),
466+ Size : & nebiusmk8s.DiskSpec_SizeGibibytes {
467+ SizeGibibytes : nodeGroup .Spec .GetTemplate ().GetBootDisk ().GetSizeGibibytes (),
468+ },
469+ },
470+ },
471+ },
472+ })
473+ if err != nil {
474+ return errors .WrapAndTrace (fmt .Errorf ("failed to modify node group: %w" , err ))
475+ }
476+
477+ return nil
478+ }
479+
480+ func validateModifyNodeGroupArgs (args v1.ModifyNodeGroupArgs ) error {
481+ if args .MinNodeCount < 1 {
482+ return fmt .Errorf ("node group minNodeCount must be greater than 0" )
483+ }
484+ if args .MaxNodeCount < 1 {
485+ return fmt .Errorf ("node group maxNodeCount must be greater than 0" )
486+ }
487+ if args .MaxNodeCount < args .MinNodeCount {
488+ return fmt .Errorf ("node group maxNodeCount must be greater than or equal to minNodeCount" )
489+ }
490+ return nil
491+ }
492+
425493func (c * NebiusClient ) DeleteNodeGroup (ctx context.Context , args v1.DeleteNodeGroupArgs ) error {
426494 nebiusNodeGroupService := c .sdk .Services ().MK8S ().V1 ().NodeGroup ()
427495
0 commit comments