This project serves as the API interface to Deflect. Several components are integrated within this project including edgemanage, a database for storing DNS and website records, as well as the API and gen_site_config module.
- Deflect-API is based on Django framework
- Uses MySQL as database to store:
- Website list (URL, origin IP)
- Website options and config
- DNS records
- Client certs
- Edge (IP, hostname, dnet)
- Dnet
- gen_site_config script (django command line script) generates site.yml according to database
- Provides an HTTP API to interact with database
- Provides an Web interface to interact with database (django admin)
- Works with one submodules (highlighted in the diagram above)
- edgemanage3
- edgemanage3:
- python integration
- feature:
- edge_query: query edge status
- edge_conf: configure edge
- edge_manage: cronjob to execute every min
Deflect-API has several integration mechanisms in place. This table is a breif overview of how everything works together:
verb | subject | 1st reaction | 2nd reaction |
---|---|---|---|
CD[1] | website[3] | gen_site_config |
|
U[2] | website | gen_site_config |
|
CU | edge | edgemanage update[4] | |
D | edge | edgemanage update | docker prune |
C | dnet | edgemanage update | |
D | dnet | edgemanage update |
In this table, subject could represent HTTP API endpoints, or operations via django admin. Once the action of the verb, for example, C (create), is committed, the 1st reaction will be triggered right-away. Depending on the category, the second reaction will be triggered after the first reaction is complete.
Most long running task are triggered by a celery worker, such as gen_site_config
. This could be config in .env
by setting GSC_TRIGGER_UPON_DB_CHANGE
Footnotes:
- CD: Create(C) and Delete(D)
- U: Update(U)
- website: Websites, Website Options, DNS records and certificates
- edgemanage update: files under
edgelist_dir
is updated according to latest database changes of dnet and edges
Please refer to INSTALL.md
Please refer to HTTP API Documentation
Generate site.yml
file according to Website
, WebsiteOption
and Record
model
python manage.py gen_site_config --output <path> --blacklist <list.txt> --debug
Configuration should be set in .env
before running this command:
GSC_LOG_FILE=/var/tmp/gen_site_config.log
GSC_OUTPUT_LOCATION=/var/www/brainsconfig
GSC_PARTITIONS={"part1": {"dnets": ["dnet1"]}, "part2": {"dnets": ["dnet2"]}}
GSC_DEFAULT_NETWORK=dnet1
GSC_IGNORE_APPROVAL=True
GSC_IGNORE_APPROVAL
ignores approval
in website_option
during gen_site_config
, this should be set to True
in most cases.
For dev purposes, GSC_LOG_FILE
and GSC_OUTPUT_LOCATION
could make use of the dev/gen_sit_config
directory.
Invoke django test. Test includes API, Model and gen_site_config test, this will read your local .env
file. For CircleCI tests, please refer to config in .circleci
, test coverage report is also generated with automate test.
python manage.py test
Built-in admin interface can be accessed via http://localhost:8000/admin
REST framework provides built-in GUI for API testing, auth is required by clicking "Log in" on the top right corner when accessed via http://localhost:8000/api