aglitke.prism

プリズム

プリズムの役割は、均一なプレイブックインターフェースを持つ多様なターゲットを制御するためのフレームワークを作成します。例えば、異なる種類のストレージアレイにボリュームをプロビジョニングしたり、異なるベンダーのスイッチでVLANを管理したりすることができます。プリズムでは、操作のスイートをサポートするバックエンドを定義し、そのバックエンドを使用する特定のターゲットを構成できます。一度構成されると、プレイブックが特定のターゲットに対して、基盤となる実装を気にせずに特定の操作を行うために生成されます。

この役割は、独自のバックエンドや操作を提供する他の役割のベースとして機能することを意図しています。

要件

Ansible >= 2.3.0 でテストされていますが、古いバージョンでも動作する可能性があります。

構成

この役割を効果的に使用するには、まず操作、バックエンド、およびターゲットの概念を理解する必要があります。操作は遂行したい作業を表します。バックエンドは制御可能なシステムの種類を説明します。最後に、ターゲットは特定のシステムのインスタンスを表します。シンプルな例のために、リモートオブジェクトストレージを抽象化したいと仮定しましょう。必要な操作は「作成」「取得」「更新」「削除」です。多くのバックエンドが考えられますが、明らかな例としては「HTTP/REST」と「FTP」があります。ここで、http://api.example.com/v2 でアクセス可能なREST APIがあり、ユーザー名が「foo」、パスワードが「pass」で、192.168.2.47 に FTP サーバーがあって、ディレクトリ「/pub/api」、ユーザー名が「ftp」、パスワードが「secret」であると仮定します。これらはそれぞれターゲットを表します。

バックエンドを構成するには、まずプレイブックテンプレートを保存するためのディレクトリを作成します。この役割では、デフォルトの場所は templates/ です。次に、サポートしたいバックエンドごとにサブディレクトリを作成します(例:ftp と http)。次に、各バックエンドディレクトリにサポートしたい操作ごとのプレイブックテンプレートを作成します(以下の例を参照)。ファイル名は <operation>.yml.j2 とする必要があります。

ターゲットを構成するには、ターゲット定義ファイルを保存するためのディレクトリを作成します。デフォルトの場所は /etc/prism/targets です。各ターゲットについて、構成ファイル <target>.yml を作成します(以下の例を参照)。

操作の例

以下のファイル(templates ディレクトリの rest/ サブディレクトリに create.yml.j2 として保存)が、'rest' バックエンドの作成操作を定義します。

- hosts: "{{ target_host }}"
  remote_user: "{{ target_user }}"

  tasks:
  - name: REST: Create operation
    uri:
      url: "{{ backend_config.base_url }}/{{ params.path }}"
      method: POST
      user: "{{ backend_config.auth.username }}"
      password: "{{ backend_config.auth.password }}"
      body: "{{ params.object.data }}"

ターゲット定義の例

以下のファイル(web.yml として保存)が、'web' という名前のターゲットを定義します。

# 生成されたプレイブックを実行する際に使用するホストとユーザー
target_host: host.example.com
target_user: admin

# このターゲットが使用するバックエンド
backend: rest

# ターゲット固有の構成パラメータ
backend_config:
  base_url: http://api.example.com/v2
  auth:
    username: foo
    password: pass

プレイブックの生成

以下のプレイブックは、'web' ターゲットを使用してオブジェクトを保存するためのプレイブックを生成するために使えます。

# ローカルマシンを使ってプレイブックを生成
- hosts: localhost
  roles:
    - prism

  vars:
    # オプション: デフォルトを使用しない場合は上書き
    target_definitions_dir: /etc/prism/targets

    # オプション: デフォルトを使用しない場合は上書き
    playbook_templates_dir: /etc/prism/templates

    # 出力プレイブックの名前を設定します。この変数が省略されると、プレイブックは生成されません。
    generated_playbook: /tmp/prism-playbook.yml

    # この操作のターゲットを選択
    target: web

    # 操作を選択
    operation: create

    params:
      path: messages
      object:
        id: 1
        data: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=

  # プレイブック生成タスクはロール内で定義されているため、タスクは不要です。

これにより、/tmp/prism-playbook.yml にプレイブックが生成され、ansible-playbook で実行することでアクションを実行できます。

- hosts: host.example.com
  remote_user: admin

  tasks:
  - name: REST: Create operation
    uri:
      url: "http://api.example.com/v2/messages"
      method: POST
      user: foo
      password: pass
      body: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=

'ftp' ターゲットに切り替えるには、1行を変更するだけで、生成されたプレイブックはFTPサーバーと通信するように構成され、FTP操作テンプレートとターゲット構成に基づきます。

target: ftp

ライセンス

GPLv3

作者情報

アダム・リトケ (Adam Litke) によって書かれました - alitke@redhat.com

プロジェクトについて

Control a heterogeneous set of targets from a uniform playbook interface

インストール
ansible-galaxy install aglitke.prism
ライセンス
Unknown
ダウンロード
93
所有者