@@ -14,13 +14,11 @@ import (
1414 // "errors"
1515 "errors"
1616 "fmt"
17-
1817 // "io/ioutil"
1918 // "os"
2019 "strconv"
2120 "strings"
2221 "time"
23-
2422 // "github.com/davecgh/go-spew/spew"
2523
2624 "github.com/NaverCloudPlatform/ncloud-sdk-go-v2/ncloud"
@@ -51,8 +49,14 @@ func (diskHandler *NcpDiskHandler) CreateDisk(diskReqInfo irs.DiskInfo) (irs.Dis
5149 return irs.DiskInfo {}, rtnErr
5250 }
5351
52+ var reqZoneId string
53+ if strings .EqualFold (diskReqInfo .Zone , "" ) {
54+ reqZoneId = diskHandler .RegionInfo .Zone
55+ } else {
56+ reqZoneId = diskReqInfo .Zone
57+ }
5458 // $$$ At least one VM is required to create new disk volume in case of NCP.
55- instanceList , err := diskHandler .GetNcpVMList ( )
59+ instanceList , err := diskHandler .GetNcpVMListWithZone ( reqZoneId )
5660 if err != nil {
5761 rtnErr := logAndReturnError (callLogInfo , "Failed to Get NCP Instacne List :" , err )
5862 return irs.DiskInfo {}, rtnErr
@@ -634,6 +638,7 @@ func (diskHandler *NcpDiskHandler) MappingDiskInfo(storage server.BlockStorageIn
634638 NameId : ncloud .StringValue (storage .BlockStorageName ),
635639 SystemId : ncloud .StringValue (storage .BlockStorageInstanceNo ),
636640 },
641+ Zone : ncloud .StringValue (storage .Zone .ZoneCode ),
637642 DiskSize : strconv .FormatInt ((* storage .BlockStorageSize )/ (1024 * 1024 * 1024 ), 10 ),
638643 Status : ConvertDiskStatus (ncloud .StringValue (storage .BlockStorageInstanceStatusName )), // Not BlockStorageInstanceStatus.Code
639644 CreatedTime : convertedTime ,
@@ -645,14 +650,33 @@ func (diskHandler *NcpDiskHandler) MappingDiskInfo(storage server.BlockStorageIn
645650 RegionInfo : diskHandler .RegionInfo ,
646651 VMClient : diskHandler .VMClient ,
647652 }
648- vmInfo , err := vmHandler .GetNcpVMInfo (ncloud .StringValue (storage .ServerInstanceNo ))
653+ subnetZone , err := vmHandler .getVMSubnetZone (ncloud .StringValue (storage .ServerInstanceNo ))
649654 if err != nil {
650- newErr := fmt .Errorf ("Failed to Get the VM Info. : [%v] " , err )
651- cblogger .Error (newErr .Error ())
652- return irs.DiskInfo {}, newErr
655+ newErr := fmt .Errorf ("Failed to Get the Subnet Zone info of the VM!! : [%v]" , err )
656+ cblogger .Debug (newErr .Error ())
657+ // return irs.VMInfo{}, newErr // Caution!!
658+ }
659+
660+ var ncpVMInfo * server.ServerInstance
661+ vmErr := errors .New ("" )
662+ if strings .EqualFold (vmHandler .RegionInfo .Zone , subnetZone ){ // Not diskHandler.RegionInfo.Zone
663+ ncpVMInfo , vmErr = vmHandler .GetNcpVMInfo (ncloud .StringValue (storage .ServerInstanceNo ))
664+ if vmErr != nil {
665+ newErr := fmt .Errorf ("Failed to Get the VM Info of the Zone : [%s], [%v]" , subnetZone , vmErr )
666+ cblogger .Error (newErr .Error ())
667+ return irs.DiskInfo {}, newErr
668+ }
669+ } else {
670+ ncpVMInfo , vmErr = vmHandler .GetNcpTargetZoneVMInfo (ncloud .StringValue (storage .ServerInstanceNo ))
671+ if vmErr != nil {
672+ newErr := fmt .Errorf ("Failed to Get the VM Info of the Zone : [%s], [%v]" , subnetZone , vmErr )
673+ cblogger .Error (newErr .Error ())
674+ return irs.DiskInfo {}, newErr
675+ }
653676 }
677+
654678 diskInfo .OwnerVM = irs.IID {
655- NameId : ncloud .StringValue (vmInfo .ServerName ),
679+ NameId : ncloud .StringValue (ncpVMInfo .ServerName ),
656680 SystemId : ncloud .StringValue (storage .ServerInstanceNo ),
657681 }
658682 }
@@ -733,6 +757,45 @@ func (diskHandler *NcpDiskHandler) GetNcpVMList() ([]*server.ServerInstance, err
733757 return result .ServerInstanceList , nil
734758}
735759
760+ func (diskHandler * NcpDiskHandler ) GetNcpVMListWithZone (reqZoneId string ) ([]* server.ServerInstance , error ) {
761+ cblogger .Info ("NCP Cloud Driver: called GetNcpVMListWithZone()" )
762+ callLogInfo := GetCallLogScheme (diskHandler .RegionInfo .Region , call .DISK , "GetNcpVMList()" , "GetNcpVMListWithSubnetZone()" )
763+
764+ vmHandler := NcpVMHandler {
765+ RegionInfo : diskHandler .RegionInfo ,
766+ VMClient : diskHandler .VMClient ,
767+ }
768+ regionNo , err := vmHandler .GetRegionNo (diskHandler .RegionInfo .Region )
769+ if err != nil {
770+ rtnErr := logAndReturnError (callLogInfo , "Failed to Get NCP Region No of the Region Code : " , err )
771+ return nil , rtnErr
772+ }
773+ reqZoneNo , err := vmHandler .GetZoneNo (diskHandler .RegionInfo .Region , reqZoneId ) // Not diskHandler.RegionInfo.Zone
774+ if err != nil {
775+ rtnErr := logAndReturnError (callLogInfo , "Failed to Get NCP Zone No of the Zone Code : " , err )
776+ return nil , rtnErr
777+ }
778+ instanceReq := server.GetServerInstanceListRequest {
779+ ServerInstanceNoList : []* string {},
780+ RegionNo : regionNo , // Caution : Not RegionCode
781+ ZoneNo : reqZoneNo , // Caution : Not ZoneCode
782+ }
783+ callLogStart := call .Start ()
784+ result , err := diskHandler .VMClient .V2Api .GetServerInstanceList (& instanceReq )
785+ if err != nil {
786+ rtnErr := logAndReturnError (callLogInfo , "Failed to Find the VM Instance list from NCP : " , err )
787+ return nil , rtnErr
788+ }
789+ LoggingInfo (callLogInfo , callLogStart )
790+
791+ if len (result .ServerInstanceList ) < 1 {
792+ cblogger .Info ("### VM Instance does Not Exist!!" )
793+ } else {
794+ cblogger .Info ("Succeeded in Getting VM Instance list from NCP" )
795+ }
796+ return result .ServerInstanceList , nil
797+ }
798+
736799func (diskHandler * NcpDiskHandler ) IsBasicBlockStorage (diskIID irs.IID ) (bool , error ) {
737800 cblogger .Info ("NCP Cloud Driver: called IsBasicBlockStorage()" )
738801
0 commit comments