云助手命令支持自定义参数

简介: #背景 [云助手](https://help.aliyun.com/document_detail/64601.html?spm=a2c4g.11186623.3.3.b8401fe5L8CO6N)可以自动地、批量地执行日常维护命令。

背景

云助手可以自动地、批量地执行日常维护命令。通过云助手执行命令目前分为两步,首先创建一个命令,然后执行命令,对于SDK用户来讲,首先调用CreateCommand API,然后调用InvokeCommand API。命令的执行脚本在创建命令阶段设置,在执行命令阶段在ECS实例中执行该脚本。
由于命令的执行内容在创建命令时已经固定,所以如果要执行不同的脚本,哪怕只有细微的区别,都只能创建多条命令,命令无法复用。同时,由于云助手每个用户最多持有100条命令,反复创建命令很容易达到这个限额,用户需要先删除命令才能重新创建命令。

介绍

命令支持自定义参数功能可以有效缓解以上问题,命令可以一次创建,多种执行。创建命令时,在执行脚本中,为参数留出空间,在执行命令时,传入自定义参数的值,即可组合成不同的脚本,使用上非常灵活。
在创建命令时,以某种格式标识参数在脚本中的位置,具体来讲,用“{{}}”对参数进行包裹,花括号内即为参数的名字。在执行命令时,传入相应的参数值,即可产生一条新的命令。举个例子,在创建命令时,脚本设置为

echo {{name}}

在执行命令时,传入参数键值对

{"name":"Jack"}

则“Jack”会取代脚本中{{name}}的位置,形成新的脚本

echo Jack

并在实例中执行。
通过这种方式,用户可以通过合理的创建命令,传入不同的参数值,从而复用执行脚本,命令的维护成本大幅降低。

控制台使用

  • 创建命令时,在命令内容部分输入脚本,其中参数用“{{}}”标示,使用参数选择“是”,其余与创建一条普通云助手命令没有区别。
    20190517155814.jpg
  • 执行这条命令,并填入自定义参数的值,如果不填入,会以空字符串代替该参数。
    20190517160025.jpg
  • 以上例子的执行结果如下。
    20190517160048.jpg

SDK使用

以Java SDK为例展示命令支持自定义参数的使用方法。
通过CreateCommand创建命令

DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
    IAcsClient client = new DefaultAcsClient(profile);

CreateCommandRequest request = new CreateCommandRequest();
request.setEnableParameter(true);
//"echo {{name}}"的Base64编码
request.setCommandContent("ZWNobyB7e25hbWV9fQ==");
request.setType("RunShellScript");
request.setName("test_enable_parameter");

try {
    CreateCommandResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
    e.printStackTrace();
} catch (ClientException e) {
    System.out.println("ErrCode:" + e.getErrCode());
    System.out.println("ErrMsg:" + e.getErrMsg());
    System.out.println("RequestId:" + e.getRequestId());
}

返回如下

{
    "RequestId": "AF0EF4C9-21F9-4106-8A10-F8942318BB4B",
    "CommandId": "c-9554c9c281be469b82a56ace39cd6360"
}

再通过InvokeCommand执行该命令

DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
IAcsClient client = new DefaultAcsClient(profile);

InvokeCommandRequest request = new InvokeCommandRequest();
request.setCommandId("c-9554c9c281be469b82a56ace39cd6360");
List<String> instanceIdList = new ArrayList<String>();
instanceIdList.add("i-xxxx");
request.setInstanceIds(instanceIdList);
Map parameters = new HashMap();
parameters.put("name", "Jack");
request.setParameters(parameters);

try {
    InvokeCommandResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
    e.printStackTrace();
} catch (ClientException e) {
    System.out.println("ErrCode:" + e.getErrCode());
    System.out.println("ErrMsg:" + e.getErrMsg());
    System.out.println("RequestId:" + e.getRequestId());
}

通过以上步骤,在实例上执行的命令为

echo Jack

执行后通过DescribeInvocationResults可以看到output为Jack。

相关API

云助手命令支持自定义参数的对云助手的API产生如下变更:

  • CreateCommand 请求参数
