我有一个 Dev Ops 服务管道,我用它来使用 CloudFoundry 和 MongoDB 自动设置 MeteorJS 应用程序(实际上只是一个 NodeJS 应用程序)。
我在 Dev Opts 服务中有以下部署脚本:
```
#!/bin/bash
cf create-service compose-for-mongodb Standard mongodbbuzzy01
cf push "${CF_APP}" --no-start
mongourl=$(cf env ${CF_APP} | egrep -o 'mongodb://.*"' | rev | cut -c 2- | rev); cf set-env ${CF_APP} MONGO_URL $mongourl
cf restage "${CF_APP}"
```
这允许我从 中获取 mongourl VCAP_SERVICES
,然后将其设置为 MONGO_URL 环境变量(在 DevOps shell 命令中)
我也需要为ROOT_URL
Meteor 需要做同样的事情。我上次编写 sed/awk/grep 脚本已经过去了大约 20 年,我需要从cf env
文本中提取 Bluemix 应用程序的 URI (它是包含一些 JSON 的文本)。
结果cf env <appname>
是文本和 JSON 对象的混合(所以实际上只是文本)
Getting env variables for app buzzy7build in org Buzzy / space dev as [email protected]...
OK
System-Provided:
{
"VCAP_SERVICES": {
"compose-for-mongodb": [
{
"credentials": {
.... just curring out details
}
}
}
{
"VCAP_APPLICATION": {
"application_id": "<some app id>",
"application_name": "<app name>",
"application_uris": [
"<the uri I am trying to get>"
],
...
所以我需要一些帮助来提取<the uri I am trying to get>
使用 Bluemix shellscrip(确定这是 NodeJS,这很容易)
在 Bluemix shell 中没有jq
(我知道)所以只是sed,awk,grep
等等
任何帮助表示赞赏。
谢谢
做到这一点只有当你可以不使用
jq
解析JSON
awk '$0 ~ /application_uris/{getline n; gsub("\"|^[[:space:]]+","",n); print n}' file
<domain name>
在Awk
上面会工作只有当你JSON
的结构为
"application_uris": [
"<domain name>"
]
中使用的逻辑awk
是查找包含application_uris
的行,从匹配的行中getline n
获取下一行,获取下一行并存储在变量中n
。从接收到的行中,我们使用 删除"
和前导空格gsub()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句