Provide unified _show_resource() for senlin resources
Adds the base class for senlin resources, and override the method _show_resource() in the base class, all senlin resources can use it. Change-Id: If900aa5ff60e1c79ce5e3c1edaa9d15f177751b1 Blueprint: refactor-show-resource
This commit is contained in:
parent
1fb9d72333
commit
10ddb8962a
@ -19,12 +19,12 @@ 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
|
||||
from heat.engine.resources.openstack.senlin import res_base
|
||||
from heat.engine import support
|
||||
from heat.engine import translation
|
||||
|
||||
|
||||
class Cluster(resource.Resource):
|
||||
class Cluster(res_base.BaseSenlinResource):
|
||||
"""A resource that creates a Senlin Cluster.
|
||||
|
||||
Cluster resource in senlin can create and manage objects of
|
||||
@ -32,9 +32,7 @@ class Cluster(resource.Resource):
|
||||
The collection of these objects is referred to as a cluster.
|
||||
"""
|
||||
|
||||
support_status = support.SupportStatus(version='6.0.0')
|
||||
|
||||
default_client_name = 'senlin'
|
||||
entity = 'cluster'
|
||||
|
||||
PROPERTIES = (
|
||||
NAME, PROFILE, DESIRED_CAPACITY, MIN_SIZE, MAX_SIZE,
|
||||
@ -370,18 +368,8 @@ class Cluster(resource.Resource):
|
||||
}
|
||||
raise exception.StackValidationFailed(message=msg)
|
||||
|
||||
def _resolve_attribute(self, name):
|
||||
if self.resource_id is None:
|
||||
return
|
||||
|
||||
if name == self.ATTR_POLICIES:
|
||||
return self.client().cluster_policies(self.resource_id)
|
||||
cluster = self.client().get_cluster(self.resource_id)
|
||||
return getattr(cluster, name, None)
|
||||
|
||||
def _show_resource(self):
|
||||
cluster = self.client().get_cluster(self.resource_id)
|
||||
cluster_dict = cluster.to_dict()
|
||||
cluster_dict = super(Cluster, self)._show_resource()
|
||||
cluster_dict[self.ATTR_POLICIES] = self.client().cluster_policies(
|
||||
self.resource_id)
|
||||
return cluster_dict
|
||||
|
@ -17,21 +17,19 @@ 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
|
||||
from heat.engine.resources.openstack.senlin import res_base
|
||||
from heat.engine import support
|
||||
from heat.engine import translation
|
||||
|
||||
|
||||
class Node(resource.Resource):
|
||||
class Node(res_base.BaseSenlinResource):
|
||||
"""A resource that creates a Senlin Node.
|
||||
|
||||
Node is an object that belongs to at most one Cluster, it can be created
|
||||
based on a profile.
|
||||
"""
|
||||
|
||||
support_status = support.SupportStatus(version='6.0.0')
|
||||
|
||||
default_client_name = 'senlin'
|
||||
entity = 'node'
|
||||
|
||||
PROPERTIES = (
|
||||
NAME, METADATA, PROFILE, CLUSTER
|
||||
@ -145,10 +143,6 @@ class Node(resource.Resource):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _show_resource(self):
|
||||
node = self.client().get_node(self.resource_id)
|
||||
return node.to_dict()
|
||||
|
||||
def handle_update(self, json_snippet, tmpl_diff, prop_diff):
|
||||
actions = []
|
||||
if prop_diff:
|
||||
|
@ -18,21 +18,18 @@ from heat.common import exception
|
||||
from heat.common.i18n import _
|
||||
from heat.engine import constraints
|
||||
from heat.engine import properties
|
||||
from heat.engine import resource
|
||||
from heat.engine import support
|
||||
from heat.engine.resources.openstack.senlin import res_base
|
||||
from heat.engine import translation
|
||||
|
||||
|
||||
class Policy(resource.Resource):
|
||||
class Policy(res_base.BaseSenlinResource):
|
||||
"""A resource that creates a Senlin Policy.
|
||||
|
||||
A policy is a set of rules that can be checked and/or enforced when
|
||||
an action is performed on a Cluster.
|
||||
"""
|
||||
|
||||
support_status = support.SupportStatus(version='6.0.0')
|
||||
|
||||
default_client_name = 'senlin'
|
||||
entity = 'policy'
|
||||
|
||||
PROPERTIES = (
|
||||
NAME, TYPE, POLICY_PROPS, BINDINGS,
|
||||
@ -209,10 +206,6 @@ class Policy(resource.Resource):
|
||||
ret = self.check_action_done(actions['add'])
|
||||
return ret
|
||||
|
||||
def _show_resource(self):
|
||||
policy = self.client().get_policy(self.resource_id)
|
||||
return policy.to_dict()
|
||||
|
||||
|
||||
def resource_mapping():
|
||||
return {
|
||||
|
@ -16,20 +16,17 @@
|
||||
from heat.common.i18n import _
|
||||
from heat.engine import constraints
|
||||
from heat.engine import properties
|
||||
from heat.engine import resource
|
||||
from heat.engine import support
|
||||
from heat.engine.resources.openstack.senlin import res_base
|
||||
|
||||
|
||||
class Profile(resource.Resource):
|
||||
class Profile(res_base.BaseSenlinResource):
|
||||
"""A resource that creates a Senlin Profile.
|
||||
|
||||
Profile resource in senlin is a template describing how to create nodes in
|
||||
cluster.
|
||||
"""
|
||||
|
||||
support_status = support.SupportStatus(version='6.0.0')
|
||||
|
||||
default_client_name = 'senlin'
|
||||
entity = 'profile'
|
||||
|
||||
PROPERTIES = (
|
||||
NAME, TYPE, METADATA, PROFILE_PROPERTIES,
|
||||
@ -86,10 +83,6 @@ class Profile(resource.Resource):
|
||||
profile_obj = self.client().get_profile(self.resource_id)
|
||||
self.client().update_profile(profile_obj, **prop_diff)
|
||||
|
||||
def _show_resource(self):
|
||||
profile = self.client().get_profile(self.resource_id)
|
||||
return profile.to_dict()
|
||||
|
||||
|
||||
def resource_mapping():
|
||||
return {
|
||||
|
@ -15,20 +15,17 @@ 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
|
||||
from heat.engine import support
|
||||
from heat.engine.resources.openstack.senlin import res_base
|
||||
|
||||
|
||||
class Receiver(resource.Resource):
|
||||
class Receiver(res_base.BaseSenlinResource):
|
||||
"""A resource that creates Senlin Receiver.
|
||||
|
||||
Receiver is an abstract resource created at the senlin engine
|
||||
that can be used to hook the engine to some external event/alarm sources.
|
||||
"""
|
||||
|
||||
support_status = support.SupportStatus(version='6.0.0')
|
||||
|
||||
default_client_name = 'senlin'
|
||||
entity = 'receiver'
|
||||
|
||||
PROPERTIES = (
|
||||
CLUSTER, ACTION, NAME, TYPE, PARAMS,
|
||||
@ -116,16 +113,6 @@ class Receiver(resource.Resource):
|
||||
with self.client_plugin().ignore_not_found:
|
||||
self.client().delete_receiver(self.resource_id)
|
||||
|
||||
def _show_resource(self):
|
||||
recv = self.client().get_receiver(self.resource_id)
|
||||
return recv.to_dict()
|
||||
|
||||
def _resolve_attribute(self, name):
|
||||
if self.resource_id is None:
|
||||
return
|
||||
recv = self.client().get_receiver(self.resource_id)
|
||||
return getattr(recv, name, None)
|
||||
|
||||
|
||||
def resource_mapping():
|
||||
return {
|
||||
|
44
heat/engine/resources/openstack/senlin/res_base.py
Normal file
44
heat/engine/resources/openstack/senlin/res_base.py
Normal file
@ -0,0 +1,44 @@
|
||||
# Copyright 2015 IBM Corp.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslo_log import log as logging
|
||||
|
||||
from heat.common.i18n import _LW
|
||||
from heat.engine import resource
|
||||
from heat.engine import support
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BaseSenlinResource(resource.Resource):
|
||||
"""A base class for Senlin resources."""
|
||||
|
||||
support_status = support.SupportStatus(version='6.0.0')
|
||||
|
||||
default_client_name = 'senlin'
|
||||
|
||||
def _show_resource(self):
|
||||
method_name = 'get_' + self.entity
|
||||
try:
|
||||
client_method = getattr(self.client(), method_name)
|
||||
res_info = client_method(self.resource_id)
|
||||
return res_info.to_dict()
|
||||
except AttributeError as ex:
|
||||
LOG.warning(_LW("No method to get the resource: %s"), ex)
|
||||
|
||||
def _resolve_attribute(self, name):
|
||||
if self.resource_id is None:
|
||||
return
|
||||
res_info = self._show_resource()
|
||||
return res_info.get(name)
|
Loading…
Reference in New Issue
Block a user