API VS-Pool关系发现
2020-03-17 09:46:56
晏顺
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。设备的API能力决定了能否快速与自动化平台、云管平台、以及Devops流水线实现快速的集成。
本文将简单介绍F5 API的架构体系,图形化访问方式。最后会通过一段python代码的例子来展示通过API发现每个VS和pool的对应关系。
F5在早起版本支持基于SOAP的API,从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列表以及现有配置信息,可以通过图形界面进行增删改查的操作。
通过自动化平台对接时,通常会使用脚本的方式访问设备API。F5在官方的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 982

Ansible 部署/删除 nginx
晏顺
2020-04-06 19:56:17 669

Harbor部署和使用
晏顺
2020-03-26 20:18:52 1403

回复评论
发布评论