使用Python读取Excel将命令行命令批量运行
我们知道使用Alibaba Cloud CLI是可以列出信息甚至可以做修改。但是如果我有批量的修改需求,那么我怎么去做呢
以下命令行代码,其实没有意义,只是用于展示。读取Excel的VPC ID和VSwitchID然后将实例列出来。
你可以修改为例如根据InstanceID修改安全组,或者根据InstaceID修改Tag等各种实用功能
pandas.read_excel具体说明请参考pandas官方文档
示例:根据VPC ID和VSwitch ID找到实例ID (无意义)
1 | pip install pandas |
1 | import pandas as pd |
示例:加入资源组
将云盘批量加入资源组
1 | import pandas as pd |
加ECS到资源组
例如,如果我们修改以下cli_command和少部分代码,即可将大量ecs添加到对应的资源组内。建议额外在excel加rowid, 这样错误提示可以加上是哪一行报错。
1 | # 加ECS到资源组 |
加安全组到资源组
在已将ECS添加到资源组的情况下,因为安全组不会自动转组。所以需要人工转。而且有可能一个ECS存在多个安全组,而其中一个安全组是大安全组,不需要加资源组。所以需要人工干预,例如全部转组后再转回来。或者先在Excel筛选处理后再用python。
Step 1: 基于实例获得安全组及其资源组
Step 2: 获得安全组及对应的资源组并删除已有资源组的。
1 | aliyun ecs DescribeSecurityGroups --output cols="SecurityGroupName,SecurityGroupId,ResourceGroupId" rows="SecurityGroups.SecurityGroup[]" --pager |
Step 3: 根据实例获得的表格(Step 1) 做安全组的Excel表格处理:删除空格->替换空格为, ->删除,, ->将,作为分列符。使得一个实例,对应一列是一个安全组,额外一列是另一个安全组,最后一列是实例的资源组。
Step 4: 假设我们最多有3个安全组,也就是在分成3列。假设列数是C,D,E。我们通过xlookup与Step 2获得的安全组做对比,从而获得在该列中的安全组的实例资源组。通过对这3列做xlookup后,再做聚合。
Step 5: 因为xlookup会出现两种可能,一种是0,也就是该列未找到资源组。另一种是#N/A,也就是在完整的安全组该列中未找到改安全组。而如果找到了资源组则开头一定是rg-,所以我们Excel表达式如下:
1 | =IFERROR(IF(AND(ISNUMBER(SEARCH("rg-",C2)),NOT(ISERROR(C2)),C2<>0),C2,IF(AND(ISNUMBER(SEARCH("rg-",D2)),NOT(ISERROR(D2)),D2<>0),D2,IF(AND(ISNUMBER(SEARCH("rg-",E2)),NOT(ISERROR(E2)),E2<>0),E2,""))),"") |
这就是聚合后在安全组每个的资源组情况了。
Step 6, 替换python命令即可。
1 | aliyun ecs JoinResourceGroup --ResourceId {sg_id} --ResourceGroupId {resource_group_id} --ResourceType securitygroup |
关于resourcemanager API
我们这里使用的其实是ECS的加入资源组API, 但是可不可以用resourcemanger的API呢?
resourcemanager是中心化的,他的endpoint不是区域+aliyuncs。在默认情况下运行CLI是不可行的,也不可以region_id为空,所以需要额外指定endpoint。例如:
1 | aliyun resourcemanager ListResourceGroups --endpoint resourcemanager.aliyuncs.com |
- 标题: 使用Python读取Excel将命令行命令批量运行
- 作者: 暗香疏影
- 创建于 : 2024-05-08 14:24:00
- 更新于 : 2024-05-14 10:26:00
- 链接: https://blog.23ikr.com/2024/05/08/2024-05-08-Using-Python-Excel-batch-run-Commandline/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。