Skip to content

Commit

Permalink
vyos.configtree: T6742: add bindings for create_node and is_leaf/set_…
Browse files Browse the repository at this point in the history
…leaf (#4109)
  • Loading branch information
dmbaturin authored Oct 3, 2024
1 parent 320de31 commit e0c643a
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions python/vyos/configtree.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ def __init__(self, config_string=None, address=None, libpath=LIBPATH):
self.__to_json_ast.argtypes = [c_void_p]
self.__to_json_ast.restype = c_char_p

self.__create_node = self.__lib.create_node
self.__create_node.argtypes = [c_void_p, c_char_p]
self.__create_node.restype = c_int

self.__set_add_value = self.__lib.set_add_value
self.__set_add_value.argtypes = [c_void_p, c_char_p, c_char_p]
self.__set_add_value.restype = c_int
Expand Down Expand Up @@ -140,6 +144,14 @@ def __init__(self, config_string=None, address=None, libpath=LIBPATH):
self.__set_tag.argtypes = [c_void_p, c_char_p]
self.__set_tag.restype = c_int

self.__is_leaf = self.__lib.is_leaf
self.__is_leaf.argtypes = [c_void_p, c_char_p]
self.__is_leaf.restype = c_bool

self.__set_leaf = self.__lib.set_leaf
self.__set_leaf.argtypes = [c_void_p, c_char_p, c_bool]
self.__set_leaf.restype = c_int

self.__get_subtree = self.__lib.get_subtree
self.__get_subtree.argtypes = [c_void_p, c_char_p]
self.__get_subtree.restype = c_void_p
Expand Down Expand Up @@ -197,6 +209,14 @@ def to_json(self):
def to_json_ast(self):
return self.__to_json_ast(self.__config).decode()

def create_node(self, path):
check_path(path)
path_str = " ".join(map(str, path)).encode()

res = self.__create_node(self.__config, path_str)
if (res != 0):
raise ConfigTreeError(f"Path already exists: {path}")

def set(self, path, value=None, replace=True):
"""Set new entry in VyOS configuration.
path: configuration path e.g. 'system dns forwarding listen-address'
Expand Down Expand Up @@ -349,6 +369,22 @@ def set_tag(self, path):
else:
raise ConfigTreeError("Path [{}] doesn't exist".format(path_str))

def is_leaf(self, path):
check_path(path)
path_str = " ".join(map(str, path)).encode()

return self.__is_leaf(self.__config, path_str)

def set_leaf(self, path, value):
check_path(path)
path_str = " ".join(map(str, path)).encode()

res = self.__set_leaf(self.__config, path_str, value)
if (res == 0):
return True
else:
raise ConfigTreeError("Path [{}] doesn't exist".format(path_str))

def get_subtree(self, path, with_node=False):
check_path(path)
path_str = " ".join(map(str, path)).encode()
Expand Down

0 comments on commit e0c643a

Please sign in to comment.