Ansible操作例 – BIG-IPへの接続方法の説明

スポンサーリンク

AnsibleでGBI-IPへ接続する方法を説明します。Ansibleでネットワーク機器を操作する場合は「network_cli」と呼ばれる接続方法を使用する事が多いですが、例外敵にBIG-IPのような内部的にAPIで操作するような機器は「local」と呼ばれる接続方法を使用します。

疎通確認

BIG-IPへ接続可能である事を確認します。動作確認用途として以下のようなプレイブックを作成します。BIG-IPへ接続する時に使用する認証情報は、GUI接続する時のユーザ名とパスワードを指定ください。

BIG-IPへ接続する時の最大の特徴は、一度、localhost宛へ接続する事です。

cat << EOF > bigip_show_sys_version.yml
- hosts: localhost
  gather_facts: no

  tasks:
    - name: run show sys version
      bigip_command:
        commands: show sys version
        provider:
          server: 192.168.1.161
          password: admin
          user: admin
          validate_certs: no
      register: result

    - name: display show sys version
      debug:
        var: result['stdout']
EOF

疎通可能である事を確認するため、実行結果が「OK」となる事を確認します。

# ansible-playbook bigip_show_sys_version.yml 
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [localhost] ***************************************************************

TASK [run show sys version] ****************************************************
ok: [localhost]

TASK [display show sys version] ************************************************
ok: [localhost] => {
    "result['stdout']": [
        "Sys::Version\nMain Package\n  Product     BIG-IP\n  Version     16.0.0\n  Build       0.0.12\n  Edition     Final\n  Date        Tue Jun 23 18:31:26 PDT 2020"
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ローカルコネクションの利用

前述の方法ではBIG-IPを1台しか操作できません。Active/Standby構成のBIG-IPが1組のような環境では上記のような運用でも困る事はありません。もし、複数組のBIG-IPを運用するような状況ならば、local connectionやdelegate_to localhostを上手に併用すると、見通しの良い記述ができます。

local connection

connectionモジュールとして「local」を指定するインベントリファイルを作成します。

cat << EOF > inventory.ini
[bigip:vars]
ansible_user = 'admin'
ansible_password = 'admin'
ansible_connection = 'local'

[bigip]
bigip161 ansible_host=192.168.1.161
bigip162 ansible_host=192.168.1.162
EOF

プレイブックは以下のように記述します。

cat << EOF > bigip_show_sys_version.yml
- hosts: bigip
  gather_facts: no

  tasks:
    - name: run show sys version
      bigip_command:
        commands: show sys version
        provider:
          server: "{{ ansible_host }}"
          password: "{{ ansible_password }}"
          user: "{{ ansible_user }}"
          validate_certs: no
      register: result

    - name: display show sys version
      debug:
        var: result['stdout']
EOF

実行結果は以下の通りです。

# ansible-playbook -i inventory.ini bigip_show_sys_version.yml 

PLAY [bigip] *******************************************************************

TASK [run show sys version] ****************************************************
ok: [bigip161]
ok: [bigip162]

TASK [display show sys version] ************************************************
ok: [bigip161] => {
    "result['stdout']": [
        "Sys::Version\nMain Package\n  Product     BIG-IP\n  Version     16.0.0\n  Build       0.0.12\n  Edition     Final\n  Date        Tue Jun 23 18:31:26 PDT 2020"
    ]
}
ok: [bigip162] => {
    "result['stdout']": [
        "Sys::Version\nMain Package\n  Product     BIG-IP\n  Version     16.0.0\n  Build       0.0.12\n  Edition     Final\n  Date        Tue Jun 23 18:31:26 PDT 2020"
    ]
}

PLAY RECAP *********************************************************************
bigip161                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
bigip162                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

delegate_to localhost

connection localを使う代わりにdelegate_to localhost(ローカルホストに処理を委任する)を使う方法もあります。動作確認のため、connection localをコメントアウトします。

cat << EOF > inventory.ini
[bigip:vars]
ansible_user = 'admin'
ansible_password = 'admin'
#ansible_connection = 'local'

[bigip]
bigip161 ansible_host=192.168.1.161
bigip162 ansible_host=192.168.1.162
EOF

connection localの代わりに”delegate_to: localhost”を指定します。この指定があるタスクはローカルホストで実行されるようになります。

cat << EOF > bigip_show_sys_version.yml
- hosts: bigip
  gather_facts: no

  tasks:
    - name: run show sys version
      bigip_command:
        commands: show sys version
        provider:
          server: "{{ ansible_host }}"
          password: "{{ ansible_password }}"
          user: "{{ ansible_user }}"
          validate_certs: no
      delegate_to: localhost
      register: result

    - name: display show sys version
      debug:
        var: result['stdout']
EOF

実行結果は以下の通りです。

# ansible-playbook -i inventory.ini bigip_show_sys_version.yml 

PLAY [bigip] *******************************************************************

TASK [run show sys version] ****************************************************
ok: [bigip161]
ok: [bigip162]

TASK [display show sys version] ************************************************
ok: [bigip161] => {
    "result['stdout']": [
        "Sys::Version\nMain Package\n  Product     BIG-IP\n  Version     16.0.0\n  Build       0.0.12\n  Edition     Final\n  Date        Tue Jun 23 18:31:26 PDT 2020"
    ]
}
ok: [bigip162] => {
    "result['stdout']": [
        "Sys::Version\nMain Package\n  Product     BIG-IP\n  Version     16.0.0\n  Build       0.0.12\n  Edition     Final\n  Date        Tue Jun 23 18:31:26 PDT 2020"
    ]
}

PLAY RECAP *********************************************************************
bigip161                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
bigip162                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
タイトルとURLをコピーしました