截止目前,UCloud已提供Python/Java/Golang等不同語言的API SDK。爲進一步降低用戶的運維人力投入,又推出了基於Golang SDK的命令行工具CLI(Command Line Interface),提供輕量化的API命令行調用方式,並在GitHub開源(https://github.com/ucloud/ucloud-cli)。CLI的命令行交互方式更符合研發運維的操作習慣,並且一些典型使用場景通過CLI也更容易代碼化的沉澱和維護。
下面是一些用戶遇到的實際場景, 用CLI都能更好地解決,在此總結並給出使用示例。
場景一:大批量創建和刪除主機
PingCAP作爲一家專業的分佈式數據庫供應商,使用UCloud時需要一次性批量創建300臺雲主機,進行分佈式業務測試。而UCloud控制檯一次最多允許創建10臺雲主機,因此需要用戶進行傻瓜式操作30次。但是,主機API實際可以支持最多1000臺併發創建。對於一次性API操作,花時間用SDK編寫創建腳本的投入產出比很低。此類場景PingCAP便是通過CLI解決。
該場景的示例命令如下:
$ ucloud uhost create —cpu 1 —memory-gb 2 —image-id uimage-xxx —password test123 —count 300
(圖:控制檯頁面主機創建一次性最多10臺併發)
場景二:集中化管理/清理資源,不易遺漏
用戶經常購買多種產品,每種的數量不一,部分應臨時需求而創建的資源,結束使用後常忘記及時刪除,因爲分佈零散不易管理,不知不覺中花了不少錢。如X.D. GLOBAL等用戶,則善於利用CLI快速創建並及時清理不用的資源。
示例命令如下:
$ ucloud uhost delete --uhost-id ucloud uhost list --uhost-id-only --page-off
(圖:控制檯零散的產品資源)
場景三:全球動態加速PathX實例大量端口管理
海外遊戲發行商爲了提高玩家體驗,經常使用UCloud全球動態加速服務PathX實現各地區玩家就近接入,有效規避跨國網絡擁塞導致的響應慢、丟包等問題。
某遊戲公司也使用了PathX,但其單條線路需要管理的端口數量超過60個。方法一,產品首先得在控制檯非標支持60個端口管理,然後用戶在頁面對所有端口逐一添加配置。方法二是架構師編寫腳本,用戶通過參數更新調整端口。不過,伴隨產品迭代、API調整,腳本的升級成爲一個問題,強依賴雙方配合。
(圖:控制檯PathX支持9個端口協議管理)
CLI通過沉澱這樣的場景,直接支持了PathX 多端口管理,示例代碼如下:# 給PathX指定的線路實例資源添加80個TCP端口
$ ucloud pathx uga add-port --uga-id uga-kjkxxx --protocol tcp --port 3000-3079,8080
場景四:頻繁批量切換EIP
某資訊行業用戶由於業務場景需要,會頻繁觸發其服務切換外網IP。投入研發人力以腳本實現該需求,已是行業內非常通用的做法。而使用UCloud CLI能以輕量的方式完成目標。
示例代碼如下:# 創建eip並綁定,然後解綁釋放之前已綁定的eip
$ ucloud ext uhost switch-eip --create-eip-bandwidth-mb 2 --uhost-id xxx --unband-all --release-all
(圖:控制檯先解綁再綁定新EIP)
UCloud CLI的便捷之處
1.多維度支持命令補全功能
在命令補全方面,通常每次發佈新版本都需要終端用戶再次生成補全腳本,功能侷限並且使用成本較高。因此,UCloud CLI擴展了spf13/cobra框架的功能(相關代碼已開源https://github.com/lixiaojun629/cobra),把命令補全功能集成到命令行工具內部,用戶只需要一次配置,日後版本升級都不必再重新生成補全腳本,使用方便。
補全功能包括:支持命令補全、命令參數補全、命令參數值靜態補全以及命令參數值動態補全等。針對命令參數值動態補全,爲了減少調用API次數、避免卡頓,UCloud CLI還添加了動態補全本地緩存特性。
命令參數值靜態補全以及命令參數值動態補全的代碼示例見下圖所示,其中參數line的可選值BGP和International是固定在代碼裏的靜態枚舉值,參數eip-id的可選值是由Tab鍵觸發的API請求得到的。
(圖:命令參數值靜態補全)
(圖:命令參數動態補全)
2.命令編寫更簡單高效
UCloud CLI批量操作資源時原生支持併發、UI多線程渲染等,相比開啓多進程執行命令行,佔用系統資源更少,而且命令編寫更加簡單,降低運維代碼成本。例如批量刪除主機命令:
#命令1
$ ucloud uhost list --uhost-id-only | xargs -P 32 -I {} ucloud uhost delete --yes --uhost-id {}
#命令2
$ ucloud uhost delete --uhost-id ucloud uhost list --uhost-id-only --page-off
很明顯命令2更加簡單,可以有效減少運維人員的代碼操作。
(圖:併發創建主機時,UI多線程渲染)
3.穩定可靠
由於UCloud CLI使用了spf13/cobra命令行開發框架,它也是Docker、Kubernetes和etcd等著名開源項目的CLI使用框架,久經考驗,穩定可靠。
4.豐富的產品支持
在產品支持方面,目前UCloud CLI已經支持主機、網絡、存儲和數據庫等常用雲產品服務,基本能夠滿足用戶大部分使用場景下的日常操作需求,支持產品列表見下圖所示:
(圖:CLI支持產品)
在Docker中運行UCloud CLI
在Docker中也可以快速地使用UCloud CLI,按下面的操作步驟示例,就可以體驗了。
1.首先安裝Docker,拉取我們爲你準備好的鏡像:uhub.service.ucloud.cn/ucloudcli/ucloud-cli:0.1.20
$ docker pull uhub.service.ucloud.cn/ucloudcli/ucloud-cli:0.1.20
此鏡像的構建腳本如下:
FROM ubuntu:18.04RUN apt-get update && apt-get install wget -yRUN wget https://github.com/ucloud/ucloud-cli/releases/download/0.1.20/ucloud-cli-linux-0.1.20-amd64.tgzRUN tar -zxf ucloud-cli-linux-0.1.20-amd64.tgz -C /usr/local/bin/RUN echo "complete -C $(which ucloud) ucloud" >> ~/.bashrc #配置自動補全
2.執行以下命令,以uhub.service.ucloud.cn/ucloudcli/ucloud-cli:0.1.20爲鏡像啓動一個容器,容器名字爲ucloud-cli:
$ docker run --name ucloud-cli -it -d uhub.service.ucloud.cn/ucloudcli/ucloud-cli:0.1.20
3.執行如下命令連接到容器ucloud-cli,連接成功後即可開始使用ucloud-cli,建議先執行ucloud init命令初始化配置。
$ docker exec -it ucloud-cli bash
總結
UCloud CLI的一個重要意義在於能夠將API、事務等有機組合,場景化支持用戶的需求,把耗費人力的資源管理以標準化形式呈現,給用戶提供便捷靈活的產品解決方案。未來,UCloud CLI也將在更多的使用場景下幫助運維者擺脫操作難題,歡迎大家點擊閱讀原文鏈接下載試用並提出反饋意見。(安裝使用指南:https://docs.ucloud.cn/software/cli/intro)。
巧用命令行工具UCloud CLI,輕量操作API管理雲資源
活動推薦:8月17日在上海原境界美術館,【UCan下午茶—雲原生Kubernetes的開發和運維】技術沙龍將邀請六位資深技術專家進行深入的技術探討和實踐案例分享。歡迎掃描下方二維碼報名參加!