我正在创建一个自定义系统,当用户提交 netconfedit-config
时,它将在我的系统中启动一组操作,这些操作将自动更改我们系统的配置,然后向用户提交成功或失败的通知。
把它想象成一个大的 SQL 事务,最后要么提交要么回滚。
所以,步骤
- 用户提交一个
edit-config
- 系统接受配置并努力实现此配置
- 如果配置成功,则通过竖起大拇指的响应发送(不确定执行此操作的正式方式)
- 如果配置失败,则通过不满意的响应发送(我必须确保配置在内部回滚)
- 所有这些都是原子完成的。因此,如果用户连续提交两个配置,它们不会相互冲突。
我们实现这一点的工作想法(可能不是最好的想法)是通过接受 来解决这个问题edit-config
,然后在 sysrepo 中,我们将使用成功或失败标志编辑部分叶子,它们将与初始变化。我们希望这将使一切保持原子性;通过在会话之外进行编辑,多个配置更改可能会相互冲突。
我们不确定使用纯 netconf 或直接利用 sysrepo 来解决这个问题。我们注意到所有这些为 sysrepo 制作的插件/绑定,并认为这些可以直接用于与我们的数据存储区通信。
但话虽如此,我们的工作想法很可能不是最佳实践方法。实现这一目标的最佳方法是什么?
我们的系统是:
而我们的yang文件是
module rxmbn {
namespace "urn:com:zug:rxmbn";
prefix rxmbn;
container rxmbn-config {
config true;
leaf raw {
type string;
}
leaf raw_hashCode {
type int32;
}
leaf odl_last_processed_hashCode {
type int32;
}
leaf processed {
type boolean;
default "false";
}
}
}
目前我们可以:
- 对 netoperer 服务器执行编辑配置
- 我们可以在 sysrepo 数据存储中看到新的配置寄存器
- 我们可以通过 sysrepo 的 API 捕获 sysrepo 注册数据的时刻
但是我们遇到了问题
- 在更新会话期间以原子方式编辑数据存储(由于锁定,这是正常的。实际上,如果在更新会话期间无法编辑,那很好,也没有必要。主要目标是下一个项目符号)
- 以原子方式响应新的编辑配置并响应最终用户
我们对 netconf 和 yang 都有些陌生,所以我确信有一些方法可以通过 netopeer 会话或 sysrepo 来利用notification
api 或event
api,只是我们还不够了解。
如果有任何示例或实施建议可以为此创建原子事务,那将非常有用。