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
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from heat.common import exception
|
||||||
from heat.common.i18n import _
|
from heat.common.i18n import _
|
||||||
from heat.engine import constraints
|
from heat.engine import constraints
|
||||||
from heat.engine import properties
|
from heat.engine import properties
|
||||||
|
@ -112,6 +113,29 @@ class CinderEncryptedVolumeType(resource.Resource):
|
||||||
volume_type=self.resource_id, specs=prop_diff
|
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():
|
def resource_mapping():
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
|
|
||||||
|
from heat.common import exception
|
||||||
from heat.engine.clients.os import cinder as c_plugin
|
from heat.engine.clients.os import cinder as c_plugin
|
||||||
from heat.engine import stack
|
from heat.engine import stack
|
||||||
from heat.engine import template
|
from heat.engine import template
|
||||||
|
@ -95,3 +96,35 @@ class CinderEncryptedVolumeTypeTest(common.HeatTestCase):
|
||||||
|
|
||||||
self.volume_encryption_types.update.assert_called_once_with(
|
self.volume_encryption_types.update.assert_called_once_with(
|
||||||
volume_type=volume_type_id, specs=update_args)
|
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