"Keystoneauth - keystoneclient으로부터 마이그레이션"의 두 판 사이의 차이

 
1번째 줄: 1번째 줄:
==개요==
==개요==
{{소문자}}
[[분류: Keystoneauth]]
[[분류: Keystoneauth]]
;Migrating from keystoneclient
;Migrating from keystoneclient

2024년 6월 23일 (일) 13:26 기준 최신판

1 개요[ | ]

Migrating from keystoneclient
keystoneclient으로부터 마이그레이션

https://docs.openstack.org/keystoneauth/latest/migrating.html


키스톤클라이언트(keystoneclient)에서 키스톤인증(keystoneauth)으로 분리되었을 때, 세션, 어댑터, 인증 플러그인의 기본 사용법은 의도적으로 변경되지 않았습니다. 따라서 키스톤클라이언트를 올바르게 사용하고 있었다면 전환이 비교적 간단할 것입니다.

2 인증 플러그인[ | ]

인증 플러그인 자체는 거의 변경되지 않았으나, 플러그인을 로드하는 방식과 일부 지원 클래스에는 변화가 있었습니다.

2.1 플러그인 로딩[ | ]

키스톤클라이언트에서는 인증 플러그인 로딩이 클래스 자체에 의해 관리되었습니다. 이러한 방법은 플러그인이 로드 방식을 제어할 수 있게 하여 유용했지만, 인증 로직과 설정 및 CLI 로딩이 연결되는 결과를 초래했습니다.

키스톤인증(keystoneauth)에서는 이를 분리하여 인증 플러그인이 로드되는 메커니즘과 별도로 처리됩니다.

인증 플러그인은 여전히 기본 인증 클래스(BaseAuthPlugin)를 구현합니다. CLI나 CONF 파일에서 플러그인을 로드할 수 있도록 하려면 BaseLoader 클래스를 구현해야 합니다. 이 클래스는 --os-auth-type이 사용될 때 로드되며, 제공되는 옵션을 처리한 후 애플리케이션에서 사용할 인증 플러그인을 구성합니다.

대체로 반환되는 옵션은 키스톤클라이언트에서 사용된 것과 동일하겠지만, 키스톤클라이언트에서는 oslo_config.cfg.Opt 객체를 사용했습니다. 최소한의 의존성을 유지하려는 이유로 키스톤인증에서는 oslo.config에 직접적인 의존성이 없으며, 대신 옵션을 Opt 객체로 지정해야 합니다.

플러그인 간의 구분을 위해 플러그인이 등록되는 setuptools 엔트리포인트가 keystoneauth1로 업데이트되었으며, 이제는 keystoneauth1.plugin이 되어야 합니다.

2.2 AccessInfo 객체[ | ]

AccessInfo 객체는 토큰에 저장된 정보를 나타냅니다. keystoneclient에서는 이러한 객체들이 속성 접근자가 있는 토큰 데이터의 딕셔너리로 표현되었습니다. keystoneauth에서는 딕셔너리 인터페이스가 제거되고 속성 접근자만 사용할 수 있습니다.

생성 함수도 변경되었습니다. keystoneclient.access.AccessInfo.factory() 메소드는 제거되고 keystoneauth1.access.create()로 대체되었습니다.

2.3 단계별 마이그레이션 예시[ | ]

requirements.txt에 keystoneauth1 추가

코드에서 다음과 같이 변경합니다:

-from keystoneclient import auth
+from keystoneauth1 import plugin

그에 따라:

-auth.BaseAuthPlugin
+plugin.BaseAuthPlugin

서비스 카탈로그를 가져오기 위해:

-from keystoneclient import service_catalog
+from keystoneauth1.access import service_catalog

서비스 카탈로그를 사용하여 URL을 가져오기 위해 endpoint_type 파라미터가 interface로 변경되었습니다:

-service_catalog.ServiceCatalogV2(sc).service_catalog.url_for(..., endpoint_type=interface)
+service_catalog.ServiceCatalogV2(sc).service_catalog.url_for(..., interface=interface)

세션 얻기:

-from keystoneclient import session
+from keystoneauth1 import loading as ks_loading

-_SESSION = session.Session.load_from_conf_options(
-auth_plugin = auth.load_from_conf_options(conf, NEUTRON_GROUP)
+_SESSION = ks_loading.load_session_from_conf_options(
+auth_plugin = ks_loading.load_auth_from_conf_options(conf, NEUTRON_GROUP)

테스트 목적으로 세션을 모킹하기:

-@mock.patch('keystoneclient.session.Session')
+@mock.patch('keystoneauth1.session.Session')

토큰 픽스처 임포트는 큰 변경이 필요하지 않습니다:

-from keystoneclient.fixture import V2Token
+from keystoneauth1.fixture import V2Token
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}