CLI 사용법
분석 대상
test_metadef_resource_types / openstack image metadef resource type list
openstack.image.v2.metadef_resource_type — openstacksdk 4.4.1.dev6 documentation
-
사용 목적
-
Openstack Glance에서 이미지 메타데이터 정의에 사용되는 리소스 유형 목록을 조회하는 명령어
-
이미지 메타데이터를 정의할 때, 어떤 리소스에 대한 메타데이터를 만들 수 있는지 확인하는 데 사용됨
-
Openstack Glance
-
Openstack의 이미지 관리 서비스를 제공하는 컴포넌트
-
사용자가 가상 머신 이미지를 업로드, 저장, 검색, 공유 등 관리할 수 있도록 지원
-
S3같은 외부 스토리지와 연동 가능
-
동작 과정
-
사용자가 Glance에 이미지를 업로드
-
Nova는 인스턴스 생성 시, Glance에 해당 이미지를 요청
- 이미지 메타데이터를 제공
-
Nova-compute는 Glance에서 이미지를 다운로드 하여 인스턴스를 배포
- 이미지 파일 자체는 스토리지에 있으며, Glance는 이에 대한 경로 같은 메타데이터 정보를 제공
-
동작
-
openstack image metadef resource type list
실행 시의 화면python shell.py image metadef resource type list +---------------------+ | Name | +---------------------+ | OS::Glance::Image | | OS::Cinder::Volume | | OS::Nova::Flavor | | OS::Nova::Aggregate | | OS::Nova::Server | | OS::Trove::Instance | +---------------------+
-
Name : OpenStack Glance 메타데이터 정의를 적용할 수 있는 리소스 유형의 이름
- Glance가 단순히 이미지에 대한 메타데이터만 관리하는 것이 아니라, 다양한 OpenStack 서비스 리소스에 대한 메타데이터를 통합적으로 관리할 수 있다는 것을 해당 출력을 통해 알 수 있음
-
-
OCA-OpenStack/python-openstackclient/openstackclient/image/v2/metadef_resource_types.py
"""Image V2 Action Implementations""" from osc_lib.command import command from osc_lib import utils from openstackclient.i18n import _ class ListMetadefResourceTypes(command.Lister): _description = _("List metadef resource types") def take_action(self, parsed_args): image_client = self.app.client_manager.image data = image_client.metadef_resource_types() columns = ['Name'] # 'Description', 'Namespace' 추가 column_headers = columns return ( column_headers, ( utils.get_item_properties( s, columns, ) for s in data ), )
- 해당 코드의 columns 값을 수정하면 cli에 표시되는 칼럼을 변경할 수 있다.
python-openstackclient/openstackclient/shell.py image metadef resource type list +---------------------+----------------------+ | Name | created_at | +---------------------+----------------------+ | OS::Glance::Image | 2025-07-16T07:28:08Z | | OS::Cinder::Volume | 2025-07-16T07:28:08Z | | OS::Nova::Flavor | 2025-07-16T07:28:08Z | | OS::Nova::Aggregate | 2025-07-16T07:28:08Z | | OS::Nova::Server | 2025-07-16T07:28:08Z | | OS::Trove::Instance | 2025-07-16T07:28:08Z | +---------------------+----------------------+
-
image_client = self.app.client_manager.image
를 통해 Glance를 호출한다.- client_manager은 Openstack 서비스(Nova, Cinder 등)에 연결하기 위한 클라이언트 객체들의 집합
-
사용 가능한 칼럼 리스트는
openstacksdk/openstack/image/v2/metadef_resource_type.py
파일에서 확인할 수 있다.# openstacksdk/openstack/image/v2/metadef_resource_type.py from openstack import resource class MetadefResourceType(resource.Resource): resources_key = 'resource_types' base_path = '/metadefs/resource_types' # capabilities allow_list = True #: The name of metadata definition resource type name = resource.Body('name', alternate_id=True) #: The date and time when the resource type was created. created_at = resource.Body('created_at') #: The date and time when the resource type was updated. updated_at = resource.Body('updated_at')
옵션
$ openstack image metadef resource type list -help
usage: shell image metadef resource type list [-h] [-f {csv,json,table,value,yaml}] [-c COLUMN]
[--quote {all,minimal,none,nonnumeric}] [--noindent]
[--max-width <integer>] [--fit-width] [--print-empty]
[--sort-column SORT_COLUMN] [--sort-ascending |
--sort-descending]
List metadef resource types
options:
-h, --help show this help message and exit
output formatters:
output formatter options
-f, --format {csv,json,table,value,yaml}
the output format, defaults to table
-c, --column COLUMN
specify the column(s) to include, can be repeated to show multiple columns
--sort-column SORT_COLUMN
specify the column(s) to sort the data (columns specified first have a priority, non-
existing columns are ignored), can be repeated
--sort-ascending sort the column(s) in ascending order
--sort-descending sort the column(s) in descending order
CSV Formatter:
--quote {all,minimal,none,nonnumeric}
when to include quotes, defaults to nonnumeric
json formatter:
--noindent whether to disable indenting the JSON
table formatter:
--max-width <integer>
Maximum display width, <1 to disable. You can also use the CLIFF_MAX_TERM_WIDTH
environment variable, but the parameter takes precedence.
--fit-width Fit the table to the display width. Implied if --max-width greater than 0. Set the
environment variable CLIFF_FIT_WIDTH=1 to always enable
--print-empty Print empty table if there is no data to show.
This command is provided by the python-openstackclient plugin.
-
python-openstackclient/openstackclient/image/v2/metadef_resource_types.py
의 import 부분을 보면 osc_lib의 command를 통해 옵션을 제공하고 있음을 알 수 있다.# python-openstackclient/openstackclient/image/v2/metadef_resource_types.py ㄹ"""Image V2 Action Implementations""" from osc_lib.command import command from osc_lib import utils from openstackclient.i18n import _
-
osc_lib.command는 cliff의 lister을 import 하여 사용하기에 최종적으로는 해당 클래스를 확인하면 된다.
# osc-lib/osc_lib/command/command.py import abc import argparse import logging import typing as ty from cliff import command from cliff import lister from cliff import show from osc_lib import exceptions from osc_lib.i18n import _ if ty.TYPE_CHECKING: from osc_lib import shell
# lib/python3.13/site-packages/cliff/lister.py class Lister(display.DisplayCommandBase, metaclass=abc.ABCMeta): ... def get_parser(self, prog_name: str) -> _argparse.ArgumentParser: parser = super().get_parser(prog_name) group = self._formatter_group group.add_argument( '--sort-column', action='append', default=[], dest='sort_columns', metavar='SORT_COLUMN', help=( 'specify the column(s) to sort the data (columns specified ' 'first have a priority, non-existing columns are ignored), ' 'can be repeated' ), ) sort_dir_group = group.add_mutually_exclusive_group() sort_dir_group.add_argument( '--sort-ascending', action='store_const', dest='sort_direction', const='asc', help=('sort the column(s) in ascending order'), ) sort_dir_group.add_argument( '--sort-descending', action='store_const', dest='sort_direction', const='desc', help=('sort the column(s) in descending order'), ) return parser