Rename 'tags' to be 'metadata'

According to guidelines from API workgroup, we should not call the
'tags' field 'tags'. They are actually 'metadata', i.e. dictionaries
that can contain key-value pairs. 'Tags', on the other hand, is used to
refer to a list of strings. This patch fixes the DB, service, test cases
and docs to make Senlin conformant to this guideline.

Change-Id: I9692947cd02cce7f575c0bed56aa2c37e23170e4
This commit is contained in:
tengqm 2015-05-05 23:25:57 -04:00
parent 5c05ce5ee0
commit 6b764d48c2
43 changed files with 205 additions and 198 deletions

View File

@ -319,7 +319,7 @@
</listitem>
<listitem>
<para>
<code>tags</code> List of key-value pairs that will be associated with
<code>metadata</code> List of key-value pairs that will be associated with
the cluster. (optional).
</para>
</listitem>
@ -389,7 +389,7 @@
</listitem>
<listitem>
<para>
<code>tags</code> New tags to be associated to the cluster being
<code>metadata</code> New metadata to be associated to the cluster being
updated, if provided. The value should be a list of key-value pairs.
</para>
</listitem>
@ -662,7 +662,7 @@
<code>name</code>, <code>type</code>,
<code>created_time</code>, <code>updated_time</code>,
<code>deleted_time</code>, <code>permission</code> and
<code>tags</code>.
<code>metadata</code>.
</para>
</wadl:doc>
</param>
@ -681,7 +681,7 @@
key can be one of <code>name</code>, <code>type</code>,
<code>created_time</code>, <code>updated_time</code>,
<code>deleted_time</code>, <code>permission</code> or
<code>tags</code>.
<code>metadata</code>.
</para>
</wadl:doc>
</param>
@ -702,7 +702,7 @@
<para>List of profile records where each record contains
fields like <code>id</code>, <code>name</code>,
<code>type</code>, <code>spec</code>,
<code>permission</code>, <code>tags</code> values etc.
<code>permission</code>, <code>metadata</code> values etc.
</para>
</wadl:doc>
</param>
@ -745,7 +745,7 @@
</listitem>
<listitem>
<para>
<code>tags</code> A list of key-value pairs to be associated with the profile. (optional).
<code>metadata</code> A list of key-value pairs to be associated with the profile. (optional).
</para>
</listitem>
</itemizedlist>
@ -790,7 +790,7 @@
</listitem>
<listitem>
<para>
<code>tags</code> A list of key-value pairs attached to the profile.
<code>metadata</code> A list of key-value pairs attached to the profile.
</para>
</listitem>
<listitem>
@ -823,7 +823,7 @@
<wadl:doc xmlns="http://docbook.org/ns/docbook" xml:lang="EN">
<para>A profile record that contains fields like <code>id</code>,
<code>name</code>, <code>type</code>, <code>spec</code>,
<code>permission</code>, <code>tags</code> etc.
<code>permission</code>, <code>metadata</code> etc.
</para>
<xsdxt:code href="samples/profile_get_resp.json"/>
</wadl:doc>
@ -854,7 +854,7 @@
<para>A string to be interpreted as new permission.</para>
</wadl:doc>
</param>
<param name="tags" style="plain" required="false">
<param name="metadata" style="plain" required="false">
<wadl:doc xmlns="http://docbook.org/ns/docbook" xml:lang="EN">
<para>A list of key-value pairs to be associated with the target
profile.</para>
@ -867,7 +867,7 @@
<wadl:doc xmlns="http://docbook.org/ns/docbook" xml:lang="EN">
<para>A profile record that contains fields like <code>id</code>,
<code>name</code>, <code>type</code>, <code>spec</code>,
<code>permission</code>, <code>tags</code> etc.
<code>permission</code>, <code>metadata</code> etc.
</para>
<xsdxt:code href="samples/profile_update_resp.json"/>
</wadl:doc>
@ -1220,7 +1220,7 @@
<code>id</code>, <code>cluster_id</code>, <code>name</code>,
<code>physical_id</code>, <code>profile_id</code>, <code>created_time</code>,
<code>index</code>, <code>status</code>, <code>status_reason</code>,
<code>tags</code>, <code>updated_time</code> etc.
<code>metadata</code>, <code>updated_time</code> etc.
</para>
</wadl:doc>
</param>
@ -1267,7 +1267,7 @@
</listitem>
<listitem>
<para>
<code>tags</code> A list of key-value pairs to be attached to
<code>metadata</code> A list of key-value pairs to be attached to
the newly created node. [Optional].
</para>
</listitem>
@ -1324,7 +1324,7 @@
</listitem>
<listitem>
<para>
<code>tags</code> A list of key-value pairs to be attached to
<code>metadata</code> A list of key-value pairs to be attached to
the updated node. [Optional].
</para>
</listitem>
@ -1406,7 +1406,7 @@
A node record that contains fields like <code>id</code>, <code>cluster_id</code>,
<code>name</code>, <code>physical_id</code>, <code>profile_id</code>,
<code>created_time</code>, <code>index</code>, <code>status</code>,
<code>status_reason</code>, <code>tags</code>, <code>updated_time</code> etc.
<code>status_reason</code>, <code>metadata</code>, <code>updated_time</code> etc.
</para>
<xsdxt:code href="samples/node_get_resp.json"/>
</wadl:doc>

View File

@ -1,10 +1,10 @@
{
"cluster": {
"metadata": {},
"name": "test_cluster",
"parent": null,
"profile_id": "mystack",
"size": "1",
"tags": {},
"timeout": null
}
}

View File

@ -7,6 +7,7 @@
"domain": "",
"id": "45edadcb-c73b-4920-87e1-518b2f29f54b",
"init_time": null,
"metadata": {},
"name": "test_cluster",
"nodes": [],
"parent": null,
@ -17,7 +18,6 @@
"size": 1,
"status": "INIT",
"status_reason": "Initializing",
"tags": {},
"timeout": null,
"updated_time": null,
"user": "admin"

View File

@ -6,6 +6,7 @@
"domain": "",
"id": "45edadcb-c73b-4920-87e1-518b2f29f54b",
"init_time": "2015-03-03T06:24:27.000000",
"metadata": {},
"name": "test_cluster",
"nodes": [
"a0d91878-9154-4c7e-b6af-82bba7772b5e"
@ -18,7 +19,6 @@
"size": 2,
"status": "ACTIVE",
"status_reason": "Cluster creation succeeded",
"tags": {},
"timeout": null,
"updated_time": null,
"user": "admin"

View File

@ -7,6 +7,7 @@
"domain": "",
"id": "7d85f602-a948-4a30-afd4-e84f47471c15",
"init_time": "2015-02-10T14:26:11.000000",
"metadata": {},
"name": "cluster1",
"nodes": [
"b07c57c8-7ab2-47bf-bdf8-e894c0c601b9",
@ -21,7 +22,6 @@
"size": 11,
"status": "ACTIVE",
"status_reason": "Cluster scale-in succeeded",
"tags": {},
"timeout": null,
"updated_time": null,
"user": "admin"

View File

@ -1,9 +1,9 @@
{
"cluster": {
"metadata": {},
"name": null,
"parent": null,
"profile_id": null,
"tags": {},
"timeout": "30"
}
}

View File

@ -1,9 +1,9 @@
{
"node": {
"cluster_id": null,
"metadata": {},
"name": "node009",
"profile_id": "mystack",
"role": "master",
"tags": {}
"role": "master"
}
}

View File

@ -8,6 +8,7 @@
"id": "0df0931b-e251-4f2e-8719-4ebfda3627ba",
"index": -1,
"init_time": "2015-03-05T08:53:15.774619",
"metadata": {},
"name": "node009",
"physical_id": "",
"profile_id": "edc63d0a-2ca4-48fa-9854-27926da76a4a",
@ -16,7 +17,6 @@
"role": "master",
"status": "INIT",
"status_reason": "Initializing",
"tags": {},
"updated_time": null
}
}

