#!/usr/bin/env python import re import sysrepo as sr from pnf import PNF def module_change_cb(sess, module_name, event, private_ctx): """ Handle event change based on yang operation. """ try: change_path = "/" + module_name + ":*" iterate = sess.get_changes_iter(change_path) change = sess.get_change_next(iterate) changelist = [] operation = change.oper() pnf = PNF() if event == sr.SR_EV_APPLY: print("------------------> Start Handle Change <------------------") if operation == sr.SR_OP_CREATED: while True: change = sess.get_change_next(iterate) if change is None: break changelist.append(change.new_val().to_string()) result = re.findall(r'\'(.*?)\'', changelist[0]) jobid = result[0] print("Subscription Created : " + changelist[0]) pnf.create_job_id(jobid, changelist) pnf.pm_job() elif operation == sr.SR_OP_DELETED: changelist.append(change.old_val().to_string()) result = re.findall(r'\'(.*?)\'', changelist[0]) jobid = result[0] print("Subscription Deleted : " + changelist[0]) pnf.delete_job_id(jobid) pnf.pm_job() elif operation == sr.SR_OP_MODIFIED: changelist.append(change.new_val().to_string()) element = changelist[0] print("Subscription Modified :" + element) result = re.findall(r'\'(.*?)\'', changelist[0]) jobid = result[0] administrative_state = ((element.rsplit('/', 1)[1]).split('=', 1))[1].strip() if administrative_state == "LOCKED": pnf.delete_job_id(jobid) pnf.pm_job() elif administrative_state == "UNLOCKED": select_xpath = "/" + module_name + ":*//*" values = sess.get_items(select_xpath) if values is not None: for i in range(values.val_cnt()): if jobid in values.val(i).to_string(): changelist.append(values.val(i).to_string()) pnf.create_job_id(jobid, changelist) pnf.pm_job() else: print("Unknown Operation") print("------------------> End Handle Change <------------------") except Exception as error: print(error) return sr.SR_ERR_OK def start(): """ main function to create connection based on moudule name. """ try: module_name = "pnf-subscriptions" conn = sr.Connection(module_name) sess = sr.Session(conn) subscribe = sr.Subscribe(sess) subscribe.module_change_subscribe(module_name, module_change_cb) sr.global_loop() print("Application exit requested, exiting.") except Exception as error: print(error) if __name__ == '__main__': start()