A Django microservice for network port allocation
Project description
Django Portmaster is a network port allocation and management microservice. With Portmaster, you can assign port ranges to different services and register ports to different instances of those service. This way you can prevent assigning the same port twice, thus preventing assignement collision.
Installation
Install using PIP.
pip install django-portmaster
Add app to your Django project’s settings file and include offer cleanup middleware.
INSTALLED_APPS = [
[..]
'django_portmaster'
]
MIDDLEWARE = [
[..]
'django_portmaster.middleware.CleanOldOffersMiddleware'
]
Include Portmaster’s URLs into your Django project’s urls file.
from django_portmaster.urls import portmaster_urlpatterns
urlpatterns += portmaster_urlpatterns
Optionally, you can override the time offers are kept before they are deleted. Add the following code to you settings.py file.
# Default value is 30 minutes
PM_DELETE_OFFERS_AFTER_MINUTES = 10
API
Define port range by creating a service.
POST /v1/services
{
"name": "django",
"description": "Django service",
"start": 5000,
"end": 10000
}
Request a port from the range by providing a service instance name.
POST /v1/services/django/offers
{
"name": "web-01"
}
Response
{
"service": "django",
"name": "web-01",
"port": 5000,
"secret": "6f8ffc86-d98a-49ba-848a-a7cbaaea9360",
"created": "2017-09-08T14:16:39.277408Z"
}
Port will not be allocated immediately. Instead it will be reserved until the client accepts the port by posting to the dedicated URL using the provided secret code:
POST /v1/services/django/offers/6f8ffc86-d98a-49ba-848a-a7cbaaea9360/accept
Response
{
"service": "django",
"name": "web-01",
"port": 5000,
"created": "2017-09-08T14:18:04.094357Z"
}
Alternatively, you can reject the offer. Offers that are not accepted are automatically deleted by Portmaster middleware after they reach threshold set by PM_DELETE_OFFERS_AFTER_MINUTES setting (default value is 30 minutes).
POST /v1/services/django/offers/6f8ffc86-d98a-49ba-848a-a7cbaaea9360/reject
You can list all port alocations for a particular service.
GET /v1/services/django/ports
Find one by port number
GET /v1/services/django/ports/5000
Or find one by service instance name
GET /v1/services/django/ports/web-01
Safe guards
Portmaster includes multiple error checks and corner case handlers, so:
Service name needs to be unique
Port ranges can not overlap
Port range can not overlap with privileged ports (<1024) or IANA defined ephemeral port range (>49152)
Port can be assigned only once at any given time
Service instance name needs to be unique
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
File details
Details for the file django-portmaster-0.0.1.tar.gz
.
File metadata
- Download URL: django-portmaster-0.0.1.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 262645afb6ad75a4044e0392fe66a2007aaa3225d601d7080c7eebd37568da72 |
|
MD5 | 507fc08b5aba4822c97e2370285fb629 |
|
BLAKE2b-256 | 4932d140aea7df08b94fea634d94c41683b07ce96f2c4843c4397073e3a381d8 |
File details
Details for the file django_portmaster-0.0.1-py2.py3-none-any.whl
.
File metadata
- Download URL: django_portmaster-0.0.1-py2.py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 840fb9471e08c6466bfd41863f0f8872e60b5e48252c6a867b4998cf8ba24991 |
|
MD5 | 037d6ffb264cf040c8b69fbbee21216d |
|
BLAKE2b-256 | 20fc0ddd264f241ce83cb3b671854a299e3a45394eeb8c3e3feb46496be3553d |