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
