--- /dev/null
+*** Settings ***
+Library Collections
+Library RequestsLibrary
+Variables ../variables/Variables.py
+
+*** Keywords ***
+Create Records
+ [Arguments] ${controller_ip} ${node} ${first} ${last} ${prefix} ${field bases} ${postfix}
+ [Documentation] POSTs records to a controller's data store. First and last index numbers are specified
+ ... as is a dictionary called field_bases containing the base name for the field contents
+ ... onto which will be appended the index number. Prefix and postfix are used to complete
+ ... the JSON payload. The keyword passes if return code is correct.
+ ${last} Convert to Integer ${last}
+ : FOR ${INDEX} IN RANGE ${first} ${last+1}
+ \ ${payload}= Assemble Payload ${INDEX} ${prefix} ${field bases} ${postfix}
+ \ Log ${payload}
+ \ Create_Session session http://${controller_ip}:${RESTCONFPORT}${CONFIG_API} headers=${HEADERS} auth=${AUTH}
+ \ ${resp} RequestsLibrary.Post session ${node} ${payload}
+ \ Log ${resp}
+ \ Should Be Equal As Strings ${resp} <Response [204]>
+
+Read Records
+ [Arguments] ${controller_ip} ${node}
+ [Documentation] GETs records from a shard on a controller's data store.
+ Create_Session session http://${controller_ip}:${RESTCONFPORT}${CONFIG_API} headers=${HEADERS} auth=${AUTH}
+ ${resp}= RequestsLibrary.Get session ${node}
+ [Return] ${resp.json()}
+
+Update Records
+ [Arguments] ${controller_ip} ${node} ${first} ${last} ${prefix} ${field bases} ${postfix}
+ [Documentation] PUTs records to shard on a controller's data store. First and last index numbers are specified
+ ... as is a dictionary called field_bases containing the base name for the field contents
+ ... onto which will be appended the index number. Prefix and postfix are used to complete
+ ... the JSON payload. The keyword passes if return code is correct.
+ ${last} Convert to Integer ${last}
+ : FOR ${INDEX} IN RANGE ${first} ${last+1}
+ \ ${payload}= Assemble Payload ${INDEX} ${prefix} ${field bases} ${postfix}
+ \ Log ${payload}
+ \ Create_Session session http://${controller_ip}:${RESTCONFPORT}${CONFIG_API} headers=${HEADERS} auth=${AUTH}
+ \ ${resp}= RequestsLibrary.Put session ${node}/${INDEX} ${payload}
+ \ Log ${resp}
+ \ Should Be Equal As Strings ${resp} <Response [200]>
+
+Delete Records
+ [Arguments] ${controller_ip} ${node} ${first} ${last}
+ [Documentation] DELETEs specified range of records from a shard on a contrsoller's data store.
+ ${last} Convert to Integer ${last}
+ : FOR ${INDEX} IN RANGE ${first} ${last+1}
+ \ Create_Session session http://${controller_ip}:${RESTCONFPORT}${CONFIG_API} headers=${HEADERS} auth=${AUTH}
+ \ ${resp}= RequestsLibrary.Delete session ${node}/${INDEX}
+ \ Should Be Equal As Strings ${resp} <Response [200]>
+
+Delete All Records
+ [Arguments] ${controller_ip} ${node}
+ [Documentation] DELETEs all records from a shard on a controller's data store.
+ Create_Session session http://${controller_ip}:${RESTCONFPORT}${CONFIG_API} headers=${HEADERS} auth=${AUTH}
+ ${resp}= RequestsLibrary.Delete session ${node}
+ Should Be Equal As Strings ${resp} <Response [200]>
+
+Assemble Payload
+ [Arguments] ${id} ${prefix} ${field bases} ${postfix}
+ [Documentation] Populates a payload for creating or updating a shard record.
+ ... id: The record number and is also appended onto each field to uniquely identify it.
+ ... prefix: The portion of the json payload before the records.
+ ... field bases: A dictionary of records onto which the id is appended.
+ ... prefix: The portion of the json payload after the records.
+ ${length}= Get Length ${field bases}
+ ${keys}= Get Dictionary Keys ${field bases}
+ ${payload}= Set Variable ${prefix}
+ : FOR ${key string} IN @{keys}
+ \ ${value string}= Get From Dictionary ${field bases} ${key string}
+ \ ${payload}= Catenate ${payload} "${key string}": "${value string}${id}",
+ ${payload}= Get Substring ${payload} ${EMPTY} -1
+ ${payload}= Catenate ${payload} ${postfix}
+ [Return] ${payload}