Создание проекта
Для начала разработки собственных модулей расширения Bmc создадим структуру проекта. В будущем его можно использовать для обогащения операций необходимой логикой работы.
Создание шаблона проекта
Создайте проект из шаблона dotnet
Используя Visual Studio создадим проект из шаблона Dotnet gRPC API.
Подробнее:
Подключение модуля расширения к системе осуществляется с помощью следующих ключевых технологий:
- Протокол gRPC
- docker-compose
Для работы сервиса необходимы прото-файлы. Полный набор прото-файлов можно найти в корне проекта sdk, в директории .proto.
Копия набора прото-файлов для работы с модулем расширения Bmc расположены в директории Protos проекта.
Добавим ссылку на прото-файлы в проект:
<ItemGroup>
<Protobuf ProtoRoot="./" Include="Protos/*.proto" AdditionalImportDirs="Protos/" OutputDir="$(IntermediateOutputPath)/%(RecursiveDir)" />
</ItemGroup>
Реализуем простейший grpc сервис для подключенного прото-файла:
using Grpc.Core;
using ToolCluster.V4;
namespace BmcHandler.Services
{
public class BmcHandlerService : BmcManager.BmcManagerBase
{
// RPC по сбору статуса LED.
public override async Task<CollectBmcLedStateResponse> CollectLedState(CollectBmcLedStateRequest request, ServerCallContext context)
{
throw new RpcException(new Status(StatusCode.Unimplemented, ""));
}
}
}
Сконфигурируем приложение и grpc-сервер в Program.cs:
using BmcHandler.Services;
var builder = WebApplication.CreateBuilder(args);
// Добавление gRPC функционала в контейнер.
builder.Services.AddGrpc();
// Добавление gRPC рефлексии в контейнер.
builder.Services.AddGrpcReflection();
var app = builder.Build();
// Настройка конвейера gRPC сервиса.
app.MapGrpcService<BmcHandlerService>();
// Сопоставление входящих запросов со службой рефлексии gRPC.
app.MapGrpcReflectionService();
await app.RunAsync();
На данном этапе пустой шаблон модуля расширения готов для локального запуска.
Для подключения модуля к системе необходимо настроить Dockerfile и docker-compose.yml, подробную информацию об этом можно найти в директории deploy.
Пример готового шаблона модуля расширения находится в директории project.