Skip to content

AnyCall API Extension Guide

ByoungSeob Kim edited this page Sep 22, 2022 · 11 revisions

[AnyCall API Extension Overview]

  • 멀티클라우드 공통 제어를 제공하는 CB-Spider API는 특정 Cloud의 세밀한 제어가 불충분할 경우가 있다.
  • AnyCall API 확장(AnyCall API Extension) 기능은 특정 CSP에 대한 특화된 API를 쉽게 추가할 수 있는 방법을 제공한다.
  • AnyCall 기능은 아래 그림과 같이 (1)AnyCall MSG, (2)AnyCall API, (3)AnyCallHandler 및 추가되는 (4)Ext-Function들로 구성된다.
  • CB-Spider는 사용자의 API 확장을 위하여 범용으로 호출되는 REST 기반 (2)AncyCall API(3)AnyCallHandler를 기본으로 제공하며,
  • 개발자급 사용자는 추가하고자 하는 API(함수)의 (1)AnyCall MSG 정의 및 (4)Ext-Function의 추가 개발로 활용 가능하다.


[CB-Spider AnyCall API 확장 기능 개요]


  • 각 요소별 세부 내용은 다음과 같다.
    • (1) AnyCall MSG
      • 추가하고자 하는 API(함수)의 함수 이름, 인자 및 반환 값 등을 정의하는 메시지이며,
      • (2)AnyCall API로 전달하는 input MSG와 실행 결과로 반환 받는 output MSG가 존재한다.
      • AnyCall MSG가 포함하는 정보는 다음과 같다.
          - To. Cloud: 함수 실행 대상 클라우드(등록된 Cloud Connection Name)
          - Function ID: 추가할 함수 이름(문자열)
          - input List: 함수 입력 인자 리스트(Key-Value List)
          - output List: 함수 반환 정보 리스트(Key-Value List)
        
    • (2) AnyCall API
      • 사용자가 정의한 (1)AnyCall MSG를 Driver에 전달 및 결과를 반환하는 범용 REST API이며,
      • REST API 세부 규격은 아래 예시를 참고한다.
    • (3) AnyCall Handler
      • AnyCall Handler는 API를 확장할 대상 Cloud Driver별로 존재하며,
      • (2)AnyCall API를 통해서 전달되는 실행 요청에서 사용자가 추가한 함수의 호출 및 결과 반환을 관장한다.
    • (4) Ext-Functions
      • 사용자가 추가하고자 하는 API를 구현한 함수로 세부 내용은 아래 예시를 참고한다.

[AnyCall API Extension Example]

  • Mock Driver를 예를 들어 설명하면,

    • Mock Cloud에서만 VPC 및 Security Group 자원의 갯수를 제공하는 함수를 추가하는 방법은 다음과 같다.
      • ConnectionName: mock-config01
      • FID: countAll
      • IKeyValueList: { "Key" : "rsType", "Value" : "vpc" }
      • OKeyValueList: { "Key" : "Count", "Value" : "10" }
  • 사용자 REST API 예시는 다음과 같습니다.

    curl -sX POST http://localhost:1024/spider/anycall -H 'Content-Type: application/json' -d \
    '{
          "ConnectionName" : "mock-config01",
          "ReqInfo" : {
                  "FID" : "countAll",
                  "IKeyValueList" : [{"Key":"rsType", "Value":"vpc"}]
          }
    }' | json_pp
    
  • 실행 결과 예시는 다음과 같습니다.

    {
       "FID" : "countAll",
       "IKeyValueList" : [
        {
           "Key" : "rsType",
           "Value" : "vpc"
        }
       ],
       "OKeyValueList" : [
        {
           "Key" : "Count",
           "Value" : "10"
        }
       ]
    }
    
  • Driver 내 함수 구현 방법은 다음의 Mock DrivercountAll을 참고합니다.

  • 이때, 대상 Driver에 AnyCallHandler가 존재하지 않는다면 추가합니다.

  • 신규 AnyCallHandler 추가하는 방법

    • (1) 다음 예시를 참고하여 {driver}/connect/* 위치에 CreateAnyCallHandler() 함수를 추가합니다.
    • (2) 다음 예시를 참고하여 {driver}/resources/AnyCallHandler.go를 추가합니다.

Table of contents



Clone this wiki locally