Skip to content

Instantly share code, notes, and snippets.

@skord
Created July 8, 2011 18:39
Show Gist options
  • Select an option

  • Save skord/1072482 to your computer and use it in GitHub Desktop.

Select an option

Save skord/1072482 to your computer and use it in GitHub Desktop.
Simple ONMS Provisioner
#!/usr/bin/env ruby
require 'rubygems'
require 'net/telnet'
require 'net/ftp'
require 'net/http'
require 'uri'
require 'nokogiri'
require 'time'
require 'net/sftp'
Net::SFTP.start("IP Of Provisioner", "login_user", :password => "password") do |sftp|
# All the files sit in the remote directory and end in .set. Grab them all.
set_files = sftp.dir.glob('/var/www/html/data','*.set')
set_files.each {|set_file| sftp.download!("/var/www/html/data/" + set_file.name, set_file.name)}
end
$remote_devices = []
Dir.glob('*.set').each do |set|
File.open(set).readlines.collect {|x| x.chomp.split(',')}.each do |device|
$remote_devices << device
end
File.unlink(set)
end
def sdv_or_broadcast(device_name)
if device_name =~ /\w{1,}B\d{1,}/
return 'Broadcast'
else
return 'SDV'
end
end
def create_xml
builder = Nokogiri::XML::Builder.new do |xml|
xml.send(:"model-import", 'foreign-source' => 'Device Class Name', 'date-stamp' => Time.now.xmlschema(fraction_digits=3), 'xmlns' => "http://xmlns.opennms.org/xsd/config/model-import") {
for device in $remote_devices
xml.node('foreign-id' => device[1], 'node-label' => device[1], 'building' => 'Headend') {
xml.interface('status' => '1', 'snmp-primary' => 'P', 'ip-addr' => device[0], 'descr' => 'mgmt') {
xml.send(:"monitored-service", "service-name" => "ICMP")
xml.send(:"monitored-service", "service-name" => "SNMP")
}
xml.category('name' => "Production")
xml.category('name' => "Modulators")
xml.category('name' => "Vendor Name")
xml.category('name' => "#{sdv_or_broadcast(device[1])}")
xml.asset('value' => "Midwest", "name" => "region")
xml.asset('value' => "Engineering", "name" => "department")
xml.asset('value' => "Ohio", "name" => "state")
}
end
}
end
return builder.to_xml
end
puts create_xml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment