class Device42
Attributes
host[R]
password[R]
scheme[R]
username[R]
verify[R]
Public Class Methods
new(host, scheme, verify, username, password)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 9 def initialize(host, scheme, verify, username, password) @host = host @scheme = scheme @verify = verify @username = username @password = password end
Public Instance Methods
add_host(options)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 67 def add_host(options) device = { :name => options['name'] } rest_post('devices', device) ip = { :ipaddress => options['ip'], :macaddress => options['mac'], :device => options['name'] } rest_post('ips', ip) end
csv_to_array(csv_string)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 17 def csv_to_array(csv_string) csv = CSV::parse(csv_string) fields = csv.shift fields = fields.map {|f| f.downcase.gsub(" ", "_")} csv.collect { |record| Hash[*fields.zip(record).flatten ] } end
doql(query)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 52 def doql(query) response = HTTParty.post("%s://%s/services/data/v1.0/query/" % [@scheme, @host], { :body => { :header => 'yes', :query => query }, :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' }, :basic_auth => { :username => @username, :password => @password }, :verify => @verify }) return response.body end
get_host_by_mac(mac)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 107 def get_host_by_mac(mac) mac = mac.split(':').join csv = doql("SELECT d.name, i.ip_address, n.hwaddress, s.network, s.mask_bits FROM view_netport_v1 n JOIN view_ipaddress_v1 i ON n.netport_pk = i.netport_fk JOIN view_subnet_v1 s ON i.subnet_fk = s.subnet_pk JOIN view_device_v1 d ON d.device_pk = n.device_fk WHERE n.hwaddress in ('%s') AND i.available = False LIMIT 1" % mac) data = csv_to_array(csv) return [] if data.empty? data end
get_hosts(network_address)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 87 def get_hosts(network_address) csv = doql("SELECT d.name, i.ip_address, n.hwaddress, s.network, s.mask_bits FROM view_subnet_v1 s JOIN view_ipaddress_v1 i ON i.subnet_fk = s.subnet_pk JOIN view_device_v1 d ON d.device_pk = i.device_fk JOIN view_netport_v1 n ON n.netport_pk = i.netport_fk WHERE s.network in ('%s') AND i.available = False" % network_address) return csv_to_array(csv) end
get_hosts_by_ip(ip)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 97 def get_hosts_by_ip(ip) csv = doql("SELECT d.name, i.ip_address, n.hwaddress, s.network, s.mask_bits FROM view_ipaddress_v1 i JOIN view_device_v1 d ON d.device_pk = i.device_fk JOIN view_netport_v1 n ON n.netport_pk = i.netport_fk JOIN view_subnet_v1 s ON i.subnet_fk = s.subnet_pk WHERE i.ip_address in ('%s') AND i.available = False" % ip) return csv_to_array(csv) end
get_next_ip(network, start_ip, end_ip)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 132 def get_next_ip(network, start_ip, end_ip) subnet = get_subnet(network) return nil if subnet == nil ip = JSON.parse(rest_get('suggest_ip', '?subnet_id=%s&start_range=%s&end_range=%s' % [subnet[0]['subnet_pk'], start_ip, end_ip])) ip['ip'] end
get_subnet(network)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 125 def get_subnet(network) csv = doql("SELECT subnet_pk, network, mask_bits FROM view_subnet_v1 WHERE network in ('%s') LIMIT 1" % network) subnet = csv_to_array(csv) return nil if subnet.empty? subnet end
get_subnets()
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 120 def get_subnets() csv = doql("SELECT network, mask_bits FROM view_subnet_v1") return csv_to_array(csv) end
remove_host(hostname)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 81 def remove_host(hostname) response = JSON.parse(rest_get('devices/name', hostname)) device_id = response['id'] rest_delete('devices', device_id) end
rest_delete(endpoint, id)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 44 def rest_delete(endpoint, id) response = HTTParty.delete("%s://%s/api/1.0/%s/%s/" % [@scheme, @host, endpoint, id], { :basic_auth => { :username => @username, :password => @password }, :verify => @verify }) return response.body end
rest_get(endpoint, querystring)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 24 def rest_get(endpoint, querystring) response = HTTParty.get("%s://%s/api/1.0/%s/%s" % [@scheme, @host, endpoint, querystring], { :basic_auth => { :username => @username, :password => @password }, :verify => @verify }) return response.body end
rest_post(endpoint, body)
click to toggle source
# File lib/smart_proxy_dhcp_device42/device42_api.rb, line 32 def rest_post(endpoint, body) response = HTTParty.post("%s://%s/api/1.0/%s/" % [@scheme, @host, endpoint], { :body => body, :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' }, :basic_auth => { :username => @username, :password => @password }, :verify => @verify }) return response.body end