我需要对我的 gcloud 命令进行哪些修改才能以下面的表格格式获取所有 GCP 项目中已启用服务的列表?
What modifications do I need to make to my gcloud command to get the list of enabled services in all GCP projects in the below tabular format?
我有以下代码块来枚举所有 GCP 项目中启用的服务:
for project in $(gcloud projects list --format="value(projectId)"); \
do gcloud services list --project $project --format="table[box]($project,config.name,config.title)"; \
done;
它以这种格式给我输出:
但我希望输出采用这种格式:
我该如何做到这一点?请指教。谢谢
您不能使用 gcloud
,因为您需要 assemble 来自多个命令的值:Projects.List 和 Services.List。 gcloud --format
仅适用于单个命令的输出。
您正在获取所需的所有数据(项目、名称和职务)。推荐大家使用bash和gcloud
输出的字符组成table,自己合成table输出
更新
这是一个脚本,可以为您提供与您的行相匹配的 CSV 输出:
PROJECTS=$(\
gcloud projects list \
--format="value(projectId)")
for PROJECT in ${PROJECTS}
do
CONFIGS=$(gcloud services list \
--project=${PROJECT} \
--format="csv[no-heading](config.name,config.title.encode(base64))")
for CONFIG in ${CONFIGS}
do
IFS=, read NAME TITLE <<< ${CONFIG}
TITLE=$(echo ${TITLE} | base64 --decode)
echo "${PROJECT},${NAME},\"${TITLE}\""
done
done
NOTE encode(base64)
to avoid the unquote title
values from being split. base64 --decode
reverses this at output. It should be possible to use format
but I don't understand the syntax. --format='csv[no-heading](config.name,format("\"{0}\"",config.title))'
didn't work.
然后,按照最好的 *nix 传统,您可以将该输出通过管道传输到 awk 或列或其他将 CSV 格式化为漂亮打印的脚本 table。这是更困难的挑战,因为您需要确定每个字段中的最长值以便正确布局。我会把它留给你。
我有以下代码块来枚举所有 GCP 项目中启用的服务:
for project in $(gcloud projects list --format="value(projectId)"); \
do gcloud services list --project $project --format="table[box]($project,config.name,config.title)"; \
done;
它以这种格式给我输出:
但我希望输出采用这种格式:
我该如何做到这一点?请指教。谢谢
您不能使用 gcloud
,因为您需要 assemble 来自多个命令的值:Projects.List 和 Services.List。 gcloud --format
仅适用于单个命令的输出。
您正在获取所需的所有数据(项目、名称和职务)。推荐大家使用bash和gcloud
输出的字符组成table,自己合成table输出
更新
这是一个脚本,可以为您提供与您的行相匹配的 CSV 输出:
PROJECTS=$(\
gcloud projects list \
--format="value(projectId)")
for PROJECT in ${PROJECTS}
do
CONFIGS=$(gcloud services list \
--project=${PROJECT} \
--format="csv[no-heading](config.name,config.title.encode(base64))")
for CONFIG in ${CONFIGS}
do
IFS=, read NAME TITLE <<< ${CONFIG}
TITLE=$(echo ${TITLE} | base64 --decode)
echo "${PROJECT},${NAME},\"${TITLE}\""
done
done
NOTE
encode(base64)
to avoid the unquotetitle
values from being split.base64 --decode
reverses this at output. It should be possible to useformat
but I don't understand the syntax.--format='csv[no-heading](config.name,format("\"{0}\"",config.title))'
didn't work.
然后,按照最好的 *nix 传统,您可以将该输出通过管道传输到 awk 或列或其他将 CSV 格式化为漂亮打印的脚本 table。这是更困难的挑战,因为您需要确定每个字段中的最长值以便正确布局。我会把它留给你。