Kea 3.1.0
isc::yang::TranslatorDatabase Class Reference

Database access translation between YANG and JSON. More...

#include <translator_database.h>

+ Inheritance diagram for isc::yang::TranslatorDatabase:

Public Member Functions

 TranslatorDatabase (sysrepo::Session session, const std::string &model)
 Constructor.
 
virtual ~TranslatorDatabase ()=default
 Destructor.
 
isc::data::ElementPtr getDatabase (libyang::DataNode const &data_node)
 Translate a database access from YANG to JSON.
 
isc::data::ElementPtr getDatabaseFromAbsoluteXpath (std::string const &xpath)
 Translate a database access from YANG to JSON.
 
void setDatabase (const std::string &xpath, isc::data::ConstElementPtr elem, bool has_mandatory_key)
 Translate and set database access from JSON to YANG.
 
- Public Member Functions inherited from isc::yang::Translator
 Translator (sysrepo::Session session, const std::string &model)
 Constructor.
 
virtual ~Translator ()=default
 Destructor.
 
template<typename T>
void checkAndGet (isc::data::ElementPtr const &storage, libyang::DataNode const &data_node, std::string const &xpath, T translate) const
 Calls {translate} for the element found at {xpath} relative to {data_node} and sets the result in {storage} with the {xpath} key.
 
void checkAndGetAndJsonifyLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, const std::string &name) const
 Retrieves a child YANG data node identified by name from the given parent YANG container node, converts it from string to JSON and stores it in the specified storage.
 
template<typename T>
void checkAndGetDiverging (isc::data::ElementPtr const &storage, libyang::DataNode const &data_node, std::string const &key, std::string const &xpath, T translate) const
 Calls {translate} for the element found at {xpath} relative to {data_node} and sets the result in {storage} with the {key} key.
 
void checkAndGetDivergingLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, std::string const &name, std::string const &yang_name) const
 Retrieves a child YANG data node identified by name from the given parent YANG container node and stores it in the specified storage.
 
void checkAndGetLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, std::string const &name) const
 Retrieves a child YANG data node identified by name from the given parent YANG container node and stores it in the specified storage.
 
void checkAndSetDivergingLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, std::string const &yang_name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void checkAndSetLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void checkAndSetLeafList (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath as a leaf-list.
 
void checkAndSetUserContext (isc::data::ConstElementPtr const &from, std::string const &xpath)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void checkAndStringifyAndSetLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void deleteItem (const std::string &xpath)
 Delete basic value from YANG.
 
libyang::DataNode findXPath (std::string const &xpath) const
 Retrieves a YANG data node by xpath.
 
template<typename functor_t>
void forAll (std::string const &xpath, functor_t f) const
 Run a function for a node and all its children.
 
std::optional< libyang::DataNode > getData (std::string const &xpath) const
 Get a YANG data node found at the given absolute xpath.
 
isc::data::ElementPtr getItem (libyang::DataNode const &data_node, std::string const &xpath) const
 Translate a basic value from YANG to JSON for a given xpath that is relative to the given source node.
 
isc::data::ElementPtr getItemFromAbsoluteXpath (std::string const &xpath) const
 Translate a basic value from YANG to JSON for a given absolute xpath.
 
template<typename T>
isc::data::ElementPtr getList (libyang::DataNode const &data_node, std::string const &xpath, T &t, isc::data::ElementPtr(T::*f)(libyang::DataNode const &)) const
 Retrieve a list as ElementPtr from sysrepo from a certain xpath.
 
void getMandatoryDivergingLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, std::string const &name, std::string const &yang_name) const
 Retrieves a child YANG data node identified by one name from the given parent YANG container node and stores it in the specified storage under a different name.
 
void getMandatoryLeaf (isc::data::ElementPtr &storage, libyang::DataNode const &data_node, std::string const &name) const
 Retrieves a child YANG data node identified by name from the given parent YANG container node and stores it in the specified storage.
 
bool schemaNodeExists (std::string const &xpath) const
 Checks whether a YANG node exists in the schema.
 
void setItem (const std::string &xpath, isc::data::ConstElementPtr const elem, libyang::LeafBaseType const type)
 Translate and set basic value from JSON to YANG.
 
void setMandatoryDivergingLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, std::string const &yang_name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 
void setMandatoryLeaf (isc::data::ConstElementPtr const &from, std::string const &xpath, std::string const &name, libyang::LeafBaseType const type)
 Get an element from given ElementPtr node and set it in sysrepo at given xpath.
 

