Вызов двоичных файлов хоста

В некоторых случаях вашему расширению необходимо вызвать некоторую команду с хоста (компьютера ваших пользователей). Например, вам может понадобиться вызвать интерфейс командной строки вашего облачного провайдера для создания нового ресурса, или интерфейс командной строки инструмента, предоставляемого вашим расширением, или даже сценарий оболочки, который вы хотите выполнить на хосте. Вы можете сделать это, выполнив CLI из контейнера с расширением SDK. Но этому CLI нужен доступ к файловой системе хоста, что не просто и не быстро, если он работает в контейнере. Двоичные файлы хоста позволяют именно это: вызывать из исполняемых файлов расширения (в виде двоичных файлов, сценариев оболочки), поставляемых как часть вашего расширения и развернутых на хосте. Поскольку расширения могут работать на нескольких платформах, это означает, что вам необходимо поставлять исполняемые файлы для всех платформ, которые вы хотите поддерживать.

Примечание

С помощью SDK можно вызывать только исполняемые файлы, поставляемые как часть расширения.

В этом примере данный интерфейс командной строки будет простым сценарием Hello world, который должен вызываться с параметром и возвращать строку.

Добавляет исполняемые файлы в расширение

Создаёт сценарий bash для macOS и Linux в файле binaries/unix/hello.sh со следующим содержимым:

#!/bin/sh
echo "Hello, $1!"

Создаёт batch script для Windows в другом файле binaries/windows/hello.cmd со следующим содержимым:

@echo off
echo "Hello, %1!"

Затем обновляет Dockerfile, чтобы копирует папку binaries в файловую систему контейнера расширения и сделать файлы исполняемыми.

# Copy the binaries into the right folder
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

Вызвать исполняемый файл из пользовательского интерфейса

В своём расширении используйте объект Docker Desktop Client для вызвать сценарий оболочки, предоставленный расширением с функцией ddClient.extension.host.cli.exec(). В этом примере двоичный файл возвращает в качестве результата строку, полученную с помощью result?.stdout, как только отрисовывается представление расширения.

Для реакции

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>
  );
}

Для Вью

Важно

У нас пока нет примера для Vue. Заполнить форму и сообщить нам, что вам нужен образец с Vue.

Для углового

Важно

У нас пока нет примера для Angular. Заполнить форму и сообщить нам, что вам нужен образец с Angular.

Для стройного

Важно

У нас пока нет примера для Svelte. Заполнить форму и сообщить нам, что вам нужен образец со Svelte.

Настраивает файл метаданных

Двоичные файлы хоста должны быть указаны в metadata.json, чтобы Docker Desktop скопировал их на хост при установке расширения. После удаления расширения скопированные двоичные файлы также будут удалены.

{
  "vm": {
    ...
  },
  "ui": {
    ...
  },
  "host": {
    "binaries": [
      {
        "darwin": [
          {
            "path": "/darwin/hello.sh"
          }
        ],
        "linux": [
          {
            "path": "/linux/hello.sh"
          }
        ],
        "windows": [
          {
            "path": "/windows/hello.cmd"
          }
        ]
      }
    ]
  }
}

path должен ссылаться на путь двоичного файла внутри контейнера.