net-netconf 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 882b8dffb9e72058c0cfc8d9d245d2a33c445e94
4
- data.tar.gz: 6965b0162647568257b9d7f413faf8cc99952301
3
+ metadata.gz: 741e277664fb1c1660b55878c50a47e0b4d21887
4
+ data.tar.gz: 7b46a74d28874a65a1f346a9303b6e24744dcb61
5
5
  SHA512:
6
- metadata.gz: f74d7e05706421321cc163259181dbb05321440787663a823af37c79c5b70e0b63737cd4cac6912a8ab69c0d4a42f701d93ea4afc4a5c95ac8a567a9b36595dc
7
- data.tar.gz: f079cf1748209eb9df67c347c1c225fab5bb2a0d4aae43667dfa759b327e51fd5d1c21dc16edd48b929f553622d598950f5a54b4fa5ba1b8272af7ec8a571f6d
6
+ metadata.gz: 058610c26844ee71ffbfa832f300af0e9bc08e66be87325f53ade81730e0ea8a1feed488c4556aea3bab6504ce25e9e155cab5dfad4d5c088c42e1148ecb6e1e
7
+ data.tar.gz: ba146336a067d81baad536e725cf5c981ef1139c50ee78e5373458da9b1c1cd18cdc51a368eb15fefd620750282cb2bf596e561bfe5af800cabe6e3651e33737
data/lib/net/netconf.rb CHANGED
@@ -17,8 +17,45 @@ module Netconf
17
17
  def self.raise_on_warning=( bool )
18
18
  @raise_on_warning = bool
19
19
  end
20
+
20
21
  def self.raise_on_warning
21
22
  @raise_on_warning
22
23
  end
23
24
 
25
+ def self.waitfor(on_re = nil)
26
+ time_out = @trans_timeout
27
+ wait_io = @trans_waitio
28
+
29
+ time_out = nil if time_out == false
30
+ done = false
31
+ rx_buf = ''
32
+
33
+ until( rx_buf.match( on_re ) and not IO::select( [@trans], nil, nil, wait_io ) )
34
+
35
+ unless IO::select( [@trans], nil, nil, time_out )
36
+ raise TimeoutError, 'Netconf IO timed out while waiting for more data'
37
+ end
38
+
39
+ begin
40
+
41
+ rx_some = @trans.readpartial( DEFAULT_RDBLKSZ )
42
+
43
+ rx_buf += rx_some
44
+ break if rx_buf.match( on_re )
45
+
46
+ rescue EOFError # End of file reached
47
+ rx_buf = nil if rx_buf == ''
48
+ break # out of outer 'until' loop
49
+ end
50
+
51
+ end
52
+ rx_buf
53
+ end
54
+
55
+ def self.trans_receive
56
+ got = waitfor( Netconf::RPC::MSG_END_RE )
57
+ msg_end = got.rindex( Netconf::RPC::MSG_END )
58
+ got[msg_end .. -1] = ''
59
+ got
60
+ end
24
61
  end
@@ -1,37 +1,37 @@
1
1
  module Netconf
2
-
2
+
3
3
  class InitError < StandardError
4
4
  end
5
-
5
+
6
6
  class StateError < StandardError
7
7
  end
8
-
8
+
9
9
  class OpenError < StandardError
10
10
  end
11
-
11
+
12
12
  class RpcError < StandardError
13
13
  attr_reader :trans
14
14
  attr_reader :cmd, :rsp
15
-
15
+
16
16
  def initialize( trans, cmd, rsp )
17
17
  @trans = trans
18
- @cmd = cmd; @rsp = rsp;
18
+ @cmd = cmd; @rsp = rsp;
19
19
  end
20
-
20
+
21
21
  def to_s
22
22
  "RPC command error: #{cmd.first_element_child.name}\n#{rsp.to_xml}"
23
23
  end
24
24
  end
25
-
25
+
26
26
  class EditError < Netconf::RpcError
27
27
  end
28
-
28
+
29
29
  class LockError < Netconf::RpcError
30
30
  end
31
-
31
+
32
32
  class CommitError < Netconf::RpcError
33
33
  end
34
-
34
+
35
35
  class ValidateError < Netconf::RpcError
