@@ -542,7 +542,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
542542 request .DedicatedClusterId = helper .String (v .(string ))
543543 }
544544
545- if v , ok := d .GetOk ("project_id" ); ok {
545+ if v , ok := d .GetOkExists ("project_id" ); ok {
546546 projectId := int64 (v .(int ))
547547 request .Placement .ProjectId = & projectId
548548 }
@@ -615,10 +615,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
615615 }
616616 }
617617
618- var (
619- rpgFlag bool
620- )
621-
618+ var rpgFlag bool
622619 if v , ok := d .GetOkExists ("force_replace_placement_group_id" ); ok {
623620 rpgFlag = v .(bool )
624621 }
@@ -630,23 +627,35 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
630627 }
631628
632629 // network
633- request .InternetAccessible = & cvm.InternetAccessible {}
630+ var (
631+ internetAccessible cvm.InternetAccessible
632+ netWorkFlag bool
633+ )
634+
634635 if v , ok := d .GetOk ("internet_charge_type" ); ok {
635- request .InternetAccessible .InternetChargeType = helper .String (v .(string ))
636+ internetAccessible .InternetChargeType = helper .String (v .(string ))
637+ netWorkFlag = true
636638 }
637639
638- if v , ok := d .GetOk ("internet_max_bandwidth_out" ); ok {
640+ if v , ok := d .GetOkExists ("internet_max_bandwidth_out" ); ok {
639641 maxBandwidthOut := int64 (v .(int ))
640- request .InternetAccessible .InternetMaxBandwidthOut = & maxBandwidthOut
642+ internetAccessible .InternetMaxBandwidthOut = & maxBandwidthOut
643+ netWorkFlag = true
641644 }
642645
643646 if v , ok := d .GetOk ("bandwidth_package_id" ); ok {
644- request .InternetAccessible .BandwidthPackageId = helper .String (v .(string ))
647+ internetAccessible .BandwidthPackageId = helper .String (v .(string ))
648+ netWorkFlag = true
645649 }
646650
647651 if v , ok := d .GetOkExists ("allocate_public_ip" ); ok {
648652 allocatePublicIp := v .(bool )
649- request .InternetAccessible .PublicIpAssigned = & allocatePublicIp
653+ internetAccessible .PublicIpAssigned = & allocatePublicIp
654+ netWorkFlag = true
655+ }
656+
657+ if netWorkFlag {
658+ request .InternetAccessible = & internetAccessible
650659 }
651660
652661 // vpc
@@ -680,27 +689,38 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
680689 }
681690
682691 // storage
683- request .SystemDisk = & cvm.SystemDisk {}
692+ var (
693+ systemDisk cvm.SystemDisk
694+ systemDiskFlag bool
695+ )
696+
684697 if v , ok := d .GetOk ("system_disk_type" ); ok {
685- request .SystemDisk .DiskType = helper .String (v .(string ))
698+ systemDisk .DiskType = helper .String (v .(string ))
699+ systemDiskFlag = true
686700 }
687701
688- if v , ok := d .GetOk ("system_disk_size" ); ok {
702+ if v , ok := d .GetOkExists ("system_disk_size" ); ok {
689703 diskSize := int64 (v .(int ))
690- request .SystemDisk .DiskSize = & diskSize
704+ systemDisk .DiskSize = & diskSize
705+ systemDiskFlag = true
691706 }
692707
693708 if v , ok := d .GetOk ("system_disk_id" ); ok {
694- request .SystemDisk .DiskId = helper .String (v .(string ))
709+ systemDisk .DiskId = helper .String (v .(string ))
710+ systemDiskFlag = true
695711 }
696712
697713 if v , ok := d .GetOk ("system_disk_name" ); ok {
698- request .SystemDisk .DiskName = helper .String (v .(string ))
714+ systemDisk .DiskName = helper .String (v .(string ))
715+ systemDiskFlag = true
716+ }
717+
718+ if systemDiskFlag {
719+ request .SystemDisk = & systemDisk
699720 }
700721
701722 if v , ok := d .GetOk ("data_disks" ); ok {
702723 dataDisks := v .([]interface {})
703- request .DataDisks = make ([]* cvm.DataDisk , 0 , len (dataDisks ))
704724 for _ , d := range dataDisks {
705725 value := d .(map [string ]interface {})
706726 diskType := value ["data_disk_type" ].(string )
@@ -749,46 +769,75 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
749769 }
750770
751771 // enhanced service
752- request .EnhancedService = & cvm.EnhancedService {}
772+ var (
773+ enhancedService cvm.EnhancedService
774+ enhancedServiceFlag bool
775+ )
776+
753777 if v , ok := d .GetOkExists ("disable_security_service" ); ok {
754778 securityService := ! (v .(bool ))
755- request . EnhancedService .SecurityService = & cvm.RunSecurityServiceEnabled {
779+ enhancedService .SecurityService = & cvm.RunSecurityServiceEnabled {
756780 Enabled : & securityService ,
757781 }
782+ enhancedServiceFlag = true
758783 }
759784
760785 if v , ok := d .GetOkExists ("disable_monitor_service" ); ok {
761786 monitorService := ! (v .(bool ))
762- request . EnhancedService .MonitorService = & cvm.RunMonitorServiceEnabled {
787+ enhancedService .MonitorService = & cvm.RunMonitorServiceEnabled {
763788 Enabled : & monitorService ,
764789 }
790+ enhancedServiceFlag = true
765791 }
766792
767793 if v , ok := d .GetOkExists ("disable_automation_service" ); ok {
768794 automationService := ! (v .(bool ))
769- request . EnhancedService .AutomationService = & cvm.RunAutomationServiceEnabled {
795+ enhancedService .AutomationService = & cvm.RunAutomationServiceEnabled {
770796 Enabled : & automationService ,
771797 }
798+ enhancedServiceFlag = true
799+ }
800+
801+ if enhancedServiceFlag {
802+ request .EnhancedService = & enhancedService
772803 }
773804
774805 // login
775- request .LoginSettings = & cvm.LoginSettings {}
776- keyIds := d .Get ("key_ids" ).(* schema.Set ).List ()
777- if len (keyIds ) > 0 {
778- request .LoginSettings .KeyIds = helper .InterfacesStringsPoint (keyIds )
779- } else if v , ok := d .GetOk ("key_name" ); ok {
780- request .LoginSettings .KeyIds = []* string {helper .String (v .(string ))}
806+ var (
807+ loginSettings cvm.LoginSettings
808+ loginSettingsFlag bool
809+ )
810+
811+ if v , ok := d .GetOk ("key_name" ); ok {
812+ loginSettings .KeyIds = []* string {helper .String (v .(string ))}
813+ loginSettingsFlag = true
814+ }
815+
816+ if v , ok := d .GetOk ("key_ids" ); ok {
817+ keyIds := v .(* schema.Set ).List ()
818+ if len (keyIds ) > 0 {
819+ loginSettings .KeyIds = helper .InterfacesStringsPoint (keyIds )
820+ loginSettingsFlag = true
821+ }
781822 }
782823
783824 if v , ok := d .GetOk ("password" ); ok {
784- request .LoginSettings .Password = helper .String (v .(string ))
825+ loginSettings .Password = helper .String (v .(string ))
826+ loginSettingsFlag = true
785827 }
786828
787- v := d .Get ("keep_image_login" ).(bool )
788- if v {
789- request .LoginSettings .KeepImageLogin = helper .String (CVM_IMAGE_LOGIN )
790- } else {
791- request .LoginSettings .KeepImageLogin = helper .String (CVM_IMAGE_LOGIN_NOT )
829+ if v , ok := d .GetOkExists ("keep_image_login" ); ok {
830+ if v .(bool ) {
831+ loginSettings .KeepImageLogin = helper .String (CVM_IMAGE_LOGIN )
832+ } else {
833+ loginSettings .KeepImageLogin = helper .String (CVM_IMAGE_LOGIN_NOT )
834+ }
835+
836+ loginSettingsFlag = true
837+ }
838+
839+ if loginSettingsFlag {
840+ request .LoginSettings = & loginSettings
792841 }
793842
794843 if v , ok := d .GetOk ("user_data" ); ok {
@@ -1810,48 +1859,75 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
18101859 }
18111860
18121861 // enhanced service
1813- request .EnhancedService = & cvm.EnhancedService {}
1814- if d .HasChange ("disable_security_service" ) {
1815- v := d .Get ("disable_security_service" )
1816- securityService := v .(bool )
1817- request .EnhancedService .SecurityService = & cvm.RunSecurityServiceEnabled {
1862+ var (
1863+ enhancedService cvm.EnhancedService
1864+ enhancedServiceFlag bool
1865+ )
1866+
1867+ if v , ok := d .GetOkExists ("disable_security_service" ); ok {
1868+ securityService := ! (v .(bool ))
1869+ enhancedService .SecurityService = & cvm.RunSecurityServiceEnabled {
18181870 Enabled : & securityService ,
18191871 }
1872+ enhancedServiceFlag = true
18201873 }
18211874
1822- if d .HasChange ("disable_monitor_service" ) {
1823- v := d .Get ("disable_monitor_service" )
1875+ if v , ok := d .GetOkExists ("disable_monitor_service" ); ok {
18241876 monitorService := ! (v .(bool ))
1825- request . EnhancedService .MonitorService = & cvm.RunMonitorServiceEnabled {
1877+ enhancedService .MonitorService = & cvm.RunMonitorServiceEnabled {
18261878 Enabled : & monitorService ,
18271879 }
1880+ enhancedServiceFlag = true
18281881 }
18291882
1830- if d .HasChange ("disable_automation_service" ) {
1831- v := d .Get ("disable_automation_service" )
1883+ if v , ok := d .GetOkExists ("disable_automation_service" ); ok {
18321884 automationService := ! (v .(bool ))
1833- request . EnhancedService .AutomationService = & cvm.RunAutomationServiceEnabled {
1885+ enhancedService .AutomationService = & cvm.RunAutomationServiceEnabled {
18341886 Enabled : & automationService ,
18351887 }
1888+ enhancedServiceFlag = true
18361889 }
18371890
1838- // Modify or keep login info when instance reset
1839- request .LoginSettings = & cvm.LoginSettings {}
1891+ if enhancedServiceFlag {
1892+ request .EnhancedService = & enhancedService
1893+ }
18401894
1841- if v , ok := d .GetOk ("password" ); ok {
1842- request .LoginSettings .Password = helper .String (v .(string ))
1895+ // login
1896+ var (
1897+ loginSettings cvm.LoginSettings
1898+ loginSettingsFlag bool
1899+ )
1900+
1901+ if v , ok := d .GetOk ("key_name" ); ok {
1902+ loginSettings .KeyIds = []* string {helper .String (v .(string ))}
1903+ loginSettingsFlag = true
18431904 }
18441905
18451906 if v , ok := d .GetOk ("key_ids" ); ok {
1846- request .LoginSettings .KeyIds = helper .InterfacesStringsPoint (v .(* schema.Set ).List ())
1847- } else if v , ok := d .GetOk ("key_name" ); ok {
1848- request .LoginSettings .KeyIds = []* string {helper .String (v .(string ))}
1907+ keyIds := v .(* schema.Set ).List ()
1908+ if len (keyIds ) > 0 {
1909+ loginSettings .KeyIds = helper .InterfacesStringsPoint (keyIds )
1910+ loginSettingsFlag = true
1911+ }
18491912 }
18501913
1851- if v := d .Get ("keep_image_login" ).(bool ); v {
1852- request .LoginSettings .KeepImageLogin = helper .String (CVM_IMAGE_LOGIN )
1853- } else {
1854- request .LoginSettings .KeepImageLogin = helper .String (CVM_IMAGE_LOGIN_NOT )
1914+ if v , ok := d .GetOk ("password" ); ok {
1915+ loginSettings .Password = helper .String (v .(string ))
1916+ loginSettingsFlag = true
1917+ }
1918+
1919+ if v , ok := d .GetOkExists ("keep_image_login" ); ok {
1920+ if v .(bool ) {
1921+ loginSettings .KeepImageLogin = helper .String (CVM_IMAGE_LOGIN )
1922+ } else {
1923+ loginSettings .KeepImageLogin = helper .String (CVM_IMAGE_LOGIN_NOT )
1924+ }
1925+
1926+ loginSettingsFlag = true
1927+ }
1928+
1929+ if loginSettingsFlag {
1930+ request .LoginSettings = & loginSettings
18551931 }
18561932
18571933 if err := cvmService .ResetInstance (ctx , request ); err != nil {
0 commit comments