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)가 따로 존재한다.
- openstackcli : openstack image list
- glance cli : glance image-list
- 하지만 컴포넌트별로 따로 개발이 되다보니 option이나 코드 구조가 일관성이 없어진다.
- 예를 들어, 테넌트 ID를 nova에선 tenantd-id, glance에선 tenantd_id등 (예시일뿐 실제 X)
- 컴포넌트별로 코드 구조나 개발방식이 달라 다른 컴포넌트에 기여하기가 어렵다.
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를 사용하기 위한 정보 설정
- keystone 인증정보등… (username, password, auth_url…)
사용할 컴포넌트 API 버전에 맞는 client를 셋팅
server list에 맵핑되어 있는 class명과 path를 보여줌
컴포넌트간 인증을 위해 사용할 Token 발급
- 결과값보면 Token 값은 안보임 → 결과값은 body 값을 보여준거고 Token은 header에 존재
여기서 궁금한거
- openstackclient는 어떻게 다른 API의 endpoin를 알고 호출하는걸까?
- 아래사진의 token 발급의 response값을 보면 catalog라는 key의 value에 컴포넌트들의 endpoint를 retrun해주고 있다.
- 위 값을 통해 컴포넌트 호출할때 적잘한 endpoint 값을 사용하여 api 호출을 한다.
nova api를 호출하여 인스턴스 목록을 받아옴
--debug모드로 알 수 있는건, 기존 server list 실행 결과값보다 많은 값을 api를 통해 받아오는걸 확인할 수 있다.