@@ -90,6 +90,7 @@ const (
9090 FieldNodeTemplateEdgeLocationIDs = "edge_location_ids"
9191 FieldNodeTemplatePriceAdjustmentConfiguration = "price_adjustment_configuration"
9292 FieldNodeTemplateInstanceTypeAdjustments = "instance_type_adjustments"
93+ FieldNodeTemplateUserManagedGPUDrivers = "user_managed_gpu_drivers"
9394)
9495
9596const (
@@ -710,6 +711,12 @@ func resourceNodeTemplate() *schema.Resource {
710711 },
711712 },
712713 },
714+ FieldNodeTemplateUserManagedGPUDrivers : {
715+ Type : schema .TypeBool ,
716+ Optional : true ,
717+ Default : nil ,
718+ Description : "Enable/disable user-managed GPU drivers (for GKE clusters only)." ,
719+ },
713720 },
714721 },
715722 },
@@ -871,6 +878,10 @@ func flattenGpuSettings(g *sdk.NodetemplatesV1GPU) ([]map[string]any, error) {
871878
872879 out := make (map [string ]any )
873880
881+ if g .UserManagedGpuDrivers != nil {
882+ out [FieldNodeTemplateUserManagedGPUDrivers ] = g .UserManagedGpuDrivers
883+ }
884+
874885 if g .EnableTimeSharing != nil {
875886 out [FieldNodeTemplateEnableTimeSharing ] = g .EnableTimeSharing
876887 }
@@ -1170,6 +1181,7 @@ func updateNodeTemplate(ctx context.Context, d *schema.ResourceData, meta any, s
11701181 FieldNodeTemplateClmEnabled ,
11711182 FieldNodeTemplateEdgeLocationIDs ,
11721183 FieldNodeTemplatePriceAdjustmentConfiguration ,
1184+ FieldNodeTemplateUserManagedGPUDrivers ,
11731185 ) {
11741186 log .Printf ("[INFO] Nothing to update in node template" )
11751187 return nil
@@ -1680,6 +1692,11 @@ func toTemplateGpu(obj map[string]any) *sdk.NodetemplatesV1GPU {
16801692 return nil
16811693 }
16821694
1695+ var userManagedGPUDrivers bool
1696+ if v , ok := obj [FieldNodeTemplateUserManagedGPUDrivers ].(bool ); ok {
1697+ userManagedGPUDrivers = v
1698+ }
1699+
16831700 var defaultSharedClientsPerGpu int32
16841701 if v , ok := obj [FieldNodeTemplateDefaultSharedClientsPerGpu ].(int ); ok {
16851702 defaultSharedClientsPerGpu = int32 (v )
@@ -1711,16 +1728,24 @@ func toTemplateGpu(obj map[string]any) *sdk.NodetemplatesV1GPU {
17111728 // terraform treats nil values as zero values
17121729 // this condition checks whether the whole gpu configuration is deleted
17131730 // and gpu configuration should be set to nil
1714- if defaultSharedClientsPerGpu == 0 &&
1715- ! enableTimeSharing &&
1716- len (sharingConfig ) == 0 {
1731+ if defaultSharedClientsPerGpu == 0 && ! enableTimeSharing && len (sharingConfig ) == 0 && ! userManagedGPUDrivers {
17171732 return nil
17181733 }
1719- return & sdk.NodetemplatesV1GPU {
1720- DefaultSharedClientsPerGpu : & defaultSharedClientsPerGpu ,
1721- EnableTimeSharing : & enableTimeSharing ,
1722- SharingConfiguration : & sharingConfig ,
1734+
1735+ result := & sdk.NodetemplatesV1GPU {
1736+ EnableTimeSharing : & enableTimeSharing ,
1737+ SharingConfiguration : & sharingConfig ,
1738+ UserManagedGpuDrivers : & userManagedGPUDrivers ,
1739+ }
1740+
1741+ // Only set DefaultSharedClientsPerGpu if it's non-zero to avoid API validation errors
1742+ // as terraform treats nil values as zero values
1743+ // API requires it to be in range (0, 48] if present
1744+ if defaultSharedClientsPerGpu > 0 {
1745+ result .DefaultSharedClientsPerGpu = & defaultSharedClientsPerGpu
17231746 }
1747+
1748+ return result
17241749}
17251750
17261751func toTemplateConstraintsInstanceFamilies (o map [string ]any ) * sdk.NodetemplatesV1TemplateConstraintsInstanceFamilyConstraints {
0 commit comments