F5 api介面開發實戰(一)

肉餅子蒸蛋發表於2021-06-02

本人從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')

上述獲取到的bigipRestbigipSoap是一個可執行物件,對其進行各種操作即可控制此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的第三方庫對其進行了良好的封裝。封裝後的使用方法更容易理解和使用,將在後面幾篇文章中介紹。

相關文章