Python腳本讀取Consul配置信息的方法示例
先來說一下背景,為什麼要寫腳本去讀Consul的配置信息呢?Consul是啥呢?consul是google開源的一個使用go語言開發的服務發現、配置管理中心服務。目前公司用的是這個東西去管理項目上的一些配置信息。公司的環境是通過docker鏡像的方式去部署的,鏡像是通過rancher去進行管理的。這一套東西面臨的一個問題是:服務每次更新之後,服務對應的ip地址是動態變化的。每次需要使用swagger去測接口的時候,都要去rancher上去重新找新的ip地址,比較麻煩。正好呢,最近部門在考慮準備做接口自動化測試,到時候ip總是變的問題也是需要解決的,因此,就先寫個腳本調接口獲取配置信息,拿到某個服務的ip和端口信息。順帶的把swagger地址也打印出來,以後要訪問某個服務的swagger地址就方便很多瞭。
python讀取Consul配置信息的話,用到的是python-consul庫,在使用前,需要先安裝一下對應的插件。
pip install python-consul
封裝好的讀取consul配置的類如下:
以下腳本中定義的函數,暫時隻做數據打印,並未返回具體的數據,因為不同的consul地址,上面的配置信息其實還需要做處理,比如我這次主需要取出一些部署的服務的ip和端口信息,但是consul上面還有一些其他的配置信息,是可以過濾掉的。並且,有的配置項可能由於配置錯誤,會存在重復的配置,暫時沒有刪除,這種的話,後續可以在腳本中根據返回的相關字段,去取有效的配置信息。
import consul class RFConsul(object): def __init__(self, host, port): """初始化,連接consul服務器""" self._client = consul.Consul(host, port, scheme='http', verify=False) def getAllServices(self): services = self._client.agent.services() for i in services: service = services.get(i) print({service['Service']: service}) def getServiceByName(self, service_name): data = self._client.catalog.service(service_name) for value in data[1]: print(service_name + "服務的swagger地址: " + "http://" + value['ServiceAddress'] + ":" + str(value['ServicePort']) + "/swagger-ui.html")
getServiceByName:根據服務名,調用後,直接打印拼接好的swagger-ui的訪問地址。
getAllServices:打印某個consul地址下的所有配置信息。
調用方式:
host = "127.0.0.1" # consul服務器的ip port = "8500" # consul服務器對外的端口 consul_client = RFConsul(host, port) consul_client.getAllServices() res = consul_client.getServiceByName("xxx-servicename") # 輸入配置項的名稱
調用後,直接得到類似下圖的swagger訪問地址是不是很香:
然後,在公司中的話,像這種配置中心的地址一般都需要通過代理才能訪問,公司用的是socket5的代理,一般在調用腳本的時候要把代理軟件打開。也可以在腳本中添加socket代理的配置信息:
import socket import socks socks.set_default_proxy(socks.SOCKS5, "ip", port) socket.socket = socks.socksocket
到此這篇關於Python腳本讀取Consul配置信息的方法示例的文章就介紹到這瞭,更多相關Python讀取Consul配置信息內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python 使用 consul 做服務發現示例詳解
- .Net Core微服務網關Ocelot集成Consul
- .Net Core服務治理Consul健康檢查
- Consul的搭建和.Net5的註冊和獲取方法(Win10簡單版)
- windows下搭建Consul集群