演習 2.2 - モジュールの組み合わせを使用して適切なロールバックを実行する

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

目次

目的

BIG-IPで設定のロールバックを実行するためのさまざまなモジュールの使用方法を説明します。

解説

Step 1

テキストエディアで新しいファイル bigip-error-handling.yml を作成します。

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

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

Step 2

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

---
- name: BIG-IP SETUP
  hosts: lb
  connection: local
  gather_facts: false

Step 3

プロバイダ値を設定するために set_fact を含む tasks を追加します。

  tasks:
    - name: Setup provider
      set_fact:
        provider:
          server: "{{private_ip}}"
          user: "{{ansible_user}}"
          password: "{{ansible_password}}"
          server_port: 8443
          validate_certs: false

Step 4

次に、block 句とタスクを追加します。タスク演習 1.2 - F5 BIG-IPへノードを追加 で実行した bigip_node です。

    - name: SETUP AND GRACEFUL ROLLBACK BIG-IP CONFIGURATION
      block:
        - name: CREATE NODES
          f5networks.f5_modules.bigip_node:
            provider: "{{provider}}"
            host: "{{hostvars[item].ansible_host}}"
            name: "{{hostvars[item].inventory_hostname}}"
          loop: "{{ groups['web'] }}"

Step 5

次に、 演習 1.3 - プールの追加 で利用されたbigip_pool のタスクを追加します。

        - name: CREATE POOL
          f5networks.f5_modules.bigip_pool:
            provider: "{{provider}}"
            name: "http_pool"
            lb_method: "round-robin"
            monitors: "/Common/http"
            monitor_type: "and_list"

Step 6

次タスクでは 演習 1.4 - メンバーをプールへ追加 で説明した bigip_pool_member を使用します。

        - name: ADD POOL MEMBERS
          f5networks.f5_modules.bigip_pool_member:
            provider: "{{provider}}"
            state: "present"
            name: "{{hostvars[item].inventory_hostname}}"
            host: "{{hostvars[item].ansible_host}}"
            port: "80"
            pool: "http_pool"
          loop: "{{ groups['web'] }}"

Step 7

次に演習 1.5 - Virtual Server の追加で使用した bigip_virtual_server タスクを追加します。

        - name: ADD VIRTUAL SERVER
          f5networks.f5_modules.bigip_virtual_server:
            provider: "{{provider}}"
            name: "vip"
            destination: "{{private_ip}}"
            port: "443"
            enabled_vlans: "all"
            all_profiles: ['http', 'clientssl', 'oneconnect']
            pool: "http_pool"
            snat: "Automap1"

Step 7

次に、rescue 句を追加します。rescue 句に配置されるタスクは、 演習 2.1 - コンフィグの削除 と同じです。ノードとプールを削除するとすべての構成が削除されるため、bigip_pool_member タスクを再入力する必要はありません。block 内のいずれかのタスクが失敗すると、rescue が順番に実行されます。VIP、プール、およびノードは適切に削除されます。

      rescue:
        - name: DELETE VIRTUAL SERVER
          f5networks.f5_modules.bigip_virtual_server:
            provider: "{{provider}}"
            name: "vip"
            state: absent

        - name: DELETE POOL
          f5networks.f5_modules.bigip_pool:
            provider: "{{provider}}"
            name: "http_pool"
            state: absent

        - name: DELETE NODES
          f5networks.f5_modules.bigip_node:
            provider: "{{provider}}"
            name: "{{hostvars[item].inventory_hostname}}"
            state: absent
          loop: "{{ groups['web'] }}"

Step 8

最後に always を追加してrunning config を保存します。

      always:
        - name: SAVE RUNNING CONFIGURATION
          f5networks.f5_modules.bigip_config:
            provider: "{{provider}}"
            save: true

上記の Playbook では、仮想サーバー、プール、ノードの構成を試みますが、snat値が Automap1 として提供されているため、仮想サーバーの追加は失敗し、rescue が実行されます。

Step 9

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

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

Playbookの出力

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

PLAY [BIG-IP SETUP] ****************************************************************************************************

TASK [Setup provider] **************************************************************************************************
ok: [f5]

TASK [CREATE NODES] *****************************************************************************************************
changed: [f5] => (item=node1)
changed: [f5] => (item=node2)

TASK [CREATE POOL] *******************************************************************************************************
changed: [f5]

TASK [ADD POOL MEMBERS] **************************************************************************************************************************
changed: [f5] => (item=node1)
changed: [f5] => (item=node2)

TASK [ADD VIRTUAL SERVER] ***************************************************************************************************************************
fatal: [f5]: FAILED! => {"changed": false, "msg": "0107163f:3: Pool (/Common/Automap1) of type (snatpool) doesn't exist."}

TASK [DELETE VIRTUAL SERVER] **************************************************************************************************************************
ok: [f5]

TASK [DELETE POOL] **************************************************************************************************************************
changed: [f5]

TASK [DELETE NODES] **************************************************************************************************************************
changed: [f5] => (item=node1)
changed: [f5] => (item=node2)

TASK [SAVE RUNNING CONFIGURATION] ***************************************************************************************************************************
changed: [f5]

PLAY RECAP *****************************************************************************************************************
f5                         : ok=8    changed=6    unreachable=0    failed=0    skipped=0    rescued=1    ignored=0

解答

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

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