# 4주차 과제 - 김민규 (작성중)

**URL:** <https://forum.openinfra-kr.org/t/topic/201>\
**Category:** 컨트리뷰션\
**Tags:** 컨트리뷰션\
**Created:** [8월 10, 2025, 1:30오후 UTC](https://forum.openinfra-kr.org/t/topic/201 "2025-08-10T13:30:21Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![khai](https://forum.openinfra-kr.org/letter_avatar_proxy/v4/letter/k/e9a140/32.png) [@khai](https://forum.openinfra-kr.org/u/khai)\
**Post date:** [8월 10, 2025, 1:30오후 UTC](https://forum.openinfra-kr.org/t/topic/201/1 "2025-08-10T13:30:21Z")

</div>

# 기본 사용법

* * *

- `openstack catalog list` 는 모든 서비스 목록을 조회하는 기능입니다.

- `opentstack catalog show`는 특정서비스 상세 정보 조회하는 기능입니다.

# openstack catalog list 상세 사용법

* * *

## 사용법

```bash
openstack catalog 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]

```

## Json 형식으로 출력

- `openstack catalog list -f json`

## Yaml 형식으로 출력

- `openstack catalog list -f yaml`

## 특정 컬럼만 선택해서 보기

- `openstack catalog list -c Name -c Type l`

```bash
#result of openstack catalog list -c Name -c Type l
+-------------+----------------+
| Name | Type |
+-------------+----------------+
| cinder | block-storage |
| placement | placement |
| keystone | identity |
| nova | compute |
| glance | image |
| nova_legacy | compute_legacy |
| barbican | key-manager |
| neutron | network |
+-------------+----------------+

```

## 이름만 보기

- `openstack catalog list -f value -c Name `

```bash
# result
cinder
placement
keystone
nova
glance
nova_legacy
barbican
neutron

```

# `openstack catalog show` 상세 사용법

* * *

## 사용법

```bash
openstack catalog show [-h] [-f {json,shell,table,value,yaml}]
                              [-c COLUMN] [--noindent] [--prefix PREFIX]
                              [--max-width <integer>] [--fit-width]
                              [--print-empty]
                              <service>

```

## 서비스 타입으로 조회

- `openstack catalog show compute`
- `openstack catalog show network`
- `openstack catalog show identity`

## 서비스 이름으로 조회

- `openstack catalog show nova`
- `openstack catalog show neutron`

## JSON 형식으로 상세 정보 확인

- `openstack catalog show compute -f json`

## 특정 필드만 추출

- 엔드포인트만 추출: `openstack catalog show compute -c endpoints`
- id / type만 추출: `openstack catalog show compute -c id -c type`

# `open catalog [CRUD]` - 파일 위치

* * *

```bash
  python-openstackclient/
  └── openstackclient/
      └── identity/
          ├── v2_0/
          │ └── catalog.py    
          └── v3/
              └── catalog.py    

```

# `open catalog [CRUD]`의 간단한 실행흐름

* * *

## `catalog list` 실행 흐름

```python
  # openstackclient/identity/v3/catalog.py:41-66
  class ListCatalog(command.Lister):
      def take_action(self, parsed_args):
          # 1. 인증 확인
          auth_ref = self.app.client_manager.auth_ref

          # 2. Service Catalog 데이터 가져오기
          data = auth_ref.service_catalog.catalog

          # 3. 컬럼 정의
          columns = ('Name', 'Type', 'Endpoints')

          # 4. 데이터 포맷팅 및 반환
          return (columns, formatted_data)

```

## `catalog show` 실행흐름

```python
 # openstackclient/identity/v3/catalog.py:69-105
  class ShowCatalog(command.ShowOne):
      def take_action(self, parsed_args):
          # 1. 인증 확인
          auth_ref = self.app.client_manager.auth_ref
          
          # 2. 서비스 이름/타입으로 검색
          for service in auth_ref.service_catalog.catalog:
	          if (  
				    service.get('name') == parsed_args.service  
				    or service.get('type') == parsed_args.service  
				):  
				    data = dict(service)  
				    data['endpoints'] = EndpointsColumn(data['endpoints'])
          # 3. 일치하는 서비스 데이터 포맷팅
          # 4. 서비스 상세 정보 반환

```
