2주차 과제 - 강민철

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

  • 칼럼 필드 추가.
  • identity.find_project(), identifyfind_user() 추가.
  • 소스코드

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

  1. (python-openstackclient) openstackclient/shell.pymain()
    • python-openstackclient shell.py 내 OpenStackShell 은 osc_lib 자식임
# openstackclient/shell.py
from osc_lib import shell

class OpenStackShell(shell.OpenStackShell):
#...
  1. (python-openstackclient)main()OpenStackShell.run() 실행.

    1. 부모 (osc_lib)의 run() 실행
  2. super().run(argv) 에 따라 cliff 실행

    • osc_lib shell.py 내 OpenStackShell 은 cliff 자식임
# osc_lib/shell.py
from cliff import app

class OpenStackShell(app.App):
#...
  1. (cliff) run() 실행

    1. initialize_app() : 플러그인 및 명령어 로드
      • _load_plugins()pyproject.toml 에 등록된 클래스 path를 등록함.
      • _load_commands() 가 사용할 명령어들을 등록함
      • 둘 다 자식인 python-openstackclient에 구현되어있음
  2. (cliff) run_subcommand() 실행

    • (command manager) find_command() 호출 : command manager를 통해 server listListServer를 찾음
# 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()이 구현된 클래스들의 목록을 나열함. (커맨드 패턴)

감사합니다.

1개의 좋아요