View File

@ -7,6 +7,7 @@
"id": "d5779bb0-f0a0-49c9-88cc-6f078adb5a0b",
"index": -1,
"init_time": "2015-02-10T12:03:13.000000",
"metadata": {},
"name": "node1",
"physical_id": "f41537fa-22ab-4bea-94c0-c874e19d0c80",
"profile_id": "edc63d0a-2ca4-48fa-9854-27926da76a4a",
@ -15,7 +16,6 @@
"role": null,
"status": "ACTIVE",
"status_reason": "Creation succeeded",
"tags": {},
"updated_time": "2015-03-04T04:58:27.000000"
}
}

View File

@ -8,6 +8,7 @@
"id": "573aa1ba-bf45-49fd-907d-6b5d6e6adfd3",
"index": -1,
"init_time": "2015-02-27T04:39:18.000000",
"metadata": {},
"name": "node00a",
"physical_id": "cc028275-d078-4729-bf3e-154b7359814b",
"profile_id": "edc63d0a-2ca4-48fa-9854-27926da76a4a",
@ -16,7 +17,6 @@
"role": null,
"status": "ACTIVE",
"status_reason": "Creation succeeded",
"tags": {},
"updated_time": null
},
]

View File

@ -1,8 +1,8 @@
{
"node": {
"metadata": {},
"name": "new_node_name",
"profile": null,
"role": null,
"tags": {}
"role": null
}
}

View File

@ -1,5 +1,6 @@
{
"profile": {
"metadata": {},
"name": "test_prof1",
"permission": "xxx",
"spec": {
@ -44,7 +45,6 @@
},
"timeout": 60
},
"tags": {},
"type": "os.heat.stack"
}
}

View File

@ -3,6 +3,7 @@
"created_time": "2015-03-01T14:28:25.000000",
"deleted_time": null,
"id": "7fa885cd-fa39-4531-a42d-780af95c84a4",
"metadata": {},
"name": "test_prof1",
"permission": "xxx",
"spec": {
@ -47,7 +48,6 @@
},
"timeout": 60
},
"tags": {},
"type": "os.heat.stack",
"updated_time": null
}

View File

@ -3,6 +3,7 @@
"created_time": "2015-03-01T14:28:25.000000",
"deleted_time": null,
"id": "7fa885cd-fa39-4531-a42d-780af95c84a4",
"metadata": {},
"name": "test_prof1",
"permission": "xxx",
"spec": {
@ -47,7 +48,6 @@
},
"timeout": 60
},
"tags": {},
"type": "os.heat.stack",
"updated_time": null
}

View File

@ -4,6 +4,7 @@
"created_time": "2015-02-10T11:46:33.000000",
"deleted_time": null,
"id": "edc63d0a-2ca4-48fa-9854-27926da76a4a",
"metadata": {},
"name": "mystack",
"permission": "",
"spec": {
@ -48,7 +49,6 @@
}
}
},
"tags": {},
"type": "os.heat.stack",
"updated_time": null
}

View File

@ -1,5 +1,6 @@
{
"type": "os.heat.stack",
"metadata": {},
"permission": "",
"spec": {
"context": {},
"environment": {},
@ -7,6 +8,5 @@
"parameters": [],
"template": {}
},
"permission": "",
"tags": {}
"type": "os.heat.stack"
}

View File

@ -1,8 +1,8 @@
{
"profile": {
"metadata": {},
"name": null,
"permission": "111100001111",
"spec": null,
"tags": {}
"spec": null
}
}

View File

@ -3,6 +3,7 @@
"created_time": "2015-03-01T14:28:25.000000",
"deleted_time": null,
"id": "7fa885cd-fa39-4531-a42d-780af95c84a4",
"metadata": {},
"name": "test_prof1",
"permission": "010101",
"spec": {
@ -47,7 +48,6 @@
},
"timeout": 60
},
"tags": {},
"type": "os.heat.stack",
"updated_time": "2015-03-02T06:16:01.050516"
}

View File

@ -38,7 +38,7 @@ class ClusterData(object):
self.name = data.get(consts.CLUSTER_NAME, None)
self.profile = data.get(consts.CLUSTER_PROFILE, None)
self.parent = data.get(consts.CLUSTER_PARENT, None)
self.tags = data.get(consts.CLUSTER_TAGS, None)
self.metadata = data.get(consts.CLUSTER_METADATA, None)
self.desired_capacity = data.get(consts.CLUSTER_DESIRED_CAPACITY, None)
self.min_size = data.get(consts.CLUSTER_MIN_SIZE, None)
@ -188,7 +188,7 @@ class ClusterController(object):
cluster = self.rpc_client.cluster_create(
req.context, data.name, data.desired_capacity, data.profile,
data.min_size, data.max_size, data.parent, data.tags,
data.min_size, data.max_size, data.parent, data.metadata,
data.timeout)
return {'cluster': cluster}
@ -215,7 +215,7 @@ class ClusterController(object):
self.rpc_client.cluster_update(
req.context, cluster_id, data.name, data.desired_capacity,
data.profile, data.min_size, data.max_size, data.parent,
data.tags, data.timeout)
data.metadata, data.timeout)
raise exc.HTTPAccepted()

View File

@ -34,7 +34,7 @@ class NodeData(object):
PARAMS = (consts.NODE_NAME, consts.NODE_CLUSTER_ID,
consts.NODE_PROFILE_ID, consts.NODE_ROLE,
consts.NODE_TAGS,)
consts.NODE_METADATA)
def __init__(self, data):
self.data = data
@ -61,10 +61,10 @@ class NodeData(object):
return None
return self.data[consts.NODE_ROLE]
def tags(self):
if consts.NODE_TAGS not in self.data:
def metadata(self):
if consts.NODE_METADATA not in self.data:
return {}
return self.data[consts.NODE_TAGS]
return self.data[consts.NODE_METADATA]
class NodeController(object):
@ -137,7 +137,7 @@ class NodeController(object):
result = self.rpc_client.node_create(req.context, data.name(),
data.cluster_id(),
data.profile_id(),
data.role(), data.tags())
data.role(), data.metadata())
return {'node': result}
@util.policy_enforce
@ -169,10 +169,10 @@ class NodeController(object):
name = node_data.get(consts.NODE_NAME)
profile_id = node_data.get(consts.NODE_PROFILE_ID)
role = node_data.get(consts.NODE_ROLE)
tags = node_data.get(consts.NODE_TAGS)
metadata = node_data.get(consts.NODE_METADATA)
self.rpc_client.node_update(req.context, node_id, name, profile_id,
role, tags)
role, metadata)
raise exc.HTTPAccepted()

View File

