我们在Pivotal Cloud Foundry(PCF(中托管了大量服务。通过脚本重新启动给定空间中所有微服务的最佳方式是什么?我们面临的另一个挑战是,我们希望按顺序启动服务,并在每次服务启动之间引入一些延迟。我们现在正在手动进行,但这既乏味又耗时。请建议我们是否可以将其自动化。
我建议您在powershell
或bash
中编写一个wrapper-script
,它将首先在您的空间中执行cf apps
以上命令将为您提供App Name
。阅读该文本并让包装脚本在循环中执行cf restart <APP_NAME>
这将重新启动您共享空间中的所有应用程序。。。
关于引入服务启动延迟。。我建议你有一个CI/CD
流程来部署你的应用程序(例如Jenkins流程(,通过它你可以完全控制你的部署
实现@Arun的建议:
for i in $(cf apps | grep '[0-9]/[0-9]' | cut -d" " -f1); do cf restart $i; done
要获得特定的顺序,您可以维护一个文本文件,其中包含按正确顺序排列的应用程序名称:
first_app
second_app
(...)
如果文件名为app_order.txt
,则要按顺序重新启动,每个延迟30秒,请执行:
while read i; do cf restart $i; sleep 30; done < app_order.txt
我们遇到了同样的问题,最终使用了下面这样的脚本来迭代所有组织中的所有应用程序并重新启动它们。它使用jq
和cf curl
api响应,希望比仅仅在cf apps
上迭代(可能会碰到空白等(更健壮一点。
#!/usr/bin/env bash
orgs=$(cf curl '/v2/organizations' | jq -r '.resources[].entity.name')
for org in $orgs; do
cf t -o "$org"
org_guid=$(cf org "$org" --guid)
spaces=$(cf curl /v2/organizations/"$org_guid"/spaces | jq -r '.resources[].entity.name')
for space in $spaces; do
cf t -s "$space"
space_guid=$(cf space "$space" --guid)
apps=$(cf curl "/v2/apps?q=space_guid:${space_guid}&results-per-page=100" | jq -r '.resources[].entity.name')
for app in $apps; do
cf rs "${app}"
done
done
done