1.     GO 환경 변수 설정

GOPATH 환경 변수는 workspace 의 위치를 ​​지정

GOROOT 환경 변수는는 현재 만들고있는 GO 프로그램의 위치다. go get으로 패키지를 설치하고, go build로 빌드를 할때 GOROOT와 더불어 패키지와 명령들을 찾을 위치를 지정

ex)

$ export GOPATH=$HOME/cpi/bosh-google-cpi-release

$ export GOROOT=/usr/local/go

$ export PATH=$PATH:GOPATH/bin



1.     패키지 단위 테스트 방법

$ go test -v bosh-google-cpi/action/



 

2.     패키지 단위 테스트 HTML 변환 방법

$ go test bosh-google-cpi/action/ -coverprofile=c.out -covermode=count -v

$ go tool cover -html=c.out

$ sudo 권한의 tmp 파일 위치에 html 파일이 생성 된다.



3.     통합 테스트 방법_GCP 환경 설정

전제 조건 – GCP 콘솔 화면에서 환경 설정이 되어 있어야 한다.

전제 조건 – GCP SDK CLI가 설치가 되어 있어야 한다.

l  실제 환경 설정이 존재 하지 않으면 에러가 발생 하지만, 이 정보들을 사용 하진 않는 것 같다.

#!/usr/bin/env bash

set -e

 

source utils.sh

#source /etc/profile.d/chruby-with-ruby-2.1.2.sh

 

echo "Creating google json key..."

mkdir -p $HOME/.config/gcloud/

echo "Configuring google account..."

gcloud auth activate-service-account --key-file $HOME/Downloads/dasdas-asdasd-c01849ff4681.json << replace Service Accont Json Key

 

 

google_project=asdas<< replace Project Id

google_region=asia-northeast1 << replace Resion

google_zone=asia-northeast1-a << replace Zone

google_service_account=cpitest << replace service account ID

google_address_director_ubuntu=director << replace external IP 1 Name

google_address_bats_ubuntu=bat << replace external IP 2 Name

google_address_int_ubuntu=int << replace external IP 2 Name

google_auto_network=autonetwork << replace network Name

google_network=network << replace network Name

google_subnetwork=network-sub << replace subnet Name

google_subnetwork_range=192.168.10.0/24 << replace subnet Range

google_firewall_internal=internal << replace firewall

google_firewall_external=external << replace firewall

google_target_pool=target << replace network service Name

google_backend_service=instance << replace back network Service Name

google_region_backend_service=backend << replace back network Service region Name

 

gcloud config set project ${google_project}

gcloud config set compute/region ${google_region}

gcloud config set compute/zone ${google_zone}

 

echo "Setting up google infrastructure..."

gcloud -q iam service-accounts create ${google_service_account}

gcloud -q compute addresses create ${google_address_director_ubuntu} --region ${google_region}

gcloud -q compute addresses create ${google_address_bats_ubuntu} --region ${google_region}

gcloud -q compute addresses create ${google_address_int_ubuntu} --region ${google_region}

gcloud -q compute networks create ${google_auto_network}

gcloud -q compute networks create ${google_network} --mode custom

gcloud -q compute networks subnets create ${google_subnetwork} --network=${google_network} --range=${google_subnetwork_range}

gcloud -q compute firewall-rules create ${google_firewall_internal} --description "BOSH CI Internal traffic" --network ${google_network} --source-tags ${google_firewall_internal} --target-tags ${google_firewall_internal} --allow tcp,udp,icmp

gcloud -q compute firewall-rules create ${google_firewall_external} --description "BOSH CI External traffic" --network ${google_network} --target-tags ${google_firewall_external} --allow tcp:22,tcp:443,tcp:4222,tcp:6868,tcp:25250,tcp:25555,tcp:25777,udp:53

 

# Target pool

gcloud -q compute target-pools create ${google_target_pool} --region=${google_region}

 

# Backend service

gcloud -q compute instance-groups unmanaged create ${google_backend_service} --zone ${google_zone}

gcloud -q compute http-health-checks create ${google_backend_service}

gcloud -q compute backend-services create ${google_backend_service} --http-health-checks ${google_backend_service} --port-name "http" --timeout "30"

gcloud -q compute backend-services add-backend ${google_backend_service} --instance-group ${google_backend_service} --zone ${google_zone} --balancing-mode "UTILIZATION" --capacity-scaler "1" --max-utilization "0.8"

 

# Region Backend service

gcloud -q compute instance-groups unmanaged create ${google_region_backend_service} --zone ${google_zone}

gcloud -q compute health-checks create tcp ${google_region_backend_service}

 

# This is a hack required to give the instance group a network association

gcloud -q compute instances create ${google_region_backend_service} --zone ${google_zone} --network ${google_network} --subnet ${google_subnetwork} --machine-type f1-micro

 

gcloud -q compute instance-groups unmanaged add-instances ${google_region_backend_service} --instances ${google_region_backend_service} --zone ${google_zone}

