-
Notifications
You must be signed in to change notification settings - Fork 11
Guidance for developers of support new CSP
Sooyoung Kim edited this page Dec 21, 2022
·
8 revisions
- CB-Tumblebug conf.env 에서 CSP별 Region 및 Spec 정보 확인 합니다.
- CB-Spider Connection-config 스크립트를 활용하여 Driver, Credential, Region, Connection Config를 생성합니다.
신규 CSP 지원 시 아래와 같이 소스 코드 및 테스트 스크립트를 수정합니다.
-
소스 코드
-
src/core/app/const.go
: CSP 상수를 추가합니다. -
src/core/model/types.go
: Node struct 에 csp 이름을 추가합니다. -
src/core/service/csp.go
: CSP의 Ubuntu 18.08 이미지 스펙 아이디를 정의하고 할당될 CIDR 대역을 정의 합니다. -
src/core/service/mcir.go
: CSP 파라메터 검증 로직을 수정합니다.
-
-
테스트 스크립트
-
docs/test/conf.env
: driver이름 환경변수를 추가합니다. -
docs/test/batch-register-cloud-info.sh
: credential 환경변수를 추가합니다. -
docs/test/connectioninfo-create.sh
: CSP 별 credential 정보를 등록하는 로직을 추가합니다.
-
- 신규 CSP 상수를 추가합니다.
CSP_ACLOUD CSP = "Acloud"
- Node struct 의
enums
에 csp 명을 추가합니다.
type Node struct {
Model
...
//Csp app.CSP `json:"csp" enums:"aws,gcp,azure,alibaba,tencent,openstack,ibm,cloudit"`
Csp app.CSP `json:"csp" enums:"aws,gcp,azure,alibaba,tencent,openstack,ibm,cloudit,acloud"`
...
}
- CSP의 Ubuntu18.04 이미지 아이디 상수를 정의합니다.
var acloudImageMap = map[string]string{
"KR1": "5396655e-166a-4875-80d2-ed8613aa054f", //한국1
"KR2": "71893505-923c-4982-b0eb-844eb520661c", //한국2
"JP1": "ca69fad9-92f3-4c9b-a6e4-7e8b0e4d3a58", //일본
}
-
getCSPImageId()
함수에서 CSP의 이미지 아이디를 리턴하도록 수정합니다.
} else if csp == app.CSP_ACLOUD {
....
}
-
getCSPCidrBlock()
함수에서 CSP별로 할당할 CIDR 대역을 중복되지 않도록 정의하고 리턴처리힙니다.
switch csp {
...
case app.CSP_ACLOUD:
return fmt.Sprintf("192.168.%d.0/24", 200+rand.Intn(10))
}
-
CreateIfNotExist()
함수 CSP 파라메터 검증 로직 수정합니다.
//for _, c := range []string{string(app.CSP_AWS), string(app.CSP_GCP), string(app.CSP_AZURE), string(app.CSP_ALIBABA), string(app.CSP_TENCENT), string(app.CSP_OPENSTACK), string(app.CSP_IBM), string(app.CSP_CLOUDIT)}
for _, c := range []string{string(app.CSP_AWS), string(app.CSP_GCP), string(app.CSP_AZURE), string(app.CSP_ALIBABA), string(app.CSP_TENCENT), string(app.CSP_OPENSTACK), string(app.CSP_IBM), string(app.CSP_CLOUDIT), string(app.CSP_ACLOUD)}
- driver 환경변수를 정의합니다.
export c_ACLOUD_DRIVER="acloud-driver-v1.0"
- CSP credential 환경변수 추가합니다.
# A Cloud
export ACLOUD_IDENTITY_ENDPOINT="https://api-identity.acloud.com"
export ACLOUD_USERNAME="[email protected]"
export ACLOUD_PASSWORD="XXXXXX"
export ACLOUD_TENANT_ID="xxxxxxxxxxxxxxxxxxxxxx"
export ACLOUD_DOMAINNAME="default"
export ACLOUD_REGION="KR1"
export ACLOUD_ZONE="kr-zone-a"
./connectioninfo-create.sh ACLOUD
- CSP 별 credential 정보 등록 로직을 추가합니다. (ACLOUD 예제 참조)
# ACLOUD
if [ "${v_CSP}" == "ACLOUD" ]; then
if [ "${v_OPTION}" != "add" ]; then
v_ACLOUD_ENDPOINT="${ACLOUD_IDENTITY_ENDPOINT}"
if [ "${v_ACLOUD_ENDPOINT}" == "" ]; then
read -e -p "Identity Endpoint ? [예:https://api-identity.acloud.com] : " v_ACLOUD_ENDPOINT
if [ "${v_ACLOUD_ENDPOINT}" == "" ]; then echo "[ERROR] missing <acloud identity endpoint>"; exit -1;fi
fi
v_ACLOUD_USERNAME="${ACLOUD_USERNAME}"
if [ "${v_ACLOUD_USERNAME}" == "" ]; then
read -e -p "Username ? [예:mcks] : " v_ACLOUD_USERNAME
if [ "${v_ACLOUD_USERNAME}" == "" ]; then echo "[ERROR] missing <acloud username>"; exit -1;fi
fi
v_ACLOUD_PASSWORD="${ACLOUD_PASSWORD}"
if [ "${v_ACLOUD_PASSWORD}" == "" ]; then
read -e -p "Password ? [예:asdfqwer12] : " v_ACLOUD_PASSWORD
if [ "${v_ACLOUD_PASSWORD}" == "" ]; then echo "[ERROR] missing <acloud password>"; exit -1;fi
fi
v_ACLOUD_TENANT_ID="${ACLOUD_TENANT_ID}"
if [ "${v_ACLOUD_TENANT_ID}" == "" ]; then
read -e -p "Tenant Id ? [예:edfasdfsasdff] : " v_ACLOUD_TENANT_ID
if [ "${v_ACLOUD_TENANT_ID}" == "" ]; then echo "[ERROR] missing <aloud tenant id>"; exit -1;fi
fi
v_ACLOUD_DOMAIN="${ACLOUD_DOMAINNAME}"
if [ "${v_ACLOUD_DOMAIN}" == "" ]; then
read -e -p "Domain Name ? [예:default] : " v_ACLOUD_DOMAIN
if [ "${v_ACLOUD_DOMAIN}" == "" ]; then echo "[ERROR] missing <acloud domainname>"; exit -1;fi
fi
fi
# region
v_REGION="${ACLOUD_REGION}"
if [ "${v_REGION}" == "" ]; then
read -e -p "region ? [예:KR1] : " v_REGION
if [ "${v_REGION}" == "" ]; then echo "[ERROR] missing region"; exit -1;fi
fi
# zone
v_ZONE="${NHN_ZONE}"
if [ "${v_ZONE}" == "" ]; then
read -e -p "zone ? [예:kr-pub-a] : " v_ZONE
if [ "${v_ZONE}" == "" ]; then
if [[ "${v_REGION}" =~ "1" ]]; then
v_REGION_LOWER="$(echo ${v_REGION} | tr [:upper:] [:lower:] | tr -cd 'a-z')"
else
v_REGION_LOWER="$(echo ${v_REGION} | tr [:upper:] [:lower:])"
fi
v_ZONE="${v_REGION_LOWER}-pub-a";fi
fi
fi
elif [ "${v_CSP}" == "ACLOUD" ]; then
echo "- Zone is '${v_ZONE}'"
echo "- acloud_identity_endpoint is '${v_ACLOUD_ENDPOINT}'"
echo "- acloud_username is '${v_ACLOUD_USERNAME}'"
echo "- acloud_password is '${v_ACLOUD_PASSWORD}'"
echo "- acloud_domainname is '${v_ACLOUD_DOMAIN}'"
echo "- acloud_tenantid is '${v_ACLOUD_TENANT_ID}'"
fi
elif [ "${v_CSP}" == "ACLOUD" ]; then
curl -sX DELETE ${c_URL_SPIDER}/credential/${NM_CREDENTIAL} -H "${c_CT}" -o /dev/null -w "CREDENTIAL.delete():%{http_code}\n"
curl -sX POST ${c_URL_SPIDER}/credential -H "${c_CT}" -o /dev/null -w "CREDENTIAL.regist():%{http_code}\n" -d @- <<EOF
{
"CredentialName":"${NM_CREDENTIAL}",
"ProviderName":"${v_CSP}",
"KeyValueInfoList": [
{"Key":"IdentityEndpoint", "Value":"${v_ACLOUD_ENDPOINT}"},
{"Key":"Username", "Value":"${v_ACLOUD_USERNAME}"},
{"Key":"Password", "Value":"${v_ACLOUD_PASSWORD}"},
{"Key":"DomainName", "Value":"${v_ACLOUD_DOMAIN}"},
{"Key":"TenantId", "Value":"${v_ACLOUD_TENANT_ID}"}
]
}
EOF
-
Design
-
User Guide
-
Developer Guide
-
Test Reports