자바스크립트를 활성화 해주세요

d091 dataspell로 openstack 다루기

 ·  ☕ 3 min read

powershell로 openstack 명령어를 실행해 처리하는 스크립트에 대한 post를 작성하고 나서, python으로 하는 것도 함께 적으면 좋을 것 같아 실행하게 되었습니다.

그냥 python보다는, jetbrains가 최근 내놓은 dataspell을 사용해 실행해 보았습니다.

pycharm과 dataspell의 차이점

간단히 차이점을 짚고 넘어가면 다음과 같습니다.

  • pycharm은 python IDE이고, dataspell은 어플리케이션화된 jupyter notebook입니다.
  • pycharm은 어플리케이션 개발용이고, dataspell은 데이터 엔지니어용입니다.
  • pycharm은 여럿이 사용하는 IDE이고, dataspell은 개인이 사용하는 툴입니다.
  • pycharm은 long term을 두고 사용하는 툴이고, dataspell은 short term 사용을 기반으로 합니다.
  • pycharm은 작업물이 git으로 누적되게 되지만, dataspell은 jupyter nodebook 파일로 저장됩니다.

코드

openstack 클라이언트가 설치가 안되어 있다면 설치합니다. 저는 conda환경을 사용하고 있으므로 다음과 같이 실행해 설치하였습니다.

conda install -c conda-forge python-openstackclient

우선 dataspell에서 환경변수를 넣습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import os
os.environ["OS_PROJECT_DOMAIN_NAME"] = "default"
os.environ["OS_USER_DOMAIN_NAME"] = "default"
os.environ["OS_PROJECT_NAME"] = "admin"
os.environ["OS_USERNAME"] = "admin"
os.environ["OS_PASSWORD"] = "이건패스워드죠"
os.environ["OS_AUTH_URL"] = "http://여기엔키스톤 URL 넣으세요:5000/v3/"
os.environ["OS_IDENTITY_API_VERSION"] = "3"
os.environ["OS_IMAGE_API_VERSION"] = "2"
os.environ["OS_VOLUME_API_VERSION"] = "3"
os.environ["OS_PROJECT_DOMAIN_NAME"]

openstack 명령을 실행하고,

1
out = ! openstack project list -f json

결과를 출력해 봅니다.

1
2
import json
json.loads(out.nlstr)

d091_handling_openstack_with_dataspell.png

사실 powershell에서는 잘 나오는데, dataspell에서(랄까 ipython에서) 살짝 아쉬운 부분이 이부분입니다. 인텔리센스가 나오지 않아요. object가 아니고 dict니까요.
d091_dataspell_no_intellisense.png

pwsh은 리눅스 콘솔에서도 탭을 누르면 사용가능한 property나 method를 보여줍니다.
d091_pwsh_intellisense.png

API를 사용하면 어떨까?

근데 yaml 로 된 config 파일이 없어도 되긴합니다.
d091_dataspell_with_openstacksdk.png

그런데. 역시 인텔리센스가 안되어요. dir로 보면 보이지만, 페리어드를 찍으면 호출가능한 펑션이 보이지 않습니다. 이 부분이 약간 거슬려요. pycharm이나 dataspell의 기능을 full로 쓸 수가 없습니다. 하지만 아직 현존하는 툴 중에서는 가장 좋은 툴인 것은 확실합니다.

코드는 다음과 같습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
! pip install openstacksdk
#%%
import os
os.environ["OS_PROJECT_DOMAIN_NAME"] = "default"
os.environ["OS_USER_DOMAIN_NAME"] = "default"
os.environ["OS_PROJECT_NAME"] = "admin"
os.environ["OS_USERNAME"] = "admin"
os.environ["OS_PASSWORD"] = "패스워드"
os.environ["OS_AUTH_URL"] = "http://키스톤키스톤:5000/v3/"
os.environ["OS_IDENTITY_API_VERSION"] = "3"
os.environ["OS_IMAGE_API_VERSION"] = "2"
os.environ["OS_VOLUME_API_VERSION"] = "3"
#%%
import openstack
#%%
conn = openstack.connect()
#%%
for server in list(conn.compute.servers()):
    print(server.to_dict())
#%%
list(conn.compute.flavors())[0].vcpus
#%%
[ f for f in dir(conn.compute) if f.startswith('server')]

잘 키운 API 하나는 여러사람의 인생을 도와줍니다.

공유하기

tkim
글쓴이
tkim
Software Engineer