gcloud -q compute backend-services create ${google_region_backend_service} --region ${google_region} --health-checks ${google_region_backend_service} --protocol "TCP" --load-balancing-scheme "INTERNAL" --timeout "30"

gcloud -q compute backend-services add-backend ${google_region_backend_service} --instance-group ${google_region_backend_service} --zone ${google_zone} --region ${google_region}

gcloud -q compute instances delete ${google_region_backend_service} --zone ${google_zone}



1.     통합 테스트 방법_실제 실행 되는 데이터들이 존재 하는 소스 파일

bosh-google-cpi-release/src/bosh-google-cpi/integration/config.go에 위치 한다.

변수 값 설정

envRequired -> 반드시 필요한 값 설정 하지 않으면 에러 발생.

envOrDefault -> 환경 변수가 존재 하지 않으면 Default 값으로 설정 된다.

package integration

 

import (

           "bytes"

           "encoding/json"

           "fmt"

           "io"

           "io/ioutil"

           "os"

           "strings"

 

           "bosh-google-cpi/action"

           boshapi "bosh-google-cpi/api"

           boshdisp "bosh-google-cpi/api/dispatcher"

           "bosh-google-cpi/api/transport"

           boshcfg "bosh-google-cpi/config"

           "bosh-google-cpi/google/client"

 

           boshlogger "github.com/cloudfoundry/bosh-utils/logger"

           "github.com/cloudfoundry/bosh-utils/uuid"

)

 

var (

           // A stemcell that will be created in integration_suite_test.go

           existingStemcell string

 

           // Provided by user

           googleProject    = envRequired("GOOGLE_PROJECT")

           externalStaticIP = envRequired("EXTERNAL_STATIC_IP")

           stemcellURL      = envRequired("STEMCELL_URL")

           serviceAccount   = envRequired("SERVICE_ACCOUNT")

 

           // Configurable defaults

           stemcellFile         = envOrDefault("STEMCELL_FILE", "")

           stemcellSHA1         = envOrDefault("STEMCELL_SHA1", "")

           networkName          = envOrDefault("NETWORK_NAME", "bosh")

           customNetworkName    = envOrDefault("CUSTOM_NETWORK_NAME", "bosh")

           customSubnetworkName = envOrDefault("CUSTOM_SUBNETWORK_NAME", "cf-net")

           ipAddrs              = strings.Split("10.146.0.102,10.146.0.103,10.146.0.104", ",")

           targetPool           = envOrDefault("TARGET_POOL", "cfintegration")

           backendService       = envOrDefault("BACKEND_SERVICE", "cfintegration")

           regionBackendService = envOrDefault("REGION_BACKEND_SERVICE", "region-cfintegration")

           instanceGroup        = envOrDefault("BACKEND_SERVICE", "cfintegration")

           ilbInstanceGroup     = envOrDefault("ILB_INSTANCE_GROUP", "cfintegration-ilb")

           zone                 = envOrDefault("ZONE", "us-central1-a")

           region               = envOrDefault("REGION", "us-central1")

           imageURL             = envOrDefault("IMAGE_URL", "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20161213")

 

           // Channel that will be used to retrieve IPs to use

           ips chan string

 

           // If true, CPI will not wait for delete to complete. Speeds up tests significantly.

           asyncDelete = envOrDefault("CPI_ASYNC_DELETE", "true")

 

           cfgContent = fmt.Sprintf(`{

             "cloud": {

                     "plugin": "google",

                     "properties": {

                       "google": {

                                "project": "%v"

                       },

                       "agent": {

                                "mbus": "http://127.0.0.1",

                                "blobstore": {

                                  "provider": "local"

                                }

                       },

                       "registry": {

                                "use_gce_metadata": true

                       }

                     }

             }

           }`, googleProject)

)

 

func toggleAsyncDelete() {

           key := "CPI_ASYNC_DELETE"

           current := os.Getenv(key)

           if current == "" {

                     os.Setenv(key, "true")

           } else {

                     os.Setenv(key, "")

           }

}

 

func execCPI(request string) (boshdisp.Response, error) {

           var err error

           var cfg boshcfg.Config

           var in, out, errOut, errOutLog bytes.Buffer

           var boshResponse boshdisp.Response

           var googleClient client.GoogleClient

 

           if cfg, err = boshcfg.NewConfigFromString(cfgContent); err != nil {

                     return boshResponse, err

           }

 

           multiWriter := io.MultiWriter(&errOut, &errOutLog)

           logger := boshlogger.NewWriterLogger(boshlogger.LevelDebug, multiWriter, multiWriter)

           multiLogger := boshapi.MultiLogger{Logger: logger, LogBuff: &errOutLog}

           uuidGen := uuid.NewGenerator()

           if googleClient, err = client.NewGoogleClient(cfg.Cloud.Properties.Google, multiLogger); err != nil {

                     return boshResponse, err

           }

 

           actionFactory := action.NewConcreteFactory(

                     googleClient,

                     uuidGen,

                     cfg,

                     multiLogger,

           )

 

           caller := boshdisp.NewJSONCaller()

           dispatcher := boshdisp.NewJSON(actionFactory, caller, multiLogger)

 

           in.WriteString(request)

           cli := transport.NewCLI(&in, &out, dispatcher, multiLogger)

 

           var response []byte

 

           if err = cli.ServeOnce(); err != nil {

                     return boshResponse, err

           }

 

           if response, err = ioutil.ReadAll(&out); err != nil {

                     return boshResponse, err

           }

 

           if err = json.Unmarshal(response, &boshResponse); err != nil {

                     return boshResponse, err

           }

           return boshResponse, nil

}

 

