簡體   English   中英

為 netconf 編輯配置請求創建原子進程

[英]Creating an atomic process for a netconf edit-config request

我正在創建一個自定義系統,當用戶提交 netconf edit-config時,它將在我的系統中啟動一組操作,這些操作將自動更改我們系統的配置,然后向用戶提交成功或失敗通知.

把它想象成一個大的 SQL 事務,最后要么提交要么回滾。

所以,步驟

  1. 用戶提交edit-config
  2. 系統接受配置並努力實現此配置
  3. 如果配置成功,則通過豎起大拇指的響應發送(不確定執行此操作的正式方式)
  4. 如果配置失敗,則通過不滿意的響應發送(我必須確保配置在內部回滾)
  5. 所有這些都是原子完成的。 因此,如果用戶連續提交兩個配置,它們不會相互沖突。

我們實現這一點的工作想法(可能不是最好的想法)是通過接受edit-config向 go 提出這一點,然后在 sysrepo 中,我們將使用成功或失敗標志編輯部分葉子,它們將在同一session 作為初始更改。 我們希望這將使一切保持原子性; 通過在 session 之外進行編輯,多個配置更改可能會相互沖突。

我們不確定 go 是否使用純 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 注冊數據的時刻

但是我們遇到了問題

  • 在更新 session 期間自動編輯數據存儲(由於鎖,這是正常的。實際上,如果在更新 session 期間無法編輯,那很好,沒有必要。主要目標是下一個項目符號)
  • 以原子方式響應新的編輯配置並響應最終用戶

我們對 netconf 和 yang 都有些陌生,所以我確信有一些方法可以通過 netopeer Z21D6F40CFB511982E4424E0E250A8AAZ 來利用notification api 或event api,但我們已經足夠了解了。

如果有任何示例或實施建議可以為此創建原子事務,那將非常有用。

我對 sysrepo 一無所知,所以這是從 NETCONF 的角度來看的。

NETCONF 以請求-響應方式在單個 session 中串行處理請求,這意味着您在單個 NETCONF session 中所做的一切都應該已經是“原子的” - 您不能發送兩個請求並以相反的順序或並行應用它們你做什么。 一個表現良好的客戶端也會在發送新請求之前等待來自服務器的每個響應,特別是如果所有更新必須成功並按特定順序執行。 該協議還定義了無法取消已發送到服務器的請求的方法。

如果您需要阻止其他會話修改數據存儲,而另一個 session 正在執行多重編輯配置,您可以使用<lock><unlock> NETCONF 操作來鎖定整個數據存儲。 還有RFC5717和部分鎖定,它們只會鎖定數據存儲的特定分支。

使用通知來報告<edit-config>的成功是非常不尋常的——這就是<rpc-reply><rpc-error>在同一個 session 中的用途。 您將使用通知來通知其他會話正在發生的事情。 事實上,配置更改有標准的基本通知

我建議在繼續之前閱讀整個RFC6241 您應該了解候選數據存儲、確認提交等內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM