50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

巧用命令行工具 UCloud CLI,轻量操作 API 管理云资源

  • 2019-11-10
  • 本文字数:2619 字

    阅读完需:约 9 分钟

巧用命令行工具UCloud CLI,轻量操作API管理云资源

截止目前,UCloud 已提供 Python/Java/Golang 等不同语言的 API SDK。为进一步降低用户的运维人力投入,又推出了基于 Golang SDK 的命令行工具 CLI(Command Line Interface),提供轻量化的 API 命令行调用方式,并在GitHub开源。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 也将在更多的使用场景下帮助运维者摆脱操作难题,欢迎大家点击阅读原文链接下载试用并提出反馈意见。


本文转载自公众号 UCloud 技术(ID:ucloud_tech)。


原文链接:


https://mp.weixin.qq.com/s/wSmbsMKZ-qVK1jajPWrsNQ


2019-11-10 23:30904

评论

发布
暂无评论
发现更多内容

Golang 中的整洁架构

baiyutang

架构 DDD Go 语言 9月日更

为什么 Golang 正在接管软件行业

云原生

云计算 Kubernetes 云原生 编程语言 Go 语言

聊聊Java运算符的那些事

Bob

Java 9月日更

代码工具:VSCode

正向成长

vscode

每个人都在谈数据治理,每个人都治理不好

奔向架构师

数据仓库 数据治理 9月日更

解决网卡“Device eth0 does not seem to be present, delaying initialization”

耳东@Erdong

9月日更 网卡

Vue进阶(幺零五):elementUI 实现表格行列拖拽

No Silver Bullet

Vue 9月日更

Python代码阅读(第26篇):将列表映射成字典

Felix

Python 编程 Code Programing 阅读代码

缓存核心知识小抄,面试必备,赶紧收藏!

博文视点Broadview

深入理解rtmp(一)之开发环境搭建

轻口味

android 音视频 直播 9月日更

Rust 从 0 到 1

rust

数字技术重构产业链供应链比较优势

CECBC

linux之type命令

入门小站

Linux

有个码龄 10 年的程序员跟我说:“他编程从来不用鼠标”,我说:

梦想橡皮擦

9月日更

【LeetCode】找到需要补充粉笔的学生编号Java题解

Albert

算法 LeetCode 9月日更

网络攻防学习笔记 Day131

穿过生命散发芬芳

网络安全 9月日更

【SpringCloud技术专题】「Eureka源码分析」从源码层面让你认识Eureka工作流程和运作机制(上)

码界西柚

源码分析 Eureka spring-cloud 9月日更

让Chrome爽到飞起的5款小众插件!

Jackpop

什么是可中断锁?有什么用?怎么实现?

王磊

9月日更

重放浏览器单个请求性能测试实践

FunTester

性能测试 接口测试 测试框架 测试开发 FunTester

新鲜出炉!腾讯3轮面试,拿53k*15offer全仰仗这份Java面试神技

Java 编程 架构 面试 程序人生

编程基础:硬件同步原语

正向成长

CAS 硬件同步原语 FAA

Jira API的踩坑记

FunTester

接口测试 API Jira FunTester 缺陷管理

Java从入门到升仙的书单推荐,附带读书笔记

Silently9527

Java书籍推荐 Java进阶书籍推荐 Mysql读书笔记

手撸二叉树之二叉树的所有路径

HelloWorld杰少

9月日更

全网最新最全面Java程序员面试清单(12专题5000解析)

Java 架构 面试 程序人生 程序

云南推进“区块链+数据中心”融合发展

CECBC

统一区块链应用接口,加速新场景落地

CECBC

MimeType文件格式速查表

入门小站

工具

15. 弱人工智能、强人工智能、超人工智能

Databri_AI

人工智能

【Flutter 专题】51图解动画小插曲之 Flare 动画

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

巧用命令行工具UCloud CLI,轻量操作API管理云资源_文化 & 方法_CLI团队_InfoQ精选文章