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