从托管的 Cloud Foundry 应用程序创建 Cloud Foundry 服务

Create a Cloud Foundry Service from a hosted Cloud Foundry application

我有一个使用 Swisscom 托管的 Cloud Foundry 应用程序。我要求该应用程序的功能之一是用户可以设置 Cloud Foundry 服务——特别是 Swisscom Secrets-Store 服务。然而,事实证明这是一个挑战。

首先,我使用 cloudfoundry-cli NPM 模块从我的应用程序创建服务,就像提供的示例一样:

const cf = require('cloudfoundry-cli')
cf.provisionService({
  name: 'mongoNo1',
  type: 'compose-for-mongodb',
  plan: 'Standard'
}, function(err) {
  if (err) return console.log(err)
  console.log('Service provisioned')
})

当我在本地 运行 我的应用程序时,这工作正常,因为显然我的计算机上安装了 CF CLI。但是,当我将应用程序推送到 Swisscom 并尝试创建服务时,没有任何反应,因为应用程序上没有安装 CF CLI。

我还查看了 cf-nodejs-client which is suggested if you don't want to install the CF CLI by allowing you to pass your Cloud Foundry login details and API endpoint. However, I've checked the docs and it seems this NPM module doesn't allow you to create services. The documents 显示您可以获取服务、获取服务计划、获取服务或删除 - 没有创建选项。

最坏的情况我认为我可以通过 SSH 进入 运行 应用程序并安装 CF CLI,但为此你需要 root 访问权限,这是不可能的。

我的问题是 - 是否可以在推送时在应用程序上安装 CF CLI?也许是一个可以在推送应用程序时安装 CF CLI 的构建包?我已经检查了社区构建包列表,这似乎不存在,我不知道从哪里开始创建一个。否则,有谁知道如何在不需要 CF CLI 的情况下从 Node 应用程序创建 Cloud Foundry 服务。

Is it possible to install the CF CLI on the application when it is being pushed?

一种选择是简单地将 cf cli 与您的应用程序捆绑在一起。它是一个静态二进制文件,因此很容易与您的应用程序捆绑在一起。以下应该有效。

  1. here 下载 Linux 的 cf cli 并解压缩。
  2. 将其放入应用程序根目录下的文件夹中。例如:mkdir bin/ 然后将您的二进制文件从步骤 #1 移动到 bin/ 文件夹。
  3. .profile 文件添加到应用程序的根目录。在该文件中,放入 export PATH=$PATH:$HOME/bin,这会将步骤 #2 中的 bin/ 目录放入 PATH(将 bin 更改为您命名该文件夹的任何名称)。

现在 cf push 您的应用。这将包括二进制文件。当它启动时,.profile 脚本将执行并将 cf 二进制文件的路径放在 PATH 上。因此,您可以 运行 cf ... 在您的容器中执行命令。

希望对您有所帮助!