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:
Peter Razumovsky 2015-11-27 11:21:06 +03:00
parent f238a6e1d5
commit 77a1011793
2 changed files with 57 additions and 0 deletions

View File

@ -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 {

View File

@ -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)