for key, value in filters.iteritems():
if key == 'metadata':
# model.VolumeMetadata defines the backref to Volumes as
- # 'volume_metadata', use that column attribute key
- key = 'volume_metadata'
- column_attr = getattr(models.Volume, key)
+ # 'volume_metadata' or 'volume_admin_metadata', use those as
+ # column attribute keys
+ col_attr = getattr(models.Volume, 'volume_metadata')
+ col_ad_attr = getattr(models.Volume, 'volume_admin_metadata')
for k, v in value.iteritems():
- query = query.filter(column_attr.any(key=k, value=v))
+ query = query.filter(or_(col_attr.any(key=k, value=v),
+ col_ad_attr.any(key=k, value=v)))
elif isinstance(value, (list, tuple, set, frozenset)):
# Looking for values in a list; apply to query directly
column_attr = getattr(models.Volume, key)
'metadata': {'key2': 'val2',
'key3': 'val3'},
'host': 'host5'})
+ db.volume_admin_metadata_update(self.ctxt, vol5.id,
+ {"readonly": "True"}, False)
+
vols = [vol1, vol2, vol3, vol4, vol5]
# Ensure we have 5 total instances
self._assertEqualsVolumeOrderResult([vol2, vol3], limit=100,
filters=filters)
- # metdata filters
+ # metadata filters
filters = {'metadata': {'key1': 'val1'}}
self._assertEqualsVolumeOrderResult([vol3, vol4], filters=filters)
self._assertEqualsVolumeOrderResult([vol3], limit=1,
self._assertEqualsVolumeOrderResult([vol3, vol4], limit=10,
filters=filters)
+ filters = {'metadata': {'readonly': 'True'}}
+ self._assertEqualsVolumeOrderResult([vol5], filters=filters)
+
filters = {'metadata': {'key1': 'val1',
'key2': 'val2'}}
self._assertEqualsVolumeOrderResult([vol4], filters=filters)