class Berta::Exclusions

Class for Handeling berta exclusions

Constants

ACTIVE_STATE

Active state has some lcm states that should not expire

NON_RESOURCE_ACTIVE_LCM_STATES

LCM states in which active state shouldn't expire

RESOURCE_STATES

VM states that take resources

Public Class Methods

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

Constructs Exclusions object.

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

# File lib/berta/exclusions.rb, line 17
def initialize(ids, users, groups, clusters)
  @ids = ids
  @users = users
  @groups = groups
  @clusters = clusters
  log_exclusions
end

Public Instance Methods

filter!(vmhs) click to toggle source

Filters out excluded vms, and vms that doesn't take resources

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

# File lib/berta/exclusions.rb, line 28
def filter!(vmhs)
  filter_resources!(vmhs)
  filter_ids!(vmhs)
  filter_users!(vmhs)
  filter_groups!(vmhs)
  filter_clusters!(vmhs)
  logger.debug "After excluding: #{vmhs.map { |vmh| vmh.handle.id }}"
  vmhs
end

Private Instance Methods

excluded_cluster?(vmh) click to toggle source
# File lib/berta/exclusions.rb, line 59
def excluded_cluster?(vmh)
  vmhcid = latest_cluster_id(vmh)
  @clusters.find { |cluster| vmhcid == cluster['ID'] } if vmhcid && @clusters
end
excluded_group?(vmh) click to toggle source
# File lib/berta/exclusions.rb, line 55
def excluded_group?(vmh)
  @groups.find { |group| vmh.handle['GNAME'] == group } if vmh.handle['GNAME'] && @groups
end
excluded_id?(vmh) click to toggle source
# File lib/berta/exclusions.rb, line 47
def excluded_id?(vmh)
  @ids.find { |id| vmh.handle['ID'].to_i == id.to_i } if vmh.handle['ID'] && @ids
end
excluded_user?(vmh) click to toggle source
# File lib/berta/exclusions.rb, line 51
def excluded_user?(vmh)
  @users.find { |user| vmh.handle['UNAME'] == user } if vmh.handle['UNAME'] && @users
end
filter_clusters!(vmhs) click to toggle source
# File lib/berta/exclusions.rb, line 91
def filter_clusters!(vmhs)
  deleted, keep = vmhs.partition { |vmh| excluded_cluster?(vmh) }
  logger.debug "Excluding based on CLUSTERs. Excluded IDs       : #{deleted.map { |vmh| vmh.handle.id }}"
  vmhs.replace(keep)
  deleted
end
filter_groups!(vmhs) click to toggle source
# File lib/berta/exclusions.rb, line 84
def filter_groups!(vmhs)
  deleted, keep = vmhs.partition { |vmh| excluded_group?(vmh) }
  logger.debug "Excluding based on GROUPs. Excluded IDs         : #{deleted.map { |vmh| vmh.handle.id }}"
  vmhs.replace(keep)
  deleted
end
filter_ids!(vmhs) click to toggle source
# File lib/berta/exclusions.rb, line 70
def filter_ids!(vmhs)
  deleted, keep = vmhs.partition { |vmh| excluded_id?(vmh) }
  logger.debug "Excluding based on IDs. Excluded IDs            : #{deleted.map { |vmh| vmh.handle.id }}"
  vmhs.replace(keep)
  deleted
end
filter_resources!(vmhs) click to toggle source
# File lib/berta/exclusions.rb, line 98
def filter_resources!(vmhs)
  keep, deleted = vmhs.partition { |vmh| takes_resources?(vmh) }
  logger.debug "Excluding based on RESOURCE_STATEs. Excluded IDs: #{deleted.map { |vmh| vmh.handle.id }}"
  vmhs.replace(keep)
  deleted
end
filter_users!(vmhs) click to toggle source
# File lib/berta/exclusions.rb, line 77
def filter_users!(vmhs)
  deleted, keep = vmhs.partition { |vmh| excluded_user?(vmh) }
  logger.debug "Excluding based on USERs. Excluded IDs          : #{deleted.map { |vmh| vmh.handle.id }}"
  vmhs.replace(keep)
  deleted
end
latest_cluster_id(vmh) click to toggle source
# File lib/berta/exclusions.rb, line 105
def latest_cluster_id(vmh)
  vmh.handle['HISTORY_RECORDS/HISTORY[last()]/CID']
end
log_exclusions() click to toggle source
# File lib/berta/exclusions.rb, line 40
def log_exclusions
  logger.debug "Excluded ids     : #{@ids}"
  logger.debug "Excluded users   : #{@users}"
  logger.debug "Excluded groups  : #{@groups}"
  logger.debug "Excluded clusters: #{@clusters.map { |cluster| cluster['NAME'] }}"
end
takes_resources?(vmh) click to toggle source
# File lib/berta/exclusions.rb, line 64
def takes_resources?(vmh)
  return true if RESOURCE_STATES.any? { |state| vmh.handle.state_str == state }
  true if vmh.handle.state_str == ACTIVE_STATE &&
          NON_RESOURCE_ACTIVE_LCM_STATES.none? { |state| vmh.handle.lcm_state_str.include? state }
end