Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Sonic Yang Tree]: Updating Tree as per modification in YANG models. #19

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 25 additions & 16 deletions src/sonic-yang-mgmt/_sonic_yang_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -606,22 +606,31 @@ def get_data(self):
def delete_node(self, xpath):

# These MACROS used only here, can we get it from Libyang Header ?
LYS_LEAF = 4
node = self.find_data_node(xpath)
if node is None:
raise('Node {} not found'.format(xpath))

snode = node.schema()
# check for a leaf if it is a key. If yes delete the parent
if (snode.nodetype() == LYS_LEAF):
leaf = ly.Schema_Node_Leaf(snode)
if leaf.is_key():
# try to delete parent
nodeP = self.find_parent_node(xpath)
xpathP = nodeP.path()
return self._delete_node(xpath=xpathP, node=nodeP)
else:
return self._delete_node(xpath=xpath, node=node)
try:
LYS_LEAF = 4
node = self.find_data_node(xpath)
if node is None:
raise('Node {} not found'.format(xpath))

snode = node.schema()
# check for a leaf if it is a key. If yes delete the parent
if (snode.nodetype() == LYS_LEAF):
leaf = ly.Schema_Node_Leaf(snode)
if leaf.is_key():
# try to delete parent
nodeP = self.find_parent_node(xpath)
xpathP = nodeP.path()
if self._delete_node(xpath=xpathP, node=nodeP) == False:
raise('_delete_node failed')
else:
return True

# delete non key element
if self._delete_node(xpath=xpath, node=node) == False:
raise('_delete_node failed')
except Exception as e:
print(e)
raise('Failed to delete node {}'.format(xpath))

return True

Expand Down
28 changes: 16 additions & 12 deletions src/sonic-yang-mgmt/sonic_yang.py
Original file line number Diff line number Diff line change
Expand Up @@ -497,17 +497,21 @@ def find_data_dependencies (self, data_xpath):
self.fail(e)
return ref_list

value = str(self.find_node_value(data_xpath))

schema_node = ly.Schema_Node_Leaf(data_node.schema())
backlinks = schema_node.backlinks()
if backlinks.number() > 0:
for link in backlinks.schema():
node_set = node.find_path(link.path())
for data_set in node_set.data():
schema = data_set.schema()
casted = data_set.subtype()
if value == casted.value_str():
ref_list.append(data_set.path())
try:
value = str(self.find_node_value(data_xpath))

schema_node = ly.Schema_Node_Leaf(data_node.schema())
backlinks = schema_node.backlinks()
if backlinks.number() > 0:
for link in backlinks.schema():
node_set = node.find_path(link.path())
for data_set in node_set.data():
schema = data_set.schema()
casted = data_set.subtype()
if value == casted.value_str():
ref_list.append(data_set.path())
except Exception as e:
print('Failed to find node or dependencies for {}'.format(data_xpath))
self.fail(e)

return ref_list
4 changes: 2 additions & 2 deletions src/sonic-yang-mgmt/tests/yang-model-tests/yangTest.json
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@
"DST_IP": "10.186.72.0/26",
"SRC_IP": "10.176.0.0/15",
"PRIORITY": 999980,
"IP_TYPE": "IPV4ANY"
"IP_TYPE": "IPv4ANY"
}]
},
"sonic-acl:ACL_TABLE": {
Expand Down Expand Up @@ -299,7 +299,7 @@
"PACKET_ACTION": "FORWARD",
"SRC_IPV6": "2001::1/64",
"PRIORITY": 999980,
"IP_TYPE": "IPV4ANY"
"IP_TYPE": "IPv4ANY"
}]
},
"sonic-acl:ACL_TABLE": {
Expand Down
14 changes: 8 additions & 6 deletions src/sonic-yang-mgmt/yang-models/Sonic Yang Tree
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ module: sonic-port
+--rw speed? uint32
+--rw mtu? uint16
+--rw admin_status head:admin_status
+--rw fec? string
module: sonic-portchannel
+--rw sonic-portchannel
+--rw PORTCHANNEL
Expand All @@ -81,21 +82,22 @@ module: sonic-portchannel
module: sonic-vlan
+--rw sonic-vlan
+--rw VLAN_INTERFACE
| +--rw VLAN_INTERFACE_LIST* [vlanid ip-prefix]
| +--rw vlanid -> ../../../VLAN/VLAN_LIST/vlanid
| +--rw VLAN_INTERFACE_LIST* [vlan_name ip-prefix]
| +--rw vlan_name -> /sonic-vlan/VLAN/VLAN_LIST/vlan_name
| +--rw ip-prefix inet:ip-prefix
| +--rw scope? enumeration
| +--rw family? head:ip-family
+--rw VLAN
| +--rw VLAN_LIST* [vlanid]
| +--rw vlanid uint16
| +--rw VLAN_LIST* [vlan_name]
| +--rw vlan_name string
| +--rw vlanid? uint16
| +--rw description? string
| +--rw dhcp_servers* inet:ip-address
| +--rw mtu? uint16
| +--rw admin_status head:admin_status
| +--rw members* -> /port:sonic-port/PORT/PORT_LIST/port_name
+--rw VLAN_MEMBER
+--rw VLAN_MEMBER_LIST* [vlanid port]
+--rw vlanid -> ../../../VLAN/VLAN_LIST/vlanid
+--rw VLAN_MEMBER_LIST* [vlan_name port]
+--rw vlan_name -> /sonic-vlan/VLAN/VLAN_LIST/vlan_name
+--rw port -> /port:sonic-port/PORT/PORT_LIST/port_name
+--rw tagging_mode head:vlan_tagging_mode
9 changes: 8 additions & 1 deletion src/sonic-yang-mgmt/yang-models/sonic-port.yang
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ module sonic-port{
}

leaf lanes {
mandatory true;
type string {
length 1..128;
}
Expand All @@ -60,6 +61,7 @@ module sonic-port{
}

leaf speed {
mandatory true;
type uint32 {
range 1..100000;
}
Expand All @@ -71,8 +73,13 @@ module sonic-port{
}
}

leaf index {
type uint8 {
range 1..128;
}
}

leaf admin_status {
mandatory true;
type head:admin_status;
}

Expand Down