python-openstackclient이란?

python-openstackcli 프로젝트란?

  • OpenStack 클라우드 서비스에 대한 명령 줄 인터페이스 (CLI) 도구이고, 사용자는 OpenStack 환경에서 다양한 서비스를 관리하고 조작할 수 있다.
  • 이 프로젝트는 다양한 OpenStack 서비스 (예: Compute, Identity, Image, Network 등)에 대한 일관된 CLI를 제공하여 사용자가 손쉽게 OpenStack 리소스를 관리할 수 있도록 도와준다.

Landscape

  • CLI를 담당하는 openstackclient와 SDK를 담당하는 openstacksdk 프로젝트 2개가 존재한다.

python-openstackclient의 주요 기능

  • 통합된 CLI: 각 OpenStack 서비스에 대한 개별 CLI 도구 대신 하나의 통합된 CLI를 제공하여 사용자의 편의성을 제공
  • 확장 가능: 플러그인 아키텍처를 통해 새로운 서비스나 기능을 쉽게 추가 가능
  • 자동 인증 및 세션 관리: 사용자가 설정한 인증 정보와 세션을 바탕으로 OpenStack API와 상호 작용
# git 주소
https://opendev.org/openstack/python-openstackclient


탄생배경

  • 원래는 각 컴포넌트 마다 CLI(client)가 따로 존재한다.
  1. 하지만 컴포넌트별로 따로 개발이 되다보니 option이나 코드 구조가 일관성이 없어진다.
    • 예를 들어, 테넌트 ID를 nova에선 tenantd-id, glance에선 tenantd_id등 (예시일뿐 실제 X)
  2. 컴포넌트별로 코드 구조나 개발방식이 달라 다른 컴포넌트에 기여하기가 어렵다.


setup.cfg

  • setup.cfg 파일은 Python 프로젝트의 메타데이터와 구성 옵션을 정의하는 파일이다.
  • 이 파일은 주로 Python 패키징 도구인 setuptools와 함께 사용되며, 프로젝트의 설정 정보를 명시적으로 지정할 수 있는 구성 파일이다.
  • 설정 값
    • 메타데이터: 프로젝트 이름, 버전, 저자, 라이센스 등의 기본 정보.
    • 옵션: 설치 옵션, 종속성, 테스트 요구 사항 등의 설정.
    • 엔트리 포인트: CLI 명령어와 그에 매핑되는 함수 지정.
    • 패키징 정보: 포함될 패키지와 데이터 파일 등의 정보.
[metadata]
name = python-openstackclient
summary = OpenStack Command-line Client
description_file =
    README.rst
author = OpenStack
author_email = openstack-discuss@lists.openstack.org
home_page = https://docs.openstack.org/python-openstackclient/latest/
python_requires = >=3.8
classifier =
    Environment :: OpenStack
    Intended Audience :: Information Technology
    Intended Audience :: System Administrators
    License :: OSI Approved :: Apache Software License
    Operating System :: POSIX :: Linux
    Programming Language :: Python
    Programming Language :: Python :: 3
    Programming Language :: Python :: 3.8
    ...

[entry_points]
...
...
openstack.compute.v2 =
    server_create = openstackclient.compute.v2.server:CreateServer
    server_delete = openstackclient.compute.v2.server:DeleteServer
    ...
    server_list = openstackclient.compute.v2.server:ListServer
    ...

역할

  • 프로젝트 구성 및 관리: 프로젝트의 종속성, 메타데이터, 엔트리 포인트 등을 중앙에서 관리.
  • 자동화: 빌드 및 배포 프로세스를 자동화.
  • 일관성: 여러 개발자 간의 환경 일관성 유지.
  • setup.cfg 파일을 통해 프로젝트의 다양한 설정을 한 곳에서 관리함으로써, 패키징과 배포 과정이 더 체계적이고 간편해진다.


코드를 한번 보자

  • get_parser : 함수명 그대로 입력한 명령어의 argv를 파싱하는 함수이다.
  • take_action : 실제 API 호출이나 값을 받아와 파싱하여 사용자에게 값을 전달 해주는 핵심 함수

take_action을 찾아가는 flow





openstack server list 분석 해보기

인증 및 openstackcli를 사용하기 위한 정보 설정



사용할 컴포넌트 API 버전에 맞는 client를 셋팅




컴포넌트간 인증을 위해 사용할 Token 발급



여기서 궁금한거

  • openstackclient는 어떻게 다른 API의 endpoin를 알고 호출하는걸까?
    • 아래사진의 token 발급의 response값을 보면 catalog라는 key의 value에 컴포넌트들의 endpoint를 retrun해주고 있다.
    • 위 값을 통해 컴포넌트 호출할때 적잘한 endpoint 값을 사용하여 api 호출을 한다.


nova api를 호출하여 인스턴스 목록을 받아옴

--debug모드로 알 수 있는건, 기존 server list 실행 결과값보다 많은 값을 api를 통해 받아오는걸 확인할 수 있다.



glance api를 호출하여 image 정보도 받아옴

nova api의 flavor api 호출하여 flavor 정보도 받아옴

위처럼 여러 컴포넌트의 api를 호출하여 server list에 결과값을 만들어냄




Openstack API 명세서