resources

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 3, 2020 License: Apache-2.0 Imports: 15 Imported by: 1

Documentation

Overview

Proof of Concepts for the Cloud-Barista Multi-Cloud Project.

EC2 Hander (AWS SDK GO Version 1.16.26, Thanks AWS.)

by CB-Spider Team, 2019.03.

2019-10-17 충돌 방지및 CB-VNet을 감추기 위해 명시적으로 각 핸들러들의 Create나 Delete에서만 자동으로 처리하며,

정확하지는 않아도 네트워크 범위를 id 기반에서 name기반으로 변경 함. (예) vpc-name / subnet-name
*** Subnet은 1개만 생성되도록 제한 함..***

Index

Constants

View Source
const CBDefaultCidrBlock string = "192.168.0.0/16" // CB Default CidrBlock
View Source
const CBDefaultSubnetName string = "CB-VNet-Subnet" // CB Default Subnet Name
View Source
const CBDefaultVNetName string = "CB-VNet" // CB Default Virtual Network Name
View Source
const CUSTOM_ERR_CODE_NOTFOUND string = "404" //awserr.New("404", "XXX 정보가 존재하지 않습니다.", nil)
View Source
const CUSTOM_ERR_CODE_TOOMANY string = "600" //awserr.New("600", "n개 이상의 xxxx 정보가 존재합니다.", nil)

Variables

This section is empty.

Functions

func Connect

func Connect(region string) *ec2.EC2

func ConvertJsonString

func ConvertJsonString(v interface{}) (string, error)

Cloud Object를 JSON String 타입으로 변환

func ConvertJsonStringNoEscape added in v0.1.2

func ConvertJsonStringNoEscape(v interface{}) (string, error)

Cloud Object를 JSON String 타입으로 변환

func ConvertKeyValueList

func ConvertKeyValueList(v interface{}) ([]irs.KeyValue, error)

Cloud Object를 CB-KeyValue 형식으로 변환이 필요할 경우 이용

func ConvertToString

func ConvertToString(value interface{}) (string, error)

CB-KeyValue 등을 위해 String 타입으로 변환

func ConvertVMStatusString

func ConvertVMStatusString(vmStatus string) (irs.VMStatus, error)

func ExtractGpuInfo

func ExtractGpuInfo(gpuDeviceInfo *ec2.GpuDeviceInfo) irs.GpuInfo

func ExtractImageDescribeInfo

func ExtractImageDescribeInfo(image *ec2.Image) irs.ImageInfo

Image 정보를 추출함

func ExtractIpPermissionCommon

func ExtractIpPermissionCommon(ip *ec2.IpPermission, securityRuleInfo *irs.SecurityRuleInfo)

IpPermission에서 공통정보 추출

func ExtractIpPermissions

func ExtractIpPermissions(ipPermissions []*ec2.IpPermission, direction string) []irs.SecurityRuleInfo

func ExtractKeyPairDescribeInfo

func ExtractKeyPairDescribeInfo(keyPair *ec2.KeyPairInfo) irs.KeyPairInfo

KeyPair 정보를 추출함

func ExtractSecurityInfo

func ExtractSecurityInfo(securityGroupResult *ec2.SecurityGroup) irs.SecurityInfo

func ExtractSubnetDescribeInfo

func ExtractSubnetDescribeInfo(subnetInfo *ec2.Subnet) irs.VNetworkInfo

Subnet 정보를 추출함

func ExtractVMSpecInfo

func ExtractVMSpecInfo(Region string, instanceTypeInfo *ec2.InstanceTypeInfo) irs.VMSpecInfo

인스턴스 스펙 정보를 추출함

func ExtractVNicDescribeInfo

func ExtractVNicDescribeInfo(netIf *ec2.NetworkInterface) irs.VNicInfo

VNic 정보를 추출함

func ExtractVmName

func ExtractVmName(Tags []*ec2.Tag) string

func GetCBDefaultCidrBlock

func GetCBDefaultCidrBlock() string

func GetCBDefaultSubnetName

func GetCBDefaultSubnetName() string

Subnet

func GetCBDefaultVNetName

func GetCBDefaultVNetName() string

VPC

func JSONMarshal added in v0.1.2

func JSONMarshal(t interface{}) ([]byte, error)

func SetNameTag

func SetNameTag(Client *ec2.EC2, Id string, value string) bool

