Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
lib
README.md
delegate-client.py
delegate-server.py

README.md

Delegate

Структура проекта:

delegate-client.py

Клиент, с помощью которого можно посылать запросы серверу.

delegate-server.py

Точка входа delegate сервера.

config/

директория с конфигом delegate сервера.

config/config.py

config
config = {
    'serve': '0.0.0.0', # на каком адресе слушаем порт
    'port': 2390, # какой порт слушаем
    'verbosity': 1, # вербозити движка
    'salt1': b"ahThiodai0ohG1phokoo", # соль сервера
    'salt2': b"Aej1ohv8Naish5Siec3U", # соль клиентов
    'path_to_users': 'config/users', # путь до файла с пользователями
    'path_to_policies': 'config/policies', # путь до файла с политиками
    'limit': { # секция лимитов одновременных запусков скриптов из очередей
        'default': 10, # настройка для дефолтной очереди (когда не указана очередь у скрипта)
        'date': 2, # настройка для очереди с названием date
    }
}

Вторая секция конфига -- скрипты у данного delegate сервера

scripts
scripts = {
    "test": { # название скрипта
        "cmd_line": "/bin/sleep", # исполняемый файл
        "need_arguments": True,  # может ли пользователь передавать скрипту аргументы
        "default_arguments": ["5"], # дефолтный аргумент, который будет передан в любом случае
    },
    "test_date": {
        "cmd_line": "/bin/date",
        "need_arguments": False,
        "lock": "date", # в какую очередь исполнения добавляется скрипт
        "default_arguments": [],
    },
}

config/users

Этот файл состоит из двух частей: -- пользователи -- группы Пользователи характеризуются именем и pre-shared ключом, переданным по безопасному каналу.

username:pre-shared-key
username2:pre-shared-key-2

Группы характеризуются названием и списком пользователей из списка, объявленного выше и начинаются с ключевого слова group.

group groupname : username username2

ВНИМАНИЕ: Хорошим тоном является не перемешивать список пользователей с группами, т.к. в группу нельзя добавить еще не существующего пользователя, а конфиг парсится за 1 проход.

config/policies

Это файл политик. Изначально считается, что всем все запрещено и все политики имеют разрешительный характер. Политики бывают двух видов: -- Политика для пользователя начинается с

-u username

-- Политика для группы пользователей начинается с

-g groupname

Не бывает смешанных политик, делайте их сами, вручную.

Полная строка политики состоит из трех частей:

На кого распространяется
-u username
-g groupname
Опциональная часть параметров политики
-p param_name

Параметров у одной политики может быть сколько угодно или не быть вообще. На данный момент есть 2 возможных параметра для политик:

ALLOW_ARGUMENTS: разрешить пользователю передавать аргументы. Без этого параметра все аргументы, кроме дефолтных из config.py, игнорируются.
PROVIDE_USERNAME: запустить проставив в env DELEGATE_USERNAME
Название скрипта (из config.py)
scriptname
В итоге получаем файл политик вида:
-u username -p param1 -p param2 script1
-g groupname script2
-g groupname1 -p param1 script1

lib

Подкапотное пространство delegate сервера. Без должной необходимости не ломайте там ничего.

You can’t perform that action at this time.