36
36
  end
37
37
 
@@ -1,88 +1,58 @@
1
1
  module Netconf
2
-
2
+
3
3
  class IOProc < Netconf::Transport
4
-
4
+
5
5
  DEFAULT_RDBLKSZ = (1024*1024)
6
-
6
+
7
7
  attr_reader :args
8
-
8
+
9
9
  def initialize( args_h = {}, &block )
10
10
  os_type = args_h[:os_type] || Netconf::DEFAULT_OS_TYPE
11
-
11
+
12
12
  @args = args_h.clone
13
-
13
+
14
14
  # an OS specific implementation must exist to support this transport type
15
- extend Netconf::const_get( os_type )::IOProc
16
-
15
+ extend Netconf::const_get( os_type )::IOProc
16
+
17
17
  @trans_timeout = @args[:timeout] || Netconf::DEFAULT_TIMEOUT
18
18
  @trans_waitio = @args[:waitio] || Netconf::DEFAULT_WAITIO
19
19
 
20
- super( &block )
21
- end
22
-
20
+ super( &block )
21
+ end
22
+
23
23
  # the OS specific transport must implement this method
24
- def trans_open # :yield: self
24
+ def trans_open # :yield: self
25
25
  raise "Unsupported IOProc"
26
26
  end
27
-
27
+
28
28
  def trans_receive_hello
29
29
  trans_receive()
30
30
  end
31
-
31
+
32
32
  def trans_send_hello
33
33
  nil
34
34
  end
35
-
35
+
36
36
  def trans_close
37
37
  @trans.write Netconf::RPC::MSG_CLOSE_SESSION
38
38
  @trans.close
39
39
  end
40
-
40
+
41
41
  def trans_send( cmd_str )
42
42
  @trans.write( cmd_str )
43
43
  end
44
-
44
+
45
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
46
+ Netconf.trans_receive
50
47
  end
51
-
48
+
52
49
  def puts( str = nil )
53
50
  @trans.puts( str )
54
51
  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
-
52
+
53
+ def waitfor( on_re )
54
+ Netconf.waitfor(on_re)
55
+ end
56
+
87
57
  end # class: IOProc
88
58
  end # module: Netconf
@@ -6,4 +6,4 @@ module Netconf::Junos
6
6
  NETCONF_CLI = "junoscript netconf need-trailer"
7
7
  NETCONF_SHELL = "exec xml-mode netconf need-trailer"
8
8
  end
9
-
9
+
@@ -5,8 +5,8 @@ require 'net/netconf/jnpr'
5
5
  module Netconf
6
6
  module Junos
7
7
  module IOProc
8
- def trans_open
9
- @trans = IO.popen( "xml-mode netconf need-trailer", "r+")
8
+ def trans_open
9
+ @trans = IO.popen( "xml-mode netconf need-trailer", "r+")
10
10
  self
11
11
  end
12
12
  end
@@ -10,7 +10,7 @@ module Netconf
10
10
 
11
11
  DELETE = { :delete => 'delete' }
12
12
  REPLACE = { :replace => 'replace' }
13
-
13
+
14
14
  attr_reader :doc
15
15
  attr_reader :collection
16
16
 
@@ -1,6 +1,6 @@
1
1
  ## -----------------------------------------------------------------------
2
- ## This file contains the Junos specific RPC methods that are generated
3
- ## specifically and different as generated by the Netconf::RPC::Builder
2
+ ## This file contains the Junos specific RPC methods that are generated
3
+ ## specifically and different as generated by the Netconf::RPC::Builder
4
4
  ## module. These are specifically the following:
5
5
  ##
6
6
  ## get_configuration - alternative NETCONF: 'get-config'
@@ -14,149 +14,148 @@
14
14
 
15
15
  module Netconf
16
16
  module RPC
17
- module Junos
18
-
17
+ module Junos
18
+
19
19
  def lock_configuration
20
- lock( 'candidate' )
21
- end
22
-
20
+ lock('candidate')
21
+ end
22
+
23
23
  def check_configuration
