EGI-Foundation.voms-client
EGI VOMSクライアント
一般情報
VOMSとVOについて
これはVOMSクライアントを設定するためのAnsibleロールです。VOMSは、バーチャル組織のメンバーシップを管理するためのウェブサービスです。VOMSクライアントは、特定のサービスと対話するための認可(短命のプロキシの形で)を取得するために必要です。VOMSクライアントは、認証された要求を関連するVOMSサーバーに送信するコマンドラインユーティリティのセットです。
VOMSクライアントを使用するためには、個人は以下を満たす必要があります:
- 個人のx.509証明書を持っていること
- 認可を取得したいVOに登録されていること
VOMSクライアントは通常、ユーザーインターフェースまたはワーカーノードのプロファイルにインストールされます。
設定
VOMSクライアントの設定は、いくつかのファイルを使って行います:
.lsc
ファイルvomses
ファイル
詳細な情報については、VOMS文書を参照してください。
対話したい各VOについて、関連する設定が必要です。これは、サイト管理者があらかじめどのVOを設定するべきかを知らない場合、非常に時間がかかる作業になることがあります。
生活を楽にするために、私たちはデータ駆動型のアプローチを取ります。
必要なデータは、EGIオペレーションポータルAPIから取得でき、このロールではデータソースとして使用されます。これにより、オペレーションポータルに登録されているすべてのVOを一度に設定できます。設定を生成するために以下の2つのアプローチが考えられます:
- Ansibleの実行時にLavoisierから生のデータを取得して設定する方法
- Ansibleの実行前にLavoisierからフィルタリングされたデータを取得して設定する方法
前者のアプローチでは、適切に作成されたjson_query
がLavoisierから返されるデータをループするのに使用できます。クエリはLavoisierから返されるデータオブジェクトの複雑さと構造を反映する必要がありますが、一貫性のあるデータの配列が返されるとは限りません。後者のアプローチでは、関連情報を含まないアイテムを除外するようにフィルタリングされたキャッシュデータオブジェクトをループする簡単な方法が使用されます。このキャッシュデータは、ロール変数を読み取り、データのローカルキャッシュを作成する簡単なPythonスクリプト - files/create_clean_vo_data.pyによって簡単に作成できます。データ形式はYAMLに選択され、リポジトリに追加し、変更を追跡できるようにします - JSONでは行数が不十分なため、これは困難です。
私たちは後者を選択しました(理由の詳細は4215026e18cを参照):
- 複雑なjsonクエリよりも、よく文書化されたスクリプトの方がメンテナンスが容易です。
- 複雑なjsonクエリよりも、よく文書化されたスクリプトの方が読みやすいです。
- このロールがプレイブックの依存関係として追加される場合(VOMSクライアントは至る所で使用されるため、必ずそうなります)、データが存在する必要があります。
ただし、リポジトリ内のデータがLavoisier上の実際のデータとすぐに同期しなくなるという欠点があります。これは、個人が手動でキャッシュを編集することや、メンテナが必要なときにスクリプトを実行しないことで発生する可能性があります。この問題を克服する唯一の方法は、強力なテストスイートを維持することです。
VOデータの更新
files/create_clean_vo_data.pyを使ってVOデータを更新するには、EGIオペレーションポータルAPIとやり取りするために認証トークンが必要です。
トークンは、EGI Check-inを通じて認証されている状態で、オペレーションポータルAPIのドキュメントページにアクセスし、ページの指示に従うことで生成できます。その後、files/create_clean_vo_data.pyを実行する前に、トークンを環境にエクスポートします。
トークンが機能しているかどうかをテストするために、curlコールを使用できます:
# オペレーションポータルAPIトークンをエクスポート
$ export OPS_PORTAL_API_TOKEN='...'
# curlを使用してAPIコールをテスト
$ curl -X GET "https://operations-portal.egi.eu/api/vo-voms/json" \
-H "Accept: application/json" \
-H "X-API-Key: $OPS_PORTAL_API_TOKEN"
curl
コールが正常であることが確認できたら、提供されたスクリプトを使用できます:
# オペレーションポータルAPIトークンをエクスポート
$ export OPS_PORTAL_API_TOKEN='...'
# VOデータを更新
$ ./files/create_clean_vo_data.py
テスト
このロールは、moleculeを使用して以下のシナリオでテストされます:
default
(TestInfraでテストされています)
テストはユニットテストおよび統合テストをカバーしますが、VOMSクライアントを使用するためには個人の証明書が必要なため、機能テストは行われません。具体的なテスト内容は以下の通りです:
- バイナリエグゼキュータブルの存在
- 設定ディレクトリの存在
- 選択されたVOの設定ファイルの内容
要件
requirements.txt
を参照してください。
ロール変数
defaults/main.yml
に保持されているロール変数には以下が含まれます:
prerequisites
- OSベースの前提条件パッケージvoms_dir
,vomses_dir
- voms情報を含むターゲットホスト上のディレクトリ位置lavoisier
- 設定ファイルを埋めるために必要なデータを抽出するためのlavoisierフレームワークのエンドポイント
デフォルト変数を変更する必要はありません。
依存関係
依存関係はメタデータ内で明示的には宣言されていませんが、このロールはUMDロールに依存しています:
- { role: EGI-Foundation.umd, release: 4 }
サンプルプレイブック
- hosts: servers
roles:
- { role: EGI-Foundation.umd, release: 4 }
- { role: EGI-Foundation.voms-client }
ライセンス
Apache-2.0
著者情報
AUTHORS.mdを参照してください。