class Berta::Utils::Filter

Base Filter class, filters out invalid states

Constants

IGNORED_STATES

VM states to ignore

Public Class Methods

new(ids, users, groups, clusters) click to toggle source

Constructs Filter object.

@param ids [Array<Numeric>] Ids of VM to filter @param users [Array<String>] User names to filter @param groups [Array<String>] Group names to filter @param clusters [Array<OpenNebula::Cluster>] Clusters to filter

# File lib/berta/utils/filter.rb, line 14
def initialize(ids, users, groups, clusters)
  @ids = ids || []
  @users = users || []
  @groups = groups || []
  @clusters = clusters || []
  logger.debug "Filter type: #{self.class}"
  log_filter
end

Public Instance Methods

run(vmhs) click to toggle source

Execute this filter

@param vmhs [Array<Berta::VirtualMachineHandler>] VMs to filter @return [Array<Berta::VirtualMachineHandler>] Filtered VMs

# File lib/berta/utils/filter.rb, line 27
def run(vmhs)
  fvmhs = vmhs.select { |vmh| takes_resources?(vmh) }
  logger.debug "Filtered based on RESOURCE: #{(vmhs - fvmhs).map { |vmh| vmh.handle.id }}"
  fvmhs = filter(fvmhs)
  logger.debug "VMS after filter : #{fvmhs.map { |vmh| vmh.handle.id }}"
  fvmhs
end

Protected Instance Methods

filter(vmhs) click to toggle source

This method is for child classes to override. It is executed in `run` method.

@param vmhs [Array<Berta::VirtualMachineHandler>] VMs without invalid states @return [Array<Berta::VirtualMachineHandler>] Filtered VMs

# File lib/berta/utils/filter.rb, line 42
def filter(vmhs)
  vmhs
end
filter_clusters(vmhs) click to toggle source
# File lib/berta/utils/filter.rb, line 72
def filter_clusters(vmhs)
  cids = @clusters.map { |cluster| cluster['ID'] }
  clusteri = vmhs.select { |vmh| cids.include?(latest_cluster_id(vmh)) }
  logger.debug "[#{self.class}] filtered based on CLUSTERs: #{clusteri.map { |vmh| vmh.handle.id }}"
  clusteri
end
filter_groups(vmhs) click to toggle source
# File lib/berta/utils/filter.rb, line 66
def filter_groups(vmhs)
  groupi = vmhs.select { |vmh| @groups.include?(vmh.handle['GNAME']) }
  logger.debug "[#{self.class}] filtered based on GROUPs: #{groupi.map { |vmh| vmh.handle.id }}"
  groupi
end
filter_ids(vmhs) click to toggle source
# File lib/berta/utils/filter.rb, line 54
def filter_ids(vmhs)
  idi = vmhs.select { |vmh| @ids.include?(vmh.handle['ID']) }
  logger.debug "[#{self.class}] filtered based on IDs: #{idi.map { |vmh| vmh.handle.id }}"
  idi
end
filter_users(vmhs) click to toggle source
# File lib/berta/utils/filter.rb, line 60
def filter_users(vmhs)
  useri = vmhs.select { |vmh| @users.include?(vmh.handle['UNAME']) }
  logger.debug "[#{self.class}] filtered based on USERs: #{useri.map { |vmh| vmh.handle.id }}"
  useri
end
latest_cluster_id(vmh) click to toggle source

Gets latest cluster id on given VM

@param vmh [Berta::VirtualMachineHandler] VM to get cluster id on @return [String] Latest cluster id

# File lib/berta/utils/filter.rb, line 50
def latest_cluster_id(vmh)
  vmh.handle['HISTORY_RECORDS/HISTORY[last()]/CID']
end

Private Instance Methods

log_filter() click to toggle source
# File lib/berta/utils/filter.rb, line 85
def log_filter
  logger.debug "Filter ids     : #{@ids}"
  logger.debug "Filter users   : #{@users}"
  logger.debug "Filter groups  : #{@groups}"
  logger.debug "Filter clusters: #{@clusters.map { |cluster| cluster['NAME'] }}"
end
takes_resources?(vmh) click to toggle source
# File lib/berta/utils/filter.rb, line 81
def takes_resources?(vmh)
  !IGNORED_STATES.include?(vmh.handle.state_str)
end