net-netconf 0.4.1 → 0.4.2
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.
- checksums.yaml +4 -4
- data/lib/net/netconf.rb +37 -0
- data/lib/net/netconf/exception.rb +11 -11
- data/lib/net/netconf/ioproc.rb +24 -54
- data/lib/net/netconf/jnpr.rb +1 -1
- data/lib/net/netconf/jnpr/ioproc.rb +2 -2
- data/lib/net/netconf/jnpr/junos_config.rb +1 -1
- data/lib/net/netconf/jnpr/rpc.rb +87 -88
- data/lib/net/netconf/jnpr/serial.rb +4 -4
- data/lib/net/netconf/jnpr/ssh.rb +10 -10
- data/lib/net/netconf/jnpr/telnet.rb +7 -7
- data/lib/net/netconf/rpc.rb +31 -31
- data/lib/net/netconf/rpc_std.rb +19 -23
- data/lib/net/netconf/serial.rb +40 -71
- data/lib/net/netconf/ssh.rb +45 -44
- data/lib/net/netconf/telnet.rb +27 -30
- data/lib/net/netconf/transport.rb +23 -30
- data/lib/net/netconf/version.rb +1 -1
- metadata +3 -2
data/lib/net/netconf/telnet.rb
CHANGED
@@ -1,52 +1,49 @@
|
|
1
1
|
require 'net/telnet'
|
2
2
|
|
3
3
|
module Netconf
|
4
|
-
|
5
4
|
class Telnet < Netconf::Transport
|
6
|
-
|
7
|
-
|
8
|
-
os_type = args[:os_type] || Netconf::DEFAULT_OS_TYPE
|
5
|
+
def initialize(args, trans_args = nil, &block)
|
6
|
+
os_type = args[:os_type] || Netconf::DEFAULT_OS_TYPE
|
9
7
|
@args = args.clone
|
10
|
-
|
8
|
+
|
11
9
|
# extend this instance with the capabilities of the specific console
|
12
10
|
# type; it needs to define #login and #start_netconf session
|
13
11
|
begin
|
14
|
-
extend Netconf
|
12
|
+
extend Netconf.const_get(os_type).TransTelnet
|
15
13
|
rescue NameError
|
16
14
|
# no extensions available ...
|
17
|
-
end
|
18
|
-
|
15
|
+
end
|
16
|
+
|
19
17
|
my_trans_args = {}
|
20
|
-
my_trans_args[
|
21
|
-
my_trans_args[
|
22
|
-
|
23
|
-
@trans = Net::Telnet.new(
|
24
|
-
|
18
|
+
my_trans_args['Host'] = @args[:target]
|
19
|
+
my_trans_args['Port'] = @args[:port] if @args[:port]
|
20
|
+
|
21
|
+
@trans = Net::Telnet.new(my_trans_args)
|
22
|
+
|
25
23
|
@trans_timeout = @args[:timeout] || Netconf::DEFAULT_TIMEOUT
|
26
|
-
@trans_waitio = @args[:waitio] || Netconf::DEFAULT_WAITIO
|
27
|
-
|
28
|
-
super(
|
29
|
-
end
|
30
|
-
|
31
|
-
def trans_open(
|
32
|
-
trans_login
|
33
|
-
trans_start_netconf
|
24
|
+
@trans_waitio = @args[:waitio] || Netconf::DEFAULT_WAITIO
|
25
|
+
|
26
|
+
super(&block)
|
27
|
+
end
|
28
|
+
|
29
|
+
def trans_open(&block)
|
30
|
+
trans_login
|
31
|
+
trans_start_netconf
|
34
32
|
self
|
35
33
|
end
|
36
|
-
|
34
|
+
|
37
35
|
def trans_close
|
38
36
|
@trans.write Netconf::RPC::MSG_CLOSE_SESSION
|
39
37
|
@trans.close
|
40
38
|
end
|
41
|
-
|
42
|
-
def trans_send(
|
43
|
-
@trans.write
|
39
|
+
|
40
|
+
def trans_send(cmd_str)
|
41
|
+
@trans.write cmd_str
|
44
42
|
end
|
45
|
-
|
46
|
-
def trans_receive
|
47
|
-
rsp = @trans.waitfor(
|
48
|
-
rsp.chomp!(
|
43
|
+
|
44
|
+
def trans_receive
|
45
|
+
rsp = @trans.waitfor(Netconf::RPC::MSG_END_RE)
|
46
|
+
rsp.chomp!(Netconf::RPC::MSG_END + "\n")
|
49
47
|
end
|
50
|
-
|
51
48
|
end # class: Serial
|
52
49
|
end # module: Netconf
|
@@ -12,24 +12,21 @@
|
|
12
12
|
|
13
13
|
module Netconf
|
14
14
|
class Transport
|
15
|
-
|
16
15
|
attr_reader :rpc, :state, :session_id, :capabilities
|
17
16
|
attr_writer :timeout, :waitio
|
18
17
|
|
19
|
-
def initialize(
|
20
|
-
|
18
|
+
def initialize(&block)
|
21
19
|
@state = :NETCONF_CLOSED
|
22
20
|
@os_type = @args[:os_type] || Netconf::DEFAULT_OS_TYPE
|
23
21
|
|
24
|
-
@rpc = Netconf::RPC::Executor.new(
|
22
|
+
@rpc = Netconf::RPC::Executor.new(self, @os_type)
|
25
23
|
@rpc_message_id = 1
|
26
24
|
|
27
25
|
if block_given?
|
28
|
-
open(
|
26
|
+
open(&block = nil) # do not pass this block to open()
|
29
27
|
yield self
|
30
|
-
close
|
28
|
+
close
|
31
29
|
end
|
32
|
-
|
33
30
|
end # initialize
|
34
31
|
|
35
32
|
def open?
|
@@ -40,25 +37,24 @@ module Netconf
|
|
40
37
|
@state == :NECONF_CLOSED
|
41
38
|
end
|
42
39
|
|
43
|
-
def open(
|
44
|
-
|
40
|
+
def open(&block) # :yield: specialized transport open, generally not used
|
45
41
|
raise Netconf::StateError if @state == :NETCONF_OPEN
|
46
42
|
|
47
43
|
# block is used to deal with special open processing ...
|
48
44
|
# this is *NOT* the block passed to initialize()
|
49
|
-
raise Netconf::OpenError unless trans_open(
|
45
|
+
raise Netconf::OpenError unless trans_open(&block)
|
50
46
|
|
51
47
|
# read the <hello> from the server and parse out
|
52
48
|
# the capabilities and session-id
|
53
49
|
|
54
|
-
hello_rsp = Nokogiri::XML(
|
50
|
+
hello_rsp = Nokogiri::XML(trans_receive_hello)
|
55
51
|
hello_rsp.remove_namespaces!
|
56
52
|
|
57
|
-
@capabilities = hello_rsp.xpath('//capability').map{ |c| c.text }
|
53
|
+
@capabilities = hello_rsp.xpath('//capability').map { |c| c.text }
|
58
54
|
@session_id = hello_rsp.xpath('//session-id').text
|
59
55
|
|
60
56
|
# send the <hello>
|
61
|
-
trans_send_hello
|
57
|
+
trans_send_hello
|
62
58
|
|
63
59
|
@state = :NETCONF_OPEN
|
64
60
|
self
|
@@ -69,27 +65,27 @@ module Netconf
|
|
69
65
|
end
|
70
66
|
|
71
67
|
def trans_send_hello
|
72
|
-
trans_send(
|
73
|
-
trans_send(
|
68
|
+
trans_send(Netconf::RPC::MSG_HELLO)
|
69
|
+
trans_send(RPC::MSG_END)
|
74
70
|
end
|
75
71
|
|
76
|
-
def has_capability?(
|
77
|
-
@capabilities.select{|c| c.include? capability }.pop
|
72
|
+
def has_capability?(capability)
|
73
|
+
@capabilities.select { |c| c.include? capability }.pop
|
78
74
|
# note: the caller could also simply use #grep on @capabilities
|
79
75
|
end
|
80
76
|
|
81
77
|
def close
|
82
78
|
raise Netconf::StateError unless @state == :NETCONF_OPEN
|
83
|
-
trans_close
|
79
|
+
trans_close
|
84
80
|
@state = :NETCONF_CLOSED
|
85
81
|
self
|
86
82
|
end
|
87
83
|
|
88
84
|
# string in; string out
|
89
|
-
def send_and_receive(
|
90
|
-
trans_send(
|
91
|
-
trans_send(
|
92
|
-
trans_receive
|
85
|
+
def send_and_receive(cmd_str)
|
86
|
+
trans_send(cmd_str)
|
87
|
+
trans_send(RPC::MSG_END)
|
88
|
+
trans_receive
|
93
89
|
end
|
94
90
|
|
95
91
|
def rpc_exec( cmd_nx )
|
@@ -106,7 +102,7 @@ module Netconf
|
|
106
102
|
# receive the response; then covert it to a Nokogiri XML
|
107
103
|
# object so we can process it.
|
108
104
|
|
109
|
-
rsp_nx = Nokogiri::XML(
|
105
|
+
rsp_nx = Nokogiri::XML(send_and_receive(cmd_nx.to_xml))
|
110
106
|
|
111
107
|
# the following removes only the default namespace (xmlns)
|
112
108
|
# definitions from the document. This is an alternative
|
@@ -115,7 +111,7 @@ module Netconf
|
|
115
111
|
# nice "compromise" ... just don't know what it does
|
116
112
|
# performance-wise on large datasets.
|
117
113
|
|
118
|
-
rsp_nx.traverse{ |n| n.namespace = nil }
|
114
|
+
rsp_nx.traverse { |n| n.namespace = nil }
|
119
115
|
|
120
116
|
# set the response context to the root node; <rpc-reply>
|
121
117
|
|
@@ -137,9 +133,9 @@ module Netconf
|
|
137
133
|
# or if the caller wants to raise if severity == 'warning'
|
138
134
|
# then generate the exception
|
139
135
|
|
140
|
-
if(
|
141
|
-
exception = Netconf::RPC.get_exception(
|
142
|
-
raise exception.new(
|
136
|
+
if (sev_err.count > 0) || Netconf.raise_on_warning
|
137
|
+
exception = Netconf::RPC.get_exception(cmd_nx)
|
138
|
+
raise exception.new(self, cmd_nx, rsp_nx)
|
143
139
|
end
|
144
140
|
end
|
145
141
|
|
@@ -149,9 +145,6 @@ module Netconf
|
|
149
145
|
# @@@/JLS: the generic case.
|
150
146
|
|
151
147
|
rsp_nx.first_element_child
|
152
|
-
|
153
148
|
end
|
154
|
-
|
155
|
-
|
156
149
|
end #--class: Transport
|
157
150
|
end #--module: Netconf
|
data/lib/net/netconf/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-netconf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Kirsche
|
@@ -52,7 +52,8 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.2'
|
55
|
-
description: Updated and maintained fork of the Juniper Ruby NetConf client
|
55
|
+
description: Updated and maintained fork of the Juniper Ruby NetConf client. This
|
56
|
+
is used to manage Junos OS devices.
|
56
57
|
email: kev.kirsche@gmail.com
|
57
58
|
executables: []
|
58
59
|
extensions: []
|