Name Tag 설정

func WaitForRun

func WaitForRun(svc *ec2.EC2, instanceID string)

VM이 Running 상태일때까지 대기 함.

Types

type AwsCBNetworkInfo

type AwsCBNetworkInfo struct {
	VpcName   string
	VpcId     string
	CidrBlock string
	IsDefault bool
	State     string

	SubnetName string
	SubnetId   string
}

type AwsImageHandler

type AwsImageHandler struct {
	Region idrv.RegionInfo
	Client *ec2.EC2
}

func (*AwsImageHandler) CreateImage

func (imageHandler *AwsImageHandler) CreateImage(imageReqInfo irs.ImageReqInfo) (irs.ImageInfo, error)

@TODO : 작업해야 함.

func (*AwsImageHandler) DeleteImage

func (imageHandler *AwsImageHandler) DeleteImage(imageID string) (bool, error)

@TODO : 삭제 API 찾아야 함.

func (*AwsImageHandler) GetImage

func (imageHandler *AwsImageHandler) GetImage(imageID string) (irs.ImageInfo, error)

func (*AwsImageHandler) ListImage

func (imageHandler *AwsImageHandler) ListImage() ([]*irs.ImageInfo, error)

@TODO : 목록이 너무 많기 때문에 amazon 계정으로 공유된 퍼블릭 이미지중 AMI만 조회 함.

type AwsKeyPairHandler

type AwsKeyPairHandler struct {
	Region idrv.RegionInfo
	Client *ec2.EC2
}

func (*AwsKeyPairHandler) CreateKey

func (keyPairHandler *AwsKeyPairHandler) CreateKey(keyPairReqInfo irs.KeyPairReqInfo) (irs.KeyPairInfo, error)

func (*AwsKeyPairHandler) DeleteKey

func (keyPairHandler *AwsKeyPairHandler) DeleteKey(keyName string) (bool, error)

func (*AwsKeyPairHandler) GetKey

func (keyPairHandler *AwsKeyPairHandler) GetKey(keyName string) (irs.KeyPairInfo, error)

혼선을 피하기 위해 keyPairID 대신 keyName으로 변경 함.

func (*AwsKeyPairHandler) ListKey

func (keyPairHandler *AwsKeyPairHandler) ListKey() ([]*irs.KeyPairInfo, error)

type AwsPublicIPHandler

type AwsPublicIPHandler struct {
	Region idrv.RegionInfo
	Client *ec2.EC2
}

func (*AwsPublicIPHandler) CreatePublicIP

func (publicIpHandler *AwsPublicIPHandler) CreatePublicIP(publicIPReqInfo irs.PublicIPReqInfo) (irs.PublicIPInfo, error)

2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨. VM 생성 시 PublicIP의 AllocationId를 전달 받는 방식으로 1차 확정되어서 이 곳에서는 관련 로직을 제거 함. VMHandler.go에서 할당및 회수 함

func (*AwsPublicIPHandler) DeletePublicIP

func (publicIpHandler *AwsPublicIPHandler) DeletePublicIP(publicIPNameId string) (bool, error)

2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨. Public IP를 완전히 제거 함.(AWS Pool로 되돌려 보냄)

func (*AwsPublicIPHandler) DisassociatePublicIP

func (publicIpHandler *AwsPublicIPHandler) DisassociatePublicIP(publicIP string) (bool, error)

@TODO : 공통 I/F에 함수 추가해야 함. - EC2 인스턴스와의 연결만 해제하는 DisassociatePublicIP publicIP 대신 AssociationId로도 가능 함.

func (*AwsPublicIPHandler) GetPublicIP

func (publicIpHandler *AwsPublicIPHandler) GetPublicIP(publicIPNameId string) (irs.PublicIPInfo, error)

@TODO : 2차 정책에 의해 IP에서 할당ID 기반으로 변경함. 2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨.

func (*AwsPublicIPHandler) ListPublicIP

func (publicIpHandler *AwsPublicIPHandler) ListPublicIP() ([]*irs.PublicIPInfo, error)

type AwsSecurityHandler

type AwsSecurityHandler struct {
	Region idrv.RegionInfo
	Client *ec2.EC2
}

func (*AwsSecurityHandler) CreateSecurity

