pyIPAM - Docker Plugin for IPAM written in Python
Jacek Kowalski
23 hours ago 79ead105749963216bf8689b1294cd9e7985bb7e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from docker_plugin_api.Plugin import Blueprint
import flask
from .IpamDriverData import *
from docker_plugin_api.IpamDriverEntities import *
 
app = Blueprint('IpamDriver', __name__)
 
 
@app.route('/IpamDriver.GetCapabilities', methods=['POST'])
def GetCapabilities():
    return {
        'RequiresMACAddress': True,
        'RequiresRequestReplay': True,
    }
 
 
@app.route('/IpamDriver.GetDefaultAddressSpaces', methods=['POST'])
def GetDefaultAddressSpaces():
    return {
        'LocalDefaultAddressSpace': 'local',
        'GlobalDefaultAddressSpace': 'global',
    }
 
 
@app.route('/IpamDriver.RequestPool', methods=['POST'])
def RequestPool():
    request = RequestPoolEntity(**flask.request.get_json(force=True))
    full_id, pool = create_pool(request)
    return {
        'PoolID': full_id,
        'Pool': str(pool),
        'Data': {},
    }
 
 
@app.route('/IpamDriver.ReleasePool', methods=['POST'])
def ReleasePool():
    request = ReleasePoolEntity(**flask.request.get_json(force=True))
    remove_pool(request.PoolID)
    return {}
 
 
@app.route('/IpamDriver.RequestAddress', methods=['POST'])
def RequestAddress():
    request = RequestAddressEntity(**flask.request.get_json(force=True))
    space, pool = get_space_pool(request.PoolID)
    address = pool.allocate(request.Address)
    return {
        'Address': address,
        'Data': {},
    }
 
 
@app.route('/IpamDriver.ReleaseAddress', methods=['POST'])
def ReleaseAddress():
    request = ReleaseAddressEntity(**flask.request.get_json(force=True))
    space, pool = get_space_pool(request.PoolID)
    pool.deallocate(request.Address)
    return {}
 
 
__all__ = ['app']