演習 1.1 - Ansible による F5 BIG-IP の情報収集

Read this in other languages: uk English, japan 日本語.

目次

目的

BIG-IP Facts module を使って F5 BIG-IP 機器から情報を取得し、debug module でターミナルに情報を表示します。

解説

ホームディレクトリにいることを確認してください。

[student1@ansible f5-workshop]$ cd ~

Step 1:

テキストエディタを使って bigip-facts.yml ファイルを作成します。

[student1@ansible ~]$ nano bigip-facts.yml

vimnano がコントールノードで利用できます。もしくは RDP で接続して Visual Studio と Atom を利用することも可能です。

Step 2:

Ansible の playbook は YAML ファイルです。YAML は構造化されたエンコードで人にとって読みやすい形式です(JSON と違い・・・)

以下の play 定義を bigip-facts.yml に追加してください:

---
- name: GRAB F5 FACTS
  hosts: f5
  connection: local
  gather_facts: false

まだエディタを閉じないでください。

Step 3

次に最初の task を追加します。 このタスクでは device_facts モジュールを利用して BIG-IP から情報を取得します。

  tasks:
    - name: COLLECT BIG-IP FACTS
      f5networks.f5_modules.bigip_device_facts:
        gather_subset:
          - system-info
        provider:
          server: "{{private_ip}}"
          user: "{{ansible_user}}"
          password: "{{ansible_password}}"
          server_port: 8443
          validate_certs: false
      register: device_facts

play はタスクのリストです。タスクとリストは1:1の関係を持ちます。Ansible モジュールは再利用可能で、Ansible API、ansible ansible-playbook コマンドから利用できるスタンドアローンなスクリプトです。実行されたモジュールは Ansible に JSON 形式の文字列を返します。

Step 4

次に2つ目の task を追加します。 このタスクでは debug モジュールを使って、register された bigip_device_facts variable 変数の値を出力します。

    - name: DISPLAY COMPLETE BIG-IP SYSTEM INFORMATION
      debug:
        var: device_facts

ファイルを保存して、エディタを終了してください。

Step 5

Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください:

[student1@ansible ~]$ ansible-playbook bigip-facts.yml

出力は以下のようになります。

[student1@ansible ~]$ ansible-playbook bigip-facts.yml

PLAY [GRAB F5 FACTS] **********************************************************

TASK [COLLECT BIG-IP FACTS] ***************************************************
ok: [f5]

TASK [DISPLAY COMPLETE BIG-IP SYSTEM INFORMATION] *****************************
ok: [f5] =>
  device_facts:
    ansible_facts:
      discovered_interpreter_python: /usr/libexec/platform-python
    changed: false
    failed: false
    queried: true
    system_info:
      base_mac_address: 02:04:cc:f9:26:3c
      chassis_serial: dc9c21ec-8b80-ff90-87324c84c43b
      hardware_information:
      - model: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz
        name: cpus
        type: base-board
        versions:
        - name: cache size
          version: 30720 KB
        - name: cores
          version: 2  (physical:2)
        - name: cpu MHz
          version: '2400.052'
        - name: cpu sockets
          version: '1'
        - name: cpu stepping
          version: '2'
      marketing_name: BIG-IP Virtual Edition
      package_edition: Point Release 4
      package_version: Build 0.0.5 - Tue Jun 16 14:26:18 PDT 2020
      platform: Z100
      product_build: 0.0.5
      product_build_date: Tue Jun 16 14:26:18 PDT 2020
      product_built: 200616142618
      product_changelist: 3337209
      product_code: BIG-IP
      product_jobid: 1206494
      product_version: 13.1.3.4
      time:
        day: 19
        hour: 17
        minute: 11
        month: 10
        second: 2
        year: 2020
      uptime: 4465

PLAY RECAP ********************************************************************
f5                         : ok=2    changed=0    unreachable=0    failed=0

Step 6

最後に、2つのタスクを追加して取得したファクト情報から特定の情報を取得します。

    - name: DISPLAY ONLY THE MAC ADDRESS
      debug:
        var: device_facts['system_info']['base_mac_address']

    - name: DISPLAY ONLY THE VERSION
      debug:
        var: device_facts['system_info']['product_version']

bigip_device_facts モジュールは構造化されたデータを返すため、やっかいな正規表現やフィルターを使わずに必要な情報へと簡単にアクセスできます。Fact モジュールは後続のタスクに渡すデータを取得したり、動的なドキュメント作成(報告書, csv ファイル, markdown)するためにとても有益です。

Step 7

Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください:

[student1@ansible ~]$ ansible-playbook bigip-facts.yml

Playbookの出力

以下のような出力となるはずです。

[student1@ansible ~]$ ansible-playbook bigip-facts.yml

PLAY [GRAB F5 FACTS] **********************************************************

TASK [COLLECT BIG-IP FACTS] ***************************************************
ok: [f5]

TASK [DISPLAY COMPLETE BIG-IP SYSTEM INFORMATION] *****************************
ok: [f5] =>
  device_facts:
    ansible_facts:
      discovered_interpreter_python: /usr/libexec/platform-python
    changed: false
    failed: false
    queried: true
    system_info:
      base_mac_address: 02:04:cc:f9:26:3c
      chassis_serial: dc9c21ec-8b80-ff90-87324c84c43b
      hardware_information:
      - model: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz
        name: cpus
        type: base-board
        versions:
        - name: cache size
          version: 30720 KB
        - name: cores
          version: 2  (physical:2)
        - name: cpu MHz
          version: '2400.052'
        - name: cpu sockets
          version: '1'
        - name: cpu stepping
          version: '2'
      marketing_name: BIG-IP Virtual Edition
      package_edition: Point Release 4
      package_version: Build 0.0.5 - Tue Jun 16 14:26:18 PDT 2020
      platform: Z100
      product_build: 0.0.5
      product_build_date: Tue Jun 16 14:26:18 PDT 2020
      product_built: 200616142618
      product_changelist: 3337209
      product_code: BIG-IP
      product_jobid: 1206494
      product_version: 13.1.3.4
      time:
        day: 19
        hour: 17
        minute: 11
        month: 10
        second: 2
        year: 2020
      uptime: 4465

TASK [DISPLAY ONLY THE MAC ADDRESS] *******************************************
ok: [f5] =>
  "device_facts['system_info']['base_mac_address']": "0a:54:53:51:86:fc"

TASK [DISPLAY ONLY THE VERSION] ***********************************************
ok: [f5] =>
  "device_facts['system_info']['product_version']": "13.1.3.4"

PLAY RECAP ********************************************************************
f5                         : ok=4    changed=0    unreachable=0    failed=0

解答

完成したPlaybookのサンプルは bigip-facts.yml から参照できます。

より深く

オプション演習で tags: debug パラメーターを1つの debug タスクに追加してみましょう。

    - name: DISPLAY COMPLETE BIG-IP SYSTEM INFORMATION
      debug:
        var: device_facts
      tags: debug

--skip-tags=debug オプションをつけてコマンドを実行します。

[student1@ansible ~]$ ansible-playbook bigip-facts.yml --skip-tags=debug

DISPLAY COMPLETE BIG-IP SYSTEM INFORMATION タスクがスキップされ、3つのタスクの結果が表示されたはずです。

これで本演習は終わりです。演習ガイドへ戻る