本人从18年下旬,开始从事F5负载均衡的自动化开发工作,主要使用python编程语言,开发的F5功能模块为LTM和GTM。

F5开发简介

1、F5管理模式

F5的管理模式主要有4种(不包含snmp),分别为web页面,tmsh命令行,restful api,以及soap api。这其中,web页面和tmsh命令行大多数F5管理员都用过,也是传统运维模式,而restful api和soap api需要开发第三方程序去调用,有一定使用门槛。这两者的区别为

  • soap api比较老,数据交换格式为http + xml。接口风格为soap,包含很多一次性拉取全部配置的接口,资源消耗量小,有些地方比rest实用。
  • restful api比较新,数据交换格式使用http + json。标准restful风格,调用结构清晰,但部分接口华而不实,资源消耗量大,甚至现网配置太多会出现接口调用失败。

本文档将大部分使用restful api进行介绍,对需要使用soap的部分也会做一定介绍。这两种api都有python已封装好的第三方库。

2、 关于F5版本和api支持情况

  • soap:支持v10以及以上所有版本,但v11与v10相比改动较大,其中改动部分soap可能会不支持。
  • rest:不支持v10,支持v11以上所有版本,v12和v11相比又有比较大的修改,导致部分功能v12和v11的接口形式有变化。

以上2种api都有F5官方资料,全英文,链接如下:https://clouddocs.f5.com/api/

3、 使用python的第三方库进行开发

可以使用python的requests包直接与F5进行交互,但F5有对接口进行封装的第三方库,可以避免重复造轮子。本人使用的python版本为3.7.5,restful的第三方库为f5-sdk,soap的第三方库为bigsuds。其中rest的封装库有文档,链接如下:https://f5-sdk.readthedocs.io/en/latest/。

基本使用方式为使用ip地址、用户名、密码进行认证,使用web页面登陆的用户名和密码。

安装第三方库:

pip install f5-sdk
pip install bigsuds

rest接口认证方式:

import f5.bigip
bigipRest = f5.bigip.ManagementRoot('192.168.1.45', 'admin', '123456')

soap认证方式:

import bigsuds
bigipSoap = bigsuds.BIGIP('192.168.1.45', 'admin', '123456')

上述获取到的bigipRest和bigipSoap是一个可执行对象,对其进行各种操作即可控制此F5。

4、 F5接口的rest风格简介

什么是rest风格?百度出来的结果是“表述性状态转移”,是一组架构约束条件和原则,一种接口风格和实现。F5上全部的rest设计原则可以写一大本厚厚的教材,因此在此我不做详细描述,只举例说几个常用的,不求大而全只求日常用到的能了解。

以下几个名词需要理解:

  • Resource:资源,可以理解为F5上的某个配置项,比如某个pool就是一个Resource,某个vs也是一个Resource。
  • Collection:集合,Collection是一组Resource的抽象展示,比如某台ltm上全部的pool就是一个Collection。
  • Subcollection:子集合,Subcollection是在某个Resource下的一种配置项,比如pool下面有members,那么某个pool下的所有members就是一组Subcollection。
  • Subcollection Resource:子资源,顾名思义,在Subcollection下的资源就是SR,比如某个pool下的某个member。
  • Organizing Collection:组织集合,这是最大的一层概念,简单理解的话,ltm就是一个OC,gtm又是一个OC,他是一组全部功能的总体实现。
  • Unnamed Resource:未命名资源,一般是F5上自带的资源项,不可以被删除或者新增,很少用到。

F5上对某个资源进行配置操作时,就是以上述名词的组合定位的,比如

http://192.168.1.1/mgmt/tm/ltm/pool/~Common~mypool/members/~Common~1.1.1.1:80
|----|--|---|----|--------------|-------|-------------|
|root|OC|OC |Coll| Resource | SC |SubColl Resrc|

比如上述url就代表了这台F5 192.168.1.1上的ltm(OC),在pool这个配置大类(Collection)中的这个/Common/mypool(Resource),下面的members中(Subcollection),存在一个/Common/1.1.1.1:80(Subcollection Resource)的配置。这时候通过http的方法(get、post、delete等),就可以对它进行查询/变更/删除等操作了。(Common前后使用~代替/的原因是因为url中用/代表路径分隔,因此只好用~替代了)

上面的表述结构虽然清晰,但还是有点复杂,python的第三方库对其进行了良好的封装。封装后的使用方法更容易理解和使用,将在后面几篇文章中介绍。

F5 api接口开发实战(一)的更多相关文章

  1. F5 api接口开发实战手册(二)

    F5 rest api 各对象使用方式详解 本篇文章介绍rest api接口下Collection.Resource.Subcollections.SubResource的各种使用方法.如果您不了解这 ...

  2. API接口开发 配置、实现、测试

    Yii2 基于RESTful架构的 advanced版API接口开发 配置.实现.测试 环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到 ...

  3. 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)

    做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...

  4. 示例浅谈PHP与手机APP开发,即API接口开发

    示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...

  5. 利用postman进行api接口开发

    场景: api接口开发时,经常使用一些工具来帮助设计开发.Yapi主要是在设计阶段进行api接口设计,统一前后端参数请求和返回体:swagger主要在开发阶段,用来显示实际上后端开发进度和接口情况:p ...

  6. Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)

    环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...

  7. 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载

    转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...

  8. 浅谈 PHP 与手机 APP 开发(API 接口开发)

    本文内容转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人一.先简单回答两个问题:1.PHP 可以开发客户端?答:不可以, ...

  9. Restful风格API接口开发springMVC篇

    Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机 ...

随机推荐

  1. Kickdown UVA - 1588

    A research laboratory of a world-leading automobile company has received an order to create a specia ...

  2. Manachar's Algorithm

    1.模板 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAX=21000020; 4 char s[MAX], ...

  3. B - Rikka with Graph HDU - 5631 (并查集+思维)

    As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...

  4. golang channel的行为

    1. 读nil的channel是永远阻塞的.关闭nil的channel会造成panic. 2. closed channel的行为: (1)向close的channel发消息会panic,关闭一个已经 ...

  5. Linux连接Windows服务器以及文件传输方法

    Ubantu系统上连接Windows服务器,操作步骤 安装rdesktop sudo apt-get install rdesktop 连接命令 rdesktop -f IP -r disk:mydi ...

  6. hdu4536 水搜索

    题意: XCOM Enemy Unknown Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others ...

  7. Android Dex分包之旅

    http://yydcdut.com/2016/03/20/split-dex/ http://blog.zongwu233.com/the-touble-of-multidex http://tec ...

  8. ListView 加载数据时 触摸报错

    问题起因: 在做一个从sd卡中加载数据显示在ListView中,由于数据可能比较多,考虑到用户体验,就使用AsyncTask来异步加载,数据一条一条的添加至ListView中. 开始数据比较少的时候, ...

  9. (8)MySQL进阶篇SQL优化(InnoDB锁-共享锁、排他锁与意向锁)

    1.锁的分类 锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制.之前MyISAM锁章节已经讲过锁分类,而InnoDB锁按照粒度分为锁定整个表的表级锁(table-level l ...

  10. JetBrains系列软件用法

    IDEA JSON格式化 IDEA的JSON_Formatter插件,下载地址 安装方式:File->Settings->Plugins,然后选择INstall plugin from d ...