使用ruby执行多个JUNOS路由器命令

时间:2017-01-03 16:46:37

标签: ruby junos-automation

有没有人尝试使用带有net / ssh和net / ssh / telnet gems的ruby在JUNOS路由器中执行多个命令,你必须进入配置模式?它永远不想接受配置命令,我不知道为什么。

这是我的代码:

def exec_router(host_type, commands)
  puts "commands: #{commands}"
  output = ""
  ssh = Net::SSH.start(HOST_MAP[host_type], QA_USER, :password => QA_USER_PASSWORD)
  t = Net::SSH::Telnet.new("Session" => ssh, "Prompt" => /.+@.+>/, "Output_log" => "/tmp/test.outputi")
  commands.each { |command| output << t.cmd(command) }
  puts output
  t.close
  ssh.close
end

这是它产生的输出:

  commands: ["configure", "show policy-options prefix-list greautomation-676872"]
  configure
              ^
  unknown command.

  {master:member0-re0}
  qa@c1.lab5> show policy-options
                   ^
  syntax error, expecting <command>.

qa@c1.lab5> show policy-optionsprefix-list                        ^       语法错误,期待。 qa@c1.lab5> show policy-optionsprefix-listgreautomation-676872                        ^       语法错误,期待。

我知道我的ssh / telnet工作正在运行,因为我可以用t.cmd('?')替换遍历命令数组的块,并且我得到了没有错误的预期输出。

我的Junos版本是15.1F6-S3.8,我使用的是ruby 2.3.0。

提前致谢

克雷格

3 个答案:

答案 0 :(得分:0)

您检查了https://github.com/Juniper/net-netconf吗?它是一个Ruby Gem,用于与Junos设备进行基于NETCONF的交互。

答案 1 :(得分:0)

你应该使用RubyEZ。

参考:https://github.com/Juniper/ruby-junos-ez-stdlib

要获取设备的配置,我们有get-configuration rpc。

data = ndev.rpc.get_configuration                   # Junos specific RPC
puts "Showing 'policy-options' hierarchy ..."
puts cfgall.xpath('policy-options')  

调用操作rpc(对于ex“show chassis hardware”对应于get-chassis-inventory rpc),因此

data = ndev.rpc.get_chassis_inventory  

答案 2 :(得分:0)

虽然我建议您使用RubyEZ库,但问题与您尝试在操作模式下执行配置语法命令有关。

这是你的问题:

commands: ["configure", "show policy-options prefix-list greautomation-676872"]

进行以下更改:

  • 删除“configure”命令
  • 将“show policy-options prefix-list greautomation-676872”替换为“show configuration policy-options prefix-list greautomation-676872”

这可以解决您的问题。

我强烈建议您查看Juniper的RubyEZ库。