Documents and encapsulates the API for the Kubernetes extension for Visual Studio Code
npm install vscode-kubernetes-tools-apikubectl features in a way that's consistent with the core extension
javascript
// Using TypeScript for sample purposes but it all works in JavaScript too!
import * as vscode from 'vscode';
import * as k8s from 'vscode-kubernetes-tools-api';
export function activate(context: vscode.ExtensionContext) {
const disposable = vscode.commands.registerCommand('k8stop.top', showResourceUsage);
context.subscriptions.push(disposable);
}
async function showResourceUsage(target?: any): Promise {
// Standard pattern for accessing the APIs
const explorer = await k8s.extension.clusterExplorer.v1_1;
if (!explorer.available) {
vscode.window.showErrorMessage( Command not available: ${explorer.reason});
return;
}
const kubectl = await k8s.extension.kubectl.v1;
if (!kubectl.available) {
vscode.window.showErrorMessage(kubectl not available: ${kubectl.reason});
return;
}
// Example of using the Cluster Explorer API to figure out what was clicked
const node = explorer.api.resolveCommandTarget(target);
if (node && node.nodeType === 'resource' && node.resourceKind.manifestKind === 'Node') {
// Example of using the kubectl API to invoke a command
const topResult = await kubectl.api.invokeCommand(top node ${node.name});
if (!topResult || topResult.code !== 0) {
vscode.window.showErrorMessage(Can't get resource usage: ${topResult ? topResult.stderr : 'unable to run kubectl'});
return;
}
const topCommandOutput = topResult.stdout;
// show topCommandOutput as required;
}
}
``