- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-31-2020 02:26 AM
I want to configure a service using an action with code written in Python.
To be able to rollback that configuration would like to get the commit ID to be passed as result (output) of the action. Then, using that ID, I want to rollback that specific commit using in another action.
So what I need is somethiong like that
Configuring Action
with ncs.maapi.Maapi() as m:
with ncs.maapi.Session(m, uinfo.username, uinfo.context):
with m.start_write_trans() as t:
root = ncs.maagic.get_root(t)
Some code
t.apply()
output.commitID = ?????
Rollbacl Action
with ncs.maapi.Maapi() as m:
with ncs.maapi.Session(m, uinfo.username, uinfo.context):
with m.start_write_trans() as t:
Somecommand(input.commitID)
Solved! Go to Solution.
- Labels:
-
DevOps
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-02-2020 04:55 AM
You would need to:
1) Commit using a commit-tag:
set_label(sock, thandle, label) -> None
Set the Label that is stored in the rollback file when a transaction
towards running is committed.
Keyword arguments:
sock -- a python socket instance
thandle -- transaction handle
label -- the Label
2) When you would like to rollback, you need to search through your rollback files to find your label:
list_rollbacks(sock, rp_size) -> list
Get a list of rollbacks, at most rp_size big.
Keyword arguments:
sock -- a python socket instance
rp_size -- maximum number of rollback files to list
Something like this:
items=m.list_rollbacks(10)
for item in items:
print(item.label)
print(item.fixed_nr)
3) with the target fixed_nr, you can load the rollback.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-05-2021 10:02 PM
Adding rollback example using commit label:
def _rollback(username, commit_label): success = False rollback_num = __get_rollback_num(username, commit_label) print('Rollback Number:', rollback_num) try: with ncs.maapi.single_write_trans(username, 'system') as write_trans: # perform rollback _ncs.maapi.load_rollback_fixed(write_trans.maapi.msock, write_trans.th, rollback_num) write_trans.apply() print(f'Rollback {rollback_num} success') success = True except Exception as e: print(str(e)) return success def __get_rollback_num(username, commit_label): with ncs.maapi.single_read_trans(username, 'system') as read_trans: rollbacks = _ncs.maapi.list_rollbacks(read_trans.maapi.msock, 10) for rollback in rollbacks: if rollback.label == commit_label: return rollback.fixed_nr return -1
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-01-2020 05:17 AM
Hi,
In NSO5.4, we added support for receiving the rollback id in the commit:
- ncs: Add support for retrieving id of the rollback file created during a
transaction commit. The id returned can later be used to do selective
rollback. See API documentation for details. C, Python, Java, and Erlang
MAAPI interfaces supported. CLI, RESTCONF, NETCONF, and JSON-RPC
supported.
I believe the new python method is:
_ncs.maapi.get_rollback_id(sock, thandle) -> int
Get rollback id from a committed transaction. Returns int with fixed id,
where -1 indicates an error or no rollback id available.
Keyword arguments:
sock -- a python socket instance
thandle -- transaction handle
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-02-2020 12:32 AM
Thanks for the information.
I undestand that with the release 4.6.5 that I'm using there is non possibility to accomplish that task.
As a work-around is it possible to set a label an later have an action that rollback selective that commit?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-02-2020 04:55 AM
You would need to:
1) Commit using a commit-tag:
set_label(sock, thandle, label) -> None
Set the Label that is stored in the rollback file when a transaction
towards running is committed.
Keyword arguments:
sock -- a python socket instance
thandle -- transaction handle
label -- the Label
2) When you would like to rollback, you need to search through your rollback files to find your label:
list_rollbacks(sock, rp_size) -> list
Get a list of rollbacks, at most rp_size big.
Keyword arguments:
sock -- a python socket instance
rp_size -- maximum number of rollback files to list
Something like this:
items=m.list_rollbacks(10)
for item in items:
print(item.label)
print(item.fixed_nr)
3) with the target fixed_nr, you can load the rollback.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-05-2021 10:02 PM
Adding rollback example using commit label:
def _rollback(username, commit_label): success = False rollback_num = __get_rollback_num(username, commit_label) print('Rollback Number:', rollback_num) try: with ncs.maapi.single_write_trans(username, 'system') as write_trans: # perform rollback _ncs.maapi.load_rollback_fixed(write_trans.maapi.msock, write_trans.th, rollback_num) write_trans.apply() print(f'Rollback {rollback_num} success') success = True except Exception as e: print(str(e)) return success def __get_rollback_num(username, commit_label): with ncs.maapi.single_read_trans(username, 'system') as read_trans: rollbacks = _ncs.maapi.list_rollbacks(read_trans.maapi.msock, 10) for rollback in rollbacks: if rollback.label == commit_label: return rollback.fixed_nr return -1
