查看源代码 ct_netconfc (common_test v1.27.5)
NETCONF 客户端模块。
符合 RFC 6241(NETCONF 配置协议)和 RFC 6242(通过安全外壳 (SSH) 使用 NETCONF 配置协议)的 NETCONF 客户端模块,并支持 RFC 5277(NETCONF 事件通知)。
连接到 NETCONF 服务器
调用 connect/1,2
建立与服务器的连接,然后将返回的句柄传递给 session/1-3
以在新 SSH 通道上建立 NETCONF 会话。每次调用 session/1-3
都会在同一连接上建立新的会话,并导致向服务器发送 hello 消息。
或者,可以使用 open/1,2
在专用连接上建立单个会话。(或者,等效地,先使用 only_open/1,2
,然后使用 hello/1-3
。)
可以在配置文件中指定连接/会话选项,如下所示。
{server_id(), [option()]}.
然后,可以将 server_id/0
或关联的 ct:target_name/0
传递给上述函数,以使用引用的配置。
信令
NETCONF 协议中的协议操作被实现为从客户端到服务器的远程过程调用 (RPC),以及从服务器到客户端的相应回复。RPC 使用同名函数发送(例如,使用 edit_config/3-5
发送 edit-config RPC),服务器回复作为返回值。RFC 6241 中定义的每个 RPC 都有相应的函数,以及 RFC 5277 中的 create-subscription RPC,所有这些函数都是 send_rpc/2,3
的包装器,可用于发送 RFC 6241 或 RFC 5277 中未定义的任意 RPC。
所有信令函数都有一个带有 Timeout
参数的变体和一个没有的变体,后者对应于无限超时。后者在大多数情况下是不合适的,因为服务器无响应或缺少消息 ID 会导致调用无限期挂起。
日志记录
NETCONF 服务器使用 error_logger
记录 NETCONF 流量。特殊用途的错误处理程序在 ct_conn_log_h
中实现。要使用此错误处理程序,请在测试套件中添加 cth_conn_log
钩子,例如
suite() ->
[{ct_hooks, [{cth_conn_log, [{ct:conn_log_mod(), ct:conn_log_options()}]}]}].
conn_log_mod()
是实现连接协议的 Common Test
模块的名称,例如,ct_netconfc
。
钩子选项 log_type
指定日志记录的类型
raw
- 发送和接收的 NETCONF 数据以“原样”记录到单独的文本文件中,没有任何格式。指向该文件的链接将添加到测试用例 HTML 日志中。pretty
- 发送和接收的 NETCONF 数据以 XML 数据格式良好缩进的方式记录到单独的文本文件中。指向该文件的链接将添加到测试用例 HTML 日志中。html (默认)
- 发送和接收的 NETCONF 流量将直接在测试用例 HTML 日志中进行格式化打印。silent
- 不记录 NETCONF 流量。
默认情况下,所有 NETCONF 流量都记录在单个日志文件中。但是,不同的连接可以记录在单独的文件中。为此,请使用钩子选项 hosts
并列出套件中要使用的服务器/连接的名称。必须命名连接才能使其工作,也就是说,必须使用 open/2
打开它们。
如果 log_type
设置为 html
或 silent
,则选项 hosts
无效。
钩子选项也可以在配置文件中使用配置变量 ct_conn_log
指定
{ct_conn_log,[{ct:conn_log_mod(), ct:conn_log_options()}]}.
例如
{ct_conn_log,[{ct_netconfc,[{log_type,pretty},
{hosts,[ct:key_or_name()]}]}]}
注意
在配置文件中指定的钩子选项会覆盖测试套件中硬编码的钩子选项。
日志记录示例 1
以下 ct_hooks
语句会导致将 NETCONF 流量格式化打印到名为 nc_server1
和 nc_server2
的连接的单独日志中。任何其他连接都记录到默认 NETCONF 日志中。
suite() ->
[{ct_hooks, [{cth_conn_log, [{ct_netconfc,[{log_type,pretty}},
{hosts,[nc_server1,nc_server2]}]}
]}]}].
必须按如下方式打开连接
open(nc_server1,[...]),
open(nc_server2,[...]).
日志记录示例 2
以下配置文件导致将所有 NETCONF 流量记录到单个文本文件中
{ct_conn_log,[{ct_netconfc,[{log_type,raw}]}]}.
ct_hooks
语句必须如下所示
suite() ->
[{ct_hooks, [{cth_conn_log, []}]}].
如果没有配置文件,则相同的 ct_hooks
语句会导致将所有 NETCONF 连接的 HTML 日志记录到测试用例 HTML 日志中。
摘要
类型
NETCONF 会话的句柄,信令函数需要它。
与 NETCONF 服务器的连接的句柄(由 connect/1,2
返回)或会话的句柄(由 session/1-3
、open/1,2
或 only_open/1,2
返回)。
作为调用 create_subscription/2,3
的结果发送的事件通知消息。
选项 host
和 port
指定要连接的服务器端点,并直接传递给 ssh:connect/4
,任意 ssh 选项也是如此。常见的选项是 user
、password
和 user_dir
。
配置文件中连接或会话配置的标识。
XML 的表示形式,如应用程序 xmerl
中所述。
由 get_event_streams/1-3
返回的流信息。有关字符串值格式的详细信息,请参阅 RFC 5277 “事件通知的 XML 架构”。
RFC 5277 create-subscription 请求中 startTime/stopTime 元素的日期和时间。XML 基元类型 dateTime
,其(非正式)形式为
函数
执行操作。如果返回类型为 void,则返回 ok
而不是 {ok,[simple_xml()]}
。
请求正常终止与客户端关联的会话。
打开与 NETCONF 服务器的 SSH 连接。
打开与命名的 NETCONF 服务器的 SSH 连接。
通过向服务器发送 RFC 5277 create-subscription RPC 来创建事件通知的订阅。调用进程接收类型为 notification/0
的消息中的事件。
关闭给定的 SSH 连接。
等效于 get/3
。
返回服务器在其 hello 消息中收到的功能。
发送请求以获取指定的事件流。
返回与指定客户端关联的会话 ID。
等效于 hello/3
。
与服务器交换 hello
消息。在收到服务器 hello 或在指定的超时后返回。
强制终止与提供的会话 ID 关联的会话。
锁定配置目标。
打开 NETCONF 会话,但不发送 hello
。
打开命名的 NETCONF 会话,但不发送 hello
。
打开 NETCONF 会话并交换 hello
消息。
打开命名的 NETCONF 会话并交换 hello
消息。
向服务器发送 XML 文档。
向服务器发送 NETCONF rpc
请求。
等效于 session/3
。
在给定的 SSH 连接上作为通道打开 NETCONF 会话,并与服务器交换 hello 消息。
解锁配置目标。
类型
-type client() :: handle() | server_id() | ct:target_name().
NETCONF 会话的句柄,信令函数需要它。
-type error_reason() :: term().
-opaque handle()
与 NETCONF 服务器的连接的句柄(由 connect/1,2
返回)或会话的句柄(由 session/1-3
、open/1,2
或 only_open/1,2
返回)。
-type host() :: inet:hostname() | inet:ip_address().
-type netconf_db() :: running | startup | candidate.
-type notification() :: {notification, xml_attributes(), [simple_xml()]}.
作为调用 create_subscription/2,3
的结果发送的事件通知消息。
-type option() :: {host | ssh, host()} | {port, inet:port_number()} | {timeout, timeout()} | {capability, string() | [string()]} | {receiver, term()} | ssh:client_option().
选项 host
和 port
指定要连接的服务器端点,并直接传递给 ssh:connect/4
,任意 ssh 选项也是如此。常见的选项是 user
、password
和 user_dir
。
选项 timeout
指定允许建立连接的毫秒数,并且如果所讨论的函数导致发送 hello 消息,则允许接收服务器 hello 消息。超时独立应用于连接和 hello;一个超时用于连接建立,另一个用于 hello 接收。
选项 receiver
指定传入通知消息的目标;发送运算符的左操作数 (!
)。如果未指定,则调用 create_subscription/2,3
的进程将成为接收器,但显式设置接收器可以接收未通过调用此函数排序的通知。可以指定多个接收器选项。
connect/1-3 忽略接收器选项。
选项 capability
指定传出 hello 消息中相应元素的内容,每个选项指定单个元素的内容。如果没有配置基本的 NETCONF 功能,则会添加 RFC 4741 1.0 功能“urn:ietf:params:netconf:base:1.0”,否则不会。特别是,必须显式配置 RFC 6241 1.1 功能。可以使用 RFC 6241 中定义的简写符号指定 NETCONF 功能,任何以冒号开头的能力字符串都将以“urn:ietf:params:netconf”或“urn:ietf:params:netconf:capability”作为前缀,视情况而定。
connect/1-3 和 only_open/1-2 忽略能力选项,它们不会导致传出 hello 消息。
-type server_id() :: atom().
配置文件中连接或会话配置的标识。
-type simple_xml() :: {xml_tag(), xml_attributes(), xml_content()} | {xml_tag(), xml_content()} | xml_tag().
XML 的表示形式,如应用程序 xmerl
中所述。
-type stream_name() :: string().
-type streams() :: [{stream_name(), [stream_data()]}].
由 get_event_streams/1-3
返回的流信息。有关字符串值格式的详细信息,请参阅 RFC 5277 “事件通知的 XML 架构”。
-type xml_attribute_tag() :: atom().
-type xml_attribute_value() :: string().
-type xml_attributes() :: [{xml_attribute_tag(), xml_attribute_value()}].
-type xml_content() :: [simple_xml() | iolist()].
-type xml_tag() :: atom().
-type xpath() :: {xpath, string()}.
-type xs_datetime() :: string().
RFC 5277 create-subscription 请求中 startTime/stopTime 元素的日期和时间。XML 基元类型 dateTime
,其(非正式)形式为
[-]YYYY-MM-DDThh:mm:ss[.s][Z|(+|-)hh:mm]
其中 T
和 Z
是字面量,.s
是一个或多个小数秒。
函数
-spec action(Client, Action) -> Result when Client :: client(), Action :: simple_xml(), Result :: ok | {ok, [simple_xml()]} | {error, error_reason()}.
等效于 action/3
。
-spec action(Client, Action, Timeout) -> Result when Client :: client(), Action :: simple_xml(), Timeout :: timeout(), Result :: ok | {ok, [simple_xml()]} | {error, error_reason()}.
执行操作。如果返回类型为 void,则返回 ok
而不是 {ok,[simple_xml()]}
。
-spec close_session(Client) -> Result when Client :: client(), Result :: ok | {error, error_reason()}.
等效于 close_session/2
。
-spec close_session(Client, Timeout) -> Result when Client :: client(), Timeout :: timeout(), Result :: ok | {error, error_reason()}.
请求正常终止与客户端关联的会话。
当 NETCONF 服务器收到 close-session
请求时,它会优雅地关闭会话。服务器释放与会话关联的任何锁和资源,并优雅地关闭任何关联的连接。在 close-session
请求之后收到的任何 NETCONF 请求都将被忽略。
-spec connect(Options) -> Result when Options :: [option()], Result :: {ok, handle()} | {error, error_reason()}.
打开与 NETCONF 服务器的 SSH 连接。
如果在配置文件中指定了服务器选项,请改用 connect/2
。
从该函数返回的不透明 handle/0
引用在通过此连接打开会话时需要作为连接标识符,请参阅 session/1-3
。
-spec connect(KeyOrName, ExtraOptions) -> Result when KeyOrName :: ct:key_or_name(), ExtraOptions :: [option()], Result :: {ok, handle()} | {error, error_reason()}.
打开与命名的 NETCONF 服务器的 SSH 连接。
如果 KeyOrName
是配置的 server_id/0
或与此类 Id 关联的 target_name()
,则从此配置文件中获取此服务器的选项。
选项列表将添加到配置文件的选项列表中。如果两个列表中都指定了某个选项,则配置文件中的选项优先。
如果未在配置文件中指定服务器,请改用 connect/1
。
从该函数返回的不透明 handle/0
引用在通过此连接打开会话时可以用作连接标识符,请参阅 session/1-3
。但是,如果 KeyOrName
是 target_name()
,即,如果服务器是通过调用 ct:require/2
或测试套件中的 require
语句命名的,则可以使用此名称代替 handle/0
。
-spec copy_config(Client, Target, Source) -> Result when Client :: client(), Target :: netconf_db(), Source :: netconf_db(), Result :: ok | {error, error_reason()}.
等效于 copy_config/4
。
-spec copy_config(Client, Target, Source, Timeout) -> Result when Client :: client(), Target :: netconf_db(), Source :: netconf_db(), Timeout :: timeout(), Result :: ok | {error, error_reason()}.
复制配置数据。
可以发出的源和目标选项取决于服务器支持的功能。也就是说,需要 :candidate
和/或 :startup
。
-spec create_subscription(Client, Values) -> Result when Client :: client(), Values :: #{stream => Stream, filter => Filter, start => StartTime, stop => StopTime}, Stream :: stream_name(), Filter :: simple_xml() | [simple_xml()], StartTime :: xs_datetime(), StopTime :: xs_datetime(), Result :: ok | {error, error_reason()}; (Client, list() | timeout()) -> Result when Client :: client(), Result :: ok | {error, error_reason()}.
-spec create_subscription(Client, Values, Timeout) -> Result when Client :: client(), Values :: #{stream => Stream, filter => Filter, start => StartTime, stop => StopTime}, Stream :: stream_name(), Filter :: simple_xml() | [simple_xml()], StartTime :: xs_datetime(), StopTime :: xs_datetime(), Timeout :: timeout(), Result :: ok | {error, error_reason()}; (Client, list(), list() | timeout()) -> Result when Client :: client(), Result :: ok | {error, error_reason()}.
通过向服务器发送 RFC 5277 create-subscription RPC 来创建事件通知的订阅。调用进程接收类型为 notification/0
的消息中的事件。
来自 RFC 5722,2.1 订阅以接收事件通知
Stream
- 指示对哪个事件流感兴趣。如果不存在,则发送默认 NETCONF 流中的事件。Filter
- 指示对所有可能事件的哪个子集感兴趣。参数格式与 NETCONF 协议操作中的 filter 参数相同。如果不存在,则会发送其他参数未排除的所有事件。StartTime
- 用于触发重播功能并指示重播从指定时间开始。如果不存在StartTime
,则这不是重播订阅。指定晚于当前时间的时间是无效的。如果指定的StartTime
早于日志可以支持的时间,则重播将从最早的可用通知开始。此参数的类型为dateTime
并且符合 RFC 3339。实现必须支持时区。StopTime
- 与可选的重放功能一起使用,以指示感兴趣的最新通知。如果未提供StopTime
,则通知将持续到订阅终止。必须与StartTime
一起使用,并且时间必须晚于StartTime
。StopTime
的未来值是有效的。此参数的类型为dateTime
,符合 RFC 3339。实现必须支持时区。
有关更多详细信息,请参阅 RFC 5277。为了允许将无效请求发送到服务器,不强制执行 StopTime
必须仅与 StartTime
一起使用的要求。
在 OTP 22.1 之前,此函数被记录为具有 6 个元数的 15 种变体。为了向后兼容,这些变体仍然导出,但不再记录。上面记录的基于 map 的变体提供了相同的功能,但参数更简单。
注意
create-subscription 不再是唯一可以用来排序 NETCONF 通知的 RPC:RFC 8639 添加了 establish-subscription,未来的 RFC 可能会添加其他方法。在会话创建时指定一个
receiver
选项,以便为传入的通知提供目标,而无需调用create_subscription/2,3
,并使用send_rpc/2,3
来发送 establish-subscription 和其他任意 RPC。
-spec delete_config(Client, Target) -> Result when Client :: client(), Target :: startup | candidate, Result :: ok | {error, error_reason()}.
等效于 delete_config/3
。
-spec delete_config(Client, Target, Timeout) -> Result when Client :: client(), Target :: startup | candidate, Timeout :: timeout(), Result :: ok | {error, error_reason()}.
删除配置数据。
无法删除正在运行的配置,并且服务器必须声明 :candidate
或 :startup
。
-spec disconnect(Conn) -> ok | {error, error_reason()} when Conn :: handle().
关闭给定的 SSH 连接。
如果连接上有打开的 NETCONF 会话,这些会话将被强制中止。为了避免这种情况,请使用 close_session/1,2
关闭每个会话。
-spec edit_config(Client, Target, Config) -> Result when Client :: client(), Target :: netconf_db(), Config :: simple_xml() | [simple_xml()], Result :: ok | {error, error_reason()}.
等效于 edit_config/5
。
-spec edit_config(Client, Target, Config, OptParams) -> Result when Client :: client(), Target :: netconf_db(), Config :: simple_xml() | [simple_xml()], OptParams :: [simple_xml()], Result :: ok | {error, error_reason()}; (Client, Target, Config, Timeout) -> Result when Client :: client(), Target :: netconf_db(), Config :: simple_xml(), Timeout :: timeout(), Result :: ok | {error, error_reason()}.
等效于 edit_config/5
。
-spec edit_config(Client, Target, Config, OptParams, Timeout) -> Result when Client :: client(), Target :: netconf_db(), Config :: simple_xml() | [simple_xml()], OptParams :: [simple_xml()], Timeout :: timeout(), Result :: ok | {error, error_reason()}.
编辑配置数据。
默认情况下,只有正在运行的目标可用,除非服务器在其功能列表中包含 :candidate
或 :startup
。
OptParams
可用于指定要添加到 edit-config
请求中的可选参数(default-operation
、test-option
或 error-option
)。该值必须是包含有效的简单 XML 的列表,例如
[{'default-operation', ["none"]},
{'error-option', ["rollback-on-error"]}]
如果未提供 OptParams
,则使用默认值 []
。
-spec get(Client, Filter) -> Result when Client :: client(), Filter :: simple_xml() | xpath(), Result :: {ok, [simple_xml()]} | {error, error_reason()}.
等效于 get/3
。
-spec get(Client, Filter, Timeout) -> Result when Client :: client(), Filter :: simple_xml() | xpath(), Timeout :: timeout(), Result :: {ok, [simple_xml()]} | {error, error_reason()}.
获取数据。
此操作从服务器返回配置和状态数据。
只有当服务器支持 :xpath
时,才能使用筛选器类型 xpath
。
-spec get_capabilities(Client) -> Result when Client :: client(), Result :: [string()] | {error, error_reason()}.
等效于 get_capabilities/2
。
-spec get_capabilities(Client, Timeout) -> Result when Client :: client(), Timeout :: timeout(), Result :: [string()] | {error, error_reason()}.
返回服务器在其 hello 消息中收到的功能。
-spec get_config(Client, Source, Filter) -> Result when Client :: client(), Source :: netconf_db(), Filter :: simple_xml() | xpath(), Result :: {ok, [simple_xml()]} | {error, error_reason()}.
等效于 get_config/4
。
-spec get_config(Client, Source, Filter, Timeout) -> Result when Client :: client(), Source :: netconf_db(), Filter :: simple_xml() | xpath(), Timeout :: timeout(), Result :: {ok, [simple_xml()]} | {error, error_reason()}.
获取配置数据。
要访问 running
之外的其他源,服务器必须声明 :candidate
和/或 :startup
。
只有当服务器支持 :xpath
时,才能使用筛选器类型 xpath
。
-spec get_event_streams(Client) -> Result when Client :: client(), Result :: {ok, streams()} | {error, error_reason()}.
等效于 get_event_streams/3
。
-spec get_event_streams(Client, Timeout) -> Result when Client :: client(), Timeout :: timeout(), Result :: {ok, streams()} | {error, error_reason()}; (Client, Streams) -> Result when Client :: client(), Streams :: [stream_name()], Result :: {ok, streams()} | {error, error_reason()}.
等效于 get_event_streams/3
。
-spec get_event_streams(Client, Streams, Timeout) -> Result when Client :: client(), Streams :: [stream_name()], Timeout :: timeout(), Result :: {ok, streams()} | {error, error_reason()}.
发送请求以获取指定的事件流。
Streams
是流名称的列表。以下筛选器在 get
请求中发送到 NETCONF 服务器
<netconf xmlns="urn:ietf:params:xml:ns:netmod:notification">
<streams>
<stream>
<name>StreamName1</name>
</stream>
<stream>
<name>StreamName2</name>
</stream>
...
</streams>
</netconf>
如果 Streams
是一个空列表,则通过发送以下筛选器请求所有流
<netconf xmlns="urn:ietf:params:xml:ns:netmod:notification">
<streams/>
</netconf>
如果需要更复杂的筛选,请使用 ct_netconfc:get/2,3
,并根据 RFC 5277 中的“事件通知的 XML 架构”指定精确的筛选器。
-spec get_session_id(Client) -> Result when Client :: client(), Result :: pos_integer() | {error, error_reason()}.
等效于 get_session_id/2
。
-spec get_session_id(Client, Timeout) -> Result when Client :: client(), Timeout :: timeout(), Result :: pos_integer() | {error, error_reason()}.
返回与指定客户端关联的会话 ID。
-spec hello(Client) -> Result when Client :: handle(), Result :: ok | {error, error_reason()}.
等效于 hello/3
。
-spec hello(Client, Timeout) -> Result when Client :: handle(), Timeout :: timeout(), Result :: ok | {error, error_reason()}.
等效于 hello/3
。
-spec hello(Client, Options, Timeout) -> Result when Client :: handle(), Options :: [{capability, [string()]}], Timeout :: timeout(), Result :: ok | {error, error_reason()}.
与服务器交换 hello
消息。在收到服务器 hello 或在指定的超时后返回。
请注意,可以将传出的 hello 的功能直接传递给 open/2
。
-spec kill_session(Client, SessionId) -> Result when Client :: client(), SessionId :: pos_integer(), Result :: ok | {error, error_reason()}.
等效于 kill_session/3
。
-spec kill_session(Client, SessionId, Timeout) -> Result when Client :: client(), SessionId :: pos_integer(), Timeout :: timeout(), Result :: ok | {error, error_reason()}.
强制终止与提供的会话 ID 关联的会话。
服务器端必须中止任何正在进行的操作,释放与会话关联的任何锁和资源,并关闭任何关联的连接。
仅当服务器处于已确认提交阶段时,配置才会恢复到进入已确认提交阶段之前的状态。否则,不执行配置回滚。
如果指定的 SessionId
等于当前会话 ID,则返回错误。
-spec lock(Client, Target) -> Result when Client :: client(), Target :: netconf_db(), Result :: ok | {error, error_reason()}.
等效于 lock/3
。
-spec lock(Client, Target, Timeout) -> Result when Client :: client(), Target :: netconf_db(), Timeout :: timeout(), Result :: ok | {error, error_reason()}.
锁定配置目标。
可以使用哪些目标参数取决于服务器是否支持 :candidate
和/或 :startup
。如果成功,设备的配置系统将对其他客户端(NETCONF、CORBA、SNMP 等)不可用。锁应该短暂存在。
操作 kill_session/2,3
可用于强制释放由另一个 NETCONF 会话拥有的锁。服务器端如何实现这一点是特定于实现的。
-spec only_open(Options) -> Result when Options :: [option()], Result :: {ok, handle()} | {error, error_reason()}.
打开 NETCONF 会话,但不发送 hello
。
与 open/1
相同,但不发送 hello
消息。
-spec only_open(KeyOrName, ExtraOptions) -> Result when KeyOrName :: ct:key_or_name(), ExtraOptions :: [option()], Result :: {ok, handle()} | {error, error_reason()}.
打开命名的 NETCONF 会话,但不发送 hello
。
与 open/2
相同,但不发送 hello
消息。
-spec open(Options) -> Result when Options :: [option()], Result :: {ok, handle()} | {error, error_reason()}.
打开 NETCONF 会话并交换 hello
消息。
如果在配置文件中指定服务器选项,或者如果需要一个用于记录的命名客户端(请参阅此模块中的日志记录部分),请改用 open/2
。
从此函数返回的不透明 handle/0
引用在调用此模块中的任何其他函数时都需要作为客户端标识符。
-spec open(KeyOrName, ExtraOption) -> Result when KeyOrName :: ct:key_or_name(), ExtraOption :: [option()], Result :: {ok, handle()} | {error, error_reason()}.
打开命名的 NETCONF 会话并交换 hello
消息。
如果 KeyOrName
是配置的 server_id/0
或与此类 Id 关联的 target_name()
,则从此配置文件中获取此服务器的选项。
选项列表将添加到配置文件的选项列表中。如果两个列表中都指定了某个选项,则配置文件中的选项优先。
如果未在配置文件中指定服务器,请改用 open/1
。
从此函数返回的不透明 handle/0
引用可以用作调用此模块中的任何其他函数时的客户端标识符。但是,如果 KeyOrName
是 target_name()
,即如果服务器是通过调用 ct:require/2
或测试套件中的 require
语句命名的,则可以使用此名称代替 handle/0
。
另请参阅 ct:require/2
。
-spec send(Client, SimpleXml) -> Result when Client :: client(), SimpleXml :: simple_xml(), Result :: simple_xml() | {error, error_reason()}.
等效于 send/3
。
-spec send(Client, SimpleXml, Timeout) -> Result when Client :: client(), SimpleXml :: simple_xml(), Timeout :: timeout(), Result :: simple_xml() | {error, error_reason()}.
向服务器发送 XML 文档。
指定的 XML 文档将“按原样”发送到服务器。此函数可用于发送无法通过此模块中的其他接口函数表达的 XML 文档。
-spec send_rpc(Client, SimpleXml) -> Result when Client :: client(), SimpleXml :: simple_xml(), Result :: [simple_xml()] | {error, error_reason()}.
等效于 send_rpc/3
。
-spec send_rpc(Client, SimpleXml, Timeout) -> Result when Client :: client(), SimpleXml :: simple_xml(), Timeout :: timeout(), Result :: [simple_xml()] | {error, error_reason()}.
向服务器发送 NETCONF rpc
请求。
指定的 XML 文档会被包装成一个有效的 NETCONF rpc
请求并发送到服务器。 message-id
和命名空间属性会被添加到 rpc
元素中。
此函数可用于发送此模块中其他接口函数无法表达的 rpc
请求。
-spec session(Conn) -> Result when Conn :: handle(), Result :: {ok, handle()} | {error, error_reason()}.
等效于 session/3
。
-spec session(Conn, Options) -> Result when Conn :: handle(), Options :: [session_option()], Result :: {ok, handle()} | {error, error_reason()}; (KeyOrName, Conn) -> Result when KeyOrName :: ct:key_or_name(), Conn :: handle(), Result :: {ok, handle()} | {error, error_reason()}.
等效于 session/3
。
-spec session(KeyOrName, Conn, Options) -> Result when Conn :: handle(), Options :: [session_option()], KeyOrName :: ct:key_or_name(), Result :: {ok, handle()} | {error, error_reason()}.
在给定的 SSH 连接上作为通道打开 NETCONF 会话,并与服务器交换 hello 消息。
从该函数返回的不透明 handle/0
引用可以用作调用此模块中任何其他函数时的客户端标识符。 但是,如果使用 KeyOrName
并且它是一个 target_name()
,也就是说,如果服务器是通过调用 ct:require/2
或测试套件中的 require
语句命名的,则可以使用此名称代替 handle/0
。
-spec unlock(Client, Target) -> Result when Client :: client(), Target :: netconf_db(), Result :: ok | {error, error_reason()}.
等效于 unlock/3
。
-spec unlock(Client, Target, Timeout) -> Result when Client :: client(), Target :: netconf_db(), Timeout :: timeout(), Result :: ok | {error, error_reason()}.
解锁配置目标。
如果客户端之前通过 lock/2,3
获取了锁,则此操作会释放相关的锁。要访问除 running
之外的其他目标,服务器必须支持 :candidate
和/或 :startup
。