netconf 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/confd/get-running.rb +27 -0
- data/examples/jnpr/edit-config-jnpr.rb +4 -5
- data/examples/jnpr/edit-config-std.rb +0 -1
- data/examples/jnpr/edit-config-text-std.rb +0 -1
- data/examples/jnpr/get-inventory-serial-explicit.rb +0 -2
- data/examples/jnpr/get-inventory-serial.rb +2 -6
- data/examples/jnpr/get-inventory-telnet.rb +1 -2
- data/examples/jnpr/get-inventory.rb +4 -7
- data/examples/jnpr/scp.rb +1 -1
- data/lib/net/netconf.rb +4 -1
- data/lib/net/netconf/rpc_std.rb +4 -7
- data/lib/net/netconf/serial.rb +9 -2
- data/lib/net/netconf/telnet.rb +1 -7
- data/lib/net/netconf/transport.rb +26 -6
- metadata +4 -3
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# This code is used to retrieve the running configuration
|
3
|
+
# from a Tail-F "confD" NETCONF server, and display the
|
4
|
+
# configured user names
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'net/netconf'
|
8
|
+
|
9
|
+
puts "NETCONF v#{Netconf::VERSION}"
|
10
|
+
|
11
|
+
login = { :target => 'jeap', :port => 2022,
|
12
|
+
:username => "admin", :password => "admin" }
|
13
|
+
|
14
|
+
Netconf::SSH.new( login ){ |dev|
|
15
|
+
|
16
|
+
config = dev.rpc.get_config
|
17
|
+
|
18
|
+
puts "Showing users on this device ..."
|
19
|
+
|
20
|
+
config.xpath("//users/user").each{|user|
|
21
|
+
puts "Username: #{user.xpath('name').text}"
|
22
|
+
}
|
23
|
+
|
24
|
+
}
|
25
|
+
|
26
|
+
|
27
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'net/netconf/jnpr'
|
2
2
|
|
3
|
-
puts "NETCONF v
|
3
|
+
puts "NETCONF v#{Netconf::VERSION}"
|
4
4
|
|
5
5
|
login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
|
6
6
|
|
@@ -14,9 +14,9 @@ Netconf::SSH.new( login ){ |dev|
|
|
14
14
|
location = Nokogiri::XML::Builder.new{ |x|
|
15
15
|
x.system {
|
16
16
|
x.location {
|
17
|
-
x.building "Main Campus,
|
18
|
-
x.floor
|
19
|
-
x.rack
|
17
|
+
x.building "Main Campus, D"
|
18
|
+
x.floor 22
|
19
|
+
x.rack 38
|
20
20
|
}
|
21
21
|
}
|
22
22
|
}
|
@@ -52,7 +52,6 @@ Netconf::SSH.new( login ){ |dev|
|
|
52
52
|
puts "Commit error"
|
53
53
|
rescue Netconf::RpcError => e
|
54
54
|
puts "General RPC error"
|
55
|
-
binding.pry
|
56
55
|
else
|
57
56
|
puts "Configuration Committed."
|
58
57
|
end
|
@@ -4,10 +4,8 @@ puts "NETCONF v.#{Netconf::VERSION}"
|
|
4
4
|
|
5
5
|
serial_port = '/dev/ttyS4'
|
6
6
|
|
7
|
-
login = {
|
8
|
-
:
|
9
|
-
:username => "jeremy", :password => "jeremy1"
|
10
|
-
}
|
7
|
+
login = { :port => serial_port,
|
8
|
+
:username => "jeremy", :password => "jeremy1" }
|
11
9
|
|
12
10
|
puts "Connecting to SERIAL: #{serial_port} ... please wait."
|
13
11
|
|
@@ -21,8 +19,6 @@ Netconf::Serial.new( login ){ |dev|
|
|
21
19
|
puts "Chassis: " + inv.xpath('chassis/description').text
|
22
20
|
puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
|
23
21
|
|
24
|
-
binding.pry
|
25
|
-
|
26
22
|
}
|
27
23
|
|
28
24
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'net/netconf/jnpr/telnet'
|
2
2
|
|
3
|
-
puts "NETCONF v
|
3
|
+
puts "NETCONF v#{Netconf::VERSION}"
|
4
4
|
|
5
5
|
login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
|
6
6
|
|
@@ -9,7 +9,6 @@ Netconf::Telnet.new( login ){ |dev|
|
|
9
9
|
puts "Chassis: " + inv.xpath('chassis/description').text
|
10
10
|
puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
|
11
11
|
|
12
|
-
binding.pry
|
13
12
|
}
|
14
13
|
|
15
14
|
|
@@ -1,18 +1,15 @@
|
|
1
1
|
require 'net/netconf'
|
2
2
|
|
3
|
-
puts "NETCONF v
|
3
|
+
puts "NETCONF v#{Netconf::VERSION}"
|
4
4
|
|
5
|
-
login = { :target => '
|
6
|
-
:username => "jeremy",
|
7
|
-
:password => "jeremy1" }
|
5
|
+
login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
|
8
6
|
|
9
7
|
Netconf::SSH.new( login ){ |dev|
|
10
|
-
|
8
|
+
|
11
9
|
inv = dev.rpc.get_chassis_inventory
|
12
10
|
|
13
11
|
puts "Chassis: " + inv.xpath('chassis/description').text
|
14
|
-
puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
|
15
|
-
|
12
|
+
puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
|
16
13
|
}
|
17
14
|
|
18
15
|
|
data/examples/jnpr/scp.rb
CHANGED
data/lib/net/netconf.rb
CHANGED
data/lib/net/netconf/rpc_std.rb
CHANGED
@@ -5,15 +5,12 @@ module Netconf
|
|
5
5
|
MSG_END_RE = /\]\]>\]\]>[\r\n]*$/
|
6
6
|
MSG_CLOSE_SESSION = '<rpc><close-session/></rpc>'
|
7
7
|
MSG_HELLO = <<-EOM
|
8
|
-
<hello>
|
8
|
+
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
|
9
9
|
<capabilities>
|
10
|
-
<capability>urn:ietf:params:
|
11
|
-
<capability>urn:ietf:params:xml:ns:netconf:base:1.0#candidate</capability>
|
12
|
-
<capability>urn:ietf:params:xml:ns:netconf:base:1.0#confirmed-commit</capability>
|
13
|
-
<capability>urn:ietf:params:xml:ns:netconf:base:1.0#validate</capability>
|
14
|
-
<capability>urn:ietf:params:xml:ns:netconf:base:1.0#url?protocol=http,ftp,file</capability>
|
10
|
+
<capability>urn:ietf:params:netconf:base:1.0</capability>
|
15
11
|
</capabilities>
|
16
|
-
</hello>
|
12
|
+
</hello>
|
13
|
+
]]>]]>
|
17
14
|
EOM
|
18
15
|
|
19
16
|
module Standard
|
data/lib/net/netconf/serial.rb
CHANGED
@@ -68,13 +68,17 @@ module Netconf
|
|
68
68
|
self
|
69
69
|
end
|
70
70
|
|
71
|
-
def
|
71
|
+
def trans_receive_hello
|
72
72
|
hello_str = trans_receive()
|
73
73
|
so_xml = hello_str.index("\n") + 1
|
74
74
|
hello_str.slice!(0, so_xml)
|
75
75
|
hello_str
|
76
76
|
end
|
77
77
|
|
78
|
+
def trans_send_hello
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
|
78
82
|
def trans_close
|
79
83
|
@trans.write Netconf::RPC::MSG_CLOSE_SESSION
|
80
84
|
@trans.close
|
@@ -115,7 +119,10 @@ module Netconf
|
|
115
119
|
|
116
120
|
begin
|
117
121
|
|
118
|
-
rx_some = @trans.readpartial( DEFAULT_RDBLKSZ )
|
122
|
+
rx_some = @trans.readpartial( DEFAULT_RDBLKSZ )
|
123
|
+
|
124
|
+
$stdout.puts rx_some
|
125
|
+
|
119
126
|
rx_buf += rx_some
|
120
127
|
break if rx_buf.match( on_re )
|
121
128
|
|
data/lib/net/netconf/telnet.rb
CHANGED
@@ -33,13 +33,7 @@ module Netconf
|
|
33
33
|
trans_start_netconf()
|
34
34
|
self
|
35
35
|
end
|
36
|
-
|
37
|
-
def trans_hello
|
38
|
-
hello_str = trans_receive()
|
39
|
-
so_xml = hello_str.index("\n") + 1 # skip over the last issued command
|
40
|
-
hello_str[so_xml .. -1]
|
41
|
-
end
|
42
|
-
|
36
|
+
|
43
37
|
def trans_close
|
44
38
|
@trans.write Netconf::RPC::MSG_CLOSE_SESSION
|
45
39
|
@trans.close
|
@@ -22,6 +22,7 @@ module Netconf
|
|
22
22
|
@os_type = @args[:os_type] || Netconf::DEFAULT_OS_TYPE
|
23
23
|
|
24
24
|
@rpc = Netconf::RPC::Executor.new( self, @os_type )
|
25
|
+
@rpc_message_id = 1
|
25
26
|
|
26
27
|
if block_given?
|
27
28
|
open( &block = nil ) # do not pass this block to open()
|
@@ -38,19 +39,31 @@ module Netconf
|
|
38
39
|
# block is used to deal with special open processing ...
|
39
40
|
# this is *NOT* the block passed to initialize()
|
40
41
|
raise Netconf::OpenError unless trans_open( &block )
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
|
43
|
+
# read the <hello> from the server and parse out
|
44
|
+
# the capabilities and session-id
|
44
45
|
|
46
|
+
hello_rsp = Nokogiri::XML( trans_receive_hello() )
|
47
|
+
hello_rsp.remove_namespaces!
|
48
|
+
|
45
49
|
@capabilities = hello_rsp.xpath('//capability').map{ |c| c.text }
|
46
|
-
@session_id = hello_rsp.xpath('//session-id').text
|
50
|
+
@session_id = hello_rsp.xpath('//session-id').text
|
51
|
+
|
52
|
+
# send the <hello>
|
53
|
+
trans_send_hello()
|
54
|
+
|
55
|
+
@state = :NETCONF_OPEN
|
47
56
|
self
|
48
57
|
end
|
49
58
|
|
50
|
-
def
|
59
|
+
def trans_receive_hello
|
51
60
|
trans_receive()
|
52
61
|
end
|
53
62
|
|
63
|
+
def trans_send_hello
|
64
|
+
trans_send( Netconf::RPC::MSG_HELLO )
|
65
|
+
end
|
66
|
+
|
54
67
|
def has_capability?( capability )
|
55
68
|
@capabilities.select{|c| c.include? capability }.pop
|
56
69
|
# note: the caller could also simply use #grep on @capabilities
|
@@ -71,7 +84,14 @@ module Netconf
|
|
71
84
|
|
72
85
|
def rpc_exec( cmd_nx )
|
73
86
|
raise Netconf::StateError unless @state == :NETCONF_OPEN
|
74
|
-
|
87
|
+
|
88
|
+
# add the mandatory message-id and namespace to the RPC
|
89
|
+
|
90
|
+
rpc_nx = cmd_nx.parent.root
|
91
|
+
rpc_nx.default_namespace = Netconf::NAMESPACE
|
92
|
+
rpc_nx['message-id'] = @rpc_message_id.to_s
|
93
|
+
@rpc_message_id += 1
|
94
|
+
|
75
95
|
# send the XML command through the transport and
|
76
96
|
# receive the response; then covert it to a Nokogiri XML
|
77
97
|
# object so we can process it.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netconf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-01-
|
13
|
+
date: 2013-01-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -63,6 +63,7 @@ files:
|
|
63
63
|
- lib/net/netconf/telnet.rb
|
64
64
|
- lib/net/netconf/transport.rb
|
65
65
|
- lib/net/netconf.rb
|
66
|
+
- examples/confd/get-running.rb
|
66
67
|
- examples/jnpr/edit-config-jnpr-set.rb
|
67
68
|
- examples/jnpr/edit-config-jnpr-text.rb
|
68
69
|
- examples/jnpr/edit-config-jnpr.rb
|
@@ -76,7 +77,7 @@ files:
|
|
76
77
|
- examples/jnpr/get-inventory-telnet.rb
|
77
78
|
- examples/jnpr/get-inventory.rb
|
78
79
|
- examples/jnpr/scp.rb
|
79
|
-
homepage: https://github.com/Juniper-Workflow
|
80
|
+
homepage: https://github.com/Juniper-Workflow/net-netconf
|
80
81
|
licenses: []
|
81
82
|
post_install_message:
|
82
83
|
rdoc_options: []
|