func envRequired(key string) (val string) {

           if val = os.Getenv(key); val == "" {

                     panic(fmt.Sprintf("Could not find required environment variable '%s'", key))

           }

           return

}

 

func envOrDefault(key, defaultVal string) (val string) {

           if val = os.Getenv(key); val == "" {

                     val = defaultVal

           }

           return

}

 

2.     통합 테스트 방법_환경 변수 설정

$ export GOOGLE_PROJECT=project

$ export EXTERNAL_STATIC_IP=35.194.127.6

$ export STEMCELL_URL=https://storage.googleapis.com/bosh-cpi-artifacts/bosh-stemcell-3262.12-google-kvm-ubuntu-trusty-go_agent-raw.tar.gz

$ export SERVICE_ACCOUNT=bosh-535@paas-ta.iam.gserviceaccount.com

$ export NETWORK_NAME=default

$ export CUSTOM_NETWORK_NAME=default

$ export CUSTOM_SUBNETWORK_NAME=default

$ export TARGET_POOL=target

$ export BACKEND_SERVICE=backendservice

$ export REGION_BACKEND_SERVICE=backendservice

$ export ILB_INSTANCE_GROUP=backendservice

$ export REGION=asia-northeast1

$ export ZONE=asia-northeast1-a

 

3.     통합 테스트 실행

$ cd bosh-google-cpi-release/src/bosh-google-cpi/integration

$ go test -x -v -timeout 180m


 

4.     통합 테스트 주의 사항

GO TEST 실행 시 Default time 10 -> 통합 테스트는 1시간이 넘게 걸리는데 10분이 지나면 Time out 실패 에러 메시지가 발생 한다.

l  해결 방법 -timeout 180mgo test 명령어에 붙여 실행 한다.

   GO TEST 실행 시 권한 문제가 발생 할 경우

   $ gcloud auth application-default login 명령어를 통해 auth 로그인을 실행 하면 된다.


'기타' 카테고리의 다른 글

가상머신 ssh 접속 방법  (0) 2017.06.29

ssh란 무엇인가?

시큐어 셸(Secure ShellSSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 기존의 rshrlogin텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.

SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다.

SSH는 버클리 서비스들(rsh, rcp, rlogin, rexec)및 telnet, ftp 서비스를 좀 더 보안이 강화된 명령으로 대체하기 위해 만들었다. 1995년 핀란드의 Tatu Ylönen이 개발해공개했고, 많은 반향을 이뤘다. 1995년 말 Ylönen은 SSH Communications Security사를 설립하고, 상용화되었다. 소스 코드는 공개되었지만 여러가지 제약이 있었다고 하는데, 이에 SSH 1.2.12 릴리즈를 기반으로 OpenSSH 프로젝트가 결성되고 BSD 라이선스로 개발하기 시작했다. OpenSSH가 처음 선보인건 1999년 OpenBSD 2.6 릴리즈부터이다. 이후 계속 보완되어 오늘날에 이르게 되었다.


-wiki 백과 참조


리눅스 환경의 클라우드에서 ssh접속은 네트워크가 연결 되어 있는 가상 머신에 접속하여 서비스를 올리거나 sudo 권한으로 관리를 하는 것이다.

접속 하기 위해서 IaaS 환경의 시큐리티 그룹의 Inbound 정책에 ssh 전용 포트 22번을 열어 줘야 한다.


vSphere의 경우 별도의 Key Pair 없이 접속이 가능 하지만

AWS/Openstack/Azrue는 VM에 접속 할 수 있는 Key Pair를 명시 해줘야지만 접속이 가능 하다.


Key Pair란 무엇인가?

퍼블릭 키 암호화 기법을 사용하여 로그인 정보를 암호화 및 해독합니다. 공개 키 암호화 기법은 공개 키를 사용하여 암호 등의 데이터를 암호화하고, 수신자가 개인 키를 사용하여 해당 데이터를 해독하는 방식입니다. 퍼블릭 키와 프라이빗 키를 키 페어라고 합니다.


ssh 접속 방법

Openstack/AWS/Azure

ssh -i <key.pem> <VM의 User 명>@<VM Public IP>

ex) 




'기타' 카테고리의 다른 글

bosh-google-cpi 테스트 방법  (0) 2017.07.28

+ Recent posts