해당 글은 OpenStack API 튜토리얼 시리즈의 번외판이다. OpenStack 을 기업 환경에서 배포하고 관리하는 법을 배우기 위해서는, OpenStack training 이라고 하는 Linux foundation 을 확인해야 한다.
준비가 되었다면, OpenStack API 지식을 이용해서 OpenStack SDK 에 적용해보도록 하자.
API 를 통한 커뮤니케이션은 기본적으로 OpenStack 인프라에 접속하여 통신할 수 있는 방법이다. API 를 이용하여 RESTful 한 호출도 가능하다. 개발 중인 프로그램에서 libcurl 과 같은 라이브러리를 사용할 수 있지만, HTTP 호출을 직접 만드는것은 꽤 부담스럽다. 그래서, OpenStack API 를 호출할 수 있도록 제공해 다양한 언어에서 사용할 수 있도록 하는 라이브러리들이 있다. 이러한 라이브러리들을 SDK 라고 부르며, 그 중 하나에 대하여 알아본다.
여러 예시들 중에, Go 언어를 사용하기로 한다. 그 이유는 Go 언어는 사용하기 편하고 재밌는 언어이기 때문이다. 또한, 일반적으로 Python 을 쓰기 보다 다른 무언가를 접해보고 싶던것도 있다.
Go 언어
Go 언어를 위한 SDK 들이 꽤 있었지만, 그 중에서도 GopherCloud 를 선택하였다. 우선 Go 사용을 위한 환경변수 설정과 설치는 되어 있다고 가정한다. 이제, Gophercloud 를 설치해 보고 사용해보자.
go get github.com/rackspace/gophercloud
test1.go 라는 파일을 만들어서 아래와 같이 코드를 입력한다.
package main
import (
"fmt"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/pagination"
"github.com/rackspace/gophercloud/openstack/compute/v2/servers"
)
func main() {
opts := gophercloud.AuthOptions{
IdentityEndpoint: "https://identity.api.rackspacecloud.com/v2.0",
Username: "RackspaceUsername",
Password: "RackspacePassword",
}
provider, err := openstack.AuthenticatedClient(opts)
if err != nil {
fmt.Println("AuthenticatedClient")
fmt.Println(err)
return
}
client, err :=
openstack.NewComputeV2(provider, gophercloud.EndpointOpts{
Region: "IAD",
})
if err != nil {
fmt.Println("NewComputeV2 Error:")
fmt.Println(err)
return
}
opts2 := servers.ListOpts{}
pager := servers.List(client, opts2)
pager.EachPage(func(page pagination.Page) (bool, error) {
serverList, err := servers.ExtractServers(page)
if err != nil {
return false, err
}
for _, s := range serverList {
fmt.Println(s.ID, s.Name, s.Status)
// servers.Delete(client, s.ID);
}
return true, nil
})
}
코드 살펴보기
코드를 자세히 살펴보자. import 부분에서는 외부 패키지를 필요한것들에 대해서 선언한다. 우선 print out 을 위해 “fmt” 패키지를 추가했고, gophercloud 사용을 위한 여러 패키지들을 추가한다. 어떤 패키지들이 필요한지 자세히 보기 위해서는 doc 문서를 참고하면 좋다.
main 함수의 첫번째 부분은 authentication options 객체를 만든다. 이는 사용자 이름, 패스워드, url 등 같은 정보로 채워진다. API 에 접속하기 위해서는 위 정보들을 전달해야 한다는것을 잊지말자. 인증을 받게 되면 token 을 반환받게 된다. 이 부분에서 정확히 어떤일이 일어나는걸까 몇줄 안되는 코드에? ; 우선 필요한 정보들을 특정 구조체에 저장하면 라이브러리에서 openstack API 를 호출한다. 그러면 에러 정보와 token 정보를 반환 받을 수 있다. 그러면, povider 라고 하는 변수에 token 정보를 저장한다. 그리고 만약 err 값이 nil 이 아니라면, 즉 에러 값이 있다면 정보를 출력하고 프로그램을 종료한다.
다음 단계는, compute service 를 이용하는 단계이다. 내부에서는 위에서 만든 provider 를 이용하여 openstack.NewComputeV2 에 주입시켜 준다. 사용된 두번째 파라미터는 EndPointOpts 라는 구조체이고, 이는 호출에 필요한 endpoint 를 명시하는 역할을 한다. 위 예시에서는, region 을 명시하였다.
'번역' 카테고리의 다른 글
[번역] Coping with the TCP TIME-WAIT state on busy Linux servers - Vincent Bernat (WIP) (0) | 2023.03.28 |
---|---|
[번역] [go] Defer, Panic, Recover 에 대해서 (0) | 2022.01.27 |
[번역] [go] go 코드를 작성하는 방법 (0) | 2022.01.27 |
[번역] 쿠버네티스 네트워크 이해하기: Pod (0) | 2022.01.27 |
[번역] reloader (0) | 2022.01.27 |
댓글