cloud-barista / cb-spider

CB-Spider offers a unified view and interface for multi-cloud management.
https://github.com/cloud-barista/cb-spider/wiki
Apache License 2.0
32 stars 48 forks source link

[CONN] Add Default Region/Zone to Connection and Allow API Calls to Specify Target Zone #1067

Open powerkimhub opened 8 months ago

powerkimhub commented 8 months ago

@seokho-son @dogfootman @dev4unet @zephy-mzc

[현황]


[계획]


[Task]

powerkimhub commented 6 months ago

[Zone-Level 제어 현황 분석]


[분석 결과]


[자원별 제공 방안]

[Updated Task]

powerkimhub commented 6 months ago


[Driver Common Interface 반영]


powerkimhub commented 6 months ago

[Driver 반영 현황]

MZC-CSC commented 6 months ago

Driver Interface의 struct는 수정이 되어있으나 api-runtime의 req struct는 수정이 되어있지 않은 것 같습니다.

확인바랍니다.

api-runtime > VPC-SubnetRest.go

// 144Line type vpcCreateReq struct { ConnectionName string ReqInfo struct { Name string IPv4_CIDR string SubnetInfoList []struct { Name string IPv4_CIDR string Zone string -----------> 여기 추가 필요 } } }

func CreateVPC 에서 173Line for _, info := range req.ReqInfo.SubnetInfoList { subnetInfo := cres.SubnetInfo{IId: cres.IID{info.Name, ""}, IPv4_CIDR: info.IPv4_CIDR, Zone: info.Zone} ----------> 여기 추가 필요 subnetInfoList = append(subnetInfoList, subnetInfo) }

func AddSubnet 에서 349Line reqSubnetInfo := cres.SubnetInfo{IId: cres.IID{req.ReqInfo.Name, ""}, IPv4_CIDR: req.ReqInfo.IPv4_CIDR, Zone: req.ReqInfo.Zone} ---------------> 여기 추가 필요

powerkimhub commented 6 months ago

@MZC-CSC

MZC-CSC commented 6 months ago

@powerkimhub api-runtime > DiskRest.go 도 동일합니다. type DiskReq struct 에 Zone 추가 func CreateDisk 의 reqInfo에 Zone 추가

추가로 attach의 경우에는 동일한 zone끼리 작업하는 것으로 봐야할까요? disk의 경우 생성시점에는 zone이 특정되나 attach의 인자에서는 zone을 안받는 것 같습니다. func AttachDisk 는 zone을 받지 않고 disk의 IID와 vm의 IID를 받고있습니다.

aws의 경우 volume와 vm이 동일 zone끼리만 attach됩니다. 1안 vm과 attach하려는 disk의 zone을 각각 조회하여 같은 zone이면 attach하도록 처리해야 할까요? 2안 동일 zone일 경우 attach가 되므로 다른 zone이면 오류가 나는 것이 맞다. -> 변경 필요 없음.

이부분도 확인 바랍니다.

powerkimhub commented 6 months ago

@MZC-CSC

powerkimhub commented 6 months ago

추가로 attach의 경우에는 동일한 zone끼리 작업하는 것으로 봐야할까요? disk의 경우 생성시점에는 zone이 특정되나 attach의 인자에서는 zone을 안받는 것 같습니다. func AttachDisk 는 zone을 받지 않고 disk의 IID와 vm의 IID를 받고있습니다.

aws의 경우 volume와 vm이 동일 zone끼리만 attach됩니다. 1안 vm과 attach하려는 disk의 zone을 각각 조회하여 같은 zone이면 attach하도록 처리해야 할까요? 2안 동일 zone일 경우 attach가 되므로 다른 zone이면 오류가 나는 것이 맞다. -> 변경 필요 없음.

이부분도 확인 바랍니다.


powerkimhub commented 6 months ago

@MZC-CSC

powerkimhub commented 6 months ago

[AdminWeb 기반 Test 방법]


1. Subnet Zone-Level Control Test

image


2. Disk Zone-Level Control Test

image


3. Subnet-VM-Disk Zone-Level Control Test

powerkimhub commented 6 months ago

@ish-hcc @inno-cloudbarista

powerkimhub commented 6 months ago

@MZC-CSC @inno-cloudbarista @innodreamer @ish-hcc

Zone-Level Disk 제어시에, CSP API가 Zone 정보가 필요한 CSP의 경우 다음 방안을 검토해주시기 바랍니다.

[Driver Layer API별 처리(안)]

MZC-CSC commented 6 months ago

--

현재 DB의 구조가 connection , iid 만 저장하고 있습니다. 저장을 다른 zone을 했을 때는 connection + iid 자체가 다른 zone을 조회할 수 없는 구조입니다.

ListDisk를 해당 region의 zone들을 조회해서 zone들의 disk목록을 합치도록 하려고 했으나 ListDisk() 자체가 사용되지 않는 듯하고 GetDisk에서 region내 zone들에 iid로 조회하는 것은 불필요한 작업이 많지 않나 하는 생각이 듭니다.

Zone단위인 경우에는 다음 방법 중 하나를 사용해야 할 것 같습니다.

  1. GetDisk에서 region내 zone들에 iid 로 조회
  2. CreateDisk에서 connection 및 zone 도 함께 저장 -> GetDisk 할 때 connection과 zone으로 대상 zone 설정 후 대상 zone에 iid로 조회
powerkimhub commented 6 months ago

@MZC-CSC

[ListXXX()를 유지하는 사유]


