【问题标题】:How do I get the 'application_uris' From a Bluemix Cloudfoundry App in shell script?如何在 shell 脚本中从 Bluemix Cloud Foundry 应用程序获取“应用程序 url”?
【发布时间】:2017-03-19 13:51:56
【问题描述】:

我有一个 Dev Ops Services Pipeline,用于使用 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}"
```

这允许我从 VCAP_SERVICES 获取 mongourl,然后将其设置为 MONGO_URL 环境变量(在 DevOps shell 命令中)

我需要为 Meteor 也需要的 ROOT_URL 做同样的事情。距离上一个 sed/awk/grep 脚本已经过去了大约 20 年,我需要从 cf env 文本(包含一些 JSON 的文本)中提取 Bluemix 应用程序的 URI。

cf env <appname> 的结果是文本和 JSON 对象的混合(实际上只是文本)

Getting env variables for app buzzy7build in org Buzzy / space dev as adam.ginsburg@buzzy.buzz...
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>"
  ],
...

所以我需要一些帮助来使用 Bluemix shellscrip 提取 &lt;the uri I am trying to get&gt;(确定这是否是 NodeJS,这很容易)

在 Bluemix shell 中没有 jq(我知道)所以只有 sed,awk,grep

任何帮助表示赞赏。

谢谢

【问题讨论】:

  • 您能否提供完整的JSON,您的实际输出的示例?然后很容易测试命令。
  • 不清楚你在第36行"application_uris"或第48行"uris": [之后是哪一个
  • 我认为它们都是一样的,所以要么
  • @Inian 非常感谢,非常感谢

标签: bash shell awk sed ibm-cloud


【解决方案1】:

只有当你可以使用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() 的前导空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多