func (securityHandler *AwsSecurityHandler) CreateSecurity(securityReqInfo irs.SecurityReqInfo) (irs.SecurityInfo, error)

2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨. (보안 그룹은 그룹명으로 처리 가능하기 때문에 Name 태깅시 에러는 무시함) @TODO : 존재하는 보안 그룹에 정책 추가하는 기능 필요 VPC 생략 시 활성화된 세션의 기본 VPC를 이용 함.

func (*AwsSecurityHandler) DeleteSecurity

func (securityHandler *AwsSecurityHandler) DeleteSecurity(securityNameId string) (bool, error)

2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨.

func (*AwsSecurityHandler) GetSecurity

func (securityHandler *AwsSecurityHandler) GetSecurity(securityNameId string) (irs.SecurityInfo, error)

2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨.

func (*AwsSecurityHandler) ListSecurity

func (securityHandler *AwsSecurityHandler) ListSecurity() ([]*irs.SecurityInfo, error)

type AwsVMHandler

type AwsVMHandler struct {
	Region idrv.RegionInfo
	Client *ec2.EC2
}

func (*AwsVMHandler) AssociatePublicIP

func (vmHandler *AwsVMHandler) AssociatePublicIP(allocationId string, instanceId string) (bool, error)

AssociationId 대신 PublicIP로도 가능 함.

func (*AwsVMHandler) AttachNetworkInterface

func (vmHandler *AwsVMHandler) AttachNetworkInterface(vNicId string, instanceId string) (bool, error)

전달 받은 vNic을 VM에 추가함.

func (*AwsVMHandler) ExtractDescribeInstances

func (vmHandler *AwsVMHandler) ExtractDescribeInstances(reservation *ec2.Reservation) irs.VMInfo

DescribeInstances결과에서 EC2 세부 정보 추출 VM 생성 시에는 Running 이전 상태의 정보가 넘어오기 때문에 최종 정보 기반으로 리턴 받고 싶으면 GetVM에 통합해야 할 듯.

func (*AwsVMHandler) GetVM

func (vmHandler *AwsVMHandler) GetVM(vmNameId string) (irs.VMInfo, error)

2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨.

func (*AwsVMHandler) GetVMStatus

func (vmHandler *AwsVMHandler) GetVMStatus(vmNameId string) (irs.VMStatus, error)

SHUTTING-DOWN / TERMINATED

func (*AwsVMHandler) ListVM

func (vmHandler *AwsVMHandler) ListVM() ([]*irs.VMInfo, error)

func (*AwsVMHandler) ListVMStatus

func (vmHandler *AwsVMHandler) ListVMStatus() ([]*irs.VMStatusInfo, error)

func (*AwsVMHandler) RebootVM

func (vmHandler *AwsVMHandler) RebootVM(vmNameId string) (irs.VMStatus, error)

func (*AwsVMHandler) ResumeVM

func (vmHandler *AwsVMHandler) ResumeVM(vmNameId string) (irs.VMStatus, error)

func (*AwsVMHandler) StartVM

func (vmHandler *AwsVMHandler) StartVM(vmReqInfo irs.VMReqInfo) (irs.VMInfo, error)

1개의 VM만 생성되도록 수정 (MinCount / MaxCount 이용 안 함) 키페어 이름(예:mcloud-barista)은 아래 URL에 나오는 목록 중 "키페어 이름"의 값을 적으면 됨. https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2#KeyPairs:sort=keyName

func (*AwsVMHandler) SuspendVM

func (vmHandler *AwsVMHandler) SuspendVM(vmNameId string) (irs.VMStatus, error)

func (*AwsVMHandler) TerminateVM

func (vmHandler *AwsVMHandler) TerminateVM(vmNameId string) (irs.VMStatus, error)

type AwsVNetworkHandler

type AwsVNetworkHandler struct {
	Region idrv.RegionInfo
	Client *ec2.EC2
}

func (*AwsVNetworkHandler) AssociateRouteTable

func (vNetworkHandler *AwsVNetworkHandler) AssociateRouteTable(vpcId string, subnetId string) error

VPC의 라우팅 테이블에 생성된 Subnet을 연결 함.

func (*AwsVNetworkHandler) CreateRouteIGW

func (vNetworkHandler *AwsVNetworkHandler) CreateRouteIGW(vpcId string, igwId string) error

생성된 VPC의 라우팅 테이블에 IGW(Internet Gateway) 라우팅 정보를 생성함 (AWS 콘솔의 라우팅 테이블의 [라우팅] Tab 처리)

func (*AwsVNetworkHandler) CreateVNetwork

func (vNetworkHandler *AwsVNetworkHandler) CreateVNetwork(vNetworkReqInfo irs.VNetworkReqInfo) (irs.VNetworkInfo, error)

2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨.

func (*AwsVNetworkHandler) CreateVpc

func (vNetworkHandler *AwsVNetworkHandler) CreateVpc(awsVpcReqInfo AwsVpcReqInfo) (AwsVpcInfo, error)

FindOrCreateMcloudBaristaDefaultVPC()에서 호출됨. - 이 곳은 나중을 위해 전달 받은 정보는 이용함 기본 VPC 생성이 필요하면 FindOrCreateMcloudBaristaDefaultVPC()를 호출할 것

func (*AwsVNetworkHandler) DeleteAllIGW

func (vNetworkHandler *AwsVNetworkHandler) DeleteAllIGW(vpcId string) error

VPC에 연결된 모든 IGW를 삭제함.

func (*AwsVNetworkHandler) DeleteIGW

func (vNetworkHandler *AwsVNetworkHandler) DeleteIGW(igwId string) error

IGW를 삭제 함.

func (*AwsVNetworkHandler) DeleteRouteIGW

func (vNetworkHandler *AwsVNetworkHandler) DeleteRouteIGW(vpcId string) error

VPC에 설정된 0.0.0.0/0 라우터를 제거 함.

func (*AwsVNetworkHandler) DeleteVNetwork

func (vNetworkHandler *AwsVNetworkHandler) DeleteVNetwork(vNetworkNameId string) (bool, error)

서브넷 삭제 마지막 서브넷인 경우 CB-Default Virtual Network도 함께 제거 2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨.

func (*AwsVNetworkHandler) DeleteVpc

func (vNetworkHandler *AwsVNetworkHandler) DeleteVpc(vpcId string) (bool, error)

@TODO : 의존관계를 체크해서 전체 삭제 로직을 추가해야 함.

func (*AwsVNetworkHandler) DetachInternetGateway

func (vNetworkHandler *AwsVNetworkHandler) DetachInternetGateway(vpcId string, igwId string) error

VPC에 연결된 IGW의 연결을 해제함.

func (*AwsVNetworkHandler) FindOrCreateMcloudBaristaDefaultVPC

func (vNetworkHandler *AwsVNetworkHandler) FindOrCreateMcloudBaristaDefaultVPC(vNetworkReqInfo irs.VNetworkReqInfo) (string, error)

@TODO : ListVNetwork()에서 호출되는 경우도 있기 때문에 필요하면 VPC조회와 생성을 별도의 Func으로 분리해야함.(일단은 큰 문제는 없어서 놔둠) CB Default Virtual Network가 존재하지 않으면 생성하며, 존재하는 경우 Vpc ID를 리턴 함.

func (*AwsVNetworkHandler) GetAutoCBNetworkInfo

func (vNetworkHandler *AwsVNetworkHandler) GetAutoCBNetworkInfo() (AwsCBNetworkInfo, error)

이 함수는 VPC & Subnet이 존재하는 곳에서만 사용됨. VPC & Subnet이 존재하는 경우 정보를 리턴하고 없는 경우 Default VPC & Subnet을 생성 후 정보를 리턴 함.

func (*AwsVNetworkHandler) GetCBDefaultRouteTable

func (vNetworkHandler *AwsVNetworkHandler) GetCBDefaultRouteTable(vpcId string) (string, error)

자동 생성된 VPC의 기본 라우팅 테이블 정보를 찾음

func (*AwsVNetworkHandler) GetMcloudBaristaDefaultSubnetId

func (vNetworkHandler *AwsVNetworkHandler) GetMcloudBaristaDefaultSubnetId() string

func (*AwsVNetworkHandler) GetMcloudBaristaDefaultVpcId

func (vNetworkHandler *AwsVNetworkHandler) GetMcloudBaristaDefaultVpcId() string

func (*AwsVNetworkHandler) GetVNetwork

func (vNetworkHandler *AwsVNetworkHandler) GetVNetwork(vNetworkNameId string) (irs.VNetworkInfo, error)

2019-11-16부로 CB-Driver 전체 로직이 NameId 기반으로 변경됨. vNetworkID를 전달 받으면 해당 Subnet을 조회하고 / vNetworkID의 값이 없으면 CB Default Subnet을 조회함.

func (*AwsVNetworkHandler) GetVpc

func (vNetworkHandler *AwsVNetworkHandler) GetVpc(vpcName string) (AwsVpcInfo, error)

func (*AwsVNetworkHandler) IsAvailableAutoCBNet

func (vNetworkHandler *AwsVNetworkHandler) IsAvailableAutoCBNet() bool

자동으로 생성된 VPC & Subnet을 삭제해도 되는가? 명시적으로 Subnet 삭제의 호출이 없기 때문에 시큐리티 그룹이나 vNic이 삭제되는 시점에 호출됨.

func (*AwsVNetworkHandler) ListVNetwork

func (vNetworkHandler *AwsVNetworkHandler) ListVNetwork() ([]*irs.VNetworkInfo, error)

@TODO : 여러 VPC에 속한 Subnet 목록을 조회하게되는데... CB-Vnet의 서브넷만 조회해야할지 결정이 필요함. 현재는 1차 버전 문맥상 CB-Vnet으로 내부적으로 제한해서 구현했음.

func (*AwsVNetworkHandler) ListVpc

func (vNetworkHandler *AwsVNetworkHandler) ListVpc() ([]*AwsVpcInfo, error)

type AwsVNicHandler

type AwsVNicHandler struct {
	Region idrv.RegionInfo
	Client *ec2.EC2
}

https://amzn.to/2L0lfQS

func (*AwsVNicHandler) CreateVNic

func (vNicHandler *AwsVNicHandler) CreateVNic(vNicReqInfo irs.VNicReqInfo) (irs.VNicInfo, error)

@TODO : 퍼블릭IP(EIP)는 이 곳이 아닌 VM생성 시 처리함. 이곳에서 처리해야 하면 구현해야 함.

func (*AwsVNicHandler) DeleteVNic

func (vNicHandler *AwsVNicHandler) DeleteVNic(vNicID string) (bool, error)

func (*AwsVNicHandler) GetVNic

func (vNicHandler *AwsVNicHandler) GetVNic(vNicID string) (irs.VNicInfo, error)

func (*AwsVNicHandler) GetVNicByName

func (vNicHandler *AwsVNicHandler) GetVNicByName(vNicName string, vpcId string) (irs.VNicInfo, error)

func (*AwsVNicHandler) ListVNic

func (vNicHandler *AwsVNicHandler) ListVNic() ([]*irs.VNicInfo, error)

type AwsVmSpecHandler

type AwsVmSpecHandler struct {
	Region idrv.RegionInfo
	Client *ec2.EC2
}

https://docs.aws.amazon.com/sdk-for-go/api/service/ec2/#EC2.DescribeInstanceTypes

func (*AwsVmSpecHandler) GetOrgVMSpec

func (vmSpecHandler *AwsVmSpecHandler) GetOrgVMSpec(Region string, Name string) (string, error)

AWS의 정보 그대로를 가공 없이 JSON으로 리턴 함.

func (*AwsVmSpecHandler) GetVMSpec

func (vmSpecHandler *AwsVmSpecHandler) GetVMSpec(Region string, Name string) (irs.VMSpecInfo, error)

func (*AwsVmSpecHandler) ListOrgVMSpec

func (vmSpecHandler *AwsVmSpecHandler) ListOrgVMSpec(Region string) (string, error)

AWS의 정보 그대로를 가공 없이 JSON으로 리턴 함.

func (*AwsVmSpecHandler) ListVMSpec

func (vmSpecHandler *AwsVmSpecHandler) ListVMSpec(Region string) ([]*irs.VMSpecInfo, error)

type AwsVpcInfo

type AwsVpcInfo struct {
	Name      string
	Id        string
	CidrBlock string // AWS
	IsDefault bool   // AWS
	State     string // AWS
}

func ExtractVpcDescribeInfo

func ExtractVpcDescribeInfo(vpcInfo *ec2.Vpc) AwsVpcInfo

VPC 정보를 추출함

type AwsVpcReqInfo

type AwsVpcReqInfo struct {
	Name      string
	CidrBlock string // AWS
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL