snmp-open 0.1.4 → 0.1.5
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/snmp/open/command_reader.rb +53 -7
- data/lib/snmp/open/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 118c73e3356d85cda27007ac7ada6ccb25e36af3
|
4
|
+
data.tar.gz: a6bbbbddbb1792aa8fef75c308c988c57d74e8a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6d5f53dfcc6db0e2278926bf2cd1c86904a7575c9199f3f4a2c6e405d61c245b6d84887c0f8ca8ca7af19c4ab1639b76cc164118f6703f7fd0596749fe1e2bd
|
7
|
+
data.tar.gz: 7986c9fdb242a009c384dd0be8824b73cd59f103b46502d7c142d6f863496c1983e6974f11dca2ffc2d8f3115951b624b092010b2b55196ea5a18e8765fd6858
|
@@ -12,6 +12,10 @@ module SNMP
|
|
12
12
|
auth_protocol: '-a',
|
13
13
|
community: '-c',
|
14
14
|
context: '-n',
|
15
|
+
no_check_increasing: {
|
16
|
+
'snmpbulkwalk' => '-Cc',
|
17
|
+
'snmpwalk' => '-Cc'
|
18
|
+
},
|
15
19
|
numeric: '-On', # needed by parser, should always be enabled
|
16
20
|
priv_password: '-X', # not recommended, see snmp.conf(5)
|
17
21
|
priv_protocol: '-x',
|
@@ -22,6 +26,12 @@ module SNMP
|
|
22
26
|
host: nil
|
23
27
|
}.freeze
|
24
28
|
|
29
|
+
OPTION_VALUES = {
|
30
|
+
no_check_increasing: {
|
31
|
+
true => ''
|
32
|
+
}.freeze
|
33
|
+
}.freeze
|
34
|
+
|
25
35
|
# +options+ accepts options dealing with making connections to the host,
|
26
36
|
# including all of the options listed in the +OPTIONS+ constant hash.
|
27
37
|
# Other options can be given as strings (or any object with a suitable
|
@@ -33,26 +43,25 @@ module SNMP
|
|
33
43
|
def initialize(options)
|
34
44
|
host = options.delete(:host) ||
|
35
45
|
(raise ArgumentError, 'Host expected but not given')
|
36
|
-
|
46
|
+
opts = merge_options(options).merge('-On' => nil, host => nil)
|
47
|
+
@command_options, @host_options = partition_options(opts)
|
37
48
|
end
|
38
49
|
|
39
50
|
def capture(cmd, oid, options = {})
|
40
51
|
out, err = Open3.capture3(cli(cmd, oid, options))
|
41
|
-
raise err unless err.empty?
|
52
|
+
raise CommandError, err.chomp unless err.empty?
|
42
53
|
out
|
43
54
|
end
|
44
55
|
|
45
56
|
# Generate a CLI command string
|
46
57
|
def cli(command, id = nil, options = {})
|
47
|
-
command =
|
48
|
-
when Symbol then "snmp#{command}"
|
49
|
-
else command.to_s
|
50
|
-
end
|
58
|
+
command = normalize_command(command)
|
51
59
|
|
52
60
|
[
|
53
61
|
command,
|
54
62
|
*options.map { |k, v| "#{k}#{v}" },
|
55
63
|
*@host_options.map { |k, v| "#{k}#{v}" },
|
64
|
+
*@command_options.fetch(command, {}).map { |k, v| "#{k}#{v}" },
|
56
65
|
*id
|
57
66
|
].join(' ')
|
58
67
|
end
|
@@ -62,7 +71,8 @@ module SNMP
|
|
62
71
|
def merge_options(options = {})
|
63
72
|
options.each_pair.with_object({}) do |(key, value), opts|
|
64
73
|
if OPTIONS.key?(key)
|
65
|
-
opts[OPTIONS[key]] =
|
74
|
+
opts[OPTIONS[key]] =
|
75
|
+
(OPTION_VALUES.fetch(key, {}).fetch(value, value) || next)
|
66
76
|
elsif key.is_a?(String)
|
67
77
|
opts[key] = value
|
68
78
|
else
|
@@ -70,6 +80,42 @@ module SNMP
|
|
70
80
|
end
|
71
81
|
end
|
72
82
|
end
|
83
|
+
|
84
|
+
def normalize_command(command)
|
85
|
+
case command
|
86
|
+
when Symbol then "snmp#{command}"
|
87
|
+
else command.to_s
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def partition_options(options)
|
92
|
+
command_keys, host_keys = options
|
93
|
+
.keys
|
94
|
+
.partition { |k| k.is_a?(Hash) }
|
95
|
+
|
96
|
+
[
|
97
|
+
merge_command_options(options, command_keys),
|
98
|
+
merge_host_options(options, host_keys)
|
99
|
+
]
|
100
|
+
end
|
101
|
+
|
102
|
+
def merge_command_options(options, keys)
|
103
|
+
keys.each.with_object({}) do |commands, hash|
|
104
|
+
command_value = options[commands]
|
105
|
+
commands.each_pair do |command, option|
|
106
|
+
hash[command] ||= {}
|
107
|
+
hash[command][option] = command_value
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def merge_host_options(options, keys)
|
113
|
+
keys.each.with_object({}) do |key, hash|
|
114
|
+
hash[key] = options[key]
|
115
|
+
end
|
116
|
+
end
|
73
117
|
end # class CommandReader
|
118
|
+
|
119
|
+
class CommandError < RuntimeError; end
|
74
120
|
end # class Open
|
75
121
|
end # module SNMP
|
data/lib/snmp/open/version.rb
CHANGED