EncryptedVolumeType observe reality implement
Add override get_live_resource_data and parse_live_resource_data methods implementation for Cinder::EncryptedVolumeType resource. implements bp get-reality-for-resources Change-Id: I772b10e1b035073a7e40dc99b1a6e9e409b7e3f3
This commit is contained in:
parent
f238a6e1d5
commit
77a1011793
|
@ -11,6 +11,7 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from heat.common import exception
|
||||
from heat.common.i18n import _
|
||||
from heat.engine import constraints
|
||||
from heat.engine import properties
|
||||
|
@ -112,6 +113,29 @@ class CinderEncryptedVolumeType(resource.Resource):
|
|||
volume_type=self.resource_id, specs=prop_diff
|
||||
)
|
||||
|
||||
def get_live_resource_data(self):
|
||||
try:
|
||||
resource_data = self._show_resource()
|
||||
if not resource_data:
|
||||
# use attribute error, e.g. API call get raises AttributeError,
|
||||
# when evt is not exists or not ready (cinder bug 1562024).
|
||||
raise AttributeError()
|
||||
except Exception as ex:
|
||||
if (self.client_plugin().is_not_found(ex) or
|
||||
isinstance(ex, AttributeError)):
|
||||
raise exception.EntityNotFound(entity='Resource',
|
||||
name=self.name)
|
||||
raise
|
||||
return resource_data
|
||||
|
||||
def parse_live_resource_data(self, resource_properties, resource_data):
|
||||
resource_reality = {}
|
||||
|
||||
for key in set(self.PROPERTIES) - {self.VOLUME_TYPE}:
|
||||
resource_reality.update({key: resource_data.get(key)})
|
||||
|
||||
return resource_reality
|
||||
|
||||
|
||||
def resource_mapping():
|
||||
return {
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
import mock
|
||||
|
||||
from heat.common import exception
|
||||
from heat.engine.clients.os import cinder as c_plugin
|
||||
from heat.engine import stack
|
||||
from heat.engine import template
|
||||
|
@ -95,3 +96,35 @@ class CinderEncryptedVolumeTypeTest(common.HeatTestCase):
|
|||
|
||||
self.volume_encryption_types.update.assert_called_once_with(
|
||||
volume_type=volume_type_id, specs=update_args)
|
||||
|
||||
def test_get_live_state(self):
|
||||
self.my_encrypted_vol_type.resource_id = '1234'
|
||||
value = mock.MagicMock()
|
||||
value.to_dict.return_value = {
|
||||
'volume_type_id': '1122',
|
||||
'provider': 'nova.Test',
|
||||
'cipher': 'aes-xts-plain64',
|
||||
'control_location': 'front-end',
|
||||
'key_size': 256
|
||||
}
|
||||
self.volume_encryption_types.get.return_value = value
|
||||
|
||||
reality = self.my_encrypted_vol_type.get_live_state(
|
||||
self.my_encrypted_vol_type.properties)
|
||||
expected = {
|
||||
'provider': 'nova.Test',
|
||||
'cipher': 'aes-xts-plain64',
|
||||
'control_location': 'front-end',
|
||||
'key_size': 256
|
||||
}
|
||||
|
||||
self.assertEqual(expected, reality)
|
||||
|
||||
def test_get_live_state_found_but_deleted(self):
|
||||
self.my_encrypted_vol_type.resource_id = '1234'
|
||||
value = mock.MagicMock(spec=[])
|
||||
self.volume_encryption_types.get.return_value = value
|
||||
|
||||
self.assertRaises(exception.EntityNotFound,
|
||||
self.my_encrypted_vol_type.get_live_state,
|
||||
self.my_encrypted_vol_type.properties)
|
||||
|
|
Loading…
Reference in New Issue