扩展后端

可以使用ddClient.extension.vm对象与扩展元数据vm部分中定义的后端进行通信。

获取

get(url): Promise<unknown>

对后端服务执行HTTP GET请求。

ddClient.extension.vm.service
 .get("/some/service")
 .then((value: any) => console.log(value)

有关其他方法(例如POST、UPDATE和DELETE),请参见服务API参考

已弃用的扩展后端通信

以下使用window.ddClient.backend的方法已弃用,将在未来版本中删除。请使用上面指定的方法。

可以使用window.ddClient.backend对象与扩展元数据vm部分中定义的后端进行通信。客户端已连接到后端。

示例用法

window.ddClient.backend
  .get("/some/service")
  .then((value: any) => console.log(value));

window.ddClient.backend
  .post("/some/service", { ... })
  .then((value: any) => console.log(value));

window.ddClient.backend
  .put("/some/service", { ... })
  .then((value: any) => console.log(value));

window.ddClient.backend
  .patch("/some/service", { ... })
  .then((value: any) => console.log(value));

window.ddClient.backend
  .delete("/some/service")
  .then((value: any) => console.log(value));

window.ddClient.backend
  .head("/some/service")
  .then((value: any) => console.log(value));

window.ddClient.backend
  .request({ url: "/url", method: "GET", headers: { 'header-key': 'header-value' }, data: { ... }})
  .then((value: any) => console.log(value));

在扩展后端容器中运行命令

例如,在后端容器内执行命令ls -l

await ddClient.extension.vm.cli.exec("ls", ["-l"]);

流式传输在后端容器中执行的命令的输出。例如,在后端容器内生成命令ls -l

await ddClient.extension.vm.cli.exec("ls", ["-l"], {
  stream: {
    onOutput(data) {
      if (data.stdout) {
        console.error(data.stdout);
      } else {
        console.log(data.stderr);
      }
    },
    onError(error) {
      console.error(error);
    },
    onClose(exitCode) {
      console.log("onClose with exit code " + exitCode);
    },
  },
});

更多详情,请参考扩展VM API参考

已弃用的扩展后端命令执行

此方法已弃用,将在未来版本中删除。请使用上面指定的方法。

如果您的扩展附带了应在后端容器内运行的其他二进制文件,您可以使用execInVMExtension函数

const output = await window.ddClient.backend.execInVMExtension(
  `cliShippedInTheVm xxx`
);
console.log(output);

在主机上调用扩展二进制文件

您可以运行扩展元数据host部分中定义的二进制文件。

例如,在主机上执行已发布的二进制文件kubectl -h命令

await ddClient.extension.host.cli.exec("kubectl", ["-h"]);

只要kubectl二进制文件作为扩展的一部分发布,您就可以在主机中生成kubectl -h命令并获取输出流

await ddClient.extension.host.cli.exec("kubectl", ["-h"], {
  stream: {
    onOutput(data: { stdout: string } | { stderr: string }): void {
      if (data.stdout) {
        console.error(data.stdout);
      } else {
        console.log(data.stderr);
      }
    },
    onError(error: any): void {
      console.error(error);
    },
    onClose(exitCode: number): void {
      console.log("onClose with exit code " + exitCode);
    },
  },
});

您可以流式传输在后端容器或主机中执行的命令的输出。

更多详情,请参考扩展主机API参考

已弃用的扩展二进制文件调用

此方法已弃用,将在未来版本中删除。请使用上面指定的方法。

在主机中执行命令

window.ddClient.execHostCmd(`cliShippedOnHost xxx`).then((cmdResult: any) => {
  console.log(cmdResult);
});

流式传输在后端容器或主机中执行的命令的输出

window.ddClient.spawnHostCmd(
  `cliShippedOnHost`,
  [`arg1`, `arg2`],
  (data: any, err: any) => {
    console.log(data.stdout, data.stderr);
    // Once the command exits we get the status code
    if (data.code) {
      console.log(data.code);
    }
  }
);

注意

您不能使用此方法在一个exec()调用中链接命令(例如cmd1 $(cmd2)或在命令之间使用管道)。

您需要为每个命令调用exec()并解析结果以传递参数到下一个命令(如果需要)。