【问题标题】:config=false node when mandatoryconfig=false 强制节点
【发布时间】:2019-06-21 08:37:33
【问题描述】:

我有一个 Yang 模型,它定义了一个 config=false 节点,这也是强制性的。我是否应该在获取 rpc 响应时将该节点作为空 XML 节点返回,即使我的应用程序不支持它?

理想情况下,我的应用应该支持它,但由于限制,我们无法实现所需的支持。那么处理此类案件的正确方法应该是什么?我们是否应该在 get rpc 响应中将它发出/表示为一个空的 XML 节点?我猜如果我们忽略这些节点,外部控制器可能无法获取 rpc 响应。

-拉姆

【问题讨论】:

    标签: ietf-netmod-yang


    【解决方案1】:

    如果你的服务器实现不支持原始模型中的特定节点,你应该创建一个偏差 YANG 模块,它表达了这个限制。通过这种方式,客户可以了解它并且每个人都很高兴 - 您当然可以宣传您的偏差模块以及偏差模块。

    例如:

    module target {
      yang-version 1.1;
      namespace "target:uri";
      prefix "tgt";
    
      container state {
        config false;
        leaf some-counter {
          type uint64;
          mandatory true;
        }
      }
    }
    

    假设您的设备不支持上述some-counter 叶。然后,您创建一个偏差模块,该模块描述您的实施与合规实施的不同之处。

    module target-dev {
      yang-version 1.1;
      namespace "target-dev:uri";
      prefix "tgtd";
    
      import target {
        prefix tgt;
      }
    
      deviation "/tgt:state/tgt:some-counter" {
        deviate not-supported;
      }
    }
    
    

    当一个 get 请求到来时,你不会为那个叶子返回任何东西,因为它在你的实现世界中不存在。

    deviationdeviate 语句的详细信息可以在 RFC7950 中找到:

    在依赖这个机制时你应该非常小心!始终创建一个单独的模块,其中仅包含偏差,可能会偏离单个目标模块。有一个guidelines document,您应该阅读以防万一。

    【讨论】:

    • 谢谢@predi,还有一个后续问题。根据最新发现,我们意识到我们在某些情况下会发出强制性叶子,而在某些情况下我们不会(在这种情况下,叶子实际上不包含任何值/状态)。所以我们不能在这里真正发布偏差模块。那么我们的软件是否需要修复以在这种情况下将它们作为空 XML 标记发出,其中这些叶子不包含状态?
    • @Ram,如果模型指定了强制状态节点,当客户端请求时,兼容的服务器必须为其提供有效值。该模型表示服务器与其客户端之间的合同。不遵守这份合同可能是个坏主意。如果客户端收到一个空标签,而该标签需要一个特定的值,它可能会不高兴。
    • @Ram,在配置节点的情况下,客户端的工作是在适当的时间提供它们,而服务器的工作是确保它们存在于运行配置中。
    • 谢谢@predi。您的回答总是很有帮助。
    • 嗨,@predi 我有几个关于杨@stackoverflow.com/questions/56741430/…stackoverflow.com/questions/56714197/pyang-support-for-yang-1-1 的问题,你能帮忙澄清一下吗?
    猜你喜欢
    • 2016-03-08
    • 2020-01-23
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2015-07-31
    相关资源
    最近更新 更多