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