CF连接到云控制器
CF Connect to the cloud controller
我使用以下库连接到云控制器
https://github.com/prosociallearnEU/cf-nodejs-client
const endpoint = "https://api.mycompany.com/";
const username = "myuser";
const password = "mypass";
const CloudController = new (require("cf-client")).CloudController(endpoint);
const UsersUAA = new (require("cf-client")).UsersUAA;
const Apps = new (require("cf-client")).Apps(endpoint);
CloudController.getInfo().then((result) => {
UsersUAA.setEndPoint(result.authorization_endpoint);
return UsersUAA.login(username, password);
}).then((result) => {
Apps.setToken(result);
return Apps.getApps();
}).then((result) => {
console.log(result);
}).catch((reason) => {
console.error("Error: " + reason);
});
我尝试 运行 它反对我们的 API 但它不起作用,我在控制台中没有收到任何错误消息,它可能是什么?
这里 space/org 在哪里处理?因为当我从 cli 连接时,它会问我要连接到哪个 space/org...
我能够通过 CLI 登录,只是从 代码我不能,知道这里缺少什么吗?
当我 运行 问题时,我没有收到任何有助于理解根本原因的错误
在图书馆的 github 网站上,首先让我印象深刻的是警告:
Note: This package is not ready for a production App yet.
该项目似乎也没有得到维护,因为有很多已经几个月大的票没有得到回应。
无论如何,要弄清楚为什么库不工作并且不产生错误消息,我会检查库源代码并添加一些控制台日志记录语句,可能从 HttpUtils 开始。例如:
requestWithDefaults(options, function (error, response, body) {
console.log("requestWithDefaults error: ", error)
console.log("requestWithDefaults response: ", response)
console.log("requestWithDefaults body: ", body)
...
}
或者,您可以尝试使用 nodejs debugger.
通过在库中的 requestWithDefaults 和其他关键位置添加断点来调试代码
您也可以尝试调试类似于此的网络调用
要了解如何使用该库,我会查看测试文件夹并查找与您的用例相似的测试。如果在 test/lib/model/cloudcontroller 文件夹中看起来有用,则有合理的数量。
至于关于 spaces 的问题,我找到了一个 example,您可以在其中将 space guid 传递给 return 应用 space 指导.
CloudFoundrySpaces.getSpaceApps(space_guid, filter).then( ... )
我假设您正在使用的呼叫 App.getApps()
将 return 应用程序用于所有 spaces/organizations。
我克隆了原始的 git 存储库并修改了一些方法以支持代理。请注意,我只修改了一些方法来使示例代码正常工作,但需要对包进行完整的重构。
基本上你要做的就是在调用request
方法之前添加一个proxy
参数(整个包都这样做,所以需要做一些修改),例如这是为了Organization.js
文件中的方法之一:
getSummary (guid) {
const url = `${this.API_URL}/v2/organizations/${guid}/summary`;
const proxy = `${this.API_PROXY}`;
const options = {
method: "GET",
url: url,
proxy: proxy,
headers: {
Authorization: `${this.UAA_TOKEN.token_type} ${this.UAA_TOKEN.access_token}`
}
};
return this.REST.request(options, this.HttpStatus.OK, true);
}
您可以在下面的 git 存储库中找到我的更改:
https://github.com/adasilva70/cf-nodejs-client.git
我还在下面创建了一个新示例。此示例列出用户的所有组织,获取返回的第一个组织并列出其 space。您可以修改代码以提供 cf login 提供的类似功能(允许您 select 一个组织然后 space)。
const endpoint = "https://api.mycompany.com/";
const username = "youruser";
const password = "yourpassword";
const proxy = "http://proxy.mycompany.com:8080";
const CloudController = new (require("cf-nodejs-client")).CloudController(endpoint, proxy);
const UsersUAA = new (require("cf-nodejs-client")).UsersUAA;
const Apps = new (require("cf-nodejs-client")).Apps(endpoint, proxy);
const Orgs = new (require("cf-nodejs-client")).Organizations(endpoint, proxy);
CloudController.getInfo().then((result) => {
console.log(result);
UsersUAA.setEndPoint(result.authorization_endpoint, proxy);
return UsersUAA.login(username, password);
}).then((result) => {
//Apps.setToken(result);
//return Apps.getApps();
Orgs.setToken(result);
return Orgs.getOrganizations();
}).then((result) => {
console.log(result);
org_guid = result.resources[1].metadata.guid;
return Orgs.getSummary(org_guid);
}).then((result) => {
console.log(result);
}).catch((reason) => {
console.error("Error: " + reason);
});
我只做了一些小测试以确保示例有效,因此请谨慎使用。此外,这些更改仅适用于现在需要代理的情况。
我使用以下库连接到云控制器
https://github.com/prosociallearnEU/cf-nodejs-client
const endpoint = "https://api.mycompany.com/";
const username = "myuser";
const password = "mypass";
const CloudController = new (require("cf-client")).CloudController(endpoint);
const UsersUAA = new (require("cf-client")).UsersUAA;
const Apps = new (require("cf-client")).Apps(endpoint);
CloudController.getInfo().then((result) => {
UsersUAA.setEndPoint(result.authorization_endpoint);
return UsersUAA.login(username, password);
}).then((result) => {
Apps.setToken(result);
return Apps.getApps();
}).then((result) => {
console.log(result);
}).catch((reason) => {
console.error("Error: " + reason);
});
我尝试 运行 它反对我们的 API 但它不起作用,我在控制台中没有收到任何错误消息,它可能是什么?
这里 space/org 在哪里处理?因为当我从 cli 连接时,它会问我要连接到哪个 space/org...
我能够通过 CLI 登录,只是从 代码我不能,知道这里缺少什么吗?
当我 运行 问题时,我没有收到任何有助于理解根本原因的错误
在图书馆的 github 网站上,首先让我印象深刻的是警告:
Note: This package is not ready for a production App yet.
该项目似乎也没有得到维护,因为有很多已经几个月大的票没有得到回应。
无论如何,要弄清楚为什么库不工作并且不产生错误消息,我会检查库源代码并添加一些控制台日志记录语句,可能从 HttpUtils 开始。例如:
requestWithDefaults(options, function (error, response, body) {
console.log("requestWithDefaults error: ", error)
console.log("requestWithDefaults response: ", response)
console.log("requestWithDefaults body: ", body)
...
}
或者,您可以尝试使用 nodejs debugger.
通过在库中的 requestWithDefaults 和其他关键位置添加断点来调试代码您也可以尝试调试类似于此的网络调用
要了解如何使用该库,我会查看测试文件夹并查找与您的用例相似的测试。如果在 test/lib/model/cloudcontroller 文件夹中看起来有用,则有合理的数量。
至于关于 spaces 的问题,我找到了一个 example,您可以在其中将 space guid 传递给 return 应用 space 指导.
CloudFoundrySpaces.getSpaceApps(space_guid, filter).then( ... )
我假设您正在使用的呼叫 App.getApps()
将 return 应用程序用于所有 spaces/organizations。
我克隆了原始的 git 存储库并修改了一些方法以支持代理。请注意,我只修改了一些方法来使示例代码正常工作,但需要对包进行完整的重构。
基本上你要做的就是在调用request
方法之前添加一个proxy
参数(整个包都这样做,所以需要做一些修改),例如这是为了Organization.js
文件中的方法之一:
getSummary (guid) {
const url = `${this.API_URL}/v2/organizations/${guid}/summary`;
const proxy = `${this.API_PROXY}`;
const options = {
method: "GET",
url: url,
proxy: proxy,
headers: {
Authorization: `${this.UAA_TOKEN.token_type} ${this.UAA_TOKEN.access_token}`
}
};
return this.REST.request(options, this.HttpStatus.OK, true);
}
您可以在下面的 git 存储库中找到我的更改:
https://github.com/adasilva70/cf-nodejs-client.git
我还在下面创建了一个新示例。此示例列出用户的所有组织,获取返回的第一个组织并列出其 space。您可以修改代码以提供 cf login 提供的类似功能(允许您 select 一个组织然后 space)。
const endpoint = "https://api.mycompany.com/";
const username = "youruser";
const password = "yourpassword";
const proxy = "http://proxy.mycompany.com:8080";
const CloudController = new (require("cf-nodejs-client")).CloudController(endpoint, proxy);
const UsersUAA = new (require("cf-nodejs-client")).UsersUAA;
const Apps = new (require("cf-nodejs-client")).Apps(endpoint, proxy);
const Orgs = new (require("cf-nodejs-client")).Organizations(endpoint, proxy);
CloudController.getInfo().then((result) => {
console.log(result);
UsersUAA.setEndPoint(result.authorization_endpoint, proxy);
return UsersUAA.login(username, password);
}).then((result) => {
//Apps.setToken(result);
//return Apps.getApps();
Orgs.setToken(result);
return Orgs.getOrganizations();
}).then((result) => {
console.log(result);
org_guid = result.resources[1].metadata.guid;
return Orgs.getSummary(org_guid);
}).then((result) => {
console.log(result);
}).catch((reason) => {
console.error("Error: " + reason);
});
我只做了一些小测试以确保示例有效,因此请谨慎使用。此外,这些更改仅适用于现在需要代理的情况。