Add attributes schema for OS::Keystone::Project

Add `attributes_schema` and `_resolve_attribute` for
OS::Keystone::Project. This patch allow get_attr works
with OS::Keystone::Project resource.
Partial-Bug: #1648004

Change-Id: Ia561aa44e6939a0488207d60af8d7efdbca05f36
This commit is contained in:
ricolin 2017-05-05 00:51:11 +08:00
parent 76eafe84de
commit 5213763018
4 changed files with 72 additions and 3 deletions

View File

@ -12,6 +12,7 @@
# under the License.
from heat.common.i18n import _
from heat.engine import attributes
from heat.engine import constraints
from heat.engine import properties
from heat.engine import resource
@ -77,6 +78,45 @@ class KeystoneProject(resource.Resource):
),
}
ATTRIBUTES = (
NAME_ATTR, PARENT_ATTR, DOMAIN_ATTR, ENABLED_ATTR, IS_DOMAIN_ATTR
) = (
'name', 'parent_id', 'domain_id', 'enabled', 'is_domain'
)
attributes_schema = {
NAME_ATTR: attributes.Schema(
_('Project name.'),
support_status=support.SupportStatus(version='10.0.0'),
type=attributes.Schema.STRING
),
PARENT_ATTR: attributes.Schema(
_('Parent project id.'),
support_status=support.SupportStatus(version='10.0.0'),
type=attributes.Schema.STRING
),
DOMAIN_ATTR: attributes.Schema(
_('Domain id for project.'),
support_status=support.SupportStatus(version='10.0.0'),
type=attributes.Schema.STRING
),
ENABLED_ATTR: attributes.Schema(
_('Flag of enable project.'),
support_status=support.SupportStatus(version='10.0.0'),
type=attributes.Schema.BOOLEAN
),
IS_DOMAIN_ATTR: attributes.Schema(
_('Indicates whether the project also acts as a domain.'),
support_status=support.SupportStatus(version='10.0.0'),
type=attributes.Schema.BOOLEAN
),
}
def _resolve_attribute(self, name):
if self.resource_id is None:
return
project = self.client().projects.get(self.resource_id)
return getattr(project, name, None)
def translation_rules(self, properties):
return [
translation.TranslationRule(

View File

@ -106,8 +106,8 @@ class KeystoneUser(resource.Resource,
NAME_ATTR, DEFAULT_PROJECT_ATTR, DOMAIN_ATTR, ENABLED_ATTR,
PASSWORD_EXPIRES_AT_ATTR
) = (
'name', 'default_project_id', 'domain_id',
'enabled', 'password_expires_at'
'name', 'default_project_id', 'domain_id', 'enabled',
'password_expires_at'
)
attributes_schema = {
NAME_ATTR: attributes.Schema(

View File

@ -73,7 +73,11 @@ class KeystoneProjectTest(common.HeatTestCase):
value = mock.MagicMock()
project_id = '477e8273-60a7-4c41-b683-fdb0bc7cd151'
value.id = project_id
value.name = 'test_project_1'
value.domain_id = 'default'
value.enabled = True
value.parent_id = 'my_father'
value.is_domain = False
return value
def test_project_handle_create(self):
@ -377,3 +381,24 @@ class KeystoneProjectTest(common.HeatTestCase):
self.assertEqual(set(expected.keys()), set(reality.keys()))
for key in expected:
self.assertEqual(expected[key], reality[key])
def test_resolve_attributes(self):
mock_project = self._get_mock_project()
self.test_project.resource_id = mock_project['id']
self.projects.get.return_value = mock_project
self.assertEqual(
'test_project_1',
self.test_project._resolve_attribute(
project.KeystoneProject.NAME_ATTR))
self.assertEqual(
'my_father',
self.test_project._resolve_attribute(
project.KeystoneProject.PARENT_ATTR))
self.assertEqual(
'default',
self.test_project._resolve_attribute(
project.KeystoneProject.DOMAIN_ATTR))
self.assertTrue(self.test_project._resolve_attribute(
project.KeystoneProject.ENABLED_ATTR))
self.assertFalse(self.test_project._resolve_attribute(
project.KeystoneProject.IS_DOMAIN_ATTR))

View File

@ -0,0 +1,4 @@
---
fixes:
- Add attribute schema to `OS::Keystone::Project`. This allow get_attr
function can work with project resource.