diaryこの広告は、90日以上更新していないブログに表示しています。nsx」などなど、さまざまなpluginが設定ファイルで設定できる。それをstevedoreというライブラリを用いて実現可能にしている。今回はそれの使い方について、keystoneclientのauth_pluginの読み込み部分を見ながら使い方を見ていく※注意:イマイチ良く分かっていないところがあるので、間違いや詳細が分かる方はコメントくださいkeystoneclientにauth_pluginについて(stevedoreの使用例)keystoneclientでは、認証の方法をplugin形式で実装している(Token,Password等)ので、さまざまな認証方法を選択することができる。WSGIアプリケーションのFilterでは、設定ファイルで、使用するkeystonclientで読み込むauth_pluginを設定ファイルで下記のように、指定している。**kwargs)~~~~~~~~~~~~ここでは、pluginクラスを生成して、生成したpluginクラスに設定をつっこんでます。mgr.driver~~~~~~~~~~~~~~やっとここで、stevedoreの登場です(42行目)。stevedore.DriverManagerが与えられたname(このときはpassword)に対応するクラスを探して、読み込みます。stevedoreについて先ほどまで、keytonemiddlewareとkeystoneclientを見て実際にプラグインが読み込まれる過程を見ました。ここから、stevedoreの使い方を見ていきます。)なぜそんなことができるかというと、インストール時にsetup.cfgでそのマッピングについて定義するからです。tokenがnameといいます。ここまでくれば分かるかと思いますが。namespaceとnameの組み合わせで、対応クラスがマッピングされます。passwordとすれば、読み込まれるクラスは、keystoneclient.auth.identity.generic:Passwordになります。中のentry_points.txtに同じような定義があります。例として、keystoneclientのentry_points.txtを下記に記します。keystoneclient.contrib.auth.v3.saml2:Saml2UnscopedToken表記は、違いますが雰囲気で分かると思います。囲まれている部分がnamespaceに対応し、の下に書かれている部分がnameに相当しますneutronのpluginの読まれ方ここで疑問に、思う方がいるかもしれませんが(僕は思いました)。password,tokenなどnameを使用して、entry_pointsでそのマッピング先を探すのに、設定ファイルでクラスパスを直接書いている部分があるのはなぜだろう。stevedoreは、nameにクラスパスが指定されていたらそのクラスパスのクラスを読み込むのか?例えばneutronでは、service_pluginsの指定に、フルクラスネームで書くこともnameで書くこともできます。neutron.services.l3_router.l3_router_plugin.L3RouterPluginneutronのpluginの読み込み方を調べてみたところ、こんな風になっていました。plugin_class()stevedoreは、nameにマッチするentry_pointが見つからない場合は、例外を吐くのでその例外をキャッチし、クラスパスが指定されていることを仮定し、importutilsでimportを試みてるんですね。設定ファイルのpluginに指定する値は、entry_pointのnameでも、クラスパスでもうまくいくんですね。読者になる検索リンクヘルプはてなブログお知らせ最新記事OpenStackで使用されているプラグイン機構Stevedoreの使い方pythonパッケージからdebファイルを作成するIronicをDevstackでサク?っと試してみたRack、WSGIサーバのThread処理の実装について(1)Backlogってなんぞや月別アーカイブはてなブログをはじめよう!ukinauさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。