uniak/puppet-networkdevice

View on GitHub
lib/puppet/type/cisco_snmp_server.rb

Summary

Maintainability
A
1 hr
Test Coverage
Puppet::Type.newtype(:cisco_snmp_server) do
  @doc = "This represents a router or switch SNMP configuration."

  apply_to_device

  # TODO: Seperate Type
  # snmp-server group
  # snmp-server trap
  # snmp-server user
  # snmp-server view

  newparam(:name) do
    desc "The Name of the SNMP configuration. Must always be 'running'"
    newvalues(:running)
    isnamevar
  end

  newproperty(:chassis_id) do
    desc "The Chassis ID of the Switch."
    newvalues(:absent, /^\S+$/)
  end

  newproperty(:contact) do
    desc "The Contact to report."
    newvalues(:absent, /^\S+$/)
  end

  newproperty(:enable_traps, :array_matching => :all) do
    desc "The SNMP Traps to enable on the Switch."
    newvalues(:absent, "auth-framework", "bridge", "cef", "cluster",
              "config", "config-copy", "config-ctid", "copy-config",
              "cpu", "dot1x", "eigrp", "energywise", "entity", "envmon",
              "errdisable", "event-manager", "flash", "fru-ctrl", "hsrp",
              "ipmulticast", "license", "mac-notification", "ospf", "pim",
              "port-security", "power-ethernet", "rtr", "snmp", "stackwise",
              "storm-control", "stpx", "syslog", "transceiver all", "tty",
              "vlan-membership", "vlancreate", "vlandelete", "vstack", "vtp")

    munge do |value|
      if value == :absent
        value
      else
        value.to_s
      end
    end

    def insync?(is)
      return ([is].flatten.sort == [@should].flatten.sort || [is].flatten.sort == [@should].flatten.map(&:to_s).sort)
    end
  end

  newproperty(:engineid_local) do
    desc "The engine ID octet string."
    newvalues(:absent, /^\S+$/)
  end

# TODO: Should be extracted into a new Type
#  newproperty(:engineid_remote) do
#    desc "The  Hostname or IP/IPv6 address of SNMP notification host"
#    newvalues(:absent, /^\S+$/)
#  end

# TODO: protocol
  newproperty(:file_transfer_access_group) do
    desc "Access control for file transfers"
    # TODO: Autorequire the ACL
    newvalues(:absent, /^\S+$/, /^\d+$/)
  end

  newproperty(:ifindex_persist) do
    desc "Enable ifindex persistence"
    newvalues(:present, :absent)
    defaultto(:absent)
  end

  newproperty(:inform_pending) do
    desc "Set number of unacked informs to hold"
    newvalues(:absent, /\d+/)
    validate do |value|
      self.fail "'snmp-server inform pending' must be between 1-4294967295" unless value.to_i <= 4294967295 && value.to_i >= 1
    end
  end

  newproperty(:inform_retries) do
    desc "Set retry count for informs"
    newvalues(:absent, /\d+/)
    validate do |value|
      self.fail "'snmp-server inform retries' must be between 1-100" unless value.to_i <= 100 && value.to_i >= 1
    end
  end

  newproperty(:inform_timeout) do
    desc "Set timeout for informs"
    newvalues(:absent, /\d+/)
    validate do |value|
      self.fail "'snmp-server inform timeout' must be between 1-4294967295" unless value.to_i <= 4294967295 && value.to_i >= 1
    end
  end

  newproperty(:ip_dscp) do
    desc "IP DSCP value for SNMP traffic"
    newvalues(:absent, /\d+/)
    validate do |value|
      self.fail "'snmp-server ip dscp' must be between 0-63" unless value.to_i <= 63 && value.to_i > 0
    end
  end

  newproperty(:ip_precedence) do
    desc "IP Precedence value for SNMP traffic"
    newvalues(:absent, /\d+/)
    validate do |value|
      self.fail "'snmp-server ip precedence' must be between 0-7" unless value.to_i <= 7 && value.to_i > 0
    end
  end

  newproperty(:location) do
    desc "The physical location of this node"
    newvalues(/^\S+$/)
  end

  newproperty(:manager) do
    desc "Activate / Deactivate the SNMP Manager"
    newvalues(:present, :absent)
    defaultto(:absent)
  end

  newproperty(:manager_session_timeout) do
    desc "Timeout value for destroying sessions"
    validate do |value|
      self.fail "'snmp-server manager session-timeout' must be between 10-2147483" unless value.to_i <= 2147483 && value.to_i >= 10
    end
  end

  newproperty(:packetsize) do
    desc "Packet size"
    validate do |value|
      self.fail "'snmp-server packetsize' must be between 484-17892" unless value.to_i <= 17892 && value.to_i >= 484
    end
  end

  newproperty(:queue_length) do
    desc "Message queue length for each TRAP host"
    validate do |value|
      self.fail "'snmp-server queue-length' must be between 1-5000" unless value.to_i <= 5000 && value.to_i >= 1
    end
  end

  newproperty(:source_interface_informs) do
    desc "source interface for informs"
    # TODO: Autorequire the Interface
    newvalues(/^\S+$/)
  end

  newproperty(:source_interface_traps) do
    desc "source interface for traps"
    # TODO: Autorequire the Interface
    newvalues(/^\S+$/)
  end

  newproperty(:system_shutdown) do
    desc "Enable use of the SNMP reload command"
    newvalues(:absent, :present)
    defaultto(:absent)
  end

  newproperty(:tftp_server_list) do
    desc "Limit TFTP servers used via SNMP"
    # TODO: Autorequire the ACL
    newvalues(/^\S+$/, /^\d+$/)
  end

  newproperty(:trap_source) do
    desc "Assign an interface for the source address of all traps"
    # TODO: Autorequire the Interface
    newvalues(/^\S+$/)
  end

  newproperty(:trap_timeout) do
    desc "Set timeout for TRAP message retransmissions"
    validate do |value|
      self.fail "'snmp-server trap-timeout' must be between 1-1000" unless value.to_i <= 1000 && value.to_i >= 1
    end
  end

end