名称 类型 是否必选 示例值 描述
CommandContent String ZWNobyAxMjM= 命令 Base64 编码后的内容。当您传入请求参数 Type 后,必须同时传入该参数。该参数的值必须使用 Base64 编码后传输,且脚本内容的大小在 Base64 编码之后不能超过 16 KB。如果带有参数,参数用{{}}包含的方式定义,参数个数为0~10个,参数名允许a-zA-Z0-9-_ 的组合,不允许出现其他符号,参数名最多支持64字节。参数名不区分大小写。在{{}}内参数名前后的空格,换行符将被忽略。
EnableParameter Boolean false 创建的命令是否携带自定义参数。默认值:false,表示不在命令中携带自定义参数。
  • InvokeCommand 请求参数
名称 类型 是否必选 示例值 描述
Parameters Map {"name":"Jack"} 执行命令时传入的自定义参数的键值对。参数个数的取值范围:0~10。Map的键不允许为空字符串,最多支持64个字符。Map的值允许为空字符串。与CommandContent组合完的命令在Base64编码后,不能超过16KB。

Parameters的类型为Map,在此感谢POP同学的支持。原有SDK不支持传递Map,用户需要自行将Map序列化为JSON字符串,传递参数为JSON字符串。POP支持传入Map类型的参数后,用户只需要向Map传递键值对,序列化的工作交由SDK完成。现在已经支持该功能的SDK的语言有Java和Go,其他语言目前还只能通过JSON字符串进行传递,将在六月初完全支持。

  • DescribeCommands 返回参数
名称 类型 示例值 描述
Commands 命令数据集类型(CommandSetType)
└ParameterNames List ["name","gender"] 通过CommandContent解析出的自定义参数名列表,以List的形式返回。
└EnableParameter Boolean false 该命令是否启用自定义参数。
  • DescribeInvocations 返回参数
名称 类型 示例值 描述
Invocations 命令执行记录集类(InvocationSetType)
└Parameters String {"name":"Jack"} 以Json字符串的形式,返回本次执行传入的自定义参数。如果该命令禁用了自定义参数功能,则返回空字符串。
└CommandContent String ZWNobyBKYWNr(echo Jack的Base64形式) 返回本次执行的脚本,如果启用了自定义参数,则是添加了自定义参数后的脚本

应用举例

当一个脚本中有一条命令需要进行文件复制,启用命令支持参数功能后,只需创建一条命令。

cp {{option}} {{source_file}} {{dest_dir}}

在执行命令时,传入参数

{"source_file":"Main.java","dest_dir":"/home"}

即可将Main.java复制到/home目录下。
在执行命令时,传入参数

{"option":"-r","source_file":"/home/dir1","dest_dir":"/home/dir2"}

即可进行目录的拷贝。
而对于以上两种场景,在不采用自定义参数功能时,需要进行两次命令创建

cp Main.java /home
cp -r /home/dir1/home/dir2

命令管理成本很高,使用上很不灵活。

总结

云助手命令支持自定义参数功能可以降低命令的管理成本,用户可以创建更少的命令,更加灵活的执行命令。

相关文章
|
6月前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
|
6月前
|
自然语言处理
如何快速调用官方预置应用-企业知识检索增强
阿里云百炼提供的企业知识检索问答应用可以帮助大家实现让大模型瞬间“开挂”的技能。结合上传的知识数据,大模型识别解析学习文档内容,最终给出生成式回复。我们在通义千问-Turbo/Max大模型基础上,将文件上传、读取、切片、向量化等过程都开发好预置在应用中,实现开箱即用,更能满足您的日常需求。
|
6月前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之API生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
|
3月前
|
监控 安全 人机交互
阿里云RPA有哪些功能?
【8月更文挑战第4天】阿里云RPA有哪些功能?
129 2
|
4月前
|
数据采集 DataWorks 监控
DataWorks产品使用合集之调度配置中的自定义参数如何设置季度初和周初
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
运维 Serverless 网络安全
Serverless 应用引擎产品使用合集之能否用一个顶层函数,在云端动态的增加函数脚本或删除脚本
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
存储 运维 Serverless
Serverless 应用引擎产品使用合集之部署SD界面没有看见NAS启用的选项,是什么原因
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
6月前
|
运维 JavaScript Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,Php环境,配置取消禁止函数exec如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
344 4
|
6月前
|
编解码 安全 对象存储
智能媒体管理文档转换的上限参数
【2月更文挑战第15天】 智能媒体管理文档转换的上限参数
64 8
|
6月前
|
运维 监控 Android开发
应用研发平台EMAS产品常见问题之用Aliyun-ThirdPush插件传自定义参数失败如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。