Invoquer des binaires hôte
Dans certains cas, votre extension peut avoir besoin d'invoquer une commande depuis l'hôte. Par exemple, vous pourriez vouloir invoquer la CLI de votre fournisseur cloud pour créer une nouvelle ressource, ou la CLI d'un outil que votre extension fournit, ou même un script shell que vous voulez exécuter sur l'hôte.
Vous pourriez le faire en exécutant la CLI depuis un conteneur avec le SDK d'extension. Mais cette CLI a besoin d'accéder au système de fichiers de l'hôte, ce qui n'est ni facile ni rapide si elle s'exécute dans un conteneur.
Cependant, les invocations de binaires hôte depuis l'extension sont des exécutables (comme des binaires, des scripts shell) livrés dans le cadre de votre extension et déployés sur l'hôte. Comme les extensions peuvent s'exécuter sur plusieurs plateformes, cela signifie que vous devez livrer les exécutables pour toutes les plateformes que vous voulez supporter.
Apprenez-en plus sur l'architecture des extensions.
NoteSeuls les exécutables livrés dans le cadre de l'extension peuvent être invoqués avec le SDK.
Dans cet exemple, la CLI est un script simple Hello world
qui doit être invoqué avec un paramètre et retourne une
chaîne.
Ajouter les exécutables à l'extension
Créez un script bash
pour macOS et Linux, dans le fichier binaries/unix/hello.sh
avec le contenu suivant :
#!/bin/sh
echo "Hello, $1!"
Créez un script batch
pour Windows dans un autre fichier binaries/windows/hello.cmd
avec le contenu suivant :
@echo off
echo "Hello, %1!"
Puis mettez à jour le Dockerfile
pour copier le dossier binaries
dans le système de fichiers du conteneur de l'extension et rendre les
fichiers exécutables.
# Copier les binaires dans le bon dossier
COPY --chmod=0755 binaries/windows/hello.cmd /windows/hello.cmd
COPY --chmod=0755 binaries/unix/hello.sh /linux/hello.sh
COPY --chmod=0755 binaries/unix/hello.sh /darwin/hello.sh
Invoquer l'exécutable depuis l'UI
Dans votre extension, utilisez l'objet Client Docker Desktop pour invoquer le script shell
fourni par l'extension avec la fonction ddClient.extension.host.cli.exec()
.
Dans cet exemple, le binaire retourne une chaîne comme résultat, obtenue par result?.stdout
, dès que la vue d'extension est rendue.
export function App() {
const ddClient = createDockerDesktopClient();
const [hello, setHello] = useState("");
useEffect(() => {
const run = async () => {
let binary = "hello.sh";
if (ddClient.host.platform === 'win32') {
binary = "hello.cmd";
}
const result = await ddClient.extension.host?.cli.exec(binary, ["world"]);
setHello(result?.stdout);
};
run();
}, [ddClient]);
return (
<div>
{hello}
</div>
);
}
ImportantNous n'avons pas encore d'exemple pour Vue. Remplissez le formulaire et faites-nous savoir si vous souhaitez un exemple avec Vue.
ImportantNous n'avons pas encore d'exemple pour Angular. Remplissez le formulaire et faites-nous savoir si vous souhaitez un exemple avec Angular.
ImportantNous n'avons pas encore d'exemple pour Svelte. Remplissez le formulaire et faites-nous savoir si vous souhaitez un exemple avec Svelte.
Configurer le fichier de métadonnées
Les binaires hôte doivent être spécifiés dans le fichier metadata.json
afin que Docker Desktop les copie sur l'hôte lors de l'installation
de l'extension. Une fois l'extension désinstallée, les binaires qui ont été copiés sont également supprimés.
{
"vm": {
...
},
"ui": {
...
},
"host": {
"binaries": [
{
"darwin": [
{
"path": "/darwin/hello.sh"
}
],
"linux": [
{
"path": "/linux/hello.sh"
}
],
"windows": [
{
"path": "/windows/hello.cmd"
}
]
}
]
}
}
Le path
doit référencer le chemin du binaire à l'intérieur du conteneur.