Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

aws / alibaba / tencent의 cloud-init 스크립트 변경 #494

Merged
merged 5 commits into from
Oct 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -850,12 +850,12 @@ func handleVM() {
ImageIID: irs.IID{SystemId: "ubuntu_18_04_x64_20G_alibase_20210420.vhd"},
//VpcIID: irs.IID{SystemId: "vpc-0jl4l19l51gn2exrohgci"},
//SubnetIID: irs.IID{SystemId: "vsw-0jlj155cbwhjumtipnm6d"},
SubnetIID: irs.IID{SystemId: "vsw-6we1o1arx7bivz7iu3o9k"}, //없는 Subnet 테스트
SubnetIID: irs.IID{SystemId: "vsw-6we8tac8w7dzqbxbyhj9o"}, //없는 Subnet 테스트
//SecurityGroupIIDs: []irs.IID{{SystemId: "sg-6we0rxnoai067qbkdkgw"}, {SystemId: "sg-6weeb9xaodr65g7bq10c"}},
SecurityGroupIIDs: []irs.IID{{SystemId: "sg-6we1dc6xqy9e7zjtzkkk"}},
SecurityGroupIIDs: []irs.IID{{SystemId: "sg-6we7156yw8c8xbzi9f7v"}},
//VMSpecName: "ecs.t5-lc2m1.nano",
VMSpecName: "ecs.g6.large", //cn-wulanchabu 리전
KeyPairIID: irs.IID{SystemId: "CB-KeyPairTest123123"},
KeyPairIID: irs.IID{SystemId: "cb-japan"},
//VMUserId: "root", //root만 가능
//VMUserPasswd: "Cbuser!@#", //대문자 소문자 모두 사용되어야 함. 그리고 숫자나 특수 기호 중 하나가 포함되어야 함.
}
Expand Down Expand Up @@ -972,11 +972,11 @@ func main() {
cblogger.Info("Alibaba Cloud Resource Test")
cblogger.Debug("Debug mode")

handleVPC() //VPC
//handleVPC() //VPC
//handleVMSpec()
//handleImage() //AMI
handleSecurity()
handleKeyPair()
//handleSecurity()
//handleKeyPair()
handleVM()

//handlePublicIP() // PublicIP 생성 후 conf
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,9 @@ const (
// page size for control pages
CBPageSize = 100

CBKeyPairPath = "/meta_db/.ssh-aliyun/"
CBCloudInitFilePath = "/cloud-driver-libs/.cloud-init-aliyun/cloud-init"
CBKeyPairPath = "/meta_db/.ssh-aliyun/"
//CBCloudInitFilePath = "/cloud-driver-libs/.cloud-init-aliyun/cloud-init"
CBCloudInitFilePath = "/cloud-driver-libs/.cloud-init-common/cloud-init"
)

type AlibabaCBNetworkInfo struct {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ func init() {
// @TODO : root 계정의 비번만 설정 가능한 데 다른 계정이 요청되었을 경우 예외 처리할 것인지.. 아니면 비번을 설정할 것인지 확인 필요.
// @TODO : PublicIp 요금제 방식과 대역폭 설정 방법 논의 필요
func (vmHandler *AlibabaVMHandler) StartVM(vmReqInfo irs.VMReqInfo) (irs.VMInfo, error) {
//cblogger.Info(vmReqInfo)
spew.Dump(vmReqInfo)
cblogger.Debug(vmReqInfo)
//spew.Dump(vmReqInfo)

/* 2021-10-26 이슈 #480에 의해 제거
// 2021-04-28 cbuser 추가에 따른 Local KeyPair만 VM 생성 가능하도록 강제
//=============================
// KeyPair의 PublicKey 정보 처리
Expand All @@ -62,6 +63,7 @@ func (vmHandler *AlibabaVMHandler) StartVM(vmReqInfo irs.VMReqInfo) (irs.VMInfo,
cblogger.Error(errKeyPair)
return irs.VMInfo{}, errKeyPair
}
*/

//=============================
// UserData생성 처리
Expand Down Expand Up @@ -103,27 +105,27 @@ func (vmHandler *AlibabaVMHandler) StartVM(vmReqInfo irs.VMReqInfo) (irs.VMInfo,
return irs.VMInfo{}, err
}
userData := string(fileDataCloudInit)
userData = strings.ReplaceAll(userData, "{{username}}", CBDefaultVmUserName)
userData = strings.ReplaceAll(userData, "{{public_key}}", keyPairInfo.PublicKey)
//userData = strings.ReplaceAll(userData, "{{username}}", CBDefaultVmUserName)
//userData = strings.ReplaceAll(userData, "{{public_key}}", keyPairInfo.PublicKey)
userDataBase64 := base64.StdEncoding.EncodeToString([]byte(userData))
cblogger.Debugf("cloud-init data : [%s]", userDataBase64)

//=============================
// 보안그룹 처리 - SystemId 기반
//=============================
cblogger.Info("SystemId 기반으로 처리하기 위해 IID 기반의 보안그룹 배열을 SystemId 기반 보안그룹 배열로 조회및 변환함.")
cblogger.Debug("SystemId 기반으로 처리하기 위해 IID 기반의 보안그룹 배열을 SystemId 기반 보안그룹 배열로 조회및 변환함.")
var newSecurityGroupIds []string
//var firstSecurityGroupId string

for _, sgId := range vmReqInfo.SecurityGroupIIDs {
cblogger.Infof("보안그룹 변환 : [%s]", sgId)
cblogger.Debugf("보안그룹 변환 : [%s]", sgId)
newSecurityGroupIds = append(newSecurityGroupIds, sgId.SystemId)
//firstSecurityGroupId = sgId.SystemId
//break
}

cblogger.Info("보안그룹 변환 완료")
cblogger.Info(newSecurityGroupIds)
cblogger.Debug("보안그룹 변환 완료")
cblogger.Debug(newSecurityGroupIds)

//request := ecs.CreateCreateInstanceRequest() // CreateInstance는 PublicIp가 자동으로 할당되지 않음.
request := ecs.CreateRunInstancesRequest() // RunInstances는 PublicIp가 자동으로 할당됨.
Expand Down Expand Up @@ -159,8 +161,8 @@ func (vmHandler *AlibabaVMHandler) StartVM(vmReqInfo irs.VMReqInfo) (irs.VMInfo,
//=============================
// VM생성 처리
//=============================
cblogger.Info("Create EC2 Instance")
cblogger.Info(request)
cblogger.Debug("Create EC2 Instance")
cblogger.Debug(request)

// logger for HisCall
callogger := call.GetLogger("HISCALL")
Expand Down Expand Up @@ -414,48 +416,48 @@ func (vmHandler *AlibabaVMHandler) RebootVM(vmIID irs.IID) (irs.VMStatus, error)

func (vmHandler *AlibabaVMHandler) TerminateVM(vmIID irs.IID) (irs.VMStatus, error) {
cblogger.Infof("vmID : [%s]", vmIID.SystemId)
/*
cblogger.Infof("VM을 종료하기 위해 Suspend 모드로 실행합니다.")
//Terminate하려면 VM이 Running 상태면 안됨.
sus, errSus := vmHandler.SuspendVM(vmIID)
if errSus != nil {
cblogger.Error(errSus.Error())
return irs.VMStatus("Failed"), errSus
}

if sus != "Suspending" {
cblogger.Errorf("[%s] VM의 Suspend 모드 실행 결과[%s]가 Suspending이 아닙니다.", vmIID.SystemId, sus)
return irs.VMStatus("Failed"), errors.New(vmIID.SystemId + " VM의 Suspend 모드 실행 결과 가 Suspending이 아닙니다.")
}
/*
cblogger.Infof("VM을 종료하기 위해 Suspend 모드로 실행합니다.")
//Terminate하려면 VM이 Running 상태면 안됨.
sus, errSus := vmHandler.SuspendVM(vmIID)
if errSus != nil {
cblogger.Error(errSus.Error())
return irs.VMStatus("Failed"), errSus
}

//===================================
// Suspending 되도록 3초 정도 대기 함.
//===================================
curRetryCnt := 0
maxRetryCnt := 60
for {
curStatus, errStatus := vmHandler.GetVMStatus(vmIID)
if errStatus != nil {
cblogger.Error(errStatus.Error())
if sus != "Suspending" {
cblogger.Errorf("[%s] VM의 Suspend 모드 실행 결과[%s]가 Suspending이 아닙니다.", vmIID.SystemId, sus)
return irs.VMStatus("Failed"), errors.New(vmIID.SystemId + " VM의 Suspend 모드 실행 결과 가 Suspending이 아닙니다.")
}

cblogger.Info("===>VM Status : ", curStatus)
if curStatus != irs.VMStatus("Suspended") {
curRetryCnt++
cblogger.Error("VM 상태가 Suspended가 아니라서 1초간 대기후 조회합니다.")
time.Sleep(time.Second * 1)
if curRetryCnt > maxRetryCnt {
cblogger.Error("장시간 대기해도 VM의 Status 값이 Suspended로 변경되지 않아서 강제로 중단합니다.")
//===================================
// Suspending 되도록 3초 정도 대기 함.
//===================================
curRetryCnt := 0
maxRetryCnt := 60
for {
curStatus, errStatus := vmHandler.GetVMStatus(vmIID)
if errStatus != nil {
cblogger.Error(errStatus.Error())
}

cblogger.Info("===>VM Status : ", curStatus)
if curStatus != irs.VMStatus("Suspended") {
curRetryCnt++
cblogger.Error("VM 상태가 Suspended가 아니라서 1초간 대기후 조회합니다.")
time.Sleep(time.Second * 1)
if curRetryCnt > maxRetryCnt {
cblogger.Error("장시간 대기해도 VM의 Status 값이 Suspended로 변경되지 않아서 강제로 중단합니다.")
}
} else {
break
}
} else {
break
}
}
*/
*/
request := ecs.CreateDeleteInstanceRequest()
request.Scheme = "https"
request.InstanceId = vmIID.SystemId
request.Force = requests.Boolean("true")
request.Force = requests.Boolean("true")

// logger for HisCall
callogger := call.GetLogger("HISCALL")
Expand All @@ -469,16 +471,16 @@ func (vmHandler *AlibabaVMHandler) TerminateVM(vmIID irs.IID) (irs.VMStatus, err
ErrorMSG: "",
}

maxRetryCnt := 40 // retry until 120s
for i := 0; i<maxRetryCnt; i++ {
maxRetryCnt := 40 // retry until 120s
for i := 0; i < maxRetryCnt; i++ {

callLogStart := call.Start()
response, err := vmHandler.Client.DeleteInstance(request)
callLogInfo.ElapsedTime = call.Elapsed(callLogStart)

if err != nil {
if strings.Contains(err.Error(), "IncorrectInstanceStatus") {
// Loop: IncorrectInstanceStatus error
if strings.Contains(err.Error(), "IncorrectInstanceStatus") {
// Loop: IncorrectInstanceStatus error
callLogInfo.ErrorMSG = err.Error()
callogger.Info(call.String(callLogInfo))
cblogger.Info(err.Error())
Expand All @@ -489,7 +491,7 @@ func (vmHandler *AlibabaVMHandler) TerminateVM(vmIID irs.IID) (irs.VMStatus, err
cblogger.Error(err.Error())
return irs.VMStatus("Failed"), err
}
}else {
} else {
callogger.Info(call.String(callLogInfo))
cblogger.Info(response)
break
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -897,15 +897,16 @@ func handleVM() {

case 1:
vmReqInfo := irs.VMReqInfo{
IId: irs.IID{NameId: "mcloud-barista-iid-vm-test"},
IId: irs.IID{NameId: "mcloud-barista-cb-user-test"},
//ImageIID: irs.IID{SystemId: "ami-001b6f8703b50e077"}, //centos-stable-7.2003.13-ebs-202005201235
//ImageIID: irs.IID{SystemId: "ami-059b6d3840b03d6dd"}, //Ubuntu Server 20.04 LTS (HVM)
//ImageIID: irs.IID{SystemId: "ami-09e67e426f25ce0d7"}, //Ubuntu Server 20.04 LTS (HVM) - 버지니아 북부 리전
ImageIID: irs.IID{SystemId: "ami-059b6d3840b03d6dd"}, //Ubuntu Server 20.04 LTS (HVM)
SubnetIID: irs.IID{SystemId: "subnet-05af5eb87ef3f01c2"},
SecurityGroupIIDs: []irs.IID{{SystemId: "sg-02421ce44c38e4deb"}},
//ImageIID: irs.IID{SystemId: "ami-059b6d3840b03d6dd"}, //Ubuntu Server 20.04 LTS (HVM)
ImageIID: irs.IID{SystemId: "ami-0fe22bffdec36361c"}, //Ubuntu Server 18.04 LTS (HVM) - Japan 리전
SubnetIID: irs.IID{SystemId: "subnet-0a6ca346752be1ca4"},
SecurityGroupIIDs: []irs.IID{{SystemId: "sg-03685021f07b3ccd3"}},
VMSpecName: "t2.micro",
KeyPairIID: irs.IID{SystemId: "CB-KeyPairTest123123"},
KeyPairIID: irs.IID{SystemId: "japan-test"},
}

vmInfo, err := vmHandler.StartVM(vmReqInfo)
Expand Down Expand Up @@ -1123,10 +1124,10 @@ func handleVMSpec() {
func main() {
cblogger.Info("AWS Resource Test")
//handleVPC()
//handleKeyPair()
handleKeyPair()
//handlePublicIP() // PublicIP 생성 후 conf
//handleSecurity()
handleVM()
//handleVM()

//handleImage() //AMI
//handleVNic() //Lancard
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ import (
const CBDefaultVNetName string = "CB-VNet" // CB Default Virtual Network Name
const CBDefaultSubnetName string = "CB-VNet-Subnet" // CB Default Subnet Name
const CBDefaultCidrBlock string = "192.168.0.0/16" // CB Default CidrBlock
const CBKeyPairPath string = "/meta_db/.ssh-aws/"
const CBCloudInitFilePath string = "/cloud-driver-libs/.cloud-init-aws/cloud-init"
//const CBKeyPairPath string = "/meta_db/.ssh-aws/" // 이슈 #480에 의한 로컬 키 관리 제거

//const CBCloudInitFilePath string = "/cloud-driver-libs/.cloud-init-aws/cloud-init"
const CBCloudInitFilePath string = "/cloud-driver-libs/.cloud-init-common/cloud-init"
const CBDefaultVmUserName string = "cb-user" // default VM User Name

const CUSTOM_ERR_CODE_TOOMANY string = "600" //awserr.New("600", "n개 이상의 xxxx 정보가 존재합니다.", nil)
Expand Down
Loading