diff --git a/senlin/common/schema.py b/senlin/common/schema.py index ae97cb7ec..d819aeba5 100644 --- a/senlin/common/schema.py +++ b/senlin/common/schema.py @@ -46,10 +46,10 @@ class Schema(collections.Mapping): KEYS = ( TYPE, DESCRIPTION, DEFAULT, REQUIRED, SCHEMA, UPDATABLE, - CONSTRAINTS, + CONSTRAINTS, READONLY, ) = ( 'type', 'description', 'default', 'required', 'schema', 'updatable', - 'constraints', + 'constraints', 'readonly', ) TYPES = ( @@ -60,7 +60,7 @@ class Schema(collections.Mapping): def __init__(self, description=None, default=None, required=False, schema=None, updatable=False, - constraints=None): + readonly=False, constraints=None): if schema is not None: if type(self) not in (List, Map): @@ -78,6 +78,7 @@ class Schema(collections.Mapping): self.required = required self.updatable = updatable self.constraints = constraints or [] + self.readonly = readonly self._len = None def has_default(self): @@ -135,6 +136,8 @@ class Schema(collections.Mapping): return dict((n, dict(s)) for n, s in self.schema.items()) elif key == self.REQUIRED: return self.required + elif key == self.READONLY: + return self.readonly elif key == self.CONSTRAINTS: if self.constraints: return [dict(c) for c in self.constraints] diff --git a/senlin/tests/engine/test_policy_types.py b/senlin/tests/engine/test_policy_types.py index 37d6480de..9cf17eb29 100644 --- a/senlin/tests/engine/test_policy_types.py +++ b/senlin/tests/engine/test_policy_types.py @@ -42,13 +42,14 @@ class PolicyTypeTest(base.SenlinTestCase): 'spec': { 'KEY1': { 'type': 'String', - 'required': False, + 'readonly': False, 'required': False, 'description': 'key1', 'default': 'default1', }, 'KEY2': { 'type': 'Integer', + 'readonly': False, 'required': False, 'description': 'key2', 'default': 1, diff --git a/senlin/tests/engine/test_profile_types.py b/senlin/tests/engine/test_profile_types.py index f80ac6e28..d1f7105b7 100644 --- a/senlin/tests/engine/test_profile_types.py +++ b/senlin/tests/engine/test_profile_types.py @@ -42,12 +42,14 @@ class ProfileTypeTest(base.SenlinTestCase): 'spec': { 'INT': { 'type': 'Integer', + 'readonly': False, 'required': False, 'description': 'int property', 'default': 0, }, 'STR': { 'type': 'String', + 'readonly': False, 'required': False, 'description': 'string property', 'default': 'a string', @@ -55,11 +57,13 @@ class ProfileTypeTest(base.SenlinTestCase): 'LIST': { 'type': 'List', 'description': 'list property', + 'readonly': False, 'required': False, 'schema': { '*': { 'type': 'String', 'description': 'list item', + 'readonly': False, 'required': False, }, }, @@ -68,16 +72,19 @@ class ProfileTypeTest(base.SenlinTestCase): 'MAP': { 'type': 'Map', 'description': 'map property', + 'readonly': False, 'required': False, 'schema': { 'KEY1': { 'type': 'Integer', 'description': 'key1', + 'readonly': False, 'required': False, }, 'KEY2': { 'type': 'String', 'description': 'key2', + 'readonly': False, 'required': False, }, }, diff --git a/senlin/tests/test_common_constraints.py b/senlin/tests/test_common_constraints.py index 9b9daa9ea..0392d9af8 100644 --- a/senlin/tests/test_common_constraints.py +++ b/senlin/tests/test_common_constraints.py @@ -34,6 +34,7 @@ class SchemaTest(testtools.TestCase): 'type': 'String', 'description': 'A string', 'default': 'wibble', + 'readonly': False, 'required': True, 'constraints': [{ 'constraint': ['foo', 'bar'], @@ -54,6 +55,7 @@ class SchemaTest(testtools.TestCase): 'type': 'String', 'description': 'A string', 'default': 'wibble', + 'readonly': False, 'required': True, 'constraints': [{ 'constraint': ['foo', 'bar'], @@ -61,6 +63,7 @@ class SchemaTest(testtools.TestCase): }] } }, + 'readonly': False, 'required': False, } c = constraints.AllowedValues(['foo', 'bar']) @@ -78,6 +81,7 @@ class SchemaTest(testtools.TestCase): 'type': 'String', 'description': 'A string', 'default': 'wibble', + 'readonly': False, 'required': True, 'constraints': [{ 'type': 'AllowedValues', @@ -85,6 +89,7 @@ class SchemaTest(testtools.TestCase): }] } }, + 'readonly': False, 'required': False, } c = constraints.AllowedValues(['foo', 'bar']) @@ -106,6 +111,7 @@ class SchemaTest(testtools.TestCase): 'type': 'String', 'description': 'A string', 'default': 'wibble', + 'readonly': False, 'required': True, 'constraints': [{ 'type': 'AllowedValues', @@ -113,9 +119,11 @@ class SchemaTest(testtools.TestCase): }] } }, + 'readonly': False, 'required': False, } }, + 'readonly': False, 'required': False, } c = constraints.AllowedValues(['foo', 'bar'])