Designate::Record observe reality implementation

Override parse_live_resource_data method for Designate::Record
resource to observe and update resource plugin with live
state.

implements bp get-reality-for-resources

Change-Id: I8d1e2ef389f618674521153e6b11e8c5978a61c7
This commit is contained in:
Peter Razumovsky 2015-12-09 16:18:17 +03:00
parent 27a1887bc8
commit a450444e04
2 changed files with 59 additions and 2 deletions

View File

@ -167,6 +167,15 @@ class DesignateRecord(resource.Resource):
id=self.resource_id)
return dict(six.iteritems(self.client_plugin().record_show(**kwargs)))
def parse_live_resource_data(self, resource_properties, resource_data):
record_reality = {}
properties_keys = list(set(self.PROPERTIES) - {self.NAME, self.DOMAIN})
for key in properties_keys:
record_reality.update({key: resource_data.get(key)})
return record_reality
def resource_mapping():
return {

View File

@ -11,10 +11,9 @@
# License for the specific language governing permissions and limitations
# under the License.
import mock
from designateclient import exceptions as designate_exception
from designateclient.v1 import records
import mock
from heat.engine.resources.openstack.designate import record
from heat.engine import stack
@ -242,3 +241,52 @@ class DesignateRecordTest(common.HeatTestCase):
self.assertEqual(args,
self.test_resource._show_resource(),
'Failed to show resource')
def test_resource_get_live_state(self):
tmpl = {
'heat_template_version': '2015-04-30',
'resources': {
'test_resource': {
'type': 'OS::Designate::Record',
'properties': {
'name': 'test-record.com',
'description': 'Test record',
'ttl': 3600,
'type': 'MX',
'priority': 1,
'data': '1.1.1.1',
'domain': 'example.com.'
}
}
}
}
s = stack.Stack(
self.ctx, 'test_stack',
template.Template(tmpl)
)
test_resource = s['test_resource']
test_resource.resource_id = '1234'
test_resource.client_plugin().get_domain_id = mock.MagicMock()
test_resource.client_plugin().get_domain_id.return_value = '1234567'
test_resource.client().records = mock.MagicMock()
test_resource.client().records.get.return_value = {
'type': 'MX',
'data': '1.1.1.1',
'ttl': 3600,
'description': 'test',
'domain_id': '1234567',
'name': 'www.example.com.',
'priority': 0
}
reality = test_resource.get_live_state(test_resource.properties)
expected = {
'type': 'MX',
'data': '1.1.1.1',
'ttl': 3600,
'description': 'test',
'priority': 0
}
self.assertEqual(expected, reality)