24
- validate( 'candidate' )
25
- end
26
-
27
- def commit_configuration( params = nil, attrs = nil )
28
- rpc = Netconf::RPC::Builder.commit_configuration( params, attrs )
29
- Netconf::RPC.set_exception( rpc, Netconf::CommitError )
30
- @trans.rpc_exec( rpc )
24
+ validate('candidate')
25
+ end
26
+
27
+ def commit_configuration(params = nil, attrs = nil)
28
+ rpc = Netconf::RPC::Builder.commit_configuration(params, attrs)
29
+ Netconf::RPC.set_exception(rpc, Netconf::CommitError)
30
+ @trans.rpc_exec(rpc)
31
+ end
32
+
33
+ def nokogiri_case(arg)
34
+ filter = case arg
35
+ when Nokogiri::XML::Builder then arg.doc.root
36
+ when Nokogiri::XML::Document then arg.root
37
+ else arg
31
38
  end
32
39
 
33
- def get_configuration( *args )
34
-
40
+ def get_configuration(*args)
35
41
  filter = nil
36
-
42
+
37
43
  while arg = args.shift
38
44
  case arg.class.to_s
39
- when /^Nokogiri/
40
- filter = case arg
41
- when Nokogiri::XML::Builder then arg.doc.root
42
- when Nokogiri::XML::Document then arg.root
43
- else arg
44
- end
45
+ when /^Nokogiri/
46
+ nokogiri_case(arg)
45
47
  when 'Hash' then attrs = arg
46
48
  end
47
49
  end
48
50
 
49
51
  rpc = Nokogiri::XML('<rpc><get-configuration/></rpc>').root
50
- Netconf::RPC.add_attributes( rpc.first_element_child, attrs ) if attrs
51
-
52
+ Netconf::RPC.add_attributes(rpc.first_element_child, attrs) if attrs
53
+
52
54
  if block_given?
53
- Nokogiri::XML::Builder.with(rpc.at( 'get-configuration' )){ |xml|
54
- xml.configuration {
55
- yield( xml )
56
- }}
55
+ Nokogiri::XML::Builder.with(rpc.at('get-configuration')) do |xml|
56
+ xml.configuration do
57
+ yield(xml)
58
+ end
59
+ end
57
60
  elsif filter
58
61
  # filter must have toplevel = <configuration>
59
- rpc.first_element_child << filter.dup # *MUST* use the .dup so we don't disrupt the original filter
62
+ # *MUST* use the .dup so we don't disrupt the original filter
63
+ rpc.first_element_child << filter.dup
60
64
  end
61
-
62
- @trans.rpc_exec( rpc )
65
+
66
+ @trans.rpc_exec(rpc)
63
67
  end
64
-
65
- def load_configuration( *args )
66
-
68
+
69
+ def load_configuration(*args)
67
70
  config = nil
68
-
71
+
69
72
  # default format is XML
70
- attrs = { :format => 'xml' }
71
-
73
+ attrs = { format: 'xml' }
74
+
72
75
  while arg = args.shift
73
76
  case arg.class.to_s
74
- when /^Nokogiri/
75
- config = case arg
76
- when Nokogiri::XML::Builder then arg.doc.root
77
- when Nokogiri::XML::Document then arg.root
78
- else arg
79
- end
77
+ when /^Nokogiri/
78
+ nokogiri_case(arg)
80
79
  when 'Hash' then attrs.merge! arg
81
80
  when 'Array' then config = arg.join("\n")
82
81
  when 'String' then config = arg
83
82
  end
84
83
  end
85
-
84
+
86
85
  case attrs[:format]
87
86
  when 'set'
88
87
  toplevel = 'configuration-set'
89
88
  attrs[:format] = 'text'
90
- attrs[:action] = 'set'
89
+ attrs[:action] = 'set'
91
90
  when 'text'
92
- toplevel = 'configuration-text'
91
+ toplevel = 'configuration-text'
93
92
  when 'xml'
94
- toplevel = 'configuration'
95
- end
96
-
93
+ toplevel = 'configuration'
94
+ end
95
+
97
96
  rpc = Nokogiri::XML('<rpc><load-configuration/></rpc>').root
98
97
  ld_cfg = rpc.first_element_child
