class InfobloxClass

Wrapper class to interact with Infoblox

Public Instance Methods

call_infoblox(action:, resource:, ibobj:, body_type: :json, body: nil, servername: nil, username: nil, password: nil, baseurl: 'https://[SERVERNAME]/wapi/v2.3.1/') click to toggle source
# File lib/miq_utilities/infoblox.rb, line 54
def call_infoblox(action:, resource:, ibobj:, body_type: :json, body: nil, servername: nil, username: nil, password: nil, baseurl: 'https://[SERVERNAME]/wapi/v2.3.1/')
  @logger = LoggingClass.new("#{self.class}:(#{__method__})")

  servername ||= $evm.object['infobloxservername']
  username   ||= $evm.object['infobloxusername']
  password   ||= $evm.object.decrypt('infobloxpassword')
  baseurl    ||= $evm.object['baseURL'].to_s
  url        = baseurl.sub('[SERVERNAME]', servername.to_s) + resource.to_s
  refend     = '&_return_as_object=1'
  argsfound  = false

  unless ibobj['args'].nil?
    args = ibobj['args']
    argsfound = true
  end

  argextattrs = ibobj['argextattrs'] unless ibobj['argextattrs'].nil?
  returnfields = ibobj['returnfields'] unless ibobj['returnfields'].nil?

  url = process_args(args, url) if args
  url = process_returnfields(url, returnfields, argsfound) if returnfields
  url = process_extattrs(argextattrs, url, argsfound) if argextattrs

  url = if argextattrs || returnfields
          "#{url}#{refend}"
        else
          url
        end

  @logger.log(level: 'info', message: "URL: \"#{url}\"")

  params = {
    method: action,
    url: url,
    user: username,
    password: password,
    verify_ssl: false,
    headers: { content_type: body_type, accept: :json }
  }

  if body_type == :json
    params[:payload] = JSON.generate(body) if body
    @logger.log(level: 'info', message: "Calling -> Infoblox:<#{url}> action:<#{action}> payload:<#{params[:payload]}>") if body
  elsif body
    params[:payload] = body
  end

  response = RestClient::Request.new(params).execute
  if response.code == 200 || response.code == 201
    @logger.log(level: 'info', message: "Success <- Infoblox Response:<#{response.code}>")
  else
    err_msg = "Error calling infoblox. <#{response.inspect}>"
    @logger.log(level: 'error', message: err_msg, notify: true)
  end
  response
end

Private Instance Methods

process_args(inargs, inurl) click to toggle source
# File lib/miq_utilities/infoblox.rb, line 19
        def process_args(inargs, inurl)
  loops = 1
  outurl = inurl
  inargs.each do |key, value|
    outurl = "#{outurl}#{key}~=#{value}" if loops == inargs.count
    outurl = "#{outurl}#{key}~=#{value}&" if loops != inargs.count
    loops += 1
  end
  outurl.to_s
end
process_extattrs(inargextattrs, inurl, args) click to toggle source
# File lib/miq_utilities/infoblox.rb, line 30
        def process_extattrs(inargextattrs, inurl, args)
  loops = 1
  outurl = if args
             "#{inurl}&_return_fields%2B=extattrs&*"
           else
             "#{inurl}_return_fields%2B=extattrs&*"
           end
  inargextattrs.each do |key, value|
    outurl = "#{outurl}#{key}%3A=#{value}" if loops == inargextattrs.count
    outurl = "#{outurl}#{key}%3A=#{value}&" if loops != inargextattrs.count
    loops += 1
  end
  outurl.to_s
end
process_returnfields(inurl, returnfields, inargs = false) click to toggle source
# File lib/miq_utilities/infoblox.rb, line 45
        def process_returnfields(inurl, returnfields, inargs = false)
  inurl = if inargs
            "#{inurl}&_return_fields%2B=#{returnfields}"
          else
            "#{inurl}_return_fields%2B=#{returnfields}"
          end
  inurl
end