Git Product home page Git Product logo

delegate's Introduction

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 сервера. Без должной необходимости не ломайте там ничего.

delegate's People

Contributors

mihver1 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.