netconf 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,27 +1,27 @@
1
- require 'net/netconf/jnpr/serial'
2
-
3
- puts "NETCONF v.#{Netconf::VERSION}"
4
-
5
- login = {
6
- :port => '/dev/ttyS4',
7
- :username => "root", :password => "juniper1"
8
- }
9
-
10
- # we want to mount the USB drive, so we need to explicity
11
- # do something special when opening the serial console ...
12
- # therefore, we can *NOT* pass a block directly to new()
13
-
14
- dev = Netconf::Serial.new( login )
15
- dev.open { |con|
16
- # login has occurred successfully
17
-
18
- con.puts 'mount_msdosfs /dev/da1s1 /mnt'
19
-
20
- # netconf will be started once block completes
21
- }
22
-
23
- inv = dev.rpc.get_chassis_inventory
24
-
25
- dev.close
26
-
27
-
1
+ require 'net/netconf/jnpr/serial'
2
+
3
+ puts "NETCONF v.#{Netconf::VERSION}"
4
+
5
+ login = {
6
+ :port => '/dev/ttyS4',
7
+ :username => "root", :password => "juniper1"
8
+ }
9
+
10
+ # we want to mount the USB drive, so we need to explicity
11
+ # do something special when opening the serial console ...
12
+ # therefore, we can *NOT* pass a block directly to new()
13
+
14
+ dev = Netconf::Serial.new( login )
15
+ dev.open { |con|
16
+ # login has occurred successfully
17
+
18
+ con.puts 'mount_msdosfs /dev/da1s1 /mnt'
19
+
20
+ # netconf will be started once block completes
21
+ }
22
+
23
+ inv = dev.rpc.get_chassis_inventory
24
+
25
+ dev.close
26
+
27
+
@@ -1,25 +1,25 @@
1
- require 'net/netconf/jnpr/serial'
2
-
3
- puts "NETCONF v.#{Netconf::VERSION}"
4
-
5
- serial_port = '/dev/ttyS4'
6
-
7
- login = { :port => serial_port,
8
- :username => "jeremy", :password => "jeremy1" }
9
-
10
- puts "Connecting to SERIAL: #{serial_port} ... please wait."
11
-
12
- Netconf::Serial.new( login ){ |dev|
13
-
14
- puts "Connected."
15
- puts "Nabbing Inventory ..."
16
-
17
- inv = dev.rpc.get_chassis_inventory
18
-
19
- puts "Chassis: " + inv.xpath('chassis/description').text
20
- puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
21
-
22
- }
23
-
24
-
25
-
1
+ require 'net/netconf/jnpr/serial'
2
+
3
+ puts "NETCONF v.#{Netconf::VERSION}"
4
+
5
+ serial_port = '/dev/ttyS4'
6
+
7
+ login = { :port => serial_port,
8
+ :username => "jeremy", :password => "jeremy1" }
9
+
10
+ puts "Connecting to SERIAL: #{serial_port} ... please wait."
11
+
12
+ Netconf::Serial.new( login ){ |dev|
13
+
14
+ puts "Connected."
15
+ puts "Nabbing Inventory ..."
16
+
17
+ inv = dev.rpc.get_chassis_inventory
18
+
19
+ puts "Chassis: " + inv.xpath('chassis/description').text
20
+ puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
21
+
22
+ }
23
+
24
+
25
+
@@ -1,14 +1,14 @@
1
- require 'net/netconf/jnpr/telnet'
2
-
3
- puts "NETCONF v#{Netconf::VERSION}"
4
-
5
- login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
6
-
7
- Netconf::Telnet.new( login ){ |dev|
8
- inv = dev.rpc.get_chassis_inventory
9
- puts "Chassis: " + inv.xpath('chassis/description').text
10
- puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
11
-
12
- }
13
-
14
-
1
+ require 'net/netconf/jnpr/telnet'
2
+
3
+ puts "NETCONF v#{Netconf::VERSION}"
4
+
5
+ login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
6
+
7
+ Netconf::Telnet.new( login ){ |dev|
8
+ inv = dev.rpc.get_chassis_inventory
9
+ puts "Chassis: " + inv.xpath('chassis/description').text
10
+ puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
11
+
12
+ }
13
+
14
+
@@ -1,16 +1,16 @@
1
- require 'net/netconf'
2
-
3
- puts "NETCONF v#{Netconf::VERSION}"
4
-
5
- login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
6
-
7
- Netconf::SSH.new( login ){ |dev|
8
-
9
- inv = dev.rpc.get_chassis_inventory
10
-
11
- puts "Chassis: " + inv.xpath('chassis/description').text
12
- puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
13
- }
14
-
15
-
16
-
1
+ require 'net/netconf'
2
+
3
+ puts "NETCONF v#{Netconf::VERSION}"
4
+
5
+ login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
6
+
7
+ Netconf::SSH.new( login ){ |dev|
8
+
9
+ inv = dev.rpc.get_chassis_inventory
10
+
11
+ puts "Chassis: " + inv.xpath('chassis/description').text
12
+ puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
13
+ }
14
+
15
+
16
+
@@ -1,22 +1,22 @@
1
- require 'net/netconf'
2
- require 'net/scp'
3
-
4
- login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
5
-
6
- file_name = __FILE__
7
-
8
- Netconf::SSH.new( login ){ |dev|
9
-
10
- inv = dev.rpc.get_chassis_inventory
11
-
12
- puts "Chassis: " + inv.xpath('chassis/description').text
13
- puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
14
-
15
- puts "Copying file #{file_name} to home directory ..."
16
- dev.scp.upload! file_name, file_name
17
-
18
- puts "Copying latest config file from target to local machine ..."
19
-
20
- dev.scp.download! "/config/juniper.conf.gz", "/var/tmp/config.gz"
21
- }
22
-
1
+ require 'net/netconf'
2
+ require 'net/scp'
3
+
4
+ login = { :target => 'vsrx', :username => "jeremy", :password => "jeremy1" }
5
+
6
+ file_name = __FILE__
7
+
8
+ Netconf::SSH.new( login ){ |dev|
9
+
10
+ inv = dev.rpc.get_chassis_inventory
11
+
12
+ puts "Chassis: " + inv.xpath('chassis/description').text
13
+ puts "Chassis Serial-Number: " + inv.xpath('chassis/serial-number').text
14
+
15
+ puts "Copying file #{file_name} to home directory ..."
16
+ dev.scp.upload! file_name, file_name
17
+
18
+ puts "Copying latest config file from target to local machine ..."
19
+
20
+ dev.scp.download! "/config/juniper.conf.gz", "/var/tmp/config.gz"
21
+ }
22
+
@@ -1,15 +1,25 @@
1
1
 
