# 2주차 과제 - 강민철

**URL:** <https://forum.openinfra-kr.org/t/topic/143>\
**Category:** 컨트리뷰션\
**Tags:** 컨트리뷰션, 2025컨트리뷰션\
**Created:** [7월 26, 2025, 1:47오후 UTC](https://forum.openinfra-kr.org/t/topic/143 "2025-07-26T13:47:59Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![platanus](https://forum.openinfra-kr.org/letter_avatar_proxy/v4/letter/p/ecb155/32.png) [@platanus](https://forum.openinfra-kr.org/u/platanus)\
**Post date:** [7월 26, 2025, 1:47오후 UTC](https://forum.openinfra-kr.org/t/topic/143/1 "2025-07-26T13:47:59Z")

</div>

**(필수 과제) nova server list CLI 명령 결과에 project name , user name 추가**

 ![스크린샷 2025-07-26 15.46.38](https://forum.openinfra-kr.org/uploads/default/original/1X/603561f57c7d98872b2c803fbe4cf531d90c5d42.png)

- 칼럼 필드 추가.
- `identity.find_project()`, `identifyfind_user()` 추가.
- [소스코드](https://github.com/platanus-kr/python-openstackclient/commit/b8ffed95e10329eec260c79bc65d62b44c39a012)

**(선택 과제) CLI 실행시 take\_action()함수를 찾아가는 과정 분석해보기**

1. (python-openstackclient) `openstackclient/shell.py` → `main()`
  - python-openstackclient shell.py 내 OpenStackShell 은 osc\_lib 자식임

```python
# openstackclient/shell.py
from osc_lib import shell

class OpenStackShell(shell.OpenStackShell):
#...

```

1. (python-openstackclient)`main()` 내 `OpenStackShell.run()` 실행.

2. `super().run(argv)` 에 따라 cliff 실행

```python
# osc_lib/shell.py
from cliff import app

class OpenStackShell(app.App):
#...

```

1. (cliff) `run()` 실행

2. (cliff) `run_subcommand()` 실행

```toml
# python-openstackclient/pyproject.toml
server_list = "openstackclient.compute.v2.server:ListServer"

```

1. (command manager) `run_subcommand()` 내에서 `cmd.run()` 호출
  - 내부에서 `take_action()` 호출.

(정리)

- python-openstackclient는 cliff의 구현체이며 cliff는 명령어를 실행하면서 결국 take\_action() 을 호출한다.
- python-openstakclient는 pyproject.toml에 openstackclient가 SDK를 실행할 수 있도록 래핑한 클래스 정보를 제공하여 실제로 실행할 take\_action()이 구현된 클래스들의 목록을 나열함. (커맨드 패턴)

감사합니다.
