class Berta::Utils::Filter
Base Filter
class, filters out invalid states
Constants
- IGNORED_STATES
VM states to ignore
Public Class Methods
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
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
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
# 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
# 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
# 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
# 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
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
# 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
# File lib/berta/utils/filter.rb, line 81 def takes_resources?(vmh) !IGNORED_STATES.include?(vmh.handle.state_str) end