OpenStack Endpoint는 각 서비스의 접속 지점을 정의하는 핵심 요소로, Keystone에 등록된 서비스가 "어디에서, 어떤 방식으로" 접근 가능한지를 알려주는 주소 역할을 합니다.
구성 요소
기본 CLI 명령어

Endpoint 생성
openstack endpoint create <service> <interface> <url> \
--region <region> --enable
Endpoint 조회
# 전체 목록 조회
openstack endpoint list
# 특정 인터페이스만 필터링
openstack endpoint list --interface public
# 상세 정보 확인
openstack endpoint show <endpoint-id>
Endpoint 관리
# 비활성화
openstack endpoint set <endpoint-id> --disable
# 삭제
openstack endpoint delete <endpoint-id>
1) 사용자 입력
openstack endpoint create <service> <interface> <url> --region <region-id> --enable
2) 커맨드 바인딩
endpoint create는 OpenStackClient 안에 미리 등록된 커맨드 클래스(CreateEndpoint)로 연결됩니다.
3) 옵션 파싱
커맨드 클래스의 get_parser()가 argparse로 옵션을 정의합니다.

4) 실행 로직
take_action(parsed_args)에서는 사용자 입력을 표준화한 뒤, OpenStack SDK에 엔드포인트 생성 요청을 보냅니다.
def take_action(self, parsed_args):
# 1) 서비스/리전 식별자 정규화
identity = self.app.client_manager.sdk_connection.identity
service = common.find_service_sdk(identity, parsed_args.service) # 이름 → service_id
# 2) 엔드포인트 속성 구성
attrs = {
"service_id": service.id,
"interface": parsed_args.interface, # public|internal|admin
"url": parsed_args.url,
"enabled": parsed_args.enabled, # True/False
}
# Keystone v3는 region_id 사용 권장
if parsed_args.region:
try:
region = identity.get_region(parsed_args.region) # 이름/ID 모두 허용
attrs["region_id"] = region.id
except Exception:
attrs["region_id"] = parsed_args.region
# 3) 생성 요청 (SDK 프록시 호출)
endpoint = identity.create_endpoint(**attrs)
# 4) 출력 포맷
return _format_endpoint(endpoint, service=service)

5) SDK 프록시
OpenStack SDK의 Identity Proxy가 고수준 메서드(create_endpoint)를 제공합니다. 내부적으로 공통 헬퍼(_create)에 위임하여 리소스 클래스(Endpoint)를 생성하도록 합니다.


6) 리소스 레벨
Endpoint 리소스는 다음과 같은 메타정보를 가집니다.

_create()는 Endpoint 객체를 생성한 뒤, 해당 객체의 create() 메서드를 호출해 HTTP 요청을 실행합니다.
conn = self._get_connection()
res = resource_type.new(connection=conn, **attrs)
return res.create(self, base_path=base_path)
7) HTTP 요청/응답
create() 메서드는 Keystone API에 POST /v3/endpoints 요청을 전송합니다. 요청 본문에는 service_id, interface, url, region_id, enabled 등이 포함됩니다. Keystone 서버로부터 생성된 엔드포인트 정보를 받아 Endpoint 객체에 채웁니다.


8) 출력
CLI는 완성된 Endpoint 객체에서 필요한 컬럼만 추출해 테이블 형태로 렌더링하여 출력합니다.

📍 시퀀스 요약
User
└─ openstack endpoint create ...
OpenStackClient
├─ map "endpoint create" → CreateEndpoint
├─ argparse 파싱(get_parser)
└─ take_action(parsed_args)
├─ service/region 정규화 → attrs 구성
└─ identity.create_endpoint(**attrs)
OpenStack SDK (Identity Proxy)
└─ _create(Endpoint, **attrs)
└─ Endpoint.new(...).create(session, base_path="/endpoints")
├─ POST /v3/endpoints ({"endpoint": {...}})
└─ 응답 → Endpoint 객체 채움
CLI Renderer
└─ 표 형태로 출력
흐름 정리
1) 사용자가 CLI 입력
2) CLI가 옵션을 파싱하고 실행 메서드(take_action) 호출
3) SDK의 Identity 프록시가 고수준 함수 실행
4) 프록시 내부 공통 헬퍼가 표준 CRUD 처리
5) Endpoint 리소스가 실제 HTTP 요청 구성/전송
6) Keystone(Identity API) 응답을 받아 화면에 출력
CRUD 정리
1) 생성 openstack endpoint create ...
2) 조회 openstack endpoint show <id>
3) 목록 openstack endpoint list [--service ... --interface ... --region ...]
4) 수정 openstack endpoint set <id> [--url ... --interface ... --region ... --enable/--disable]
5) 삭제 openstack endpoint delete <id>
파일 정리
1) 리소스 정의 openstacksdk/openstack/identity/v3/endpoint.py
2) 서비스 프록시 openstacksdk/openstack/identity/v3/_proxy.py
3) Proxy 공통 헬퍼 openstacksdk/openstack/proxy.py
4) 리소스 베이스 openstacksdk/openstack/resource.py