Configuration driven object/HERO starter
Project description
BOSS Object Starter Service (BOSS)
BOSS is a service that instantiates python objects as HEROs based on a JSON configuration. The configuration can be read from a file, a URL (e.g. from a couchdb) or from an environment variable. Basically, BOSS allows you to quickly mask your arbitrary python object as a HERO and to run it.
As an example, let's take an object available in the python standard library, the FTP class from the ftplib module. To make BOSS create an object of the class FTP, we need the following configuration:
{
"_id": "test-json-ftp",
"classname": "ftplib.FTP",
"arguments": {
"host": "ftp.us.debian.org"
}
}
python -m boss.starter -u file:///absolute/path/to/ftp.json
Now our object is available in the default realm of our HEROS network. It can be viewed with any HEROObserver. For a graphical view, use HERO-Monitor.
Exposing the BOSS instance itself
To expose the BOSS instance as a HERO, use the --expose command line flag:
python -m boss.starter --expose -u file:///absolute/path/to/ftp.json
When the BOSS instance is exposed, HEROs can be dynamically added and removed by the calling the
add_hero(config: dict) and remove_hero(name: str) methods. This allows to run BOSS without any initial
configuration and manage the running HEROs from a remote service.
By default, the instance receives a unique name consisting of the hostname and a UUID. To change the name, use the --name argument:
python -m boss.starter --expose --name my_test_boss -u file:///absolute/path/to/ftp.json
Using the asyncio main loop
Boss starts a asyncio loop that the started objects can use. If your object expects to get the loop object in the constructor you can define attach it to the boss loop through the magic string "@_boss_loop" as in the following example:
{
"_id": "statemachine",
"classname": "herostools.actor.statemachine.HERODatasourceStateMachine",
"arguments": {
"loop": "@_boss_loop",
"http_port": 9090,
"bind_address": "localhost",
"labels": {"system": "heros"}
}
}
Docker
A convenient way to deploy BOSS is inside of a docker container. You can find pre-build containers images in our docker registry.
You can also build the BOSS docker image yourself from the Dockerfile in the repository:
docker build -t atomiq/boss .
A BOSS docker service can be started with the following compose file
version: '2'
services:
httpclient:
image: registry.gitlab.com/atomiq-project/boss:latest
restart: always
network_mode: host
environment:
- |
BOSS1=
{
"_id": "docker-env-ftp",
"classname": "ftplib.FTP",
"arguments": {
"host": "ftp.us.debian.org"
}
}
command: python -m boss.starter -e BOSS1
Additionally, also specifying a file or URL is possible, such that (mounted) json files in the docker container or web
URLs can be used as configuration sources. Note that the -e and -u options can be specified in the command line
multiple times to define several objects that should be instantiated by the BOSS.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file heros_boss-0.3.1.tar.gz.
File metadata
- Download URL: heros_boss-0.3.1.tar.gz
- Upload date:
- Size: 150.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
629943abaacd7bcfe42f1f367785080c5ae2cb18f7fc6f6b8435a0ed1bd2cfff
|
|
| MD5 |
7ee24c51f1895223ad01b214d045caf2
|
|
| BLAKE2b-256 |
e26365835a6b69fb1d1969975488ea4f499cc51bf0bf0bc0b38feb80605a9808
|
File details
Details for the file heros_boss-0.3.1-py3-none-any.whl.
File metadata
- Download URL: heros_boss-0.3.1-py3-none-any.whl
- Upload date:
- Size: 10.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
263dff122c970dd88447baf2ac7d4fd887949afb916c749e2d36b17779090ce3
|
|
| MD5 |
0893e460edcc1afd82bf6c6c2820ebb6
|
|
| BLAKE2b-256 |
7c0a06f4f66f48c846dc7473eb67201b764ab0b6248054a2d4db8eda910fee7a
|