2
2
  require 'nokogiri'
3
3
 
4
+ require 'net/netconf/version'
4
5
  require 'net/netconf/rpc'
5
6
  require 'net/netconf/exception'
6
7
  require 'net/netconf/transport'
7
8
  require 'net/netconf/ssh'
8
9
 
9
10
  module Netconf
10
- VERSION = "0.2.5"
11
11
  NAMESPACE = "urn:ietf:params:xml:ns:netconf:base:1.0"
12
12
  DEFAULT_OS_TYPE = :Junos
13
13
  DEFAULT_TIMEOUT = 10
14
14
  DEFAULT_WAITIO = 0
15
+
16
+ @raise_on_warning = false # rpc-error with <error-severity> = 'warning' will not raise RpcError excption
17
+
18
+ def self.raise_on_warning=( bool )
19
+ @raise_on_warning = bool
20
+ end
21
+ def self.raise_on_warning
22
+ @raise_on_warning
23
+ end
24
+
15
25
  end
@@ -1,38 +1,38 @@
1
- module Netconf
2
-
3
- class InitError < StandardError
4
- end
5
-
6
- class StateError < StandardError
7
- end
8
-
9
- class OpenError < StandardError
10
- end
11
-
12
- class RpcError < StandardError
13
- attr_reader :trans
14
- attr_reader :cmd, :rsp
15
-
16
- def initialize( trans, cmd, rsp )
17
- @trans = trans
18
- @cmd = cmd; @rsp = rsp;
19
- end
20
-
21
- def to_s
22
- "RPC command error: #{cmd.first_element_child.name}"
23
- end
24
- end
25
-
26
- class EditError < Netconf::RpcError
27
- end
28
-
29
- class LockError < Netconf::RpcError
30
- end
31
-
32
- class CommitError < Netconf::RpcError
33
- end
34
-
35
- class ValidateError < Netconf::RpcError
36
- end
37
-
38
- end
1
+ module Netconf
2
+
3
+ class InitError < StandardError
4
+ end
5
+
6
+ class StateError < StandardError
7
+ end
8
+
9
+ class OpenError < StandardError
10
+ end
11
+
12
+ class RpcError < StandardError
13
+ attr_reader :trans
14
+ attr_reader :cmd, :rsp
15
+
16
+ def initialize( trans, cmd, rsp )
17
+ @trans = trans
18
+ @cmd = cmd; @rsp = rsp;
19
+ end
20
+
21
+ def to_s
22
+ "RPC command error: #{cmd.first_element_child.name}\n#{rsp.to_xml}"
23
+ end
24
+ end
25
+
26
+ class EditError < Netconf::RpcError
27
+ end
28
+
29
+ class LockError < Netconf::RpcError
30
+ end
31
+
32
+ class CommitError < Netconf::RpcError
33
+ end
34
+
35
+ class ValidateError < Netconf::RpcError
36
+ end
37
+
38
+ end
@@ -1,88 +1,88 @@
1
- module Netconf
2
-
3
- class IOProc < Netconf::Transport
4
-
5
- DEFAULT_RDBLKSZ = (1024*1024)
6
-
7
- attr_reader :args
8
-
9
- def initialize( args_h = {}, &block )
10
- os_type = args_h[:os_type] || Netconf::DEFAULT_OS_TYPE
11
-
12
- @args = args_h.clone
13
-
14
- # an OS specific implementation must exist to support this transport type
15
- extend Netconf::const_get( os_type )::IOProc
16
-
17
- @trans_timeout = @args[:timeout] || Netconf::DEFAULT_TIMEOUT
18
- @trans_waitio = @args[:waitio] || Netconf::DEFAULT_WAITIO
19
-
20
- super( &block )
21
- end
22
-
23
- # the OS specific transport must implement this method
24
- def trans_open # :yield: self
25
- raise "Unsupported IOProc"
26
- end
27
-
28
- def trans_receive_hello
29
- trans_receive()
30
- end
31
-
32
- def trans_send_hello
33
- nil
34
- end
35
-
36
- def trans_close
37
- @trans.write Netconf::RPC::MSG_CLOSE_SESSION
38
- @trans.close
39
- end
40
-
41
- def trans_send( cmd_str )
42
- @trans.write( cmd_str )
43
- end
44
-
45
- def trans_receive
46
- got = waitfor( Netconf::RPC::MSG_END_RE )
47
- msg_end = got.rindex( Netconf::RPC::MSG_END )
48
- got[msg_end .. -1] = ''
49
- got
50
- end
51
-
52
- def puts( str = nil )
53
- @trans.puts( str )
54
- end
55
-
56
- def waitfor( on_re )
57
-
58
- time_out = @trans_timeout
59
- wait_io = @trans_waitio
60
-
61
- time_out = nil if time_out == false
62
- done = false
63
- rx_buf = ''
64
-
65
- until( rx_buf.match( on_re ) and not IO::select( [@trans], nil, nil, wait_io ) )
66
-
67
- unless IO::select( [@trans], nil, nil, time_out )
68
- raise TimeoutError, "Netconf IO timed out while waiting for more data"
69
- end
70
-
71
- begin
72
-
73
- rx_some = @trans.readpartial( DEFAULT_RDBLKSZ )
74
-
75
- rx_buf += rx_some
76
- break if rx_buf.match( on_re )
77
-
78
- rescue EOFError # End of file reached
79
- rx_buf = nil if rx_buf == ''
80
- break # out of outer 'until' loop
81
- end
82
-
83
- end
84
- rx_buf
85
- end
86
-
87
- end # class: IOProc
88
- end # module: Netconf
1
+ module Netconf
2
+
3
+ class IOProc < Netconf::Transport
4
+
5
+ DEFAULT_RDBLKSZ = (1024*1024)
6
+
7
+ attr_reader :args
8
+
9
+ def initialize( args_h = {}, &block )
10
+ os_type = args_h[:os_type] || Netconf::DEFAULT_OS_TYPE
11
+
12
+ @args = args_h.clone
13
+
14
+ # an OS specific implementation must exist to support this transport type
15
+ extend Netconf::const_get( os_type )::IOProc
16
+
17
+ @trans_timeout = @args[:timeout] || Netconf::DEFAULT_TIMEOUT
18
+ @trans_waitio = @args[:waitio] || Netconf::DEFAULT_WAITIO
19
+
20
+ super( &block )
21
+ end
22
+
23
+ # the OS specific transport must implement this method
24
+ def trans_open # :yield: self
25
+ raise "Unsupported IOProc"
26
+ end
27
+
28
+ def trans_receive_hello
29
+ trans_receive()
30
+ end
31
+
32
+ def trans_send_hello
33
+ nil
34
+ end
35
+
36
+ def trans_close
37
+ @trans.write Netconf::RPC::MSG_CLOSE_SESSION
38
+ @trans.close
39
+ end
40
+
41
+ def trans_send( cmd_str )
42
+ @trans.write( cmd_str )
43
+ end
44
+
45
+ def trans_receive
46
+ got = waitfor( Netconf::RPC::MSG_END_RE )
47
+ msg_end = got.rindex( Netconf::RPC::MSG_END )
48
+ got[msg_end .. -1] = ''
49
+ got
50
+ end
51
+
52
+ def puts( str = nil )
53
+ @trans.puts( str )
54
+ end
55
+
56
+ def waitfor( on_re )
57
+
58
+ time_out = @trans_timeout
59
+ wait_io = @trans_waitio
60
+
61
+ time_out = nil if time_out == false
62
+ done = false
63
+ rx_buf = ''
64
+
65
+ until( rx_buf.match( on_re ) and not IO::select( [@trans], nil, nil, wait_io ) )
66
+
67
+ unless IO::select( [@trans], nil, nil, time_out )
68
+ raise TimeoutError, "Netconf IO timed out while waiting for more data"
69
+ end
70
+
71
+ begin
72
+
73
+ rx_some = @trans.readpartial( DEFAULT_RDBLKSZ )
74
+
75
+ rx_buf += rx_some
76
+ break if rx_buf.match( on_re )
77
+
78
+ rescue EOFError # End of file reached
79
+ rx_buf = nil if rx_buf == ''
80
+ break # out of outer 'until' loop
81
+ end
82
+
83
+ end
84
+ rx_buf
85
+ end
86
+
87
+ end # class: IOProc
88
+ end # module: Netconf