CB-Spider Repository 디렉토리 및 파일별 주요 기능(12/16 updated)
Jul 7, 2020. | By: 오병택
멀티 클라우드 서비스 시스템을 개발하기 위해서는 CSP별로 API 및 인증 방법과 자원을 컨트롤하는 방법이 각각 달라 이종 클라우드 연동을 위해 복잡한 개발 및 시험 과정이 필요하다.
Cloud-Barista 멀티 클라우드 인프라 연동 프레임워크(CB-Spider)는 Cloud-Barista 플랫폼의 하위 프레임워크 중의 하나로서, 이러한 이종 클라우드 연동의 어려운 문제를 해결하기 위한 클라우드 인프라 연동 ‘공통 프레임워크’ 이며, 사용자 및 Cloud-Barista 타 프레임워크에게 서로 다른 클라우드 인프라에 대한 단일 방식의 연동 및 제어 관리가 가능한 API를 제공한다.
본 글은 이러한 CB-Spider를 통해 추가로 다른 CSP 클라우드 연동이 필요할때 cloud 연동 driver 개발시 참고할 수 있도록 CB-Spider github repository 의 구성 디렉토리 및 주요 파일의 기능을 설명하기 위한 것이다.
(2020/12/16 updated)
[ 실행 환경 세팅 ]
/setup.env
- spider 운영에 필요한 환경변수 세팅
- (중요) CBSPIDER_ROOT, CBSTORE_ROOT, CBLOG_ROOT의 실제 경로 를 환경변수로 설정함.
- 특히, CBSTORE_ROOT 위치 설정 주의
- 예) export CBSTORE_ROOT=$CBSPIDER_ROOT
- 환경변수 중, PLUGIN_SW
- ON 으로 설정할 경우 : CSP별 driver가 각각 build 되고 plugin 방식으로(동적으로) driver를 추가할 수 있음.
- OFF 사용 경우 예 : OFF mode로 설정하고 build하여 Android 환경에서 사용 가능
- LOCALHOST=OFF
- ON 으로 설정할 경우 : 공유기 환경 또는 사설 IP에서 spider 실행시 AdminWeb 동작이 일부 불가능할 때
- MEERKAT=OFF
- 환경변수 반영 위해 개발/테스트시 먼저
source ./setup.env
실행 필요
/go.mod
- Go 패키지 모음
- Build에 필요한 각각의 dependency 정의(import 필요한 module들의 path)
/conf/
- CB-Spider 운영을 위한 설정 정보
- Spider 설정, 메타정보 관리 설정, 로그 설정 등
- ./conf/log_conf.yaml
- loglevel을 debug / info / warn / error 중에 선택할 수 있는데, debug로 설정할 경우 debug가 가능하도록 코드에서 생산하는 상세한 log가 출력되며, error로 설정할 경우에는 error 발생 log만 출력됨.
- ./conf/store_conf.yaml
- 저장 DB 종류 및 위치 설정
- nutsdb or etcd
- CB-Spider 운영에 관련된 데이터를 저장하는 DB를 nutsdb, etcd 중 어느 것으로 사용할지, 그리고 저장 DB 위치를 설정함.
- (주의) 위의 /setup.env에서 설정한 CBSTORE_ROOT 환경변수 참고 필요
- 기능
- 메타 정보 local F/S(nutsdb) 활용시 실제 저장소 파일 위치
- 저장 DB 종류 및 위치 설정
- /cb-store/ or /cb-spider/의 /conf/store_conf.yaml 에서 설정
(위의 /setup.env에서 설정한 CBSTORE_ROOT 환경변수에 따라)
/Dockerfile
[ REST API to Go Function 매핑 관계 ]
- (참고) CB-Spider REST API 규격 및 API별 사용 예
- 클라우드 인프라 연동 정보 관리 REST API
- 클라우드 인프라 공통 제어 관리 REST API
[ CB-Spider 주요 디렉토리 및 파일 기능 ]
/api-runtime/
- 코드 build 및 서버 구동 후 아래의 테스트를 진행할 수 있음.
cd cb-spider/api-runtime/
- 아래의 두가지 방법으로 실행할 수 있음. # 1024 포트로 REST API Server 구동됨
- 방법 1)
go run *.go
로 build 및 API Server 실행
- 방법 2)
make
로 build 후 ./cb-spider
로 API Server 실행
-
/rest-runtime/
- /test/ : REST API 기능 테스트 script들이 존재함.
- /connect-config/
- 기능
- Driver 및 Credential 정보 등록 등 CSP별 연결 정보 관리 기능 테스트
- 여기서 생성된 connection config 정보를 이용해 자원 관리 REST API 실행
- 관련 REST API
- 등록 순서 준수
- Cloud 연동 driver 등록
- localhost:1024/spider/driver
- Credential 정보 등록
- localhost:1024/spider/credential
- Region 정보 등록
- localhost:1024/spider/region
- Cloud connection config 생성
- localhost:1024/spider/connectionconfig
- 테스트 script : CPS명~-conn-config.sh
- /each-test/
- 기능
- Cloud별/각 자원별 생성 기능 시험 후 삭제 시험
- 자원 생성 순서
- VPC -> SecurityGroup -> KeyPair -> VM
- /full-test/
- 기능
- CSP별 자원 관리 전체 기능 시험(create -> list -> get -> delete)
- 대상 자원
- VPC, SecurityGroup, KeyPair, VM
- full_test.sh
- CSP별 자원 관리 전체 기능 시험 script
- /admin-web/ 디렉토리 기능
- CB-Spider admin web
- 위의 REST API 기능 테스트에서와 같은 CSP별 연결 정보 등록을 간단히 UI로 진행할 수 있도록 지원하는 도구
- Cloud 연동 driver 등록 기능
- Credential 정보 등록 기능
- Region 정보 등록 기능
- Cloud connection config 등록 기능
- 웹 접속 URL
- http://localhost:1024/spider/adminweb
- /grpc-runtime/
- gRPC runtime 코드 위치
- gRPC API 서버가 구동됨
- /meerkat-runtime/
- meerkat runtime 엔진(PoC) 코드 위치
- 분산 Spider 메카니즘
/cloud-info-manager/
- 현 디렉토리에 구현된 function
- /connection-config-info-manager/
- Cloud 연결 정보 관리 기능 구현 코드
- 구현된 function
- createConnectionConfig
- listConnectionConfig
- getConnectionConfig
- deleteConnectionConfig
- /credential-info-manager/
- Credential 정보 관리 기능 구현 코드
- 구현된 function
- registerCredential
- listCredential
- getCredential
- unRegisterCredential
- /driver-info-manager/
- Cloud 연동 driver 정보 관리 기능 구현 코드
- 구현된 function
- registerCloudDriver
- listCloudDriver
- getCloudDriver
- unRegisterCloudDriver
- /region-info-manager/
- Region 정보 관리 기능 구현 코드
- 구현된 function
- registerRegion
- listRegion
- getRegion
- unRegisterRegion
/cloud-control-manager/
- 구현된 function
- GetCloudConnection
- createImage
- /cloud-driver/
- Cloud driver package 구현 디렉토리
- /call-log/
- Hiscall log 관련 format, 대상 cloud driver 등 설정 기능
- /drivers/
- 각 CSP의 연동 driver 실제 기능 구현 코드
- /CSP명/ 디렉토리 (각각의 driver 구현 디렉토리로서, CSP 이름으로 alibaba, aws, azure, cloudit, docker, gcp, openstack, ncp 등이 될 수 있음.)
- /connect/
- 각 CSP의 자원(VPC, SecurityGroup, KeyPair, VM) handle을 위한 handler로 이루어짐.
- /main/
- 각 CSP의 자원(VPC, SecurityGroup, KeyPair, VM)을 handle 하는 실제 기능
- /resources/
- 각 CSP의 자원(VPC, SecurityGroup, KeyPair, VM, VMspc, Image 등)을 handle 하는 driver handler 실제 기능 구현
- Ex) VMHandler.go : VM 생성 및 life cycle 제어 기능 구현
- [CSP명]Driver.go
- CSP 인프라 API에 credential 정보를 이용해 인증 후 연결 client 생성
- 이 client 정보를 이용해 각 handler에서 해당 CSP API를 호출하여 제어 기능 수행
- /CSP명-plugin/
- 개별 driver를 build하여 plugin 방식으로(동적으로) 추가시 활용
- build_driver_lib.sh
- 해당 CSP driver를 build 하는 script
- [CSP명]Driver-lib.go
- 해당 CSP 인프라 API에 credential 정보를 이용해 인증 후 연결 client 생성
- 이 client 정보를 이용해 각 handler에서 해당 CSP API를 호출하여 제어 기능 수행
- /interfaces/
- 멀티 클라우드 연동 driver 공통 interface
- /connect/
- Cloud driver ‘Connection’ inferface 정의
- /resources/
- Cloud driver ‘Resource’ inferface 정의
- /iid-manager/
- Resource 관련 통합 ID(Integrated ID) 관리
- IID C/R/U/D 기능 fuction 구현체
/build_all_driver_lib.sh
- 각각의 CSP 연결 driver를 한번의 실행 명령으로 build 하는 script
- cb-spider 서버를 구동하기 전에 실행 필요
/cloud-driver-libs/
- Build된 각 CSP driver libray 위치(object 파일)
[ REST API 통한 VM 생성 실행 예(REST API로부터 driver까지) ]
-
REST API인 localhost:1024/spider/vm 을 call하면,
=> /api-runtime/rest-runtime/CCMRest.go 의 startVM(c echo.Context) 함수를 실행하여
result로서 cmrt.StartVM(req.ConnectionName, rsVM, reqInfo)가 실행됨.
=> 이에 따라, /api-runtime/common-runtime/CCMCommon.go 내의
StartVM(connectionName string, rsType string, reqInfo cres.VMReqInfo) (*cres.VMInfo, error)가 실행되어,
create resource를 위해 (cres.VMHandler).StartVM(vmReqInfo cres.VMReqInfo) (cres.VMInfo, error)를 call함.
=> 연동된 cloud driver의 해당 기능을 실행하기 위해 해당 interface를 call함.
: /cloud-control-manager/cloud-driver/interfaces/resources/ 디렉토리의 VMHandler.go 내의 interface로서 StartVM(vmReqInfo VMReqInfo) (VMInfo, error)이 호출됨.
=> 해당 CSP의 driver 내의 실제 기능 함수가 호출되어,
/cloud-control-manager/cloud-driver/drivers/[CSP명]/resources/ 디렉토리 내에 위치한 VMHandler.go의 실제 VM 생성 함수가 실행됨.
: func (vmHandler *AwsVMHandler) StartVM(vmReqInfo irs.VMReqInfo) (irs.VMInfo, error)
More Posts