99
- Netconf::RPC.add_attributes( ld_cfg, attrs ) if attrs
100
-
98
+ Netconf::RPC.add_attributes(ld_cfg, attrs) if attrs
99
+
101
100
  if block_given?
102
101
  if attrs[:format] == 'xml'
103
- Nokogiri::XML::Builder.with( ld_cfg ){ |xml|
104
- xml.send( toplevel ) {
105
- yield( xml )
106
- }}
102
+ Nokogiri::XML::Builder.with(ld_cfg) do |xml|
103
+ xml.send(toplevel) do
104
+ yield(xml)
105
+ end
106
+ end
107
107
  else
108
- config = yield # returns String | Array(of stringable)
109
- config = config.join("\n") if config.class == Array
108
+ config = yield # returns String | Array(of stringable)
109
+ config = config.join("\n") if config.class == Array
110
110
  end
111
111
  end
112
-
112
+
113
113
  if config
114
114
  if attrs[:format] == 'xml'
115
- # config assumes toplevel = <configuration> given
116
- ld_cfg << config.dup # duplicate the config so as to not distrupt it
115
+ # config assumes toplevel = <configuration> given
116
+ ld_cfg << config.dup # duplicate the config so as to not distrupt it
117
117
  else
118
- # config is stringy, so just add it as the text node
119
- c_node = Nokogiri::XML::Node.new( toplevel, rpc )
118
+ # config is stringy, so just add it as the text node
119
+ c_node = Nokogiri::XML::Node.new(toplevel, rpc)
120
120
  c_node.content = config
121
- ld_cfg << c_node
121
+ ld_cfg << c_node
122
122
  end
123
123
  end
124
-
124
+
125
125
  # set a specific exception class on this RPC so it can be
126
126
  # properlly handled by the calling enviornment
127
-
128
- Netconf::RPC::set_exception( rpc, Netconf::EditError )
129
- @trans.rpc_exec( rpc )
127
+
128
+ Netconf::RPC.set_exception(rpc, Netconf::EditError)
129
+ @trans.rpc_exec(rpc)
130
130
  end # load_configuration
131
-
132
- def command( cmd_str, attrs = nil )
131
+
132
+ def command(cmd_str, attrs = nil)
133
133
  rpc = Nokogiri::XML("<rpc><command>#{cmd_str}</command></rpc>").root
134
- Netconf::RPC.add_attributes( rpc.at('command'), attrs ) if attrs
135
- @trans.rpc_exec( rpc )
134
+ Netconf::RPC.add_attributes(rpc.at('command'), attrs) if attrs
135
+ @trans.rpc_exec(rpc)
136
136
  end
137
-
137
+
138
138
  ## contributed by 'dgjnpr'
139
- def request_pfe_execute( params = nil )
139
+ def request_pfe_execute(params = nil)
140
140
  raise ArgumentError, 'Manditorary argument :target missing' unless params[:target]
141
141
  raise ArgumentError, 'Manditorary argument :command missing' unless params[:command]
142
142
 
143
- rpc_nx = Nokogiri::XML::Builder.new { |xml|
144
- xml.rpc {
145
- xml.send( 'request-pfe-execute' ) {
146
- xml.send( 'target', params[:target] )
143
+ rpc_nx = Nokogiri::XML::Builder.new do |xml|
144
+ xml.rpc do
145
+ xml.send('request-pfe-execute') do
146
+ xml.send('target', params[:target])
147
147
  if params[:command].class.to_s =~ /^Array/
148
- params[:command].each { |cmd|
149
- xml.send( 'command', cmd )
150
- }
148
+ params[:command].each do |cmd|
149
+ xml.send('command', cmd)
150
+ end
151
151
  elsif params[:command].class.to_s =~ /^String/
152
- xml.send( 'command', params[:command] )
152
+ xml.send('command', params[:command])
153
153
  end
154
- }
155
- }
156
- }
157
- @trans.rpc_exec( rpc_nx )
154
+ end
155
+ end
156
+ end
157
+ @trans.rpc_exec(rpc_nx)
158
158
  end
159
-
160
- end # module: JUNOS
159
+ end # module: JUNOS
161
160
  end # module: RPC
162
161
  end # module: Netconf