Read this in other languages: English, 日本語.
F5 AS3 を使った virtual server 構築(Section 1 Ansible F5 Exercisesで学んだもの)のデモンストレーション
お使いの F5 BIG-IP は AS3 が有効になっている事を確認してください。
Package Management LX
のリンクをクリックします。f5-appsvcs
がインストールされている事を確認します。これでうまくいかない場合は、インストラクターに助けを求めましょう。
Playbook を作り始める前に、AS3 がどのように動くのか理解する必要があります。AS3 は F5 BIG-IP を API 呼び出しを行う際に JSON テンプレートを渡す必要があります。この演習のテンプレートは提供されます。受講者は、すべてのパラメーターについて完全に理解する必要はありません。また、ゼロからテンプレートを作れる必要はありません。 これらは2つのパートに分かれています。
tenant_base.j2
{
"class": "AS3",
"action": "deploy",
"persist": true,
"declaration": {
"class": "ADC",
"schemaVersion": "3.2.0",
"id": "testid",
"label": "test-label",
"remark": "test-remark",
"WorkshopExample":{
"class": "Tenant",
}
}
}
tenant_base
は標準テンプレートです。F5 Networks が自社の顧客に対して提供しています。もっとも重要なパートとしては:
"WorkshopExample": {
- これは Tenant の名前です。AS3 は 特別な WebApp のための Tenant を作ります。WebApp は、今回の場合、virtual server を示します。2つの Web サーバーに対してロードバランスします。"class": "Tenant",
- WorkshopExample
は Tenant であることを示します。as3_app_body
- これは現在の WebApp に対する 2つ目の Jinja2 テンプレートの名前を示す変数です。as3_template.j2
"web_app": {
"class": "Application",
"template": "http",
"serviceMain": {
"class": "Service_HTTP",
"virtualAddresses": [
"{{private_ip}}"
],
"pool": "app_pool"
},
"app_pool": {
"class": "Pool",
"monitors": [
"http"
],
"members": [
{
"servicePort": 443,
"serverAddresses": [
{% set comma = joiner(",") %}
{% for mem in pool_members %}
{{comma()}} "{{ hostvars[mem]['ansible_host'] }}"
{% endfor %}
]
}
]
}
}
このテンプレートは Web アプリケーションに対する JSON の表記です。ここのパートで重要な点としては、
serviceMain
です。
app_pool
という名前の Pool があります。
要約
tenant_base.j2
と as3_template.j2
の2つのテンプレートファイルは、Web アプリケーションのための1つの JSON ペイロードを作ります。次に Playbook を構築することで F5 BIG-IP に対して、この JSON ペイロードを送ります。
これらのテンプレートを作業ディレクトリにコピーしてください。
[student1@ansible ~]$ mkdir j2
[student1@ansible ~]$ cp ~/f5-workshop/3.0-as3-intro/j2/* j2/
テキストエディターを使って as3.yml
という名前でファイルを作成します。
[student1@ansible ~]$ nano as3.yml
コントロールノードでは
vim
とnano
、また、RDP 経由では Visual Studio と Atom が利用可能です。
以下の定義を Playbook as3.yml
の先頭に入力してください:
---
- name: LINKLIGHT AS3
hosts: lb
connection: local
gather_facts: false
vars:
pool_members: ""
---
はファイルの先頭である事を示します。このファイルは YAML ファイルです。hosts: lb
は lb グループに属するホストに対してのみ処理を実行するという意味です。F5 デバイスは今回1つだけですが、しかし、複数台ある場合には複数台を同時に指定できます。connection: local
を指定することで Playbook がローカル実行されます。(SSHで接続せず)gather_facts: false
を指定することで facts の収集を無効化します。これは今回の Playbook 中で、facts を何も利用しないためです。以下のセクションは
vars:
pool_members: ""
… pool_members
と呼ばれる変数を定義し、web グループを値として指定します。workbench に2台のWebサーバーがあり、pool_members
の値を参照することで2台のWebサーバーのリストを取得することができます。
追記 次のタスクをPlaybook as3.yml
の後ろに追記します。
tasks:
- name: CREATE AS3 JSON BODY
set_fact:
as3_app_body: ""
この set_fact モジュール は、Playbook 内のタスクにおいて使用できる変数を作成(再定義)することができます。これにより新しい facts を動的に作成することができます。今回の場合、 template lookup プラグイン を使用します。このタスクには以下の内容を記述しています。
j2/as3_template.j2
が提供されているas3_app_body
という新しい fact を作成する(中身はJSON 形式のテキスト)追記 以下は as3.yml の Playbook に追記します。このタスクは uri モジュールを使い、HTTP および HTTPS Web サービスと対話するためのものです。Digest認証、Basic認証、および WSSE HTTP 認証メカニズムをサポートします。このモジュールは非常に一般的で非常に使いやすいです。このワークショップの演習環境をプロビジョニングした Playbook の中でで uri モジュールを使って、Red Hat Ansible Tower の設定や、ライセンス登録を行っています。
- name: PUSH AS3
uri:
url: "https://:8443/mgmt/shared/appsvcs/declare"
method: POST
body: ""
status_code: 200
timeout: 300
body_format: json
force_basic_auth: true
user: ""
password: ""
validate_certs: false
delegate_to: localhost
パラメーターの説明:
パラメータ | 説明 |
---|---|
- name: PUSH AS3 |
Playbook task の説明です。ターミナルに表示されます。 |
uri: |
uri module を呼び出します。 |
url: "https://:8443/mgmt/shared/appsvcs/declare" |
AS3 の web URL (API) です。 |
method: POST |
HTTP リクエストメソッドは大文字である必要があります。モジュールドキュメントのページに全てのオプションリストがあります。DELETE や POST が使用できます。 |
body: "" |
これにより、結合されたテンプレート (tenant_base.j2 や as3_template.j2 を含む) が送信され、APIリクエストの本文として渡されます。 |
status_code: 200 |
リクエストの成功を示す有効な数値のHTTP ステータスコード。ステータスコードのカンマ区切りリストにすることもできます。200は正常を意味します。これは、HTTPリクエストが成功した場合の標準的な応答です。 |
残りのパラメーターは、F5 BIG-IP への認証するためのもので、かなり簡単です。(すべての BIG-IP モジュールで共通)
Playbook を実行します - コントロールホストのコマンドラインに戻って次のコマンドを実行します。
[student1@ansible ~]$ ansible-playbook as3.yml
実行時の出力結果は次のようになります。
[student1@ansible ~]$ ansible-playbook as3.yml
PLAY [Linklight AS3] ***********************************************************
TASK [Create AS3 JSON Body] ****************************************************
ok: [f5]
TASK [Push AS3] ****************************************************************
ok: [f5]
PLAY RECAP *********************************************************************
f5 : ok=2 changed=0 unreachable=0 failed=0
Ansible Playbookが完了したら、Answer キーが提供されます。こちらをクリック! as3.yml.
Webブラウザーから F5 BIG-IP にログインして、設定が行われている事を確認しましょう。lab_inventory/hosts というインベントリファイルから F5 ロードバランサーのIP情報を取得してください。ブラウザーには「https://X.X.X.X:8443/」のような感じで HTTPS にて 8443 ポートにアクセスします。
Partition
のドロップダウンメニューを開き、WorkshopExample を選択します。serviceMain
を開きます。これで本演習は終わりです。演習ガイドへ戻る