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']
|