OpenStack 3번째 커맨드 개발하기

Ryan Kim
5 min readNov 9, 2021

--

프로젝트 구조가 눈에 보이니까 코드가 내 손발 움직이듯 짜여졌던 3번째 커맨드 개발 후기

다음 주 주말에 대구 경북대에서 오픈소스 컨트리뷰션 지역 스프린트 활동이 있고, 6명의 학생들과 커맨드 및 버그 리포트를 작업하는 일들을 함께 수행하게 된다.

그 전에 연습이랄까, 오픈스택에서 배운 것을 스스로 검증하는 시간을 갖는다랄까, 스트레스를 오픈스택에 기여하는 방식으로 푼달까… 틈틈이 커맨드를 개발하고 있고, Glance → Nova 에 이어서 이번엔 Neutron 커맨드를 개발했다.

Glance가 오픈스택에서 OS 이미지를 관리했고, Nova가 가상 컴퓨팅 리소스를 관리했다면, Neutron은 가상 네트워크 자원에 관한 컴포넌트이고 오픈스택의 핵심 컴포넌트 중 하나로 관리가 된다.

솔직히,,, 네트워크 쪽은 자신이 없어서 그냥 스킵하려고 했는데 위에 이미지에서 tag에 관련한 커맨드가 이미 오픈스택 통합 CLI에 구현되어 있고, 한 개가 구현 안된 상태라 이미 구현되어 있는 커맨드들을 보니,,, “이거 또 후딱 구현할 수 있겠는데?”라는 생각이 들어서 바로 개발에 착수했다.

openstack hypervisor uptime 커맨드를 2시간만에 개발하고 나니, 이제 커맨드 하나 개발하는데 어느 정도의 시간이 필요한지 각이 잡혔고, 이번 것도 2시간 내에 해결할 수 있던 것 같다.

1. 커맨드 설명

오픈스택에서는 네트워크 토폴로지를 제공하고 있고, 각 가상 네트워크마다 사설/공인 네트워크 설정이 가능하다.

클라우드에 올려놓은 서비스들이 많아지면 자연스레 사용하는 네트워크가 많아질 것이고, 서로 다른 OpenStack 위치의 네트워크를 논리적으로 동일한 하나의 네트워크에 매핑할 수 있는 기능(특히, Multi site OpenStack의 경우에 해당)을 제공하고 있다.

프로젝트 Kuryr의 경우(이건 잘 모르겠다. 구글링 해보니 도커와 관련된 네트워크 라이브러리로 보인다), 도커 네트워크 ID를 Neutron 네트워크 ID로 매핑하는 등 혼합 환경의 OpenStack 네트워크에 Id를 매핑하는 기능을 제공하며, 배포 도구별로 네트워크에 설정한 태그를 사용하는 것이 가능하다.

운영자가 공급자 네트워크에 대한 정보를 태그할 수 있도록 허용(예: 높은 지연 시간, 짧은 지연 시간 등)하고, Get-me-a-network 또는 유사한 포트 스케줄러와 같은 새로운 기능들은 태그를 기반으로 포트용 네트워크를 선택할 수 있다.

이 영문 문서를 그대로 번역해 설명했다.

즉, 쉽게 3줄 요약하면

  • 네트워크 매핑
  • 배포 도구별로 네트워크에서 태그 사용 가능
  • 공급자 네트워크 분류 및 포트 네트워크 선택

으로 볼 수 있으며, 가상 네트워크를 사용자 목적에 맞게 분류하고 연결하는 등에 사용할 수 있는 것으로 보인다.

별도의 tag 설정을 안하고 네트워크를 생성하면, 위 이미지에서 보는 것처럼 tag 부분이 비어있다.

그러나 네트워크 생성 시점 또는 오늘 내가 구현한 tag-replace를 사용하면, 아래와 같은 내용들이 보이기 시작한다.

태그 명칭 예제로 색으로 구분해서 사용했다.

참고로 태그가 다중인 경우도 있기 때문에, 태그를 새로 추가할 때마다 콤마를 기준으로 하나씩 추가된다.

딱 보기에도 복잡해보이지만, 다행스럽게도 tags를 구현하는 부분에 한해서는 내용이 어렵지 않았고, SDK에서 관련 모듈 구현이 다되어 있어서 나는 API로 따오기만 하면 됐다.

2. 코드 구현하기 (기능 & 테스트 코드)

Django 관련해서 내용 처음 배울 때 CRUD에 대해 정말 중요하게 설명했던 기억이 있는데, 사실 이미 존재하는 가상 네트워크 값을 수정하는 것이 Update에 해당하기 때문에 그것과 관련한 코드를 추가했다고 봐도 무방하다.

기능 코드도 분량이 많지 않다.

커맨드를 파싱해서 그 값을 실질적으로 실행되는 take_action에 넘겨줌으로써 네트워크 업데이트를 진행하게 되고, 이를 다시 한 번 테스트 코드로 검증한다.

테스트 코드

MockUp 모듈도 처음엔 엄청 생소해서 해맸는데, 이제는 익숙하다. 재밌다.

스트레스 받았던 일들을 커맨드 개발로 풀어내는 느낌이다.

오픈스택이 어떤 디자인 패턴을 이용하는지는 잘 모르겠지만, 프로젝트 구조가 눈에 보이기 시작하면 커맨드 개발하는 것은 API만 잘 활용하면 된다는 것을 크게 이해할 수 있는 부분이었다.

결과적으로 아래처럼 2시간을 기다려서 올린 패치의 CI가 모두 통과한 것을 확인할 수 있다.

Zuul CI에서 +1점 받았을 때가 제일 안도되는 순간…

3. 후기

파이썬으로 개발하는 것에 대해 자신감이 많이 붙었다.

솔직히 말하면 오픈스택으로 스트레스 풀어내는 느낌이다.

3주 동안 커맨드 하나 개발하는 것도 벅찼던 사람이 최근 며칠 사이에 완전히 다른 사람이 된 느낌이다.

이제 머신러닝 부분에서도 어느 정도 통달하면 이런 재미를 느끼겠지?

스스로 할 수 있을 것이란 자신감이 개발 쪽에서 이렇게 확신이 든 것은 오늘이 처음이다.

4. Reference

언제나 극복해 낼 수 있다는 마음가짐으로!

Ryan

--

--

Ryan Kim
Ryan Kim

No responses yet