@ -30,7 +30,7 @@ class ProfileData(object):
PARAMS = (consts.PROFILE_NAME, consts.PROFILE_SPEC,
consts.PROFILE_CONTEXT, consts.PROFILE_TYPE,
consts.PROFILE_PERMISSION, consts.PROFILE_TAGS)
consts.PROFILE_PERMISSION, consts.PROFILE_METADATA)
def __init__(self, data):
self.data = data
@ -53,8 +53,8 @@ class ProfileData(object):
def permission(self):
return self.data.get(consts.PROFILE_PERMISSION)
def tags(self):
return self.data.get(consts.PROFILE_TAGS)
def metadata(self):
return self.data.get(consts.PROFILE_METADATA)
def context(self):
return self.data.get(consts.PROFILE_CONTEXT)
@ -82,7 +82,7 @@ class ProfileController(object):
'updated_time': 'single',
'deleted_time': 'single',
'permission': 'mixed',
'tags': 'mixed',
'metadata': 'mixed',
}
param_whitelist = {
'limit': 'single',
@ -124,7 +124,7 @@ class ProfileController(object):
data.type(),
data.spec(),
data.permission(),
data.tags())
data.metadata())
return {'profile': result}
@ -146,11 +146,11 @@ class ProfileController(object):
name = profile_data.get(consts.PROFILE_NAME)
spec = profile_data.get(consts.PROFILE_SPEC)
permission = profile_data.get(consts.PROFILE_PERMISSION)
tags = profile_data.get(consts.PROFILE_TAGS)
metadata = profile_data.get(consts.PROFILE_METADATA)
# We don't check if type is specified or not
profile = self.rpc_client.profile_update(req.context, profile_id,
name, spec, permission,
tags)
metadata)
return {'profile': profile}

View File

@ -59,34 +59,34 @@ CLUSTER_ATTRS = (
CLUSTER_DOMAIN, CLUSTER_PROJECT, CLUSTER_USER,
CLUSTER_CREATED_TIME, CLUSTER_UPDATED_TIME, CLUSTER_DELETED_TIME,
CLUSTER_STATUS, CLUSTER_STATUS_REASON, CLUSTER_TIMEOUT,
CLUSTER_TAGS,
CLUSTER_METADATA,
) = (
'name', 'profile_id', 'desired_capacity',
'min_size', 'max_size', 'id', 'parent',
'domain', 'project', 'user',
'created_time', 'updated_time', 'deleted_time',
'status', 'status_reason', 'timeout',
'tags',
'metadata',
)
NODE_ATTRS = (
NODE_INDEX, NODE_NAME, NODE_PROFILE_ID, NODE_CLUSTER_ID,
NODE_CREATED_TIME, NODE_UPDATED_TIME, NODE_DELETED_TIME,
NODE_STATUS, NODE_ROLE, NODE_TAGS,
NODE_STATUS, NODE_ROLE, NODE_METADATA,
) = (
'index', 'name', 'profile_id', 'cluster_id',
'created_time', 'updated_time', 'deleted_time',
'status', 'role', 'tags',
'status', 'role', 'metadata',
)
PROFILE_ATTRS = (
PROFILE_ID, PROFILE_NAME, PROFILE_TYPE, PROFILE_PERMISSION,
PROFILE_CREATED_TIME, PROFILE_UPDATED_TIME, PROFILE_DELETED_TIME,
PROFILE_SPEC, PROFILE_TAGS, PROFILE_CONTEXT,
PROFILE_SPEC, PROFILE_METADATA, PROFILE_CONTEXT,
) = (
'id', 'name', 'type', 'permission',
'created_time', 'updated_time', 'deleted_time',
'spec', 'tags', 'context',
'spec', 'metadata', 'context',
)
POLICY_ATTRS = (

View File

@ -824,7 +824,6 @@ def profile_get_all(context, limit=None, marker=None, sort_keys=None,
consts.PROFILE_CREATED_TIME: models.Profile.created_time.key,
consts.PROFILE_UPDATED_TIME: models.Profile.updated_time.key,
consts.PROFILE_DELETED_TIME: models.Profile.deleted_time.key,
consts.PROFILE_TAGS: models.Profile.tags.key,
}
keys = _get_sort_keys(sort_keys, sort_key_map)

View File

@ -28,7 +28,7 @@ def upgrade(migrate_engine):
sqlalchemy.Column('context', types.Dict),
sqlalchemy.Column('spec', types.Dict),
sqlalchemy.Column('permission', sqlalchemy.String(32)),
sqlalchemy.Column('tags', types.Dict),
sqlalchemy.Column('meta_data', types.Dict),
sqlalchemy.Column('created_time', sqlalchemy.DateTime),
sqlalchemy.Column('updated_time', sqlalchemy.DateTime),
sqlalchemy.Column('deleted_time', sqlalchemy.DateTime),
@ -60,7 +60,7 @@ def upgrade(migrate_engine):
sqlalchemy.Column('timeout', sqlalchemy.Integer),
sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('status_reason', sqlalchemy.String(255)),
sqlalchemy.Column('tags', types.Dict),
sqlalchemy.Column('meta_data', types.Dict),
sqlalchemy.Column('data', types.Dict),
mysql_engine='InnoDB',
mysql_charset='utf8'
@ -88,7 +88,7 @@ def upgrade(migrate_engine):
sqlalchemy.Column('deleted_time', sqlalchemy.DateTime),
sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('status_reason', sqlalchemy.String(255)),
sqlalchemy.Column('tags', types.Dict),
sqlalchemy.Column('meta_data', types.Dict),
sqlalchemy.Column('data', types.Dict),
mysql_engine='InnoDB',
mysql_charset='utf8'
@ -226,7 +226,7 @@ def upgrade(migrate_engine):
sqlalchemy.Column('action', sqlalchemy.String(36)),
sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('status_reason', sqlalchemy.String(255)),
sqlalchemy.Column('tags', types.Dict),
sqlalchemy.Column('meta_data', types.Dict),
mysql_engine='InnoDB',
mysql_charset='utf8'
)

View File

@ -111,7 +111,7 @@ class Cluster(BASE, SenlinBase, SoftDelete):
status = sqlalchemy.Column(sqlalchemy.String(255))
status_reason = sqlalchemy.Column(sqlalchemy.String(255))
tags = sqlalchemy.Column(types.Dict)
meta_data = sqlalchemy.Column(types.Dict)
data = sqlalchemy.Column(types.Dict)
@ -141,7 +141,7 @@ class Node(BASE, SenlinBase, SoftDelete):
status = sqlalchemy.Column(sqlalchemy.String(255))
status_reason = sqlalchemy.Column(sqlalchemy.String(255))
tags = sqlalchemy.Column(types.Dict)
meta_data = sqlalchemy.Column(types.Dict)
data = sqlalchemy.Column(types.Dict)
@ -227,7 +227,7 @@ class Profile(BASE, SenlinBase, SoftDelete):
context = sqlalchemy.Column(types.Dict)
spec = sqlalchemy.Column(types.Dict)
permission = sqlalchemy.Column(sqlalchemy.String(32))
tags = sqlalchemy.Column(types.Dict)
meta_data = sqlalchemy.Column(types.Dict)
created_time = sqlalchemy.Column(sqlalchemy.DateTime)
updated_time = sqlalchemy.Column(sqlalchemy.DateTime)
deleted_time = sqlalchemy.Column(sqlalchemy.DateTime)
@ -320,3 +320,4 @@ class Event(BASE, SenlinBase, SoftDelete):
action = sqlalchemy.Column(sqlalchemy.String(36))
status = sqlalchemy.Column(sqlalchemy.String(255))
status_reason = sqlalchemy.Column(sqlalchemy.String(255))
meta_data = sqlalchemy.Column(types.Dict)

