class Bosh::OpenStackCloud::AvailabilityZoneProvider
Public Class Methods
new(openstack, ignore_server_availability_zone)
click to toggle source
# File lib/cloud/openstack/availability_zone_provider.rb, line 5 def initialize(openstack, ignore_server_availability_zone) @openstack = openstack @ignore_server_availability_zone = ignore_server_availability_zone end
Public Instance Methods
constrain_to_server_availability_zone?()
click to toggle source
# File lib/cloud/openstack/availability_zone_provider.rb, line 21 def constrain_to_server_availability_zone? !@ignore_server_availability_zone end
select(volume_ids, resource_pool_az)
click to toggle source
# File lib/cloud/openstack/availability_zone_provider.rb, line 10 def select(volume_ids, resource_pool_az) if volume_ids && !volume_ids.empty? && constrain_to_server_availability_zone? fog_volume_map = @openstack.volumes volumes = volume_ids.map { |vid| with_openstack { fog_volume_map.get(vid) } } ensure_same_availability_zone(volumes, resource_pool_az) volumes.first.availability_zone else resource_pool_az end end
Private Instance Methods
ensure_same_availability_zone(disks, default)
click to toggle source
Ensure all supplied availability zones are the same
@param [Array] disks OpenStack volumes @param [String] default availability zone specified in
the resource pool (may be nil)
@return [String] availability zone to use or nil @note this is a private method that is public to make it easier to test
# File lib/cloud/openstack/availability_zone_provider.rb, line 35 def ensure_same_availability_zone(disks, default) zones = disks.map { |disk| disk.availability_zone } zones << default if default zones.uniq! cloud_error "can't use multiple availability zones: %s" % zones.join(', ') unless zones.size == 1 end