Skip to content

B0nBun/yadro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое Задание YADRO

Задача

Необходимо реализовать сервис и клиент для выставления имя хоста в Linux, а также изменение списка DNS серверов.

Сервис работает по протоколу gRPC, но также реализует и REST http API сгенерированный с помощью grpc-gateway.

CLI Клиент использует фреймворк Cobra и может отправлять команды сервису (как через REST API, так и по grpc):

Реализуются следующие команды:

  • Получить имя хоста
  • Изменить имя хоста
  • Получить список глобальных DNS
  • Добавить DNS сервера в список
  • Удалить DNS сервера из списка

Quick Start

Makefile содержит необходимые скрипты

make server client

Компиляция производит два исполняемых файла: bin/client и bin/server.

Использование

Сервер

Для изменения DNS серверов редактируется файл /etc/systemd/resolved.conf, а также перезагружается systemd-resolved, в связи с чем в примере bin/server запускается через sudo

# Запустить gRPC сервер на порте 1212 (по умолчанию 1234)
sudo bin/server --grpc-port 1212

# Другие флаги:
# --rest-port  Порт на котором будет запущен REST http-gateway
# --grpc-logs  Выводит также логи самой библиотеки grpc
# --help       Больше информации о CLI

При запуске сервера вместе с REST gateway через флаг --rest-port на указанном порту будет запущен сервер с API сгенерированным через grpc-gateway.

  • localhost:xxxx/api/* - API эндпоинты
  • localhost:xxxx/ - Swagger документация API

Клиент

bin/client --addr 0.0.0.0:1234 hostname                   # Получить имя хоста
bin/client --addr 0.0.0.0:1234 hostname set new-hotname   # Изменить имя хоста
bin/client --addr 0.0.0.0:1234 dns                        # Получить список DNS серверов
bin/client --addr 0.0.0.0:1234 dns add 1.1.1.1 8.8.8.8    # Добавить DNS сервера
bin/client --addr 0.0.0.0:1234 dns remove 1.1.1.1 8.8.8.8 # Удалить DNS сервера
# Другие флаги
# --rest     Клиент отправляет REST запросы вместо gRPC
# --timeout  Выставляет timeout на запросы (по умолчанию 1 секунда)
# --help     Больше информации о CLI

Детали имплементации

Для изменения и получения имени хоста исполняется команда hostnamectl

Для изменения же DNS серверов редактируется файл /etc/systemd/resolved.conf, после чего перезапускается systemd-resolved для применения изменений. Так что до тех пор пока дистрибутив работает через systemd, все должно работать.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published