【发布时间】:2020-11-13 09:10:12
【问题描述】:
某些 gcloud 命令不支持 API 或客户端库(例如 - this one)。
在这些情况下,是否有一种从 nodejs 应用程序运行 gcloud 命令的简单方法?
【问题讨论】:
标签: node.js google-cloud-platform gcloud
某些 gcloud 命令不支持 API 或客户端库(例如 - this one)。
在这些情况下,是否有一种从 nodejs 应用程序运行 gcloud 命令的简单方法?
【问题讨论】:
标签: node.js google-cloud-platform gcloud
我不确定这是否能直接回答您的问题,但有一个 npm 包可以帮助您从应用程序中运行 unix 命令。
查看shell.js
【讨论】:
在 node.js 中,我们有 child_process 模块。顾名思义,child_process 提供了类似spawn 或exec 的功能,可以创建像独立进程一样执行shell 命令的新子进程。 spawn 是一个以主命令为
第一个参数和其他命令行选项作为数组值代替第二个参数。
因此,对于您共享的链接,您最终可能会写出这样的内容:
const { spawn } = require("child_process");
const listening = spawn('gcloud', ['endpoints', 'services', 'blah', '--option','someValue']);
listening.stdout.on("data", data => {
console.log(`stdout: ${data}`);
});
listening.stderr.on("data", data => {
console.log(`stderr: ${data}`);
});
listening.on('error', (error) => {
console.log(`error: ${error.message}`);
});
参考资料: https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
【讨论】:
IAM 策略的 gcloud endpoints service 命令对我来说很难快速检查,但是如果是 IIRC(如果这类似于 IAM 策略的 gcloud projects 命令),并不是没有 API,而是没有单一的API 调用。
您始终可以使用 gcloud 执行的操作是附加 --log-http 以查看幕后发生的情况。使用 IAM 策略突变(头顶式),您可以获取策略,对其进行突变,然后使用 GET 给您的 etag 将更改应用回来。后端检查策略的状态(etag 就像策略的哈希),如果没有更改,您可以进行更改。
如果这里发生了这种情况,您应该能够使用现有的 (!) API 在 NodeJS 中重现该功能,并且如果您使用的是 API 客户端库(而不是云客户端库),则该功能将可用.
除了向 gcloud 进行脱壳所涉及的复杂性之外,您还需要对其进行身份验证,然后您需要将数据(取消)编组到 shell 并管理错误。因此,这很混乱,通常不鼓励。
【讨论】: