a10.acos_axapiで情報取得する

はじめに

A10 ACOS向けのcollectionであるa10.acos_axapiを使って、vThunderから情報取得するPlaybookの一例です。

# ansible-galaxy collection list

# /root/.ansible/collections/ansible_collections
Collection     Version
-------------- -------
a10.acos_axapi 1.0.0  

SLB Server

a10_slb_servernameパラメータが必須です。get_type: listであれば、nameに存在しないSLB Server名を指定しても、存在するSLB Serverのリストを返してくれますが、保守性を考えると空文字等が望ましい気がします。

---
- hosts: vthunder
  connection: local
  gather_facts: no
  collections:
    - a10.acos_axapi
  tasks:
    - name: register real server
      a10_slb_server:
        name: ""
        state: noop
        get_type: list
      register: res_slb_server

    - name: debug res_slb_server
      debug:
        var: res_slb_server
# ansible-playbook -i inventory.ini slb_server.yml 

PLAY [vthunder] ******************************************************************************

TASK [register real server] ******************************************************************
ok: [vthunder]

TASK [debug res_slb_server] ******************************************************************
ok: [vthunder] => {
    "res_slb_server": {
        "changed": false,
        "failed": false,
        "message": "",
        "original_message": "",
        "result": {
            "server-list": [
                {
                    "a10-url": "/axapi/v3/slb/server/s1",
                    "action": "enable",
                    "conn-limit": 64000000,
                    "extended-stats": 0,
                    "host": "10.0.2.11",
                    "name": "s1",
                    "no-logging": 0,
                    "port-list": [
                        {
                            "a10-url": "/axapi/v3/slb/server/s1/port/80+tcp",
                            "action": "enable",
                            "conn-limit": 64000000,
                            "extended-stats": 0,
                            "no-logging": 0,
                            "no-ssl": 0,
                            "port-number": 80,
                            "protocol": "tcp",
                            "range": 0,
                            "stats-data-action": "stats-data-enable",
                            "support-http2": 0,
                            "template-port": "default",
                            "uuid": "****",
                            "weight": 1
                        }
                    ],
                    "slow-start": 0,
                    "spoofing-cache": 0,
                    "stats-data-action": "stats-data-enable",
                    "template-server": "default",
                    "uuid": "****",
                    "weight": 1
                },
                {
                    "a10-url": "/axapi/v3/slb/server/s2",
                    "action": "enable",
                    "conn-limit": 64000000,
                    "extended-stats": 0,
                    "host": "10.0.2.12",
                    "name": "s2",
                    "no-logging": 0,
                    "port-list": [
                        {
                            "a10-url": "/axapi/v3/slb/server/s2/port/80+tcp",
                            "action": "enable",
                            "conn-limit": 64000000,
                            "extended-stats": 0,
                            "no-logging": 0,
                            "no-ssl": 0,
                            "port-number": 80,
                            "protocol": "tcp",
                            "range": 0,
                            "stats-data-action": "stats-data-enable",
                            "support-http2": 0,
                            "template-port": "default",
                            "uuid": "****",
                            "weight": 1
                        }
                    ],
                    "slow-start": 0,
                    "spoofing-cache": 0,
                    "stats-data-action": "stats-data-enable",
                    "template-server": "default",
                    "uuid": "****",
                    "weight": 1
                }
            ]
        }
    }
}

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

VLAN

a10_network_vlanの場合はvlan_numが必須です。こちらの場合も、実在しないVLAN IDを指定しても動作し、存在するVLANの一覧を取得できます。ただし、上記のa10_slb_serverのようにvlan_num: ""と指定すると、vlan_numの値がint型を期待するため、エラーとなります。intフィルタを使うと、似たような形が実現できます。

---
- hosts: vthunder
  connection: local
  gather_facts: no
  collections:
    - a10.acos_axapi
  tasks:
    - name: register network vlan
      a10_network_vlan:
        vlan_num: "{{ '' | int }}"
        state: noop
        get_type: list
      register: res_network_vlan

    - name: debug res_network_vlan
      debug:
        var: res_network_vlan
# ansible-playbook -i inventory.ini network_vlan.yml 

PLAY [vthunder] ******************************************************************************

TASK [register network vlan] *****************************************************************
ok: [vthunder]

TASK [debug res_network_vlan] ****************************************************************
ok: [vthunder] => {
    "res_network_vlan": {
        "changed": false,
        "failed": false,
        "message": "",
        "original_message": "",
        "result": {
            "vlan-list": [
                {
                    "a10-url": "/axapi/v3/network/vlan/10",
                    "shared-vlan": 0,
                    "untagged-eth-list": [
                        {
                            "untagged-ethernet-end": 1,
                            "untagged-ethernet-start": 1
                        }
                    ],
                    "uuid": "****",
                    "ve": 10,
                    "vlan-num": 10
                },
                {
                    "a10-url": "/axapi/v3/network/vlan/20",
                    "shared-vlan": 0,
                    "untagged-eth-list": [
                        {
                            "untagged-ethernet-end": 2,
                            "untagged-ethernet-start": 2
                        }
                    ],
                    "uuid": "****",
                    "ve": 20,
                    "vlan-num": 20
                }
            ]
        }
    }
}

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

参考

galaxy.ansible.com