[GetDisk(): Zone 인자 추가 관련]

MZC-CSC commented 6 months ago

Subnet 관련해서 region기반의 csp는 해당 region + iid 를 했을 때 정상적으로 가져올 수 있기 때문에 문제가 없습니다. zone 기반의 csp는 connection과 다른 zone에 생성하게 되면 Get 할 때 동일한 문제가 있습니다. get할 때 connection + iid 로 조회하기 때문에 zone이 다르면 조회가 되지 않습니다.

MZC-CSC commented 6 months ago

GCP 확인결과 subnet은 region base 였습니다. disk와 동일할 것이라고 생각했는데 subnet은 생성자체를 region까지만 바라보고 있습니다.

그래서 GCP의 subnet은 zone의 영향을 받지 않습니다.

참고바랍니다.

https://cloud.google.com/compute/docs/reference/rest/v1/subnetworks/insert

powerkimhub commented 6 months ago

@MZC-CSC @inno-cloudbarista @ish-hcc @innodreamer

[From Slack: Message by @MZC-CSC] disk_iid_infos table에 zone column이 추가되는 방법은 어떤지요? DiskHandlerconnection을 설정할 때 내부에서 zone만 추가로 매핑하도록 설정하면 GetDisk나 다른 function들도 수정할 필요가 없을 것 같은데 connection에서 zone이 빠지더라도 실제 zone은 table에 저장된 zone을 사용하므로 영향도도 적을 것 같습니다.


  * 위 제안 주신 방법을 기반으로 최종 아래와 같이 정리하였습니다. 
  * 아래 API별 가이드 참고하시어 추진 부탁 드립니다.
  * 진행에 이슈가 생기시면 남겨주시기 바랍니다. 
  * 통합 시험은 위쪽 [AdminWeb 기반 Test 방법] 참고하시기 바랍니다.

[Subnet]

[Disk]

MZC-CSC commented 6 months ago

참고 GCP의 경우 Disk가 zone 기반이어서 문제가 있었으나 Subnet은 Region 기반이어서 영향을 받지 않습니다.

MZC-CSC commented 6 months ago

@powerkimhub

Disk 조회시 region의 zone 과 targetZone이 있어서 targetZone != "" 이면 targetZone을 활용하라는 말씀이죠?

아래 사항도 검토 바랍니다.

CloudDriverHandler_common.GetZoneLevelCloudConnection -> commonGetCloudConnection 으로 connection 정보를 가져오는데 commonGetCloudConnection 안에서 target zone으로 connectin을 반환하면 뒤쪽로직의 변경이 필요없습니다. // Change Zone if connectionInfo.RegionInfo.TargetZone != "" { cblog.Info("change Zone ", connectionInfo.RegionInfo.Zone, " To ", connectionInfo.RegionInfo.TargetZone) connectionInfo.RegionInfo.Zone = connectionInfo.RegionInfo.TargetZone }

powerkimhub commented 6 months ago

@MZC-CSC


Disk 조회시 region의 zone 과 targetZone이 있어서 targetZone != "" 이면 targetZone을 활용하라는 말씀이죠?



아래 사항도 검토 바랍니다.

CloudDriverHandler_common.GetZoneLevelCloudConnection -> commonGetCloudConnection 으로 connection 정보를 가져오는데 commonGetCloudConnection 안에서 target zone으로 connectin을 반환하면 뒤쪽로직의 변경이 필요없습니다. // Change Zone if connectionInfo.RegionInfo.TargetZone != "" { cblog.Info("change Zone ", connectionInfo.RegionInfo.Zone, " To ", connectionInfo.RegionInfo.TargetZone) connectionInfo.RegionInfo.Zone = connectionInfo.RegionInfo.TargetZone }


MZC-CSC commented 5 months ago

[Tencent] 소스는 이전 PR에 포함되어 있어서 이미 적용되어 있습니다.

issue_1067 gcp: set zone for subnet, disk #1155

powerkimhub commented 5 months ago

[Tencent] 소스는 이전 PR에 포함되어 있어서 이미 적용되어 있습니다.

issue_1067 gcp: set zone for subnet, disk #1155

innodreamer commented 1 month ago

@powerkimhub KT Cloud Classic의 경우, disk 정보 조회시 정보에 zone 정보를 포함할 수 있지만, disk 생성시 zone을 지정할 수 있는 parameter가 존재해도 해당 connection의 zone에 대해서만 disk를 생성할 수 있습니다. 다른 zone을 선택해서 disk를 생성할 경우 request 정보가 잘못되었다고 CSP error가 발생합니다.

powerkimhub commented 1 month ago

@innodreamer

innodreamer commented 1 month ago

@powerkimhub KT Cloud Classic의 경우, StartVM() 실행시 KeyPair의 경우도 Target zone에서 생성해놓은 KeyPair를 적용해야 VM 생성이 진행되는데 AdminWeb UI에서 VM 생성 위해 설정시 KeyPair의 경우 다른 zone에서 생성한 KeyPair는 나타나지 않는 문제가 있습니다. (참고, KOR-Seoul-M2 zone은 driver 내 client API call URL이 아예 달라서 tag를 포함한 모든 자원에 대해 zone을 구분해야 하는 거 같습니다.)

innodreamer commented 1 month ago

@powerkimhub 자원 정보 listing 할때 해당 region 내 모든 zone의 자원을 보여주면 위의 문제가 해결될거 같기도 하네요. 시도해보겠습니다.

powerkimhub commented 1 month ago

@innodreamer