我需要创建一个从Google Cloud Platform中删除实例组的脚本。该组可以在任何区域。当我运行命令时:
gcloud compute instance-groups managed delete [instance-group-name]
(无区域或区域(我被提示选择一个区域或区域。这样的脚本有任何帮助吗?
放置 - Zone标志并将其指定在命令中,显然会阻止该区域的提示。但是,如果每个实例组的区域不同,并且您想自动化此过程,则可以在列出您的实例组的脚本中添加一些命令(输出将包括该区域(,然后过滤输出以创建一个变量其中包含区域信息。然后可以在您的gcloud compute instance-groups managed delete
命令中使用此变量。
例如,要隔离要删除实例组的区域,您可以尝试这样的尝试。
gcloud compute instance-groups list | grep INSTANCE_GROUP_NAME | awk '{print $2;}'
上面的命令首先使用GREP来过滤一条信息线,其中包含要删除的实例组的详细信息,因此在应用尴尬之前,信息如下:
test-instance-group us-west1-c zone default Yes 1
awk '{print $2;}'
过滤器打印出第二个非Whitespace子字符串,这将是区域,因此输出以下内容:
us-west1-c
因此,就脚本而言,在执行命令以删除实例组之前,您需要为该实例组区域设置变量。总而言之,这是您的脚本外观:
#!/bin/bash
### retrieve the zone information of the instance group and store it in a variable.
zonevar="$(gcloud compute instance-groups list | grep INSTANCE_GROUP_NAME | awk '{print $2;}')"
### use the variable in the gcloud command to delete the instance group.
gcloud compute instance-groups managed delete INSTANCE_GROUP_NAME --zone=$zonevar
如果您想应用区域信息而不是区域信息,则可以应用相同的逻辑。
您可以利用 - 格式概括脚本并避免切片& amp; dice管道。特定于Commmand Line的格式还可以证明您与不属于CLI合同的一部分的表格格式更改。该脚本还处理区域/区域位置。
#!/bin/bash
typeset -A locationsof
function getlocations {
set -- $(gcloud compute instance-groups list
--format="value(name,location(),location_scope())")
while (( $# >= 3 ))
do
locationsof[$1]+=" --$3=$2"
shift 3
done
}
getlocations
for name
do
if [[ $name == -n || $name == --show ]]; then
show=echo
continue
fi
locations=${locationsof[$name]}
if [[ ! $locations ]]; then
echo "$name: unknown instance group" >&2
continue
fi
for location in $locations
do
$show gcloud compute instance-groups managed delete $name $location
done
done
用 -n 或测试脚本 - 在真正删除任何内容之前,请显示。使用 - verbosity = info 运行任何列表命令,以查看默认输出格式。这就是的方式 - 格式咒语。