【发布时间】:2018-07-13 13:59:16
【问题描述】:
我希望绑定一个 PCF(Pivotal Cloud Foundry)服务,以允许我们在 PCF 环境中设置我们的 UI 使用的某些 api 端点。我想使用此服务中的值来覆盖根目录文件“config.json”中的值。有没有完成这种事情的例子?
【问题讨论】:
标签: node.js cloud-foundry
我希望绑定一个 PCF(Pivotal Cloud Foundry)服务,以允许我们在 PCF 环境中设置我们的 UI 使用的某些 api 端点。我想使用此服务中的值来覆盖根目录文件“config.json”中的值。有没有完成这种事情的例子?
【问题讨论】:
标签: node.js cloud-foundry
解决此问题的主要方法是让您的应用程序执行此解析。大多数(全部?)编程语言使您能够加载环境变量和解析 JSON。使用这些功能,您要做的是读取 VCAP_SERVICES 环境变量并解析 JSON。这是平台将从您的绑定服务中插入信息的地方。从那里,您可以获得配置信息,因此您可以使用绑定服务中的值配置您的应用程序。
手动示例:
var vcap_services = JSON.parse(process.env.VCAP_SERVICES)
或者您可以使用库。有一个方便的 Node.js 库,名为 cfenv。您可以在文档中阅读有关这两个选项的更多信息。
https://docs.cloudfoundry.org/buildpacks/node/node-service-bindings.html
如果您无法读取应用程序内部的配置,可能是时间问题,并且您需要在应用程序启动之前获取信息,您可以使用平台的运行前挂钩。
https://docs.cloudfoundry.org/devguide/deploy-apps/deploy-app.html#profile
运行时挂钩允许您的应用程序包含一个名为.profile 的文件,该文件将在您的应用程序之前执行。 .profile 文件是一个简单的 bash 脚本,它可以执行任何准备运行应用程序所需的操作。唯一需要注意的是,这需要非常迅速地发生,因为它必须在您的应用程序能够启动之前完成,并且您的应用程序有有限的启动时间(通常为 60 秒)。
在您的情况下,您可以使用 jq 解析您的值并将它们插入到您的配置文件中,也许使用 sed 覆盖模板值。另一种选择是运行一个小的 Node.js 脚本,因为您的应用程序正在使用 Node.js,所以它应该在该脚本运行时的路径上可用,以读取环境变量并生成您的配置文件。
希望有帮助!
【讨论】: