@@ -206,10 +206,11 @@ func (r *virtualMachineResource) removeUnusedDisks(ctx context.Context, node str
206206func determineUpdates (ctx context.Context , node string , vmId int , state * vt.VirtualMachineResourceModel , plan * vt.VirtualMachineResourceModel ) * service.ConfigureVirtualMachineInput {
207207 tflog .Debug (ctx , "determine configuration updates method" )
208208 request := & service.ConfigureVirtualMachineInput {
209- Node : node ,
210- VmId : vmId ,
211- Memory : FormMemoryConfig (& plan .Memory ),
212- CPU : FormCPUConfig (& plan .CPU ),
209+ Node : node ,
210+ VmId : vmId ,
211+ Memory : FormMemoryConfig (& plan .Memory ),
212+ CPU : FormCPUConfig (& plan .CPU ),
213+ NetworkInterfaces : FormNetworkInterfaceConfig (plan .NetworkInterfaces .Nics ),
213214 }
214215
215216 old := state
@@ -229,15 +230,11 @@ func determineUpdates(ctx context.Context, node string, vmId int, state *vt.Virt
229230 request .Tags = utils .SetTypeToStringSlice (plan .Tags )
230231 }
231232
232- newDisks := determineAddedDisks (ctx , old .Disks .Disks , plan .Disks .Disks )
233+ newDisks , existingDisks := determineAddedDisks (ctx , old .Disks .Disks , plan .Disks .Disks )
233234 if len (newDisks ) > 0 {
234- request .Disks = FormDiskConfig (ctx , newDisks )
235- }
236-
237- newNics := determineAddedNetworkInterfaces (ctx , old .NetworkInterfaces .Nics , plan .NetworkInterfaces .Nics )
238- if len (newNics ) > 0 {
239- request .NetworkInterfaces = FormNetworkInterfaceConfig (newNics )
235+ request .Disks = FormDiskConfig (ctx , newDisks , true )
240236 }
237+ request .Disks = append (request .Disks , FormDiskConfig (ctx , existingDisks , false )... )
241238
242239 if plan .Agent != nil {
243240 request .Agent = FormAgentConfig (plan .Agent )
@@ -395,23 +392,6 @@ func determineRemovedNetworkInterfaces(ctx context.Context, state []ct.VirtualMa
395392 return removeNics
396393}
397394
398- func determineAddedNetworkInterfaces (ctx context.Context , state []ct.VirtualMachineNetworkInterfaceModel , plan []ct.VirtualMachineNetworkInterfaceModel ) []ct.VirtualMachineNetworkInterfaceModel {
399- stateNics , planNics := flattenNetworkInterfaces (ctx , state , plan )
400-
401- addNics := []ct.VirtualMachineNetworkInterfaceModel {}
402- for _ , nic := range planNics {
403- if ! utils .ListContains (stateNics , nic ) {
404- for _ , n := range plan {
405- if fmt .Sprintf ("net%v" , n .Position .ValueInt64 ()) == nic {
406- addNics = append (addNics , n )
407- }
408- }
409- }
410- }
411-
412- return addNics
413- }
414-
415395func determineRemovedDisks (ctx context.Context , state []ct.VirtualMachineDiskModel , plan []ct.VirtualMachineDiskModel ) []string {
416396 stateDisks , planDisks := flattenDisks (ctx , state , plan )
417397 tflog .Debug (ctx , fmt .Sprintf ("stateDisks: %v" , stateDisks ))
@@ -444,22 +424,45 @@ func flattenDisks(ctx context.Context, state []ct.VirtualMachineDiskModel, plan
444424 return stateDisks , planDisks
445425}
446426
447- func determineAddedDisks (ctx context.Context , state []ct.VirtualMachineDiskModel , plan []ct.VirtualMachineDiskModel ) []ct.VirtualMachineDiskModel {
427+ func determineAddedDisks (ctx context.Context , state []ct.VirtualMachineDiskModel , plan []ct.VirtualMachineDiskModel ) ( []ct.VirtualMachineDiskModel , []ct. VirtualMachineDiskModel ) {
448428 stateDisks , planDisks := flattenDisks (ctx , state , plan )
449429
450- addDisks := []ct.VirtualMachineDiskModel {}
430+ addedDisks := []ct.VirtualMachineDiskModel {}
431+ existingDisks := []ct.VirtualMachineDiskModel {}
451432 for _ , disk := range planDisks {
452433 if ! utils .ListContains (stateDisks , disk ) {
453- d := strings .Split (disk , ":" )[0 ]
454- for _ , pd := range plan {
455- if fmt .Sprintf ("%s%v" , pd .InterfaceType .ValueString (), pd .Position .ValueInt64 ()) == d {
456- addDisks = append (addDisks , pd )
434+ addedDisks = append (addedDisks , formDiskModel (disk , plan )... )
435+ } else {
436+ diskModels := formDiskModel (disk , plan )
437+
438+ for _ , diskModel := range diskModels {
439+ for _ , s := range state {
440+ d1 := fmt .Sprintf ("%s%v" , diskModel .InterfaceType .ValueString (), diskModel .Position .ValueInt64 ())
441+ d2 := fmt .Sprintf ("%s%v" , s .InterfaceType .ValueString (), s .Position .ValueInt64 ())
442+ if d1 == d2 {
443+ tflog .Info (ctx , fmt .Sprintf ("size of plan disk %s is %v" , d1 , diskModel .Size .ValueInt64 ()))
444+ tflog .Info (ctx , fmt .Sprintf ("size of state disk %s is %v" , d2 , s .Size .ValueInt64 ()))
445+ diskModel .Size = s .Size
446+ diskModel .Name = s .Name
447+ existingDisks = append (existingDisks , diskModel )
448+ }
457449 }
458450 }
459451 }
460452 }
461453
462- return addDisks
454+ return addedDisks , existingDisks
455+ }
456+
457+ func formDiskModel (disk string , models []ct.VirtualMachineDiskModel ) []ct.VirtualMachineDiskModel {
458+ disks := []ct.VirtualMachineDiskModel {}
459+ d := strings .Split (disk , ":" )[0 ]
460+ for _ , pd := range models {
461+ if fmt .Sprintf ("%s%v" , pd .InterfaceType .ValueString (), pd .Position .ValueInt64 ()) == d {
462+ disks = append (disks , pd )
463+ }
464+ }
465+ return disks
463466}
464467
465468func FormNetworkInterfaceConfig (nics []ct.VirtualMachineNetworkInterfaceModel ) []service.ConfigureVirtualMachineNetworkInterfaceOptions {
@@ -481,20 +484,26 @@ func FormNetworkInterfaceConfig(nics []ct.VirtualMachineNetworkInterfaceModel) [
481484 return n
482485}
483486
484- func FormDiskConfig (ctx context.Context , disks []ct.VirtualMachineDiskModel ) []service.ConfigureVirtualMachineDiskOptions {
487+ func FormDiskConfig (ctx context.Context , disks []ct.VirtualMachineDiskModel , new bool ) []service.ConfigureVirtualMachineDiskOptions {
485488 tflog .Debug (ctx , "Entered form disk config" )
486489 d := make ([]service.ConfigureVirtualMachineDiskOptions , len (disks ))
487490 tflog .Debug (ctx , fmt .Sprintf ("Disks to configure: %v" , len (disks )))
488491 for i , v := range disks {
489492 dconfig := service.ConfigureVirtualMachineDiskOptions {
490493 Storage : v .Storage .ValueString (),
491494 FileFormat : utils .OptionalToPointerString (v .FileFormat .ValueString ()),
492- Size : int (v .Size .ValueInt64 ()),
493495 UseIOThreads : v .UseIOThread .ValueBool (),
496+ Size : int (v .Size .ValueInt64 ()),
494497 Position : int (v .Position .ValueInt64 ()),
495498 InterfaceType : v .InterfaceType .ValueString (),
496499 SSDEmulation : v .SSDEmulation .ValueBool (),
497500 Discard : v .Discard .ValueBool (),
501+ New : new ,
502+ }
503+
504+ if ! v .Name .IsNull () || ! v .Name .IsUnknown () {
505+ name := v .Name .ValueString ()
506+ dconfig .Name = & name
498507 }
499508
500509 if v .SpeedLimits != nil {
@@ -506,7 +515,7 @@ func FormDiskConfig(ctx context.Context, disks []ct.VirtualMachineDiskModel) []s
506515 dconfig .SpeedLimits = & s
507516 }
508517
509- tflog .Debug (ctx , fmt .Sprintf ("Disk %v: %v" , i , dconfig ))
518+ tflog .Info (ctx , fmt .Sprintf ("Disk %v: %v" , i , dconfig ))
510519
511520 d [i ] = dconfig
512521 }
0 commit comments