1# Copyright (c) 2011-2012 OpenStack Foundation. 2# All Rights Reserved. 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); you may 5# not use this file except in compliance with the License. You may obtain 6# a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13# License for the specific language governing permissions and limitations 14# under the License. 15 16from cinder.scheduler import filters 17 18 19class AvailabilityZoneFilter(filters.BaseBackendFilter): 20 """Filters Backends by availability zone.""" 21 22 # Availability zones do not change within a request 23 run_filter_once_per_request = True 24 25 def backend_passes(self, backend_state, filter_properties): 26 spec = filter_properties.get('request_spec', {}) 27 props = spec.get('resource_properties', {}) 28 availability_zone = props.get('availability_zone') 29 30 if availability_zone: 31 return (availability_zone == 32 backend_state.service['availability_zone']) 33 return True 34