弘协网络 | F5技术交流

API VS-Pool关系发现

2020-03-17 09:46:56

晏顺

    APIApplication Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。设备的API能力决定了能否快速与自动化平台、云管平台、以及Devops流水线实现快速的集成。

    本文将简单介绍F5 API的架构体系,图形化访问方式。最后会通过一段python代码的例子来展示通过API发现每个VSpool的对应关系。

    F5在早起版本支持基于SOAPAPI,从11.5版本开始支持Restful API。其主要的支持条目为:

 

IControl REST Resources

 

actions

analytics

apm

auth

cli

cm

gtm

ilx

ltm

net

pem

security

sys

task

transaction

util

vcmp

wam

wom

    

    通过API可以实现设备的配置、状态的收集、日志的查看等功能,完全可以实现在图形界面和命令行所实现的配置。宣告是接口AS3则提供了模版化部署的方式,该部分将在后续的文章中进行分析。

    初次接触API时可以考虑通过https://{{management ip}}/mgmt/toc访问设备,该路径下包括了API列表以及现有配置信息,可以通过图形界面进行增删改查的操作。

    通过自动化平台对接时,通常会使用脚本的方式访问设备APIF5在官方的github仓管中提供了sdk可以实现快速对接。同时也可以考虑通过requests模块以标准的HTTPS访问的方式实现对API的操作。

   以下代码通过requests模块和对json的处理实现了VS信息与pool对应关系的输出。原始代码位置:https://github.com/q2807c/f5-api-script  脚本的输出结果为:

 

VS名称 -------> VS IP端口 ---------------> pool名称 -------> pool members

vs_http ---> /Common/10.1.10.100:80 ---> /Common/pool-1 ---> ['/Common/10.1.20.1:80', '/Common/10.1.20.2:80']

vs_https ---> /Common/10.1.10.101:443 ---> /Common/pool-2 ---> ['/Common/10.1.20.3:443', '/Common/10.1.20.4:443']

 

import requests

import json

import getpass
from requests.auth import HTTPBasicAuth

#
输入设备管理地址和admin用户密码
bigip = input("Enter the BIGIP's managment IP:")
password = getpass.getpass("Enter the admin password:")

#
获取VS相关信息并进行格式化处理
url_vs = "https://{}/mgmt/tm/ltm/virtual".format(bigip)
headers = {"Content-Type": "application/json"}
requests.packages.urllib3.disable_warnings()
response = requests.get(url_vs, headers=headers, auth=HTTPBasicAuth('admin', '%s' % password), verify=False).json()
response_data = response.get('items')

print("VS
名称", "------->", "VS IP端口", "--------------->", "pool名称", "------->", "pool members")

#
循环获取每个VS以及对应pool的信息

for config in response_data:
    pool_lst = []
    vs = config['name']
    destination = config['destination']

    #
判断VS是否关联了pool

    if "pool" in config:
        pool = config['pool']
        #
循环获取pool member信息
        pool = repr(pool).replace('/', '~').strip('\'')  #
适配API格式,将/替换为~
        pool_url = "https://%s/mgmt/tm/ltm/pool/%s/members" % (bigip, pool)
        pool_response = requests.get(pool_url, headers=headers, auth=HTTPBasicAuth('admin', '%s' % password),
                                     verify=False).json()
        pool_response = pool_response.get('items')
        #
定义列表存放pool member信息
        for pool_member in pool_response:
            member = pool_member['fullPath']
            pool_lst.append(member)

        pool = repr(pool).replace('~', '/').strip('\'')  #
~替换回/

    else:
        pool = 'No_Pool_In_Configuration'


    print( vs, "--->", destination, "--->", pool, "--->", pool_lst)

 

发布评论 加入社群

发布评论

秦溱 2020-03-17 18:16:06 0

不错?

闫海波 2020-04-07 12:32:01 0

报道点赞

Will Tang 2021-01-19 12:29:33 0

不错!

相关文章

通过REST API获取连接表

Will Tang

2021-01-19 14:53:25 472

Ansible 部署/删除 nginx

晏顺

2020-04-06 19:56:17 404

Harbor部署和使用

晏顺

2020-03-26 20:18:52 650

Login

手机号
验证码
© 2019 F5 Networks, Inc. 版权所有。京ICP备16013763号-1