pyIPAM - Docker Plugin for IPAM written in Python
Jacek Kowalski
2020-05-03 659253a65545309d3cdd9280d88d011d45f0014b
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
63
64
65
66
67
from docker_plugin_api.Plugin import Blueprint
import flask
from .Ipam import *
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))
    space = spaces[request.AddressSpace]
    pool = Pool(pool=request.Pool, subPool=request.SubPool, options=request.Options, v6=request.V6)
    pool_id = space.add_pool(pool)
    full_id = '{}-{}'.format(space.name, pool_id)
    return {
        'PoolID': full_id,
        'Pool': str(pool),
        'Data': {},
    }
 
 
@app.route('/IpamDriver.ReleasePool', methods=['POST'])
def ReleasePool():
    request = ReleasePoolEntity(**flask.request.get_json(force=True))
    space, pool = get_space_pool(request.PoolID)
    space.remove_pool(pool)
    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']