View File

@ -96,7 +96,7 @@ class ClusterAction(base.Action):
'project': cluster.project,
'domain': cluster.domain,
'index': index,
'tags': {}
'metadata': {}
}
name = 'node-%s-%003d' % (cluster.id[:8], index)
node = node_mod.Node(name, cluster.profile_id, cluster.id,

View File

@ -76,7 +76,7 @@ class Cluster(periodic_task.PeriodicTasks):
self.status = kwargs.get('status', self.INIT)
self.status_reason = kwargs.get('status_reason', 'Initializing')
self.data = kwargs.get('data', {})
self.tags = kwargs.get('tags', {})
self.metadata = kwargs.get('metadata', {})
# heathy checking
self.detect_enabled = False
@ -121,7 +121,7 @@ class Cluster(periodic_task.PeriodicTasks):
'timeout': self.timeout,
'status': self.status,
'status_reason': self.status_reason,
'tags': self.tags,
'meta_data': self.metadata,
'data': self.data,
}
@ -161,7 +161,7 @@ class Cluster(periodic_task.PeriodicTasks):
'status': record.status,
'status_reason': record.status_reason,
'data': record.data,
'tags': record.tags,
'metadata': record.meta_data,
}
return cls(record.name, record.desired_capacity, record.profile_id,
@ -218,7 +218,7 @@ class Cluster(periodic_task.PeriodicTasks):
'timeout': self.timeout,
'status': self.status,
'status_reason': self.status_reason,
'tags': self.tags,
'metadata': self.metadata,
'data': self.data,
'nodes': [node.id for node in self.rt['nodes']],
'policies': [policy.id for policy in self.rt['policies']],

View File

@ -49,6 +49,7 @@ class Event(object):
self.obj_type = kwargs.get('obj_type', None)
self.obj_name = kwargs.get('obj_name', None)
self.cluster_id = kwargs.get('cluster_id', None)
self.metadata = kwargs.get('metadata', {})
# entity not None implies an initial creation of event object,
# not a deserialization, so we try make an inference here
@ -85,6 +86,7 @@ class Event(object):
'status': record.status,
'status_reason': record.status_reason,
'deleted_time': record.deleted_time,
'metadata': record.meta_data,
}
return cls(record.timestamp, record.level, **kwargs)
@ -130,6 +132,7 @@ class Event(object):
'status': self.status,
'status_reason': self.status_reason,
'deleted_time': self.deleted_time,
'meta_data': self.metadata,
}
event = db_api.event_create(context, values)
@ -156,6 +159,7 @@ class Event(object):
'status': self.status,
'status_reason': self.status_reason,
'deleted_time': self.deleted_time,
'metadata': self.metadata,
}
return evt

View File

@ -67,7 +67,7 @@ class Node(object):
self.status = kwargs.get('status', self.INIT)
self.status_reason = kwargs.get('status_reason', 'Initializing')
self.data = kwargs.get('data', {})
self.tags = kwargs.get('tags', {})
self.metadata = kwargs.get('metadata', {})
self.rt = {}
if context is not None:
@ -107,8 +107,8 @@ class Node(object):
'deleted_time': self.deleted_time,
'status': self.status,
'status_reason': self.status_reason,
'meta_data': self.metadata,
'data': self.data,
'tags': self.tags,
}
if self.id:
@ -147,7 +147,7 @@ class Node(object):
'status': record.status,
'status_reason': record.status_reason,
'data': record.data,
'tags': record.tags,
'metadata': record.meta_data,
}
return cls(record.name, record.profile_id, record.cluster_id,
@ -200,7 +200,7 @@ class Node(object):
'status': self.status,
'status_reason': self.status_reason,
'data': self.data,
'tags': self.tags,
'metadata': self.metadata,
'profile_name': self.rt['profile'].name,
}
return node_dict

View File

@ -198,7 +198,8 @@ class EngineService(service.Service):
return [p.to_dict() for p in profiles]
@request_context
def profile_create(self, context, name, type, spec, perm=None, tags=None):
def profile_create(self, context, name, type, spec, perm=None,
metadata=None):
LOG.info(_LI('Creating profile %(type)s: %(name)s'),
{'type': type, 'name': name})
plugin = environment.global_env().get_profile(type)
@ -206,7 +207,7 @@ class EngineService(service.Service):
kwargs = {
'spec': spec,
'permission': perm,
'tags': tags,
'metadata': metadata,
}
profile = plugin(context, type, name, **kwargs)
profile.validate()
@ -221,7 +222,7 @@ class EngineService(service.Service):
@request_context
def profile_update(self, context, profile_id, name=None, spec=None,
permission=None, tags=None):
permission=None, metadata=None):
db_profile = self.profile_find(context, profile_id)
if spec is None:
profile = profile_base.Profile.load(context, profile=db_profile)
@ -232,8 +233,8 @@ class EngineService(service.Service):
if permission is not None and permission != profile.permission:
profile.permission = permission
changed = True
if tags is not None and tags != profile.tags:
profile.tags = tags
if metadata is not None and metadata != profile.metadata:
profile.metadata = metadata
changed = True
if changed:
profile.store(context)
@ -246,7 +247,7 @@ class EngineService(service.Service):
kwargs = {
'spec': new_spec,
'permission': permission or db_profile.permission,
'tags': tags or db_profile.tags,
'metadata': metadata or db_profile.meta_data,
}
new_name = name or db_profile.name
@ -451,8 +452,8 @@ class EngineService(service.Service):
@request_context
def cluster_create(self, context, name, desired_capacity, profile_id,
min_size=None, max_size=None, parent=None, tags=None,
timeout=None):
min_size=None, max_size=None, parent=None,
metadata=None, timeout=None):
db_profile = self.profile_find(context, profile_id)
(init_size, min_size, max_size) = self._validate_cluster_size_params(
@ -470,7 +471,7 @@ class EngineService(service.Service):
'min_size': min_size,
'max_size': max_size,
'timeout': timeout,
'tags': tags
'metadata': metadata,
}
cluster = cluster_mod.Cluster(name, init_size, db_profile.id, **kwargs)
@ -495,7 +496,7 @@ class EngineService(service.Service):
def cluster_update(self, context, identity, name=None,
desired_capacity=None, profile_id=None,
min_size=None, max_size=None,
parent=None, tags=None, timeout=None):
parent=None, metadata=None, timeout=None):
def update_cluster_properties(cluster):
# Check if fields other than profile_id need update
@ -510,8 +511,8 @@ class EngineService(service.Service):
cluster.parent = db_parent.id
changed = True
if tags is not None and tags != cluster.tags:
cluster.tags = tags
if metadata is not None and metadata != cluster.metadata:
cluster.metadata = metadata
changed = True
if timeout is not None:
@ -791,7 +792,7 @@ class EngineService(service.Service):
@request_context
def node_create(self, context, name, profile_id, cluster_id=None,
role=None, tags=None):
role=None, metadata=None):
node_profile = self.profile_find(context, profile_id)
if cluster_id is not None:
db_cluster = self.cluster_find(context, cluster_id)
@ -813,7 +814,7 @@ class EngineService(service.Service):
'project': context.project,
'domain': context.domain,
'role': role,
'tags': tags or {}
'metadata': metadata or {}
}
node = node_mod.Node(name, node_profile.id, cluster_id, context,
@ -848,7 +849,7 @@ class EngineService(service.Service):
@request_context
def node_update(self, context, identity, name=None, profile_id=None,
role=None, tags=None):
role=None, metadata=None):
db_node = self.node_find(context, identity)
node = node_mod.Node.load(context, node=db_node)
@ -861,8 +862,8 @@ class EngineService(service.Service):
node.role = role
changed = True
if tags is not None and tags != node.tags:
node.tags = tags
if metadata is not None and metadata != node.metadata:
node.metadata = metadata
changed = True
if changed is True:

View File

@ -50,7 +50,7 @@ class Profile(object):
self.spec_data = schema.Spec(self.spec_schema, self.spec, self.context)
self.permission = kwargs.get('permission', '')
self.tags = kwargs.get('tags', {})
self.metadata = kwargs.get('metadata', {})
self.created_time = kwargs.get('created_time', None)
self.updated_time = kwargs.get('updated_time', None)
self.deleted_time = kwargs.get('deleted_time', None)
@ -66,7 +66,7 @@ class Profile(object):
'id': record.id,
'spec': record.spec,
'permission': record.permission,
'tags': record.tags,
'metadata': record.meta_data,
'created_time': record.created_time,
'updated_time': record.updated_time,
'deleted_time': record.deleted_time,
@ -113,7 +113,7 @@ class Profile(object):
'context': self.context.to_dict(),
'spec': self.spec,
'permission': self.permission,
'tags': self.tags,
'meta_data': self.metadata,
}
if self.id:
@ -226,7 +226,7 @@ class Profile(object):
'type': self.type,
'permission': self.permission,
'spec': self.spec,
'tags': self.tags,
'metadata': self.metadata,
'created_time': _fmt_time(self.created_time),
'updated_time': _fmt_time(self.updated_time),
'deleted_time': _fmt_time(self.deleted_time),

View File

@ -87,22 +87,24 @@ class EngineClient(object):
sort_dir=sort_dir, filters=filters,
show_deleted=show_deleted))
def profile_create(self, ctxt, name, type, spec, perm, tags):
def profile_create(self, ctxt, name, type, spec, perm, metadata):
return self.call(ctxt,
self.make_msg('profile_create', name=name,
type=type, spec=spec, perm=perm,
tags=tags))
metadata=metadata))
def profile_get(self, ctxt, identity):
return self.call(ctxt,
self.make_msg('profile_get', identity=identity))
def profile_update(self, ctxt, profile_id, name, spec, permission, tags):
def profile_update(self, ctxt, profile_id, name, spec, permission,
metadata):
return self.call(ctxt,
self.make_msg('profile_update',
profile_id=profile_id,
name=name, spec=spec,
permission=permission, tags=tags))
permission=permission,
metadata=metadata))
def profile_delete(self, ctxt, identity, cast=True):
rpc_method = self.cast if cast else self.call
@ -165,8 +167,8 @@ class EngineClient(object):
self.make_msg('cluster_get', identity=identity))
def cluster_create(self, ctxt, name, desired_capacity, profile_id,
min_size=None, max_size=None, parent=None, tags=None,
timeout=None):
min_size=None, max_size=None, parent=None,
metadata=None, timeout=None):
return self.call(ctxt, self.make_msg('cluster_create',
name=name,
desired_capacity=desired_capacity,
@ -174,7 +176,7 @@ class EngineClient(object):
min_size=min_size,
max_size=max_size,
parent=parent,
tags=tags,
metadata=metadata,
timeout=timeout))
def cluster_add_nodes(self, ctxt, identity, nodes):
@ -199,7 +201,7 @@ class EngineClient(object):
def cluster_update(self, ctxt, identity, name=None, desired_capacity=None,
profile_id=None, min_size=None, max_size=None,
parent=None, tags=None, timeout=None):
parent=None, metadata=None, timeout=None):
return self.call(ctxt, self.make_msg('cluster_update',
identity=identity,
name=name,
@ -207,7 +209,7 @@ class EngineClient(object):
profile_id=profile_id,
min_size=min_size,
max_size=max_size,
parent=parent, tags=tags,
parent=parent, metadata=metadata,
timeout=timeout))
def cluster_delete(self, ctxt, identity, cast=True):
@ -228,23 +230,23 @@ class EngineClient(object):
filters=filters,
project_safe=project_safe))
def node_create(self, ctxt, name, cluster_id, profile_id, role, tags):
def node_create(self, ctxt, name, cluster_id, profile_id, role, metadata):
return self.call(ctxt,
self.make_msg('node_create', name=name,
profile_id=profile_id,
cluster_id=cluster_id,
role=role, tags=tags))
role=role, metadata=metadata))
def node_get(self, ctxt, identity, show_details=False):
return self.call(ctxt,
self.make_msg('node_get', identity=identity,
show_details=show_details))
def node_update(self, ctxt, identity, name, profile_id, role, tags):
def node_update(self, ctxt, identity, name, profile_id, role, metadata):
return self.call(ctxt,
self.make_msg('node_update', identity=identity,
name=name, profile_id=profile_id,
role=role, tags=tags))
role=role, metadata=metadata))
def node_join(self, ctxt, identity, cluster_id):
return self.call(ctxt,

View File

@ -34,7 +34,7 @@ class ClusterDataTest(base.SenlinTestCase):
'name': 'test_cluster',
'profile_id': 'some_profile',
'parent': 'another_cluster',
'tags': {'tag_key': 'tag_value'},
'metadata': {'tag_key': 'tag_value'},
'desired_capacity': 5,
'max_size': 10,
'min_size': 0,
@ -45,7 +45,7 @@ class ClusterDataTest(base.SenlinTestCase):
self.assertEqual('test_cluster', data.name)
self.assertEqual('some_profile', data.profile)
self.assertEqual('another_cluster', data.parent)
self.assertEqual({'tag_key': 'tag_value'}, data.tags)
self.assertEqual({'tag_key': 'tag_value'}, data.metadata)
self.assertEqual(5, data.desired_capacity)
self.assertEqual(10, data.max_size)
self.assertEqual(0, data.min_size)
@ -250,7 +250,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
u'timeout': 60,
u'status': u'ACTIVE',
u'status_reason': u'Cluster successfully created.',
u'tags': {},
u'metadata': {},
u'data': {},
u'nodes': [],
u'policies': [],
@ -427,7 +427,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
'min_size': 0,
'max_size': 0,
'parent': None,
'tags': {},
'metadata': {},
'timeout': None,
}
}
@ -441,7 +441,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
'min_size': 0,
'max_size': 0,
'parent': None,
'tags': {},
'metadata': {},
'timeout': 60,
}
@ -459,7 +459,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
'min_size': 0,
'max_size': 0,
'parent': None,
'tags': {},
'metadata': {},
'timeout': None
})
)
@ -476,7 +476,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
'max_size': 0,
'desired_capacity': 0,
'parent': None,
'tags': {},
'metadata': {},
'timeout': None,
}
@ -502,7 +502,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
'max_size': 0,
'desired_capacity': 0,
'parent': None,
'tags': {},
'metadata': {},
'timeout': None,
}
}
@ -526,7 +526,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
'max_size': 0,
'desired_capacity': -1,
'parent': None,
'tags': {},
'metadata': {},
'timeout': None,
}
}
@ -555,7 +555,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
'max_size': 0,
'desired_capacity': 0,
'parent': None,
'tags': {},
'metadata': {},
'timeout': None,
}
}
@ -595,7 +595,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
u'timeout': 60,
u'status': u'ACTIVE',
u'status_reason': u'Cluster successfully created.',
u'tags': {},
u'metadata': {},
u'data': {},
u'nodes': [],
u'policies': [],
@ -728,7 +728,7 @@ class ClusterControllerTest(shared.ControllerTest, base.SenlinTestCase):
args = {
'name': None,
'parent': None,
'tags': None,
'metadata': None,
'desired_capacity': 0,
'profile_id': 'xxxx-yyyy-zzzz',
'min_size': 0,

View File

@ -40,7 +40,7 @@ class NodeDataTest(base.SenlinTestCase):
self.assertRaises(exc.HTTPBadRequest, data.profile_id)
self.assertIsNone(data.cluster_id())
self.assertIsNone(data.role())
self.assertEqual({}, data.tags())
self.assertEqual({}, data.metadata())
def test_with_cluster_id(self):
body = {'cluster_id': 'cluster-1', 'name': 'test_node'}
@ -88,7 +88,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
u'status': u'ACTIVE',
u'status_reason': u'Node successfully created',
u'data': {},
u'tags': {},
u'metadata': {},
}
]
@ -289,7 +289,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'profile_id': 'xxxx-yyyy',
'cluster_id': None,
'role': None,
'tags': {},
'metadata': {},
}
}
@ -298,7 +298,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'profile_id': 'xxxx-yyyy',
'cluster_id': None,
'role': None,
'tags': {},
'metadata': {},
'action': 'this-is-the-node-create-action',
}
@ -315,7 +315,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'profile_id': 'xxxx-yyyy',
'cluster_id': None,
'role': None,
'tags': {},
'metadata': {},
})
)
@ -330,7 +330,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'profile_id': 'bad-profile',
'cluster_id': None,
'role': None,
'tags': {},
'metadata': {},
}
}
req = self._post('/nodes', json.dumps(body))
@ -357,7 +357,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'profile_id': 'xxxx-yyyy-zzzz',
'cluster_id': 'non-existent-cluster',
'role': None,
'tags': {},
'metadata': {},
}
}
req = self._post('/nodes', json.dumps(body))
@ -397,7 +397,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
u'status': u'ACTIVE',
u'status_reason': u'Node successfully created',
u'data': {},
u'tags': {},
u'metadata': {},
u'details': {}
}
@ -469,7 +469,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'name': 'test_node',
'profile_id': 'xxxx-yyyy',
'role': None,
'tags': {},
'metadata': {},
}
}
@ -478,7 +478,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'profile_id': 'xxxx-yyyy',
'cluster_id': None,
'role': None,
'tags': {},
'metadata': {},
'action': 'this-is-the-node-update-action',
}
@ -501,7 +501,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'name': 'test_node',
'profile_id': 'xxxx-yyyy',
'role': None,
'tags': {},
'metadata': {},
})
)
@ -530,7 +530,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'name': 'test_node',
'profile_id': 'xxxx-yyyy',
'role': None,
'tags': {},
'metadata': {},
}
}
@ -554,7 +554,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'name': 'test_node',
'profile_id': 'xxxx-yyyy',
'role': None,
'tags': {},
'metadata': {},
})
)
@ -569,7 +569,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'name': 'test_node',
'profile_id': 'profile-not-exist',
'role': None,
'tags': {},
'metadata': {},
}
}
@ -592,7 +592,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'name': 'test_node',
'profile_id': 'profile-not-exist',
'role': None,
'tags': {},
'metadata': {},
})
)
self.assertEqual(404, resp.json['code'])
@ -624,7 +624,7 @@ class NodeControllerTest(shared.ControllerTest, base.SenlinTestCase):
'name': 'test_node',
'profile_id': 'xxxx-yyyy',
'role': None,
'tags': {},
'metadata': {},
}
}
req = self._patch('/nodes/%(node_id)s' % {'node_id': node_id},

View File

@ -35,14 +35,14 @@ class ProfileDataTest(base.SenlinTestCase):
},
'type': 'test_profile_type',
'permission': None,
'tags': {}
'metadata': {}
}
data = profiles.ProfileData(body)
self.assertEqual('test_profile', data.name())
self.assertEqual({'param1': 'value1', 'param2': 'value2'}, data.spec())
self.assertEqual('test_profile_type', data.type())
self.assertIsNone(data.permission())
self.assertEqual({}, data.tags())
self.assertEqual({}, data.metadata())
def test_required_fields_missing(self):
body = {'not a profile name': 'wibble'}
@ -51,7 +51,7 @@ class ProfileDataTest(base.SenlinTestCase):
self.assertRaises(exc.HTTPBadRequest, data.spec)
self.assertRaises(exc.HTTPBadRequest, data.type)
self.assertIsNone(data.permission())
self.assertIsNone(data.tags())
self.assertIsNone(data.metadata())
@mock.patch.object(policy, 'enforce')
@ -82,7 +82,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
u'created_time': u'2015-02-24T19:17:22Z',
u'updated_time': None,
u'deleted_time': None,
u'tags': {},
u'metadata': {},
}
]
@ -225,7 +225,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
'param_2': 2,
},
'permission': None,
'tags': {},
'metadata': {},
}
}
@ -238,7 +238,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
'param_2': 2,
},
'permission': None,
'tags': {},
'metadata': {},
}
req = self._post('/profiles', json.dumps(body))
@ -254,7 +254,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
'type': 'test_profile_type',
'spec': {'param_1': 'value1', 'param_2': 2},
'perm': None,
'tags': {},
'metadata': {},
})
)
@ -286,7 +286,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
'type': type_name,
'spec': {'param': 'value'},
'permission': None,
'tags': {},
'metadata': {},
}
}
req = self._post('/profiles', json.dumps(body))
@ -313,7 +313,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
'type': 'test_profile_type',
'spec': {'param': 'value'},
'permission': None,
'tags': {},
'metadata': {},
}
}
req = self._post('/profiles', json.dumps(body))
@ -367,7 +367,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
u'created_time': u'2015-02-24T19:17:22Z',
u'updated_time': None,
u'deleted_time': None,
u'tags': {},
u'metadata': {},
}
mock_call = self.patchobject(rpc_client.EngineClient, 'call',
@ -421,7 +421,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
'spec': {
'param_2': 'value3',
},
'tags': {
'metadata': {
'author': 'thomas j',
}
}
@ -442,7 +442,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
u'created_time': u'2015-02-25T16:20:13Z',
u'updated_time': None,
u'deleted_time': None,
u'tags': {u'author': u'thomas j'},
u'metadata': {u'author': u'thomas j'},
}
mock_call = self.patchobject(rpc_client.EngineClient, 'call',
@ -464,7 +464,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
pid = 'aaaa-bbbb-cccc'
body = {
'profile': {'spec': {'param_2': 'value3'},
'tags': {'author': 'thomas j'}}
'metadata': {'author': 'thomas j'}}
}
req = self._put('/profiles/%(profile_id)s' % {'profile_id': pid},
@ -481,7 +481,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
body = {
'profile': {
'name': 'new_profile',
'tags': {'author': 'john d'},
'metadata': {'author': 'john d'},
'permission': 'xxx',
}
}
@ -500,7 +500,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
u'created_time': u'2015-02-25T16:20:13Z',
u'updated_time': u'2015-02-25T16:50:22Z',
u'deleted_time': None,
u'tags': {u'author': u'john d'},
u'metadata': {u'author': u'john d'},
}
mock_call = self.patchobject(rpc_client.EngineClient, 'call',
@ -522,7 +522,7 @@ class ProfileControllerTest(shared.ControllerTest, base.SenlinTestCase):
body = {
'profile': {
'name': 'new_profile',
'tags': {'author': 'john d'},
'metadata': {'author': 'john d'},
'permission': 'xxx',
}
}

View File

@ -71,7 +71,7 @@ def create_cluster(ctx, profile, **kwargs):
'init_time': datetime.datetime.utcnow(),
'status': 'INIT',
'status_reason': 'Just Initialized',
'tags': {},
'metadata': {},
}
values.update(kwargs)
if 'project' in kwargs:
@ -93,7 +93,7 @@ def create_node(ctx, cluster, profile, **kwargs):
'deleted_time': None,
'status': 'ACTIVE',
'status_reason': 'create complete',
'tags': json.loads('{"foo": "123"}'),
'metadata': json.loads('{"foo": "123"}'),
'data': json.loads('{"key1": "value1"}'),
}
values.update(kwargs)

View File

@ -48,7 +48,7 @@ class DBAPIClusterTest(base.SenlinTestCase):
self.assertIsNone(cluster.updated_time)
self.assertIsNone(cluster.deleted_time)
self.assertIsNotNone(cluster.init_time)
self.assertEqual({}, cluster.tags)
self.assertEqual({}, cluster.metadata)
self.assertIsNone(cluster.data)
def test_cluster_get_returns_a_cluster(self):

View File

@ -47,7 +47,7 @@ class DBAPINodeTest(base.SenlinTestCase):
self.assertIsNone(node.deleted_time)
self.assertEqual('ACTIVE', node.status)
self.assertEqual('create complete', node.status_reason)
self.assertEqual('{"foo": "123"}', json.dumps(node.tags))
self.assertEqual('{"foo": "123"}', json.dumps(node.metadata))
self.assertEqual('{"key1": "value1"}', json.dumps(node.data))
self.assertEqual(self.cluster.id, node.cluster_id)
self.assertEqual(self.profile.id, node.profile_id)

View File

@ -205,14 +205,14 @@ class DBAPIProfileTest(base.SenlinTestCase):
shared.create_profile(self.ctx, id=pid)
mock_paginate = self.patchobject(db_api.utils, 'paginate_query')
sort_keys = ['type', 'name', 'permission', 'tags',
sort_keys = ['type', 'name', 'permission', 'metadata',
'created_time', 'updated_time', 'deleted_time']
db_api.profile_get_all(self.ctx, sort_keys=sort_keys)
args = mock_paginate.call_args[0]
used_sort_keys = set(args[3])
expected_keys = set(['id', 'type', 'name', 'permission', 'tags',
expected_keys = set(['id', 'type', 'name', 'permission',
'created_time', 'updated_time', 'deleted_time'])
self.assertEqual(expected_keys, used_sort_keys)

View File

@ -70,7 +70,7 @@ class ClusterTest(base.SenlinTestCase):
self.assertEqual('cluster_test_project', result['project'])
self.assertIsNone(result['parent'])
self.assertIsNone(result['timeout'])
self.assertIsNone(result['tags'])
self.assertIsNone(result['metadata'])
action_id = result['action']
action = db_api.action_get(self.ctx, result['action'])
@ -128,14 +128,14 @@ class ClusterTest(base.SenlinTestCase):
self.assertEqual('fake id', result['parent'])
@mock.patch.object(dispatcher, 'notify')
def test_cluster_create_with_tags(self, notify):
def test_cluster_create_with_metadata(self, notify):
result = self.eng.cluster_create(self.ctx, 'c-1', 2,
self.profile['id'],
tags={'k': 'v'})
metadata={'k': 'v'})
self.assertIsNotNone(result)
self.assertEqual('c-1', result['name'])
self.assertEqual({'k': 'v'}, result['tags'])
self.assertEqual({'k': 'v'}, result['metadata'])
def test_cluster_create_profile_not_found(self):
ex = self.assertRaises(rpc.ExpectedException,
@ -402,11 +402,11 @@ class ClusterTest(base.SenlinTestCase):
self.assertEqual(cid, c['id'])
self.assertEqual(p['id'], c['parent'])
# 3. update tags
self.eng.cluster_update(self.ctx, cid, tags={'k': 'v'})
# 3. update metadata
self.eng.cluster_update(self.ctx, cid, metadata={'k': 'v'})
c = self.eng.cluster_get(self.ctx, cid)
self.assertEqual(cid, c['id'])
self.assertEqual({'k': 'v'}, c['tags'])
self.assertEqual({'k': 'v'}, c['metadata'])
# 4. update timeout
self.eng.cluster_update(self.ctx, cid, timeout=119)
@ -573,7 +573,7 @@ class ClusterTest(base.SenlinTestCase):
'deleted_time': None,
'status': 'ACTIVE',
'status_reason': 'create complete',
'tags': {'foo': '123'},
'metadata': {'foo': '123'},
'data': {'key1': 'value1'},
}
values.update(kwargs)

View File

@ -60,7 +60,7 @@ class NodeTest(base.SenlinTestCase):
self.assertEqual(self.profile['id'], node['profile_id'])
self.assertIsNone(node['cluster_id'])
self.assertIsNone(node['role'])
self.assertEqual({}, node['tags'])
self.assertEqual({}, node['metadata'])
action_id = node['action']
action = db_api.action_get(self.ctx, action_id)
@ -80,14 +80,14 @@ class NodeTest(base.SenlinTestCase):
self.assertEqual(exception.ProfileNotFound, ex.exc_info[0])
@mock.patch.object(dispatcher, 'notify')
def test_node_create_with_role_and_tags(self, notify):
def test_node_create_with_role_and_metadata(self, notify):
node = self.eng.node_create(self.ctx, 'n-1', self.profile['id'],
role='master', tags={'k': 'v'})
role='master', metadata={'k': 'v'})
self.assertIsNotNone(node)
self.assertEqual('n-1', node['name'])
self.assertEqual('master', node['role'])
self.assertEqual({'k': 'v'}, node['tags'])
self.assertEqual({'k': 'v'}, node['metadata'])
@mock.patch.object(dispatcher, 'notify')
def test_node_create_with_profile_name_or_short_id(self, notify):
@ -380,7 +380,7 @@ class NodeTest(base.SenlinTestCase):
@mock.patch.object(dispatcher, 'notify')
def test_node_update_simple(self, notify):
node = self.eng.node_create(self.ctx, 'node-1', self.profile['id'],
role='Master', tags={'foo': 'bar'})
role='Master', metadata={'foo': 'bar'})
nodeid = node['id']
# 1. update name
@ -395,11 +395,11 @@ class NodeTest(base.SenlinTestCase):
self.assertEqual(nodeid, res['id'])
self.assertEqual('worker', res['role'])
# 3. update tags
self.eng.node_update(self.ctx, nodeid, tags={'FOO': 'BAR'})
# 3. update metadata
self.eng.node_update(self.ctx, nodeid, metadata={'FOO': 'BAR'})
res = self.eng.node_get(self.ctx, nodeid)
self.assertEqual(nodeid, res['id'])
self.assertEqual({'FOO': 'BAR'}, res['tags'])
self.assertEqual({'FOO': 'BAR'}, res['metadata'])
def test_node_update_node_not_found(self):
ex = self.assertRaises(rpc.ExpectedException,

View File

@ -53,15 +53,15 @@ class ProfileTest(base.SenlinTestCase):
result = self.eng.profile_create(self.ctx, 'p-1', 'TestProfile', spec)
self.assertEqual(spec, result['spec'])
def test_profile_create_with_perm_and_tags(self):
def test_profile_create_with_perm_and_metadata(self):
spec = {'INT': 1}
perm = 'fake perm'
tags = {'group': 'mars'}
metadata = {'group': 'mars'}
result = self.eng.profile_create(self.ctx, 'p-1', 'TestProfile', spec,
perm=perm, tags=tags)
perm=perm, metadata=metadata)
self.assertEqual(spec, result['spec'])
self.assertEqual(perm, result['permission'])
self.assertEqual(tags, result['tags'])
self.assertEqual(metadata, result['metadata'])
def test_profile_create_type_not_found(self):
ex = self.assertRaises(rpc.ExpectedException,
@ -279,7 +279,7 @@ class ProfileTest(base.SenlinTestCase):
def test_profile_update_fields(self):
p1 = self.eng.profile_create(self.ctx, 'p-1', 'TestProfile', {},
perm='1111', tags={'foo': 'bar'})
perm='1111', metadata={'foo': 'bar'})
pid = p1['id']
self.assertEqual({}, p1['spec'])
@ -301,19 +301,19 @@ class ProfileTest(base.SenlinTestCase):
p = self.eng.profile_get(self.ctx, pid)
self.assertEqual('1100', p['permission'])
# 3. update tags
p2 = self.eng.profile_update(self.ctx, pid, tags={'bar': 'foo'})
# 3. update metadata
p2 = self.eng.profile_update(self.ctx, pid, metadata={'bar': 'foo'})
self.assertEqual(pid, p2['id'])
self.assertEqual({'bar': 'foo'}, p2['tags'])
self.assertEqual({'bar': 'foo'}, p2['metadata'])
# check persisted into db
p = self.eng.profile_get(self.ctx, pid)
self.assertEqual({'bar': 'foo'}, p['tags'])
self.assertEqual({'bar': 'foo'}, p['metadata'])
def test_profile_update_new_spec(self):
spec = {'INT': 1}
p1 = self.eng.profile_create(self.ctx, 'p-1', 'TestProfile', spec,
perm='1111', tags={'foo': 'bar'})
perm='1111', metadata={'foo': 'bar'})
pid = p1['id']
# update spec only
@ -323,13 +323,13 @@ class ProfileTest(base.SenlinTestCase):
self.assertEqual({'INT': 2}, p2['spec'])
self.assertEqual('p-1', p2['name'])
self.assertEqual('1111', p2['permission'])
self.assertEqual({'foo': 'bar'}, p2['tags'])
self.assertEqual({'foo': 'bar'}, p2['metadata'])
p = self.eng.profile_get(self.ctx, p2['id'])
self.assertEqual({'INT': 2}, p['spec'])
self.assertEqual('p-1', p['name'])
self.assertEqual('1111', p['permission'])
self.assertEqual({'foo': 'bar'}, p['tags'])
self.assertEqual({'foo': 'bar'}, p['metadata'])
# update spec with other fields
p2 = self.eng.profile_update(self.ctx, pid, name='p-2',
@ -340,7 +340,7 @@ class ProfileTest(base.SenlinTestCase):
self.assertEqual({'INT': 2}, p2['spec'])
self.assertEqual('p-2', p2['name'])
self.assertEqual('1100', p2['permission'])
self.assertEqual({'foo': 'bar'}, p2['tags'])
self.assertEqual({'foo': 'bar'}, p2['metadata'])
def test_profile_update_not_found(self):
ex = self.assertRaises(rpc.ExpectedException,
@ -351,7 +351,7 @@ class ProfileTest(base.SenlinTestCase):
def test_profile_update_using_find(self):
p1 = self.eng.profile_create(self.ctx, 'p-1', 'TestProfile', {},
perm='1111', tags={'foo': 'bar'})
perm='1111', metadata={'foo': 'bar'})
pid = p1['id']
p2 = self.eng.profile_update(self.ctx, pid, name='p-2')
@ -369,7 +369,7 @@ class ProfileTest(base.SenlinTestCase):
def test_profile_update_err_validate(self):
p1 = self.eng.profile_create(self.ctx, 'p-1', 'TestProfile', {},
perm='1111', tags={'foo': 'bar'})
perm='1111', metadata={'foo': 'bar'})
pid = p1['id']
ex = self.assertRaises(rpc.ExpectedException,
@ -380,7 +380,7 @@ class ProfileTest(base.SenlinTestCase):
def test_profile_delete(self):
p1 = self.eng.profile_create(self.ctx, 'p-1', 'TestProfile', {},
perm='1111', tags={'foo': 'bar'})
perm='1111', metadata={'foo': 'bar'})
pid = p1['id']
result = self.eng.profile_delete(self.ctx, pid)
self.assertIsNone(result)

View File

@ -121,7 +121,7 @@ class EngineRpcAPITestCase(base.SenlinTestCase):
'type': mock.ANY,
'spec': mock.ANY,
'perm': mock.ANY,
'tags': mock.ANY,
'metadata': mock.ANY,
}
self._test_engine_api('profile_create', 'call', **default_args)
@ -134,7 +134,7 @@ class EngineRpcAPITestCase(base.SenlinTestCase):
'name': mock.ANY,
'spec': mock.ANY,
'permission': mock.ANY,
'tags': mock.ANY,
'metadata': mock.ANY,
}
self._test_engine_api('profile_update', 'call', **default_args)
@ -211,7 +211,7 @@ class EngineRpcAPITestCase(base.SenlinTestCase):
'min_size': 0,
'max_size': 0,
'parent': None,
'tags': None,
'metadata': None,
'timeout': None
}
@ -249,7 +249,7 @@ class EngineRpcAPITestCase(base.SenlinTestCase):
'min_size': 0,
'max_size': 0,
'parent': 'another-cluster',
'tags': {'key': 'value'},
'metadata': {'key': 'value'},
'timeout': 120
}
self._test_engine_api('cluster_update', 'call', **kwargs)
@ -279,7 +279,7 @@ class EngineRpcAPITestCase(base.SenlinTestCase):
'profile_id': 'aaaa-bbbb-cccc',
'cluster_id': 'xxxx-yyyy-zzzz',
'role': None,
'tags': None
'metadata': None
}
self._test_engine_api('node_create', 'call', **kwargs)
@ -302,7 +302,7 @@ class EngineRpcAPITestCase(base.SenlinTestCase):
'name': 'new-name',
'profile_id': 'new_profile',
'role': 'master',
'tags': {'key': 'value'}
'metadata': {'key': 'value'}
}
self._test_engine_api('node_update', 'call', **kwargs)