From 42f768b1880f9d4df8ae9d890ed18ff3474ee73e Mon Sep 17 00:00:00 2001 From: innodreamer Date: Wed, 17 Apr 2024 22:36:40 +0900 Subject: [PATCH 1/4] Update DeleteVPC() - Remove the Subnets belonging to --- .../drivers/nhncloud/resources/VPCHandler.go | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go index 035261796..06ec6f17d 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go @@ -205,9 +205,34 @@ func (vpcHandler *NhnCloudVPCHandler) DeleteVPC(vpcIID irs.IID) (bool, error) { return false, newErr } - err := vpcs.Delete(vpcHandler.NetworkClient, vpcIID.SystemId).ExtractErr() + vpc, err := vpcHandler.getNnnVPC(vpcIID.SystemId) if err != nil { - newErr := fmt.Errorf("Failed to Delete the VPC with the SystemID. : [%s] : [%v]", vpcIID.SystemId, err) + newErr := fmt.Errorf("Failed to Get the VPC Info : [%v]", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return false, newErr + } + + var subnetIDs []string + if len(vpc.Subnets) > 0 { + for _, subnet := range vpc.Subnets { + subnetIDs = append(subnetIDs, subnet.ID) + } + } + + for _, subnetID := range subnetIDs { + if _, err := vpcHandler.RemoveSubnet(irs.IID{SystemId: vpcIID.SystemId}, irs.IID{SystemId: subnetID}); err != nil { + newErr := fmt.Errorf("Failed to Remove the Subnet with the SystemID. : [%s] : [%v]", subnetID, err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, err) + return false, newErr + } + time.Sleep(time.Second * 2) + } + + delErr := vpcs.Delete(vpcHandler.NetworkClient, vpcIID.SystemId).ExtractErr() + if err != nil { + newErr := fmt.Errorf("Failed to Delete the VPC with the SystemID. : [%s] : [%v]", vpcIID.SystemId, delErr) cblogger.Error(newErr.Error()) LoggingError(callLogInfo, err) return false, newErr From 54773ee5ab48c4e833aa1edef7bfaf5b5f8035d6 Mon Sep 17 00:00:00 2001 From: innodreamer Date: Wed, 17 Apr 2024 22:39:19 +0900 Subject: [PATCH 2/4] Update CreateDisk() - Specify Zone when Creating a Disk --- .../cloud-driver/drivers/nhncloud/resources/DiskHandler.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/DiskHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/DiskHandler.go index 4fde4a2f2..867814a97 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/DiskHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/DiskHandler.go @@ -50,7 +50,7 @@ func (diskHandler *NhnCloudDiskHandler) CreateDisk(diskReqInfo irs.DiskInfo) (ir return irs.DiskInfo{}, newErr } - if strings.EqualFold(diskHandler.RegionInfo.Zone, "") { + if strings.EqualFold(diskReqInfo.Zone, "") { newErr := fmt.Errorf("Invalid Zone Info!!") cblogger.Error(newErr.Error()) LoggingError(callLogInfo, newErr) @@ -91,7 +91,7 @@ func (diskHandler *NhnCloudDiskHandler) CreateDisk(diskReqInfo irs.DiskInfo) (ir start := call.Start() create0pts := volumes.CreateOpts{ Size: reqDiskSizeInt, - AvailabilityZone: diskHandler.RegionInfo.Zone, + AvailabilityZone: diskReqInfo.Zone, Name: diskReqInfo.IId.NameId, VolumeType: reqDiskType, } @@ -579,6 +579,7 @@ func (diskHandler *NhnCloudDiskHandler) mappingDiskInfo(volume volumes.Volume) ( IId: irs.IID{ SystemId: volume.ID, }, + Zone: volume.AvailabilityZone, DiskSize: strconv.Itoa(volume.Size), Status: convertDiskStatus(volume.Status), CreatedTime: volume.CreatedAt, @@ -613,7 +614,7 @@ func (diskHandler *NhnCloudDiskHandler) mappingDiskInfo(volume volumes.Volume) ( } keyValueList := []irs.KeyValue{ - {Key: "AvailabilityZone", Value: volume.AvailabilityZone}, + // {Key: "AvailabilityZone", Value: volume.AvailabilityZone}, {Key: "IsBootable", Value: volume.Bootable}, {Key: "IsMultiattached", Value: strconv.FormatBool(volume.Multiattach)}, {Key: "IsEncrypted", Value: strconv.FormatBool(volume.Encrypted)}, From c72c722d94e33498b32c9d7b66621c540b3089e4 Mon Sep 17 00:00:00 2001 From: innodreamer Date: Wed, 17 Apr 2024 23:02:52 +0900 Subject: [PATCH 3/4] Update DeleteVPC() method --- .../drivers/nhncloud/resources/VPCHandler.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go index 06ec6f17d..54b96347c 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go @@ -213,21 +213,16 @@ func (vpcHandler *NhnCloudVPCHandler) DeleteVPC(vpcIID irs.IID) (bool, error) { return false, newErr } - var subnetIDs []string if len(vpc.Subnets) > 0 { for _, subnet := range vpc.Subnets { - subnetIDs = append(subnetIDs, subnet.ID) - } - } - - for _, subnetID := range subnetIDs { - if _, err := vpcHandler.RemoveSubnet(irs.IID{SystemId: vpcIID.SystemId}, irs.IID{SystemId: subnetID}); err != nil { - newErr := fmt.Errorf("Failed to Remove the Subnet with the SystemID. : [%s] : [%v]", subnetID, err) - cblogger.Error(newErr.Error()) - LoggingError(callLogInfo, err) - return false, newErr + if _, err := vpcHandler.RemoveSubnet(irs.IID{SystemId: vpcIID.SystemId}, irs.IID{SystemId: subnet.ID}); err != nil { + newErr := fmt.Errorf("Failed to Remove the Subnet with the SystemID. : [%s] : [%v]", subnet.ID, err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, err) + return false, newErr + } + time.Sleep(time.Second * 2) } - time.Sleep(time.Second * 2) } delErr := vpcs.Delete(vpcHandler.NetworkClient, vpcIID.SystemId).ExtractErr() From 44e31244566c25477bc76117de04b40560de5fdf Mon Sep 17 00:00:00 2001 From: innodreamer Date: Wed, 17 Apr 2024 23:15:21 +0900 Subject: [PATCH 4/4] Add Notice of VPC/Subnet Creation --- .../cloud-driver/drivers/nhncloud/README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/README.md b/cloud-control-manager/cloud-driver/drivers/nhncloud/README.md index e381d0df2..1ee592d02 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/README.md +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/README.md @@ -92,12 +92,14 @@ ssh -i /private_key_파일_경로/private_key_파일명(~~.pem) cb-user@해당_V - CB-Spider log 설정 파일에서 loglevel을 'info'나 'debug' 로 설정 - CB-Spider log 설정 파일 위치 : ./cb-spider/conf/log_conf.yaml -​ O NHN Cloud infra가 논리적 네트워크 기반이지만, NHN Cloud에서 VPC 및 Subnet 생성/삭제 API는 지원하지 않고 조회 API만 제공하므로 본 driver에서는 아래와 같은 제약 사항이 있음. - - 현재는 사용자가 원하는 이름으로 VPC와 Subnet을 생성하면, driver 내부적으로 NHN Cloud에서 project별, region별로 기본적으로 생성되어 제공하는 'Default Network' VPC와 'Default Network' Subnet을 사용하게됨. - - Cloud-Barista를 통해 생성시, VPC와 Subnet의 이름(NameId)은 사용자가 원하는 이름으로 사용 가능하고, driver 내부적으로 VPC와 Subnet의 SystemId는 기본적으로 생성되어 있는 'Default Network' VPC와 'Default Network' Subnet의 SystemId가 적용됨. - - 'Default Network' VPC CIDR : 192.168.0.0/16, 'Default Network' Subnet CIDR : 192.168.0.0/24 - - (주의) 위와 같은 제약에 대한 사용상의 문제를 최소화하기 위해, 하나의 project 내의 동일한 region에서는 위의 VPC를 이용해 하나의 VPC만 생성하도록 제한하고있음. - - (참고) 추후 NHN Cloud에서 VPC/Subnet 생성/삭제 API를 제공하면, driver에서 사용자가 원하는 CIDR 대역의 VPC와 Subnet이 생성 가능한 완전한 기능을 지원하도록 보완할 예정임. +​ O NHN Cloud에서 VPC 및 Subnet 생성시 아래 사항을 주의해야함. + - VPC 생성시 가용 CIDR + - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 + - /24보다 큰 CIDR 블록은 입력할 수 없음. + + - Subnet 생성시 가용 CIDR + - Subnet CIDR은 VPC의 CIDR 범위 내에 있어야 함. + - /28보다 큰 CIDR 블록은 입력할 수 없음. - VPC/Subnet을 API를 이용해서(본 드라이버를 이용해서) 생성할때, NHN Cloud region별로 다른 API endpoint를 사용하기 때문에 config에 설정된 region에 VPC/Subnet이 생성됨.(Region 단위로 구분되어 생성됨.) - 그 특정 region에 생성된 VPC/Subnet은 그 region에 속하는 zone에 공유해서 사용함.(그 region 내 모든 zone에서 조회되고 사용 가능함.)