I'm using the ID allocator from the resource manager package to assign service IDs for NSO provisioned Nokia services. I have a bunch of brownfield services, so I've set a range of valid IDs and a large exclude range so that all greenfield services are being assigned to the upper portion of the valid range. This is what the initial config looks like:
id-pool evi_id {
range {
start 1;
end 65534;
}
exclude 1 39999;
Greenfield services just take the next available ID in the pool, starting at 40000, and this works fine. Now I'm working on trying to integrate the brownfield services, by requesting a specific ID and altering the exclude ranges to poke holes for those IDs. The problem is that when I modify the exclude ranges, the id-allocator doesn't seem to respect those exclusions, and if I ask for the next available ID, I'm getting IDs that should be in an excluded range. Below shows an example of what I'm getting:
run show id-allocator | display xpath
/id-allocator/pool[name='evi_id']/exclude[start='1'][end='8000']
/id-allocator/pool[name='evi_id']/exclude[start='8002'][end='9999']
/id-allocator/pool[name='evi_id']/exclude[start='10001'][end='39999']
/id-allocator/pool[name='evi_id']/available[start='2'][end='8001']
/id-allocator/pool[name='evi_id']/available[start='40002'][end='65534']
/id-allocator/pool[name='evi_id']/allocation[id='1']
/id-allocator/pool[name='evi_id']/allocation[id='10000']
/id-allocator/pool[name='evi_id']/allocation[id='40000']
/id-allocator/pool[name='evi_id']/allocation[id='40001']
The available ranges don't align with the excluded ranges. If I do a package reload, the id-allocator seems to figure itself out and the available ranges properly align, but obviously it's not practical or proper to do that every time we want to configure a brownfield service.
Originally this was all being done programmatically via service packages, but when I noticed this in testing, I found the same behavior if I change the id pool exclude settings and make the allocation requests by hand. This looks like a bug with the resource manager/id allocator, something isn't updating properly. Based on the documentation, having multiple available/excluded blocks should be something within the package capability.
Is there something I'm missing or not doing that I should be when I update the exclude ranges?