Protected Member Functions

isc::data::ElementPtr getDatabaseKea (libyang::DataNode const &data_node)
 getDatabase JSON for kea-dhcp[46]-server models.
 
void setDatabaseKea (const std::string &xpath, isc::data::ConstElementPtr elem, bool has_mandatory_key)
 setDatabase for kea-dhcp[46]-server models.
 

Additional Inherited Members

- Static Public Member Functions inherited from isc::yang::Translator
static isc::data::ElementPtr translateFromYang (std::optional< libyang::DataNode > data_node)
 Translate basic value from the given YANG data node to JSON element.
 
static std::optional< std::string > translateToYang (isc::data::ConstElementPtr const &elem, libyang::LeafBaseType const type)
 Translate basic value from JSON to YANG.
 
- Protected Types inherited from isc::yang::Translator
using Deserializer
 Maps YANG types to functions that transform a YANG type into an ElementPtr.
 
using Serializer
 Maps YANG types to functions that transform the string representation of an Element into a string that can be passed into Session::setItem().
 
- Static Protected Member Functions inherited from isc::yang::Translator
static std::string decode64 (std::string const &input)
 Decode a YANG element of binary type to a string that can be stored in an Element::string JSON.
 
static std::string encode64 (std::string const &input)
 Encode a string such that it can be stored in a YANG element of binary type.
 
static Deserializer initializeDeserializer ()
 Initializes the deserializer which is used to translate a YANG node to an ElementPtr.
 
static Serializer initializeSerializer ()
 Initializes the serializer which is used to translate the string value of an Element to a string that can be passed into Session::setItem().
 
- Protected Attributes inherited from isc::yang::Translator
std::string model_
 The model.
 
sysrepo::Session session_
 The sysrepo session.
 

Detailed Description

Database access translation between YANG and JSON.

JSON syntax for all Kea servers with database access is:

{
"type": <type>,
"user": <user>,
"password": <password>,
"host": <host>,
"name": <name>,
"persist": <persist flag>,
"port": <port>,
"lfc-interval": <lfc interval>,
"readonly": <readonly flag>,
"trust-anchor": <trust anchor>,
"cert-file": <cert file>,
"key-file": <key file>,
"cipher-list": <cipher list>,
"connect-timeout": <connect timeout>,
"max-reconnect-tries": <maximum reconnect tries>,
"reconnect-wait-time": <reconnect wait time>,
"max-row-errors": <maximum row errors>,
"user-context": { <json map> },
"comment": <comment>
}

YANG syntax for kea-dhcp[46] is using database-type as the list key:

+--rw database
+--rw database-type string
+--rw user? string
+--rw password? string
+--rw host? string
+--rw name? string
+--rw persist? boolean
+--rw port? uint16
+--rw lfc-interval? uint32
+--rw readonly? boolean
+--rw trust-anchor? string
+--rw cert-file? string
+--rw key-file? string
+--rw cipher-list? string
+--rw connect-timeout? uint32
+--rw max-reconnect-tries? uint32
+--rw reconnect-wait-time? uint32
+--rw max-row-errors? uint32
+--rw on-fail? string
+--rw retry-on-startup? boolean
+--rw user-context? user-context

An example in JSON and YANG formats:

[
{
"type": "mysql",
"name": "kea",
"user": "kea",
"password": "kea",
"host": "localhost",
"port": 3306
}
]
/kea-dhcp6-server:config (container)
/kea-dhcp6-server:config/
hosts-database[database-type='mysql'] (list instance)
/kea-dhcp6-server:config/
hosts-database[database-type='mysql']/type = mysql
/kea-dhcp6-server:config/
hosts-database[database-type='mysql']/name = kea
/kea-dhcp6-server:config/
hosts-database[database-type='mysql']/user = kea
/kea-dhcp6-server:config/
hosts-database[database-type='mysql']/password = kea
/kea-dhcp6-server:config/
hosts-database[database-type='mysql']/host = localhost
/kea-dhcp6-server:config/
hosts-database[database-type='mysql']/port = 3306

A translator class for converting a database access parameters between YANG and JSON.

Supports the following models:

  • kea-dhcp4-server
  • kea-dhcp6-server

Definition at line 104 of file translator_database.h.

Constructor & Destructor Documentation

◆ TranslatorDatabase()

isc::yang::TranslatorDatabase::TranslatorDatabase ( sysrepo::Session session,
const std::string & model )

Constructor.

Parameters
sessionSysrepo session.
modelModel name.

Definition at line 22 of file translator_database.cc.

References isc::yang::Translator::Translator().

Referenced by isc::yang::TranslatorDatabases::TranslatorDatabases().

+ Here is the call graph for this function:

◆ ~TranslatorDatabase()

virtual isc::yang::TranslatorDatabase::~TranslatorDatabase ( )
virtualdefault

Destructor.

Member Function Documentation

◆ getDatabase()

ElementPtr isc::yang::TranslatorDatabase::getDatabase ( libyang::DataNode const & data_node)

Translate a database access from YANG to JSON.

Parameters
data_nodethe YANG node representing the control socket
Returns
the JSON representation of the database
Exceptions
NetconfErrorwhen sysrepo raises an error.

Definition at line 27 of file translator_database.cc.

References getDatabaseKea(), isc_throw, isc::yang::Translator::model_, and isc::Exception::what().

Referenced by getDatabaseFromAbsoluteXpath(), isc::yang::TranslatorDatabases::getDatabasesKea(), and isc::yang::TranslatorConfig::getServerKeaDhcpCommon().

+ Here is the call graph for this function:

◆ getDatabaseFromAbsoluteXpath()

ElementPtr isc::yang::TranslatorDatabase::getDatabaseFromAbsoluteXpath ( std::string const & xpath)

Translate a database access from YANG to JSON.

Note
This is a computationally expensive operation that makes a lookup in the sysrepo datastore by calling Session::getData(). It should be used sparingly in production code, mainly to get an initial data node to work with. It may be used at will in unit tests. Use getDatabase(libyang::DataNode) as a scalable alternative.
Parameters
xpathThe xpath of the database.
Returns
JSON representation of the database.
Exceptions
NetconfErrorwhen sysrepo raises an error.

Definition at line 42 of file translator_database.cc.

References isc::yang::Translator::findXPath(), and getDatabase().

+ Here is the call graph for this function:

◆ getDatabaseKea()

ElementPtr isc::yang::TranslatorDatabase::getDatabaseKea ( libyang::DataNode const & data_node)
protected

getDatabase JSON for kea-dhcp[46]-server models.

Parameters
data_nodethe YANG node representing the database configuration
Returns
JSON representation of the database
Exceptions
NetconfErrorwhen sysrepo raises an error.

Definition at line 51 of file translator_database.cc.

References isc::yang::Translator::checkAndGetAndJsonifyLeaf(), isc::yang::Translator::checkAndGetDivergingLeaf(), isc::yang::Translator::checkAndGetLeaf(), and Element::createMap().

Referenced by getDatabase().

+ Here is the call graph for this function:

◆ setDatabase()

void isc::yang::TranslatorDatabase::setDatabase ( const std::string & xpath,
isc::data::ConstElementPtr elem,
bool has_mandatory_key )

Translate and set database access from JSON to YANG.

Null elem argument removes the database entry.

Parameters
xpathThe xpath of the database access.
elemThe JSON element.
has_mandatory_keyWhether this specific database instance has a mandatory key.

Definition at line 83 of file translator_database.cc.

References isc_throw, isc::yang::Translator::model_, setDatabaseKea(), and isc::Exception::what().

Referenced by isc::yang::TranslatorDatabases::setDatabasesKea(), and isc::yang::TranslatorConfig::setServerKeaDhcpCommon().

+ Here is the call graph for this function:

◆ setDatabaseKea()

void isc::yang::TranslatorDatabase::setDatabaseKea ( const std::string & xpath,
isc::data::ConstElementPtr elem,
bool has_mandatory_key )
protected

setDatabase for kea-dhcp[46]-server models.

Parameters
xpathThe xpath of the database access.
elemThe JSON element.
has_mandatory_keyWhether this specific database instance has a mandatory key.
Exceptions
BadValueon database without type,

Definition at line 100 of file translator_database.cc.

References isc::yang::Translator::checkAndSetDivergingLeaf(), isc::yang::Translator::checkAndSetLeaf(), isc::yang::Translator::checkAndSetUserContext(), isc::yang::Translator::deleteItem(), and isc::yang::Translator::setItem().

Referenced by setDatabase().

+ Here is the call graph for this function:

The documentation for this class was generated from the following files: