Class: Rbeapi::Netdev::Snmp
- Inherits:
-
Api::Entity
- Object
- Api::Entity
- Rbeapi::Netdev::Snmp
- Defined in:
- lib/rbeapi/netdev/snmp.rb
Overview
The Netdev class is a straight port of the original PuppetX netdev code that existed prior to rbeapi. This should be considered a legacy implementation that will go away as the functions get merged into rbeapi.
This class should NOT be used for any further development. YE BE WARNED!
Constant Summary collapse
- SNMP_USER_PARAM =
Map SNMP headings from ‘show snmp user` to snmp_user parameter names
{ user: :name, engine: :engine_id, security: :version, authentication: :auth, privacy: :privacy, group: :roles }.freeze
Instance Attribute Summary
Attributes inherited from Api::Entity
Instance Method Summary collapse
-
#parse_snmp_hosts(text) ⇒ Array<Hash<Symbol,Object>>
private
parse_snmp_hosts parses the raw text from the ‘show snmp host` command and returns an Array of resource hashes.
-
#parse_snmp_users(text) ⇒ Array<Hash<Symbol,Object>>
private
parse_snmp_users takes the text output from the ‘show snmp user` EAPI command and parses the text into structured data suitable for use as a resource has to the provider initializer method.
-
#snmp_notification_receiver_remove(opts = {}) ⇒ Boolean
snmp_notification_receiver_remove removes an snmp-server host from the target device.
-
#snmp_notification_receiver_set(opts = {}) ⇒ Boolean
snmp_notification_receiver_set takes a resource hash and configures a SNMP notification host on the target device.
-
#snmp_notification_receivers ⇒ Array<Hash<Symbol,Object>>
snmp_notification_receivers obtains a list of all the snmp notification receivers and returns them as an Array of resource hashes suitable for the provider’s new class method.
-
#snmp_user_destroy(opts = {}) ⇒ Hash<Symbol,Object>, String
snmp_user_destroy removes an SNMP user from the target device.
-
#snmp_user_password_hash(running_config, user_cmd) ⇒ Hash<Symbol,String>
snmp_user_password obtains the password hash from the device in order to provide an idempotent configuration value.
-
#snmp_user_set(opts = {}) ⇒ Hash<Symbol,Object>
snmp_user_set creates or updates an SNMP user account on the target device.
-
#snmp_users ⇒ Array<Hash<Symbol,Object>>
snmp_users retrieves all of the SNMP users defined on the target device and returns an Array of Hash objects suitable for use as a resource hash to the provider’s initializer method.
Methods inherited from Api::Entity
#command_builder, #configure, #configure_interface, #get_block, #initialize, instance
Constructor Details
This class inherits a constructor from Rbeapi::Api::Entity
Instance Method Details
#parse_snmp_hosts(text) ⇒ Array<Hash<Symbol,Object>>
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
parse_snmp_hosts parses the raw text from the ‘show snmp host` command and returns an Array of resource hashes.
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/rbeapi/netdev/snmp.rb', line 99 def parse_snmp_hosts(text) re = /host: ([^\s]+)\s+.*?port: (\d+)\s+type: (\w+)\s*user: (.*?)\s+security model: (.*?)\n/m # rubocop:disable Metrics/LineLength text.scan(re).map do |(host, port, type, username, auth)| resource_hash = { name: host, ensure: :present, port: port.to_i } sec_match = /^v3 (\w+)/.match(auth) resource_hash[:security] = sec_match[1] if sec_match ver_match = /^(v\d)/.match(auth) # first 2 characters resource_hash[:version] = ver_match[1] if ver_match resource_hash[:type] = type =~ /trap/ ? :traps : :informs resource_hash[:username] = username resource_hash end end |
#parse_snmp_users(text) ⇒ Array<Hash<Symbol,Object>>
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
parse_snmp_users takes the text output from the ‘show snmp user` EAPI command and parses the text into structured data suitable for use as a resource has to the provider initializer method.
“‘
User name : jeff Security model : v3 Engine ID : f5717f00420008177800 Authentication : SHA Privacy : AES-128 Group : developers
User name : nigel Security model : v2c Group : sysops (not configured)
User name : nigel Security model : v3 Engine ID : f5717f00420008177800 Authentication : SHA Privacy : AES-128 Group : sysops “‘
241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
# File 'lib/rbeapi/netdev/snmp.rb', line 241 def parse_snmp_users(text) text.split("\n\n").map do |user_s| user_s.scan(/^(\w+).*?: (.*)/).each_with_object({}) do |(h, v), m| key = SNMP_USER_PARAM[h.downcase.intern] || h.downcase.intern m[key] = case key when :privacy then v =~ /AES/ ? :aes128 : :des when :version then v.sub('v2c', 'v2').intern when :auth then v.downcase.intern when :roles then v.sub(/ \(.*?\)/, '') else v.downcase end end end end |
#snmp_notification_receiver_remove(opts = {}) ⇒ Boolean
snmp_notification_receiver_remove removes an snmp-server host from the target device.
185 186 187 188 |
# File 'lib/rbeapi/netdev/snmp.rb', line 185 def snmp_notification_receiver_remove(opts = {}) cmd = 'no ' << snmp_notification_receiver_cmd(opts) configure cmd end |
#snmp_notification_receiver_set(opts = {}) ⇒ Boolean
snmp_notification_receiver_set takes a resource hash and configures a SNMP notification host on the target device. In practice this method usually creates a resource because nearly all of the properties can vary and are components of a resource identifier.
139 140 141 |
# File 'lib/rbeapi/netdev/snmp.rb', line 139 def snmp_notification_receiver_set(opts = {}) configure snmp_notification_receiver_cmd(opts) end |
#snmp_notification_receivers ⇒ Array<Hash<Symbol,Object>>
snmp_notification_receivers obtains a list of all the snmp notification receivers and returns them as an Array of resource hashes suitable for the provider’s new class method. This command maps the ‘show snmp host` command to an array of resource hashes.
55 56 57 58 59 60 |
# File 'lib/rbeapi/netdev/snmp.rb', line 55 def snmp_notification_receivers cmd = 'show snmp host' result = node.enable(cmd) text = result.first[:result]['output'] parse_snmp_hosts(text) end |
#snmp_user_destroy(opts = {}) ⇒ Hash<Symbol,Object>, String
snmp_user_destroy removes an SNMP user from the target device
336 337 338 339 340 341 342 |
# File 'lib/rbeapi/netdev/snmp.rb', line 336 def snmp_user_destroy(opts = {}) group = [*opts[:roles]].first version = opts[:version].to_s.sub('v2', 'v2c') cmd = "no snmp-server user #{opts[:name]} #{group} #{version}" configure cmd {} end |
#snmp_user_password_hash(running_config, user_cmd) ⇒ Hash<Symbol,String>
snmp_user_password obtains the password hash from the device in order to provide an idempotent configuration value.
356 357 358 359 360 |
# File 'lib/rbeapi/netdev/snmp.rb', line 356 def snmp_user_password_hash(running_config, user_cmd) regexp = /#{user_cmd} .*?auth \w+\s+(.*?)\s+priv \w+\s+(.*?)\s/ (auth_hash, priv_hash) = running_config.scan(regexp).first { auth: auth_hash, privacy: priv_hash } end |
#snmp_user_set(opts = {}) ⇒ Hash<Symbol,Object>
snmp_user_set creates or updates an SNMP user account on the target device.
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 |
# File 'lib/rbeapi/netdev/snmp.rb', line 291 def snmp_user_set(opts = {}) group = [*opts[:roles]].first raise ArgumentError, 'at least one role is required' unless group version = opts[:version].to_s.sub('v2', 'v2c') cmd = user_cmd = "snmp-server user #{opts[:name]} #{group} #{version}" if opts[:password] && version == 'v3' privacy = opts[:privacy].to_s.scan(/aes|des/).first unless privacy raise ArgumentError, 'privacy is required when managing passwords' end cmd += " auth #{opts[:auth] || 'sha'} #{opts[:password]} "\ "priv #{privacy} #{opts[:password]}" end configure cmd hash = snmp_user_password_hash(running_config, user_cmd) { password: hash[:auth] } end |
#snmp_users ⇒ Array<Hash<Symbol,Object>>
snmp_users retrieves all of the SNMP users defined on the target device and returns an Array of Hash objects suitable for use as a resource hash to the provider’s initializer method.
198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/rbeapi/netdev/snmp.rb', line 198 def snmp_users cmd = 'show snmp user' result = node.enable(cmd) text = result.first[:result]['output'] users = parse_snmp_users(text) users.each do |h| cmd = "snmp-server user #{h[:name]} #{h[:roles]} #{h[:version]}" password = snmp_user_password_hash(config, cmd)[:auth] h[:password] = password if password end end |