Extension Backend
The ddClient.extension.vm
object can be used to communicate with the backend defined in the
vm section of the extension metadata.
get
▸ get(url
): Promise
<unknown
>
Performs an HTTP GET request to a backend service.
ddClient.extension.vm.service
.get("/some/service")
.then((value: any) => console.log(value)
See Service API Reference for other methods such as POST, UPDATE, and DELETE.
Deprecated extension backend communication
The methods below that use
window.ddClient.backend
are deprecated and will be removed in a future version. Use the methods specified above.
The window.ddClient.backend
object can be used to communicate with the backend
defined in the
vm section of the
extension metadata. The client is already connected to the backend.
Example usages:
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));
Run a command in the extension backend container
For example, execute the command ls -l
inside the backend container:
await ddClient.extension.vm.cli.exec("ls", ["-l"]);
Stream the output of the command executed in the backend container. For example, spawn the command ls -l
inside the backend container:
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);
},
},
});
For more details, refer to the Extension VM API Reference
Deprecated extension backend command execution
This method is deprecated and will be removed in a future version. Use the specified method above.
If your extension ships with additional binaries that should be run inside the
backend container, you can use the execInVMExtension
function:
const output = await window.ddClient.backend.execInVMExtension(
`cliShippedInTheVm xxx`
);
console.log(output);
Invoke an extension binary on the host
You can run binaries defined in the host section of the extension metadata.
For example, execute the shipped binary kubectl -h
command in the host:
await ddClient.extension.host.cli.exec("kubectl", ["-h"]);
As long as the kubectl
binary is shipped as part of your extension, you can spawn the kubectl -h
command in the host and get the output stream:
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);
},
},
});
You can stream the output of the command executed in the backend container or in the host.
For more details, refer to the Extension Host API Reference
Deprecated invocation of extension binary
This method is deprecated and will be removed in a future version. Use the method specified above.
To execute a command in the host:
window.ddClient.execHostCmd(`cliShippedOnHost xxx`).then((cmdResult: any) => {
console.log(cmdResult);
});
To stream the output of the command executed in the backend container or in the host:
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);
}
}
);
メモ
You cannot use this to chain commands in a single
exec()
invocation (likecmd1 $(cmd2)
or using pipe between commands).You need to invoke
exec()
for each command and parse results to pass parameters to the next command if needed.