【问题标题】:Creating an atomic process for a netconf edit-config request为 netconf 编辑配置请求创建原子进程
【发布时间】:2023-03-10 09:16:04
【问题描述】:

我正在创建一个自定义系统,当用户提交 netconf edit-config 时,它将在我的系统中启动一组操作,这些操作将自动更改我们系统的配置,然后向用户提交它的通知成败。

把它想象成一个大的 SQL 事务,最后要么提交要么回滚。

所以,步骤

  1. 用户提交edit-config
  2. 系统接受配置并执行此配置
  3. 如果配置成功,则以竖起大拇指的方式发送响应(不确定执行此操作的正式方式)
  4. 如果配置失败,则发送一个不满意的响应(我必须确保配置在内部回滚)
  5. 所有这些都是原子完成的。因此,如果用户连续提交两个配置,它们不会相互冲突。

我们实现这一点的工作想法(可能不是最好的想法)是通过接受edit-config 来解决这个问题,然后在 sysrepo 中,我们将使用成功或失败标志编辑部分叶子,它们会发生在与初始更改相同的会话中。我们希望这将使一切保持原子性;通过在会话之外进行编辑,多个配置更改可能会相互冲突。

我们不确定使用纯 netconf 或直接利用 sysrepo 来解决这个问题。我们注意到所有这些 plugins/bindings made for 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";
    }
  }
}

目前我们可以:

  • 对 netopeer 服务器执行编辑配置
  • 我们可以在 sysrepo 数据存储中看到新的配置寄存器
  • 我们可以通过 sysrepo 的 API 捕获 sysrepo 注册数据的时刻

但是我们遇到了问题

  • 在更新会话期间自动编辑数据存储(由于锁定,这很正常。事实上,如果在更新会话期间无法编辑,那很好,也没有必要。主要目标是下一个项目符号)
  • 自动响应新的编辑配置并响应最终用户

我们对 netconf 和 yang 都有些陌生,所以我确信有一些方法可以通过 netopeer 会话或 sysrepo 来利用 notification api 或 event api,我们只是还不太了解.

如果有任何示例或实施建议可以为此创建原子事务,那将非常有用。

【问题讨论】:

    标签: ietf-netmod-yang ietf-netconf netconf yang


    【解决方案1】:

    我对 sysrepo 一无所知,所以这是从 NETCONF 的角度来看的。

    NETCONF 以请求-响应的方式在单个会话中串行处理请求,这意味着您在单个 NETCONF 会话中所做的一切都应该已经是“原子的” - 您不能发送两个请求并以相反的顺序或以相反的顺序应用它们不管你做什么都是平行的。一个表现良好的客户端也会在发送新请求之前等待来自服务器的每个响应,特别是如果所有更新都必须成功并按特定顺序执行。该协议还定义了无法取消已发送到服务器的请求。

    如果您需要防止其他会话在另一个会话执行多重编辑配置时修改数据存储,您可以使用<lock><unlock> NETCONF 操作来锁定整个数据存储。还有RFC5717 和部分锁,它只会锁定数据存储的特​​定分支。

    使用通知来报告<edit-config> 的成功是非常不寻常的——这就是<rpc-reply><rpc-error> 在同一会话中的用途。您将使用通知来通知其他会话正在发生的事情。事实上,有标准的base notifications 用于配置更改。

    我建议在继续之前阅读整个RFC6241。您应该了解候选数据存储、确认提交等内容。

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2019-12-22
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2022-10-06
      • 2014-09-11
      相关资源
      最近更新 更多