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

截止目前,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)。

活动推荐:8月17日在上海原境界美术馆,【UCan下午茶—云原生Kubernetes的开发和运维】技术沙龙将邀请六位资深技术专家进行深入的技术探讨和实践案例分享。欢迎扫描下方二维码报名参加!

原文地址:https://blog.51cto.com/13832960/2430223

时间: 2024-08-28 00:46:25

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

Apache Kafka系列(二) 命令行工具(CLI)

Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka命令行工具(Command Line Interface,CLI),下文简称CLI. 1. 启动Kafka 启动Kafka需要两步: 1.1. 启动ZooKeeper [[email protected] kafka_2.12-0.11.0.0]# bin/zookeeper-server-start.sh config/zookeeper.properties 1.2.

Vue命令行工具(CLI)使用

前言 Vue命令行工具(CLI),快速搭建大型单页应用,今天试了试手,列在这里: 一.搭建项目步骤 根据这里提供的命令行,一步步进行操作,每行是一条单个命令,依次执行 # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack myding-project # 安装依赖,走你 $ cd myding-project $ npm install $ npm run dev 二.项目

使用命令行工具对LSI阵列卡进行高效管理

LSI公司(LSI Corporation)(NASDAQ:LSI)(中文:艾萨华)是一家总部位于加利福尼亚州米尔皮塔斯 (Milpitas) 的半导体和软件领先供应商,其主要产品包括:RAID控制器.SSD控制器.ReadChannel.Preamp.Axxia网络处理器和定制ASIC等,为加速数据存储中心与移动网络性能提供了许多领先的解决方案. 在目前各大知名品牌服务器厂商:IBM.DELL.HP.华为.联想.宝德.浪潮.中科曙光等服务器都使用LSI品牌的阵列卡作为服务器存储控制器,而且其性

Apache Commons CLI 开发命令行工具示例

概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提供了详尽的使用手册,有些还提供示例说明如何二次开发.然而关于如何开发一个易用.强壮的命令行工具的文章却很少.本文将结合 Apache Commons CLI,通过一个完整的例子展示如何准备.开发.测试一个命令行工具.希望本文对有相关需求的读者能有所帮助.      Apache Commons CL

解读keystone命令行工具(1)(更新中)

本文档介绍icehouse发行版keystone命令 keystone客户端命令行提供用于和keystone服务器交互的方便工具,但是该命令行工具逐渐受到社区的摒弃: “Pending deprecation: Command-line interface to the OpenStack Identity API. This CLI is pending deprecation in favor of python-openstackclient. For a Python library,

JBoss7应用服务器的命令行工具

本文讲述怎样通过JBoss AS的命令行接口连接到服务器.从JBossAS7版开始,引入了一个名为CLI的新工具,它位于%JBOSS_HOME%\bin目录.进入%JBOSS_HOME%\bin目录,查看jboss-cli.bat脚本文件是否存在.在执行此脚本前,需要先运行JBoss服务器.启动JBoss应用服务器: > %JBOSS_HOME%\bin\standalone.bat CLI命令行脚本执行如下: > %JBOSS_HOME%\bin\jboss-cli.bat You are

跨平台框架Cordova 命令行简介(CLI)

这一节,我们将看到如何通过Cordova命令行(CLI)创建新的项目,针对不同平台进行编译,并利用仿真器或真实设备进行测试.CLI是跨平台工作方式的主要工具. 当然,你也可以利用CLI进行一些项目的初始化工作,比如创建初始代码等等.稍后,你就可以针对不同平台提供的SDK进行持续开发. 以下我们以Windows下Android应用开发为例. 前提条件 1) JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.

开发命令行工具的 12 个最佳实践

简评:设计良好的命令行应用是极富生产力的工具,本文介绍了开发命令行工具的 12 个最佳实践 CLI 是构建产品的绝佳方式,与 Web 应用不同的是它需要的时间更少,并且功能更强大.使用Web,你可以执行开发人员编写的任何操作,使用 CLI,你可以轻松地将多个工具混合在一起以执行更加高级的任务,而这需要更多的专业知识才能使用,但仍然适用于管理任务.高级用户任务或开发人员产品. 在 Heroku,我们提出了一种称为 「12-factor app」 的方法,这是一套旨在制作易于维护的优秀 Web 应用

Node.js 命令行工具的编写

日常开发中,编写 Node.js 命令行工具来完成一些小任务是很常见的操作.其编写也不难,和日常编写 Node.js 代码并无二致. package.json 中的 bin 字段 一个 npm 模块,如果在 package.json 中指定了 bin 字段,那说明该模块提供了可在命令行执行的命令,这些命令就是在 bin 字段中指定的. package.json { "bin": { "myapp": "./cli.js" } } 程序安装后会可在