我有一个使用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 ,如果您不想通过允许传递Cloud Foundry登录详细信息和API端点来安装CF CLI,则建议这样做。 但是,我已经检查了文档,并且似乎该NPM模块不允许您创建服务。 这些文档显示您可以getService,getServicePlans,getServices或删除-没有创建选项。
最坏的情况是我可以通过SSH进入正在运行的应用程序并安装CF CLI,但为此,您需要无法进行root访问。
我的问题是-推送时是否可以在应用程序上安装CF CLI? 也许可以在推送应用程序时安装CF CLI的buildpack? 我已经检查了社区构建包的列表,但似乎不存在,我也不知道从哪里开始创建。 否则,是否有人会知道如何在不需要CF CLI的情况下从Node应用程序创建Cloud Foundry服务。
推送时是否可以在应用程序上安装CF CLI?
一种选择是简单地将cf cli与您的应用程序捆绑在一起。 这是一个静态二进制文件,因此很容易与您的应用程序捆绑在一起。 以下应该工作。
mkdir bin/
然后将二进制文件从步骤1移动到bin/
文件夹。 .profile
文件添加到应用程序的根目录。 在该文件中,放置export PATH=$PATH:$HOME/bin
,这会将步骤2中的bin/
目录放在PATH上(将bin
更改为您命名该文件夹的名称)。 现在cf push
您的应用程序。 这将包括二进制文件。 启动时, .profile
脚本将执行并将cf
二进制文件的路径放在PATH上。 因此,您可以在容器中运行cf ...
命令。
希望有帮助!