06-06-2018 03:33 PM - edited 03-01-2019 04:11 AM
Hi,
doing some tests with the resource manager package.
It's all working fine and ID allocted for a newly provisioned l2vpn service.
admin@ncs> show resource-pools id-pool pw-id
NAME ID ERROR ID
------------------------------
pw-id testtest2 - 101
But is there a way to point from our service back to this id as operational data.
I can lookup the ID using normal xpath:
$ ncs_cmd -c "xe /ralloc:resource-pools/id-pool[name='pw-id']/allocation[id='testtest2']/response/id"
XPATH_TRACE: exists("/ralloc:resource-pools/id-pool{pw-id}") = true
XPATH_TRACE: exists("/ralloc:resource-pools/id-pool{pw-id}/allocation{testtest2}") = true
XPATH_TRACE: get_elem("/ralloc:resource-pools/id-pool{pw-id}/allocation{testtest2}/response/id") = 101
101
So can we do something like this:
admin@ncs> show services l2vpn pw-id
PW
NAME ID
---------------
testtest2 -
Where it then will return the selected PW ID.
tried YANG code below to point back to our id but that doesn't seem to work
leaf id-pool {
tailf:info "provide pool to get vpn-ids from";
type leafref {
path "/ralloc:resource-pools/idalloc:id-pool/idalloc:name";
}
mandatory true;
}
leaf pw-id {
tailf:info "unique l2vpn pw id";
type leafref {
// we can't use static names in leafref so need to configure id-pool to get id
path "/ralloc:resource-pools/idalloc:id-pool[idalloc:name=current()/../id-pool]/idalloc:allocation[idalloc:id=current()/../name]/idalloc:response/idalloc:id";
}
config false;
}
Regards,
John
Solved! Go to Solution.
06-08-2018 10:16 AM
AFAIK you cannot do this through the YANG. What I usually do is that I add something like the below to my service code. Please note that I'm allocating VLANs for pairs of devices in my example.
Svc code:
v = self.svc.allocations.vlan.create([d1, d2])
v.vlan = vlan
Svc YANG:
container allocations {
config false;
tailf:cdb-oper {
tailf:persistent true;
}
list vlan {
key "device-1 device-2";
leaf device-1 {
type string;
}
leaf device-2 {
type string;
}
leaf vlan {
type uint16 {
range 0..4096;
}
}
}
}
And in the CLI:
admin@mdp> show nni allocations
DOMAIN DEVICE 1 DEVICE 2 VLAN
-------------------------------------------------------
dom d1 d2 1000
d1 d3 1001
06-08-2018 10:16 AM
AFAIK you cannot do this through the YANG. What I usually do is that I add something like the below to my service code. Please note that I'm allocating VLANs for pairs of devices in my example.
Svc code:
v = self.svc.allocations.vlan.create([d1, d2])
v.vlan = vlan
Svc YANG:
container allocations {
config false;
tailf:cdb-oper {
tailf:persistent true;
}
list vlan {
key "device-1 device-2";
leaf device-1 {
type string;
}
leaf device-2 {
type string;
}
leaf vlan {
type uint16 {
range 0..4096;
}
}
}
}
And in the CLI:
admin@mdp> show nni allocations
DOMAIN DEVICE 1 DEVICE 2 VLAN
-------------------------------------------------------
dom d1 d2 1000
d1 d3 1001
06-11-2018 01:07 AM
thanx for the answer.
I'm now just writing the selected pw-id as operational data of the service:
---
with ncs.maapi.single_write_trans(tctx.username, 'system', db=ncs.OPERATIONAL) as t:
t.set_elem(pw_id, path)
t.apply()
self.log.info('pw-id added as operational data to model')
---
admin@ncs> show services l2vpn pw-id
PW
NAME ID
------------
test1 100
test2 101
06-11-2018 03:21 AM
Hi all,
I just want to point-out that the semantic of what you are proposing here is a little bit more complex. Your code stores as operational data the assigned id-values at the time of the last execution of the service create(). This may not be the same as the current allocation from the resource manager as the service could be "out-of-sync".
If what you need is the current allocation value for that service instance without copying any value, you should be able to use the tailf:link extension as long as you can compose the target path (like if the pool and allocation name is well-know for your service model). Another option would be via a data provider.
Roque
This statement specifies that the data node should be implemented as a link to another data node, called the target data node. This means that whenever the node is modified, the system modifies the target data node instead, and whenever the data node is read, the system returns the value of target data node.
Note that if the data node is a leaf, the target node MUST also be a leaf, and if the data node is a leaf-list, the target node MUST also be a leaf-list.
Note that the type of the data node MUST be the same as the target data node. Currently the compiler cannot check this.
The argument is an XPath absolute location path. If the target lies within lists, all keys must be specified. A key either has a value, or is a reference to a key in the path of the source node, using the function current() as starting point for an XPath location path. For example:
/a/b[k1='paul'][k2=current()/../k]/c
The link statement can be used in: leaf and leaf-list.
The following substatements can be used:
tailf:inherit-set-hook This statement specifies that a 'tailf:set-hook' statement should survive through symlinks. If set to true a set hook gets called as soon as the value is set via a symlink but also during commit. The normal behaviour is to only call the set hook during commit time.
06-11-2018 06:22 AM
hmm,good one.
tested with tailf:link, that's working fine:
---
import resource-allocator {
prefix ralloc;
}
import id-allocator {
prefix idalloc;
}
leaf pw-id {
description "id_allocator script will use resource-manager to reserve id in pw-id id-pool. We link to result using tailf:link extension";
tailf:link "/ralloc:resource-pools/idalloc:id-pool[idalloc:name='pw-id']/idalloc:allocation[idalloc:id=current()/../name]/idalloc:response/idalloc:id";
type uint32;
}
---
admin@ncs> show services l2vpn pw-id
PW
NAME ID
---------------
blabla 101
testtest 100
admin@ncs> show resource-pools id-pool pw-id
NAME ID ERROR ID
-----------------------------
pw-id blabla - 101
testtest - 100
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide