ncs.maapi Module
MAAPI high level module.
This module defines a high level interface to the low-level maapi functions.
The 'Maapi' class encapsulates a MAAPI connection which upon constructing, sets up a connection towards ConfD/NCS. An example of setting up a transaction and manipulating data:
import ncs
m = ncs.maapi.Maapi()
m.start_user_session('admin', 'test_context')
t = m.start_write_trans()
t.get_elem('/model/data{one}/str')
t.set_elem('testing', '/model/data{one}/str')
t.apply()
Another way is to use context managers, which will handle all cleanup related to transactions, user sessions and socket connections:
with ncs.maapi.Maapi() as m:
with ncs.maapi.Session(m, 'admin', 'test_context'):
with m.start_write_trans() as t:
t.get_elem('/model/data{one}/str')
t.set_elem('testing', '/model/data{one}/str')
t.apply()
Finally, a really compact way of doing this:
with ncs.maapi.single_write_trans('admin', 'test_context') as t:
t.get_elem('/model/data{one}/str')
t.set_elem('testing', '/model/data{one}/str')
t.apply()
Functions
connect
connect(ip='127.0.0.1', port=4569, path=None)
Convenience function for connecting to ConfD/NCS.
The 'ip' and 'port' arguments are ignored if path is specified.
Arguments:
ip -- ConfD/NCS instance ip address (str)
port -- ConfD/NCS instance port (int)
path -- ConfD/NCS instance location path (str)
Returns:
socket (Python socket)
retry_on_conflict
retry_on_conflict(retries=10, log=None)
Function/method decorator to retry a transaction in case of conflicts.
When executing multiple concurrent transactions against the NCS RUNNING datastore, read-write conflicts are resolved by rejecting transactions having potentially stale data with ERR_TRANSACTION_CONFLICT.
This decorator restarts a function, should it run into a conflict, giving it multiple attempts to apply. The decorated function must start its own transaction because a conflicting transaction must be thrown away entirely and a new one started.
Example usage:
@retry_on_conflict()
def do_work():
with ncs.maapi.single_write_trans('admin', 'python') as t:
root = ncs.maagic.get_root(t)
root.some_value = str(root.some_other_value)
t.apply()
Arguments:
retries -- number of times to retry (int)
log -- optional log object for logging conflict details
single_read_trans
single_read_trans(user, context, groups=[], db=2, ip='127.0.0.1', port=4569, path=None, src_ip='127.0.0.1', src_port=0, proto=1, vendor=None, product=None, version=None, client_id=None, load_schemas=True, flags=0)
Context manager for a single READ transaction.
This function connects to ConfD/NCS, starts a user session and finally starts a new READ transaction.
Function signature:
def single_read_trans(user, context, groups=[],
db=RUNNING, ip=<CONFD-OR-NCS-ADDR>,
port=<CONFD-OR-NCS-PORT>, path=None,
src_ip=<CONFD-OR-NCS-ADDR>, src_port=0,
proto=PROTO_TCP,
vendor=None, product=None, version=None,
client_id=_mk_client_id(),
load_schemas=LOAD_SCHEMAS_LOAD, flags=0):
For argument db, flags see Maapi.start_trans(). For arguments user, context, groups, src_ip, src_port, proto, vendor, product, version and client_id see Maapi.start_user_session(). For arguments ip, port and path see connect(). For argument load_schemas see init().
Arguments:
user - username (str)
context - context for the session (str)
groups - groups (list)
db -- database (int)
ip -- ConfD/NCS instance ip address (str)
port -- ConfD/NCS instance port (int)
path -- ConfD/NCS instance location path (str)
src_ip - source ip address (str)
src_port - source port (int)
proto - protocol used by for connecting (i.e. ncs.PROTO_TCP)
vendor -- lock error information (str, optional)
product -- lock error information (str, optional)
version -- lock error information (str, optional)
client_id -- lock error information (str, optional)
load_schemas - passed on to Maapi.init()
flags -- additional transaction flags (int)
Returns:
read transaction object (maapi.Transaction)
single_write_trans
single_write_trans(user, context, groups=[], db=2, ip='127.0.0.1', port=4569, path=None, src_ip='127.0.0.1', src_port=0, proto=1, vendor=None, product=None, version=None, client_id=None, load_schemas=True, flags=0)
Context manager for a single READ/WRITE transaction.
This function connects to ConfD/NCS, starts a user session and finally starts a new READ/WRITE transaction.
Function signature:
def single_write_trans(user, context, groups=[],
db=RUNNING, ip=<CONFD-OR-NCS-ADDR>,
port=<CONFD-OR-NCS-PORT>, path=None,
src_ip=<CONFD-OR-NCS-ADDR>, src_port=0,
proto=PROTO_TCP,
vendor=None, product=None, version=None,
client_id=_mk_client_id(),
load_schemas=LOAD_SCHEMAS_LOAD, flags=0):
For argument db, flags see Maapi.start_trans(). For arguments user, context, groups, src_ip, src_port, proto, vendor, product, version and client_id see Maapi.start_user_session(). For arguments ip, port and path see connect(). For argument load_schemas see init().
Arguments:
user - username (str)
context - context for the session (str)
groups - groups (list)
db -- database (int)
ip -- ConfD/NCS instance ip address (str)
port -- ConfD/NCS instance port (int)
path -- ConfD/NCS instance location path (str)
src_ip - source ip address (str)
src_port - source port (int)
proto - protocol used by the client for connecting (int)
vendor -- lock error information (str, optional)
product -- lock error information (str, optional)
version -- lock error information (str, optional)
client_id -- lock error information (str, optional)
load_schemas - passed on to Maapi.init()
flags -- additional transaction flags (int)
Returns:
write transaction object (maapi.Transaction)
Classes
class CommitParams
Class representing NSO commit parameters.
Start with creating an empty instance of this class and set commit parameters using helper methods.
CommitParams(result=None)
Members:
class DryRunOutformat
Enumeration for dry run formats: XML = 1 CLI = 2 NATIVE = 3 CLI_C = 4
DryRunOutformat(*values)
Members:
class Key
Key string encapsulation and helper.
Key(key, enum_cs_nodes=None)
Initialize a key.
'key' may be a string or a list of strings.
Members:
None
class Maapi
Class encapsulating a MAAPI connection.
Maapi(ip='127.0.0.1', port=4569, path=None, load_schemas=True, msock=None)
Create a Maapi instance.
Arguments:
ip -- ConfD/NCS instance ip address (str, optional)
port -- ConfD/NCS instance port (int, optional)
path -- ConfD/NCS instance location path (str, optional)
msock -- already connected MAAPI socket (socket.socket, optional) (ip, port and path ignored)
load_schemas -- whether schemas should be loaded/reloaded or not LOAD_SCHEMAS_LOAD = load schemas unless already loaded LOAD_SCHEMAS_SKIP = do not load schemas LOAD_SCHEMAS_RELOAD = force reload of schemas
The option LOAD_SCHEMAS_RELOAD can be used to force a reload of schemas, for example when connecting to a different ConfD/NSO node. Note that previously constructed maagic objects will be invalid and using them will lead to undefined behavior. Use this option with care, for example in a small script querying a list of running nodes.
Members:
class NoOverwriteScope
Enumeration for no-overwrite scopes: WRITE_SET_ONLY = 1 WRITE_AND_FULL_READ_SET = 2 WRITE_AND_SERVICE_READ_SET = 3
NoOverwriteScope(*values)
Members:
class Session
Encapsulate a MAAPI user session.
Context manager for user sessions. This class makes it easy to use a single Maapi connection and switch user session along the way. For example:
with Maapi() as m:
for user, context, device in devlist:
with Session(m, user, context):
with m.start_write_trans() as t:
# ...
# do something using the correct user session
# ...
t.apply()
Session(maapi, user, context, groups=[], src_ip='127.0.0.1', src_port=0, proto=1, vendor=None, product=None, version=None, client_id=None, path=None)
Initialize a Session object via start_user_session().
Arguments:
maapi -- maapi object (maapi.Maapi)
for all other arguments see start_user_session()
Members:
class Transaction
Class that corresponds to a single MAAPI transaction.
Transaction(maapi, th=None, rw=None, db=2, vendor=None, product=None, version=None, client_id=None)
Initialize a Transaction object.
When created one may access the maapi and th arguments like this:
trans = Transaction(mymaapi, th=myth)
trans.maapi # the Maapi object
trans.th # the transaction handle
An instance of this class is also a context manager:
with Transaction(mymaapi, th=myth) as trans:
# do something here...
When exiting the with statement, finish() will be called.
If 'th' is left out (or None) a new transaction is started using the 'db' and 'rw' arguments, otherwise 'db' and 'rw' are ignored.
Arguments:
maapi -- a Maapi object (maapi.Maapi)
th -- a transaction handle or None
rw -- Either READ or READ_WRITE flag (ncs)
db -- Either CANDIDATE, RUNNING or STARTUP flag (cdb)
vendor -- lock error information (optional)
product -- lock error information (optional)
version -- lock error information (optional)
client_id -- lock error information (optional)
Members:
Predefined Values
CMD_KEEP_PIPE = 8
CMD_NO_AAA = 4
CMD_NO_FULLPATH = 1
CMD_NO_HIDDEN = 2
COMMIT_NCS_ASYNC_COMMIT_QUEUE = 256
COMMIT_NCS_BYPASS_COMMIT_QUEUE = 64
COMMIT_NCS_CONFIRM_NETWORK_STATE = 268435456
COMMIT_NCS_CONFIRM_NETWORK_STATE_RE_EVALUATE_POLICIES = 536870912
COMMIT_NCS_NO_DEPLOY = 8
COMMIT_NCS_NO_FASTMAP = 8
COMMIT_NCS_NO_LSA = 1048576
COMMIT_NCS_NO_NETWORKING = 16
COMMIT_NCS_NO_OUT_OF_SYNC_CHECK = 32
COMMIT_NCS_NO_OVERWRITE = 1024
COMMIT_NCS_NO_REVISION_DROP = 4
COMMIT_NCS_RECONCILE_ATTACH_NON_SERVICE_CONFIG = 67108864
COMMIT_NCS_RECONCILE_DETACH_NON_SERVICE_CONFIG = 134217728
COMMIT_NCS_RECONCILE_DISCARD_NON_SERVICE_CONFIG = 33554432
COMMIT_NCS_RECONCILE_KEEP_NON_SERVICE_CONFIG = 16777216
COMMIT_NCS_SYNC_COMMIT_QUEUE = 512
COMMIT_NCS_USE_LSA = 524288
CONFIG_AUTOCOMMIT = 8192
CONFIG_C = 4
CONFIG_CDB_ONLY = 4194304
CONFIG_CONTINUE_ON_ERROR = 16384
CONFIG_C_IOS = 32
CONFIG_HIDE_ALL = 2048
CONFIG_J = 2
CONFIG_JSON = 131072
CONFIG_MERGE = 64
CONFIG_NO_BACKQUOTE = 2097152
CONFIG_NO_PARENTS = 524288
CONFIG_OPER_ONLY = 1048576
CONFIG_READ_WRITE_ACCESS_ONLY = 33554432
CONFIG_REPLACE = 1024
CONFIG_SHOW_DEFAULTS = 16
CONFIG_SUPPRESS_ERRORS = 32768
CONFIG_TURBO_C = 8388608
CONFIG_UNHIDE_ALL = 4096
CONFIG_WITH_DEFAULTS = 8
CONFIG_WITH_OPER = 128
CONFIG_WITH_SERVICE_META = 262144
CONFIG_XML = 1
CONFIG_XML_LOAD_LAX = 65536
CONFIG_XML_PRETTY = 512
CONFIG_XPATH = 256
DEL_ALL = 2
DEL_EXPORTED = 3
DEL_SAFE = 1
ECHO = 1
FLAG_CONFIG_CACHE_ONLY = 32
FLAG_CONFIG_ONLY = 4
FLAG_DELAYED_WHEN = 64
FLAG_DELETE = 2
FLAG_EMIT_PARENTS = 1
FLAG_HIDE_ALL_HIDEGROUPS = 256
FLAG_HIDE_INACTIVE = 8
FLAG_HINT_BULK = 1
FLAG_NON_RECURSIVE = 4
FLAG_NO_CONFIG_CACHE = 16
FLAG_NO_DEFAULTS = 2
FLAG_SKIP_SUBSCRIBERS = 512
LOAD_SCHEMAS_LOAD = True
LOAD_SCHEMAS_RELOAD = 2
LOAD_SCHEMAS_SKIP = False
MOVE_AFTER = 3
MOVE_BEFORE = 2
MOVE_FIRST = 1
MOVE_LAST = 4
NOECHO = 0
PRODUCT = 'NCS'
UPGRADE_KILL_ON_TIMEOUT = 1
Last updated
Was this helpful?