-
Notifications
You must be signed in to change notification settings - Fork 48
Tag and Cloud Driver API
ByoungSeob Kim edited this page Oct 10, 2024
·
20 revisions
- CB-Spider Tag Specification V0.5
- V0.5 : CSP Tag 기능의 추상화 제공(FindTag 보류)
- Spider는 연동된 클라우드의 관리 자원들에 Tag 기능을 제공한다.
- 사용자는 Tag를 사용하여 자원들을 그룹화하고 식별할 수 있으며,
- 이를 통해 대규모 자원의 관리 자동화, 비용 관리 등 다양한 목적에 맞게 활용할 수 있다.
- Spider Tag 구성
- 하나의 Tag는 문자열 Key와 문자열 Value 쌍으로 구성되며,
- Key 값은 필수이나, Value는 옵션으로 생략 가능하다.
- 사용자는 다음과 같이 두 가지 방법으로 자원에 Tag를 추가 할 수 있다.
- (1) 자원 생성 요청 시 Tag 리스트를 설정함으로써 여러 개의 Tag 추가 가능
- (2) 기존 자원에 Tag 관리 API를 사용한 Tag 추가 가능: Swagger UI: [Tag Management] 참고
-
CSP별 자원별 Tag 제공 현황이 다음과 같다.
Provider VPC Subnet SecurityGroup VM KeyPair VM Disk MyImage NLB Cluster AWS O O O O O O O O O Azure O - O O O O O O O GCP - - - - O O - - O Alibaba △ △ O O O O O O - Tencent O O O O O O O O O IBM VPC O O O O O O O O O OpenStack O O O - O - - O - NCP Classic - - - - O - - - - KT Classic - - - - O O O - - ※ △: 자원 생성 시에만 Tagging 제공 ※ - : CSP가 Tagging을 제공하지 않는 자원 ※ NHN, NCPVPC, KTVPC: Tagging을 제공하지 않음
※ Tag 미지원 자원에 대한 API 호출시 대응 (1) 자원 생성 요청 시 Tag 설정 요청: 자원은 생성되고, Tag는 추가되지 않음(Log 출력 없음) (2) 기존 자원에 Tag 추가 요청: 다음 공통 형식의 에러 메시지 반환(Error Log 출력) • format: "[TAG_NOT_SUPPORTED] Tagging is not supported for the resource: {CSP}-{RESOURCE}" • example: "[TAG_NOT_SUPPORTED] Tagging is not supported for the resource: GCP-keypair"
-
[자원 타입]
- 자원 타입별로 자원 생성 시 추가 또는 생성한 자원에 Tag를 관리할 수 있으며,
- 지원 대상 자원 타입의 종류는 다음과 같다.(latest)
type RSType string const ( ALL RSType = "all" IMAGE RSType = "image" # Tag에서는 사용하지 않음 VPC RSType = "vpc" SUBNET RSType = "subnet" SG RSType = "sg" KEY RSType = "keypair" VM RSType = "vm" NLB RSType = "nlb" DISK RSType = "disk" MYIMAGE RSType = "myimage" CLUSTER RSType = "cluster" NODEGROUP RSType = "nodegroup" # Tag에서는 사용하지 않음 )
- 단, CSP별로 Tag를 제공하는 자원이 다르다.
- ※ 참고: CSP별 Tag 기능 제공 현황 분석
-
[Tag 정보]
- 하나의 Tag 정보를 제공하기 위하여 다음과 같은 정보 구조를 제공한다.
type TagInfo struct { ResType RSType // VPC, SUBNET, VM, etc.,.) ResIId IID // {NameId, SystemId} TagList []KeyValue KeyValueList []KeyValue // reserved for optinal usage }
- 하나의 Tag 정보를 제공하기 위하여 다음과 같은 정보 구조를 제공한다.
-
[Tag 추가]
- API: AddTag(resType RSType, resIID IID, tag KeyValue) (KeyValue, error)
- 특정 자원 타입의 특정 자원을 대상으로 Tag 추가 가능
- ex) AddTag(VPC, vpc-01, {tag01, value01})
- ※ 동일 자원에 동일 이름의 Key는 중복 추가할 수 없음
- ※ AddTag()의 resType은 ALL 타입 사용 불가
-
[Tag 목록]
- API: ListTag(resType RSType, resIID IID) ([]KeyValue, error)
- 특정 자원 타입의 특정 자원에 포함된 모든 Tag 목록 제공
- ex) ListTag(VPC, vpc-01)
- ※ ListTag()의 resType은 ALL 타입 사용 불가
-
[Tag 정보]
- API: GetTag(resType RSType, resIID IID, key string) (KeyValue, error)
- 특정 자원 타입의 특정 자원에 포함된 특정 Tag 정보 제공
- ex) GetTag(VPC, vpc-01, tag01)
- ※ GetTag()의 resType은 ALL 타입 사용 불가
- ※ GetTag()의 key는 strict match 지원
-
[Tag 삭제]
- API: RemoveTag(resType RSType, resIID IID, key string) (bool, error)
- 특정 자원 타입의 특정 자원에 포함된 특정 Tag 삭제
- ex) RemoveTag(VPC, vpc-01, tag01)
- ※ RemoveTag()의 resType은 ALL 타입 사용 불가
- ※ RemoveTag()의 key는 strict match 지원
-
[Tag 찾기] 추후 필요시 제공
- API: FindTag(resType RSType, keyword string) ([]*TagInfo, error)
- 모든 자원 타입의 모든 자원에 포함된 Tag 정보 중 Key나 Value에 keyword를 포함하는 Tag 정보 목록 제공
- ex) FindTag(ALL, tag0)
- ex) FindTag(ALL, value0)
- 특정 자원 타입의 모든 자원에 포함된 Tag 정보 중 Key나 Value에 keyword를 포함하는 Tag 정보 목록 제공
- ex) FindTag(VPC, tag0)
- ex) FindTag(VPC, value0)
-
CSP별 Tag 기능 개발 대상 자원 참고
- ※ 참고: CSP별 Tag 기능 제공 현황 분석
-
드라이버별 DriverCapabilityInfo 설정
-
지원하는 모든 자원별로 자원 생성 입력 정보(XXXReqInfo or XXXInfo)에
TagList
값 존재시 Tag 추가 기능 개발- 또한, 자원의 반환 정보(XXXInfo)에
TagList
값 설정 필요 - cf) interfaces/resources/VPCHandler.go#L20
- cf) interfaces/resources/NLBHandler.go#L31
- 또한, 자원의 반환 정보(XXXInfo)에
-
자원 생성시 Tag 추가의 경우 Tag 생성 오류 발생시 처리 가이드
- 다음처럼 Info와 에러 둘다 설정/반환 부탁 드립니다.
- (1) 생성된 자원 유지
- (2) 생성 성공한 Tag들은 반환 Info의 TagList 정보에 설정 후 반환
- (3) 생성 오류 Tag들은 다음 에러 메시지 형식으로 error 반환
- "TaggingError: {Key01, Value01}, {Key05, Value05}: CSP 에러 메시지"
-
TaggingError
활용하여 서버에서 대응하도록 하겠습니다.
- 다음처럼 Info와 에러 둘다 설정/반환 부탁 드립니다.
-
TagHandler 인터페이스 개발
-
드라이버 개발시 부족한 부분이나 이슈 존재시 공유 부탁 드립니다.
-
Source Tree
$tree cb-spider/cloud-control-manager/cloud-driver/interfaces/ cb-spider/cloud-control-manager/cloud-driver/interfaces/ |-- CloudDriver.go |-- README.md |-- connect | `-- CloudConnect.go `-- resources |-- AnyCallHandler.go |-- ClusterHandler.go |-- DiskHandler.go |-- IId.go |-- ImageHandler.go |-- KeyPairHandler.go |-- KeyValue.go |-- MyImageHandler.go |-- NLBHandler.go |-- PriceInfoHandler.go |-- RegionZoneHandler.go |-- ResourceType.go |-- SecurityHandler.go |-- TagHandler.go <================= Tag Driver API |-- VMHandler.go |-- VMSpecHandler.go `-- VPCHandler.go
-
Driver API Spec (latest)
package resources // TagInfo represents the tagging information for a cloud resource. // @description Tag Information for a Cloud Resource. type TagInfo struct { ResType RSType `json:"ResType" validate:"required" example:"VPC"` ResIId IID `json:"ResIId" validate:"required"` TagList []KeyValue `json:"TagList,omitempty" validate:"omitempty"` KeyValueList []KeyValue `json:"KeyValueList,omitempty" validate:"omitempty"` } type TagHandler interface { AddTag(resType RSType, resIID IID, tag KeyValue) (KeyValue, error) ListTag(resType RSType, resIID IID) ([]KeyValue, error) GetTag(resType RSType, resIID IID, key string) (KeyValue, error) RemoveTag(resType RSType, resIID IID, key string) (bool, error) // Find tags by tag key or value // resType: ALL | VPC, SUBNET, etc.,. // keyword: The keyword to search for in the tag key or value. // if you want to find all tags, set keyword to "" or "*". FindTag(resType RSType, keyword string) ([]*TagInfo, error) -------- @ToDO }
-
Install & Start Guide
-
Features & Usage
-
- AdminWeb Tool Guide
- CLI Tool Guide
- REST API Guide
-
Design
-
Developer Guide
-
Cloud Driver Developer Guide
- Cloud Driver Developer Guide-WIP
- VM SSH Key Development Guide-WIP
- VM User Development Guide
- What is the CSP SDK API Version of drivers
- Region Zone Info and Driver API
- Price Info and Driver API
- (StartVM TerminateVM) API Call Counts and Waiting
- StartVM and TerminateVM Main Flow of drivers
- VM Root Disk Configuration Guide
- Security Group Rules and Driver API
- Network Load Balancer and Driver API
- VM Snapshot, MyImage and Disk Overview
- Kubernetes and Driver API(PMKS, K8S)
- Tag and Cloud Driver API
- AnyCall API Extension Guide
-
Test Reports
- v0.2.8-for-espresso-release
- v0.3.0-espresso-release
- Azure:Terminating VM
- cb-user@VM: ssh login, sudo run
- v0.3.14 test for SG Source
- v0.4.0-cafemocha-release
- Test via REST API Gateway
- Test Reports of v0.4.11 (IID2 initial Version)
- Test Reports of v0.4.12 (Register & Unregister existing Resources)
- Test Reports for v0.6.0 Release
- How to ...
- How to provision GPU VMs
- How to Resolve the 'Failed to Connect to Database' Error
- How to test CB Spider with Mock Driver
- How to install CB Spider on WSL2 under 공유기/사설망
- How to install CB Spider on macOS
- How to run CB Spider Container on macOS
- How to install OpenStack on a VM for CB Spider Testing
- How to get Azure available Regions
- How to profile memory usage in Golang
- Deprecated:How to install protoc and plugins
- [For Cloud-Migrator]