Automatic deployment on-prem from zip archives
Project description
Documentation: https://fholmer.gitlab.io/adop
Source Code: https://gitlab.com/fholmer/adop
Downloads: https://gitlab.com/fholmer/adop/-/packages
License: BSD License
Summary
Automatic deployment on-prem from zip archives.
Features
A REST API to upload, download and deploy deployable zip-files.
Listens for webhook requests, to continuously deploy zip-files on commits.
Warning
This is a beta version. Not ready for production.
Installation
Open command line and and install using pip:
$ pip install adop
Usage
adop is available as console script and library module
$ adop -h
$ python -m adop -h
Serve rest api on http://127.0.0.1:8000
$ adop serve-api -b 127.0.0.1 -p 8000
Find the generated authorization token
Windows
> type %USERPROFILE%\.adop\adop.ini | findstr token
Linux
$ cat ~/.adop/adop.ini | grep token
Test the REST-API with curl
$ curl -H "Token: paste-token-here" http://127.0.0.1:8000/api/v1/test
Upload and deploy a zip-library:
$ curl \
-H "Content-Type: application/zip" \
-H "Token: paste-token-here" \
--data-binary "@work/mylib.zip" \
http://127.0.0.1:8000/api/v1/deploy/zip/mylib
Zip file layout
Zip files with exactly one root directory are valid and can be distributed. The root directory name must be unique if many zip files are to be distributed.
Example of a valid zip file layout:
/mylib/
/README.rst
/main.py
/mypackage1/
/__init__.py
/__main__.py
/mypackage2/
/__init__.py
/__main__.py
Following layout is not valid:
/README.rst
/mylib1/
/__init__.py
/__main__.py
/mylib2/
/__init__.py
/__main__.py
API
Endpoints
Description |
Method |
Endpoint |
---|---|---|
Check that the API is available. |
GET |
/api/v1/test |
Sha sum for all deployed zip-files. |
GET |
/api/v1/state |
Sha sum for given deployed root. |
GET |
/api/v1/state/<root> |
Start auto-fetch routine if enabled. |
GET |
/api/v1/trigger/fetch |
Download zip-file with given root. |
GET |
/api/v1/download/zip/<root> |
Upload a zip-file without deploying it. |
POST |
/api/v1/upload/zip/<root> |
Upload and deploy a zip-file. |
POST |
/api/v1/deploy/zip/<root> |
Deploy a preloaded zip-file. |
GET |
/api/v1/deploy/zip/<root> |
Zip-file unpacking progress. |
GET |
/api/v1/progress |
- <root>
Name of the root directory in the zip-file.
Headers
Header |
Description |
Endpoint |
---|---|---|
Token |
The authorization token for this API. |
|
Zip-Sha256 |
content hash of the zip-file to deploy. |
|
Result
The result is encoded as a json object. Most endpoints will return an object with result and result_code as keywords.
$ curl \
-H "Token: paste-token-here" \
http://127.0.0.1:8000/api/v1/test
{
"result": "It works",
"result_code": 0
}
Endpoints that take a long time will stream a progress log until the result is returned.
$ curl \
-H "Content-Type: application/zip" \
-H "Token: paste-token-here" \
--data-binary "@work/mylib.zip" \
http://127.0.0.1:8000/api/v1/deploy/zip/mylib
// root: mylib
// store data
// verify data
// verify root dir
// verify zip data
// zip root: 'mylib'
// unpack zip data
// remove untracked files
{"root": "mylib", "result": "Success", "result_code": 0}
The Json specification does not support comments, so the client must ignore lines prefixed with // before decoding.
$ curl \
-H "Content-Type: application/zip" \
-H "Token: paste-token-here" \
--data-binary "@work/mylib.zip" \
http://127.0.0.1:8000/api/v1/deploy/zip/mylib \
| grep -v // \
| python -m json.tool
{
"root": "mylib",
"result": "Success",
"result_code": 0
}
Status and result codes
HTTP status |
result_code |
Descripton |
---|---|---|
200 |
0 |
OK. Indicates that the request has succeeded. |
200 |
1 |
Fail. The request has succeeded but result was unsuccessful. |
200 |
2 |
In progress. The request as been interrupted and returned to early to give the final result code. |
401 |
4 |
Unauthorized. Invalid token. |
500 |
5 |
Internal Error |
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 Distributions
Built Distribution
File details
Details for the file adop-0.0.1b5-py3-none-any.whl
.
File metadata
- Download URL: adop-0.0.1b5-py3-none-any.whl
- Upload date:
- Size: 26.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29b998d9ebf44d318e35cf3b3ff8c1625fa3f34612ddf1e0e0261a95ac048938 |
|
MD5 | 63981cc80f53e815e06f3fa72d1fd669 |
|
BLAKE2b-256 | e57b05ce5a77c303302ae8adf7e5de8a26d1e15325fb6349f0ece08ce11248e2 |