使用 NETCONF Java 工具包执行配置任务
使用设备对象方法加载配置更改
NETCONF Java 工具包 Device
对象具有可帮助您配置远程设备的方法。在适当时,方法将过载,以采用大量不同格式。
要远程设备上加载配置数据,此对象具有多种允许将配置数据定义为一组 Junos OS 配置模式命令、格式化的 ASCII 文本或 Device
Junos XML 标记元素。您可以在程序代码中提供配置数据,或者引用包含所需配置更改的数据文件。
要配置候选配置的专用副本,请对设备对象使用字符串参数"private"调用 方法,然后再 openConfiguration("private")
加载配置更改。这相当于命令 configure private
在命令Junos OS CLI。如果您省略对方法的调用,您的配置更改将加载到候选配置的 openConfiguration("private")
全局副本中。
用于加载配置数据的方法取决于数据的来源和格式。在下列方法中,字符串参数的值为 或 ,值用于执行配置模式命令或运行命令的 loadType
merge
replace
load merge
load replace
Junos OS。
Junos OS配置模式命令— 以下方法将配置数据作为一组Junos OS模式命令加载。只有运行 11.4 Junos OS版本的设备才支持这些方法。Junos OS行执行配置说明。对于每个元素,您可以在 命令中指定完整的语句路径,或使用导航命令(如 )在配置模式下移动CLI
edit
层次结构。loadSetConfiguration(String setCommands)
—在程序代码中指定配置数据,作为方法参数或作为传递到方法的变量。loadSetFile(String filePath)
—从 中指定的文件中加载配置数据 filePath 。
格式化的 ASCII 文本— 以下方法以格式的 ASCII 文本加载配置数据。使用标准Junos OS CLI表示法(内联字符、标签、空格、大括号和方括号)指示配置语句之间的层次结构关系。
loadTextConfiguration(String textConfiguration, String loadType)
—在程序代码中指定配置数据,作为方法参数或作为传递到方法的变量。loadTextFile(String filePath, String loadType)
—从 中指定的文件中加载配置数据 filePath 。
Junos XML 标记元素— 以下方法将配置数据作为Junos XML 标记元素加载。包括表示根目录下配置层次结构所有级别的标记元素、标记元素(
<configuration>
下至每个新元素或更改的元素)。loadXMLConfiguration(String XMLConfiguration, String loadType)
—将程序代码中的配置数据指定为传递到 方法net.juniper.netconf.XML
的对象。loadXMLFile(String filePath, String loadType)
—从 中指定的文件中加载配置数据 filePath 。
以下代码片段将语句 ftp
合并到 层次结构级别的候选 [edit system services]
配置中。显示了每种负载配置方法的 Java 语句。从文件加载时,文件应包含所需格式的适当层次结构。
/* r1-config-set.txt: set system services ftp r1-config-text.txt: system { services { ftp; } } r1-config-xml.txt: <system> <services> <ftp/> </services> </system> */ String config_file_set = "configs/r1-config-set.txt" String config_file_text = "configs/r1-config-text.txt" String config_file_xml = "configs/r1-config-xml.txt" XMLBuilder builder = new XMLBuilder(); XML ftp_config = builder.createNewConfig("system", "services", "ftp"); Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.connect(); //open a private copy of the candidate configuration device.openConfiguration("private"); // load configuration data as Junos OS configuration mode commands device.loadSetConfiguration("set system services ftp"); device.loadSetFile(config_file_set); // load configuration data as formatted ASCII text device.loadTextConfiguration("system { services { ftp; } }", "merge"); device.loadTextFile(config_file_text, "merge"); // load configuration data as Junos XML tag elements device.loadXMLConfiguration(ftp_config.toString(), "merge"); device.loadXMLFile(config_file_xml, "merge"); device.commit(); device.close();
示例:用于加载和提交配置的 NETCONF Java 应用程序
以下示例 NETCONF Java 工具包程序构建配置层次结构,然后与指定设备的候选配置合并。然后提交生成的配置。示例配置层次结构用于运行新Junos OS。
要求
路由、交换或运行安全Junos OS。
NETCONF Java 工具包安装在配置管理服务器上。
客户端应用程序可以登录 NETCONF 服务器所在的设备。
NETCONF 服务器所在的设备上启用了 SSH 上的 NETCONF 服务。
概述
以下示例将执行一 load merge
些操作,以更新正在运行的设备上候选Junos OS,然后提交新配置。将添加到配置中的 XML 层次结构使用 对象构建并 XMLBuilder
存储在变量 ftp_config
中。或者,您可以将配置数据作为文本和 (对于运行 Junos OS 11.4 或更高版本的设备)作为一组Junos OS模式命令加载。
在设备上启用 FTP 服务的新配置层次结构是:
<configuration> <system> <services> <ftp/> </services> </system> </configuration>
程序代码会创建新对象 Device
并调用 connect()
方法。这会与 NETCONF 服务器运行的设备建立 SSHv2 连接和默认 NETCONF 会话。
为了防止与可能同时编辑候选配置的其他用户冲突,代码将调用设备对象上的方法 lockConfig()
以锁定配置。如果锁发生故障,方法将生成错误消息,程序退出。如果锁定成功,则 loadXMLConfiguration(ftp_config.toString(), "merge")
方法使用 选项将新配置层次结构加载至候选 merge
配置。请注意,尽管配置层次结构最初构建为 XML,但是必须先将其转换为字符串,然后再将其作为参数传递给 loadXMLConfiguration()
方法。
将新配置层次结构与候选配置合并后,程序将尝试提交配置。如果提交操作失败,程序将打印关联的错误消息。然后,程序解锁配置并关闭 NETCONF 会话和设备连接。
有关 将配置层次结构和语句加载到候选配置中的 和选项的详细信息 merge
replace
,请参阅 CLI User Guide。
配置
创建 Java 程序
逐步过程
要构建包含配置更改和请求代码的 Java 程序文件:
为文件指定一个描述性名称。
文件名必须与类名称相同。此示例将该文件和类命名为 EditConfig。
将代码添加到文件中并更新环境特定变量,例如远程主机 IP 地址、用户名和密码。
EditConfig 程序的完整 Java 代码在这里展示。
import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import net.juniper.netconf.CommitException; import net.juniper.netconf.Device; import net.juniper.netconf.LoadException; import net.juniper.netconf.NetconfException; import net.juniper.netconf.XML; import net.juniper.netconf.XMLBuilder; import org.xml.sax.SAXException; public class EditConfig { public static void main(String[] args) throws LoadException, IOException, NetconfException, ParserConfigurationException, SAXException { /*Build the following XML hierarchy to add to the configuration: * <configuration> * <system> * <services> * <ftp/> * </services> * </system> * </configuration> */ XMLBuilder builder = new XMLBuilder(); XML ftp_config = builder.createNewConfig("system", "services", "ftp"); //Create the device Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); device.connect(); //Lock the configuration boolean isLocked = device.lockConfig(); if(!isLocked) { System.out.println("Could not lock configuration. Exit now."); return; } //Load and commit the configuration try { device.loadXMLConfiguration(ftp_config.toString(), "merge"); device.commit(); } catch(LoadException e) { System.out.println(e.getMessage()); return; } catch(CommitException e) { System.out.println(e.getMessage()); return; } //Unlock the configuration and close the device device.unlockConfig(); device.close(); } }
编译和运行 Java 程序
逐步过程
您需要一个 Java 编译器来编译源代码和创建可执行程序。
要编译代码,在配置管理服务器上运行程序:
编译 EditConfig.java 文件。
> javac EditConfig.java
执行 EditConfig 程序。
> java EditConfig
验证
示例:用于加载集配置命令的 NETCONF Java 应用程序
此 NETCONF Java 工具包程序演示了此方法,该方法使用一组配置模式Junos OS loadSetConfiguration()
更新配置。
要求
运行 11.4 Junos OS更高版本的路由、交换或安全设备。
NETCONF Java 工具包安装在配置管理服务器上。
客户端应用程序可以登录 NETCONF 服务器所在的设备。
NETCONF 服务器所在的设备上启用了 SSH 上的 NETCONF 服务。
概述
类包含 和 方法,在运行 Junos OS Device
loadSetConfiguration()
11.4 或更高版本的设备上将配置数据作为Junos OS Junos OS配置模式命令的一组 loadSetFile()
负载。对于每个配置元素,您可以在 命令中指定完整的语句路径,或使用导航命令(如 )在配置模式中移动CLI edit
层次结构。NETCONF Java 工具包将命令集转换为 XML 中的等效 RPC,可在运行 Junos OS 的设备上由 NETCONF 服务器处理。 Junos OS 将线路执行配置说明。
方法语法为:
public void loadSetConfiguration (String setCommands) public void loadSetFile (String filePath)
该方法 loadSetConfiguration()
在配置模式下将输入的配置命令字符串用作Junos OS CLI参数。例如,要添加 ftp
层级的 语句 [edit system services]
,请使用 set system services ftp
命令。 loadSetFile()
该方法将包含一组配置命令的文件路径用作参数。
您也可以使用这两种方法加载多个命令。要使用 方法加载多个命令,可以将命令列出为单个字符串,然后使用新行序列分隔这些命令,或者可以单独执行每个 loadSetConfiguration()
\n
命令的方法。要采用 方法加载多个 loadSetFile()
命令,请使每个命令都位于文件中另一行。
对导航命令使用 方法时,应该将命令列出为单一字符串,然后用新行序列 loadSetConfiguration()
\n
将其分隔。不能使用 等 loadSetConfiguration()
单个导航命令调用 方法 up
。
此示例中的程序将加载两个配置命令,将两个语句合并到运行版本 11.4 的设备的候选Junos OS配置中。第一个 set system services ftp 命令 , 在 ftp
层次结构级别添加 [edit system services]
语句。第二个 set interfaces ge-0/0/0 disable 命令 , 在 disable
层次结构级别 [edit interfaces ge-0/0/0]
添加 语句。程序代码中的相关语句包括:
String system_config = "set system services ftp"; String interfaces_config = "set interfaces ge-0/0/0 disable"; device.loadSetConfiguration(system_config); device.loadSetConfiguration(interfaces_config);
配置
创建 Java 程序
逐步过程
要构建 Java 程序文件:
为文件指定一个描述性名称。
文件名必须与类名称相同。此示例将该文件和类命名为 LoadSetConfig。
将代码添加到文件中并更新环境特定变量,例如远程主机 IP 地址、用户名、密码和
<rpc-reply>
标记元素。LoadSetConfig.java程序的完整 Java 代码在这里展示。
如果从文件中加载命令集,请创建一个包含命令的文件,然后用对方法的调用替换两
loadSetConfiguration()
个loadSetFile()
方法调用。/*LoadSetConfig*/ import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import net.juniper.netconf.Device; import net.juniper.netconf.CommitException; import net.juniper.netconf.LoadException; import net.juniper.netconf.NetconfException; import net.juniper.netconf.XML; import org.xml.sax.SAXException; public class LoadSetConfig { public static void main(String args[]) throws NetconfException, ParserConfigurationException, SAXException, IOException { String system_config = "set system services ftp"; String interfaces_config = "set interfaces ge-0/0/0 disable"; Device device = new Device("10.10.1.1","admin","PaSsWoRd",null); try { device.connect(); System.out.println("Connection successful."); if (device.lockConfig()) { System.out.println("Configuration successfully locked."); try { System.out.println("Updating configuration."); device.loadSetConfiguration(system_config); device.loadSetConfiguration(interfaces_config); System.out.println("Committing configuration."); device.commit(); } catch (LoadException e) { System.out.println("LoadException occurred: " + e.getMessage()); } catch (CommitException e) { System.out.println("CommitException occurred: " + e.getMessage()); } device.unlockConfig(); device.close(); } else { System.out.println("Error - cannot lock configuration"); } } catch (NetconfException e) { System.out.println("Could not connect to device: " + e.getMessage()); } } }
编译和运行 Java 程序
逐步过程
您需要一个 Java 编译器来编译源代码和创建可执行程序。
要编译代码,在配置管理服务器上运行程序:
编译 LoadSetConfig.java 文件。
> javac LoadSetConfig.java
执行 LoadSetConfig 程序。
> java LoadSetConfig
验证
要确认计划工作正常:
验证程序执行
目的
验证 LoadSetConfig 程序是否正确运行。
行动
如果程序成功执行,则建立连接并创建与指定设备的 NETCONF 会话。程序会将新语句与设备上候选配置合并,然后提交配置。
>java LoadSetConfig Connection successful. Configuration successfully locked. Updating configuration. Committing configuration.
验证配置更改
目的
您可通过查看远程设备上产生的配置来验证配置是否正确合并并提交。 ftp
和 disable
语句现在应该在活动配置中。在运行 Junos OS 的设备上,发出以下操作模式命令以查看 [edit system services]
和 [edit interfaces]
层次结构级别:
行动
admin@host> show configuration system services ftp; netconf { ssh; }
admin@host> show configuration interfaces ge-0/0/0 { disable; }