Skip to content

Tag and Cloud Driver API

ByoungSeob Kim edited this page Oct 10, 2024 · 20 revisions

CB-Spider Multi-Cloud Tag and Cloud Driver API


- CB-Spider Tag Specification V0.5
- V0.5 : CSP Tag 기능의 추상화 제공(FindTag 보류)

1. CB-Spider Tag 관리 개요

  • Spider는 연동된 클라우드의 관리 자원들에 Tag 기능을 제공한다.
  • 사용자는 Tag를 사용하여 자원들을 그룹화하고 식별할 수 있으며,
  • 이를 통해 대규모 자원의 관리 자동화, 비용 관리 등 다양한 목적에 맞게 활용할 수 있다.
  • Spider Tag 구성
    • 하나의 Tag는 문자열 Key와 문자열 Value 쌍으로 구성되며,
    • Key 값은 필수이나, Value는 옵션으로 생략 가능하다.
  • 사용자는 다음과 같이 두 가지 방법으로 자원에 Tag를 추가 할 수 있다.
    • (1) 자원 생성 요청 시 Tag 리스트를 설정함으로써 여러 개의 Tag 추가 가능
    • (2) 기존 자원에 Tag 관리 API를 사용한 Tag 추가 가능: Swagger UI: [Tag Management] 참고

2. CB-Spider Tag 제공 현황

  • 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"
    

3. CB-Spider Tag Driver 규격

  • [자원 타입]

    • 자원 타입별로 자원 생성 시 추가 또는 생성한 자원에 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에서는 사용하지 않음
      )
      
  • [Tag 정보]

    • 하나의 Tag 정보를 제공하기 위하여 다음과 같은 정보 구조를 제공한다.
        type TagInfo struct {
            ResType RSType // VPC, SUBNET, VM, etc.,.)
            ResIId  IID    // {NameId, SystemId}
      
            TagList      []KeyValue
            KeyValueList []KeyValue // reserved for optinal usage
        }
      
  • [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)

3. Tag 드라이버 개발 노트

  • CSP별 Tag 기능 개발 대상 자원 참고

  • 드라이버별 DriverCapabilityInfo 설정

  • 지원하는 모든 자원별로 자원 생성 입력 정보(XXXReqInfo or XXXInfo)에 TagList 값 존재시 Tag 추가 기능 개발

  • 자원 생성시 Tag 추가의 경우 Tag 생성 오류 발생시 처리 가이드

    • 다음처럼 Info와 에러 둘다 설정/반환 부탁 드립니다.
      • (1) 생성된 자원 유지
      • (2) 생성 성공한 Tag들은 반환 Info의 TagList 정보에 설정 후 반환
      • (3) 생성 오류 Tag들은 다음 에러 메시지 형식으로 error 반환
        • "TaggingError: {Key01, Value01}, {Key05, Value05}: CSP 에러 메시지"
    • TaggingError 활용하여 서버에서 대응하도록 하겠습니다.
  • TagHandler 인터페이스 개발

  • 드라이버 개발시 부족한 부분이나 이슈 존재시 공유 부탁 드립니다.


4. Tag Driver Common API

  • 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
          }

Table of contents



Clone this wiki locally