Switch to use SDK calls in client

This patch revises more calls from client side to use SDK interface.

Change-Id: I3ec4c3e7315f204d4eb6022bed63abd6b28e8157
This commit is contained in:
tengqm 2016-01-04 01:19:26 -05:00
parent 6bcf949e5b
commit d14f733765
4 changed files with 562 additions and 668 deletions

View File

@ -291,7 +291,7 @@ class SenlinShell(object):
if profile:
osprofiler_profiler.init(options.profile)
args.func(sc, args)
args.func(sc.service, args)
if profile:
trace_id = osprofiler_profiler.get().get_base_id()

File diff suppressed because it is too large Load Diff

View File

@ -10,267 +10,153 @@
# License for the specific language governing permissions and limitations
# under the License.
import inspect
from openstack.identity import identity_service
from senlinclient.common import exc as client_exc
from senlinclient.common import sdk
from senlinclient.v1 import models
class Client(object):
def __init__(self, preferences=None, user_agent=None, **kwargs):
self.conn = sdk.create_connection(preferences, user_agent, **kwargs)
# TODO(Qiming): delete this
self.session = self.conn.session
self.service = self.conn.cluster
######################################################################
# The following operations are interfaces exposed to other software
# which invokes senlinclient today.
# These methods form a temporary translation layer. This layer will be
# useless when OpenStackSDK has adopted all senlin resources.
# useless when OpenStackSDK has been adopted all senlin resources.
######################################################################
def get_profile_type(self, profile_type):
return self.conn.cluster.get_profile_type(profile_type)
return self.service.get_profile_type(profile_type)
def profiles(self, **query):
return self.conn.cluster.profiles(**query)
return self.service.profiles(**query)
def create_profile(self, **attrs):
return self.conn.cluster.create_profile(**attrs)
return self.service.create_profile(**attrs)
def get_profile(self, profile):
return self.conn.cluster.get_profile(profile)
return self.service.get_profile(profile)
def update_profile(self, profile, **attrs):
return self.conn.cluster.update_profile(profile, **attrs)
return self.service.update_profile(profile, **attrs)
def delete_profile(self, profile, ignore_missing=True):
return self.conn.cluster.delete_profile(profile,
ignore_missing=ignore_missing)
return self.service.delete_profile(profile, ignore_missing)
def policy_types(self, **query):
return self.conn.cluster.policy_types(**query)
return self.service.policy_types(**query)
def get_policy_type(self, policy_type):
return self.conn.cluster.get_policy_type(policy_type)
return self.service.get_policy_type(policy_type)
def policies(self, **query):
return self.conn.cluster.policies(**query)
return self.service.policies(**query)
def create_policy(self, **attrs):
return self.conn.cluster.create_policy(**attrs)
return self.service.create_policy(**attrs)
def get_policy(self, policy):
return self.conn.cluster.get_policy(policy)
return self.service.get_policy(policy)
def update_policy(self, policy, **attrs):
return self.conn.cluster.update_policy(policy, **attrs)
return self.service.update_policy(policy, **attrs)
def delete_policy(self, policy, ignore_missing=True):
return self.conn.cluster.delete_policy(policy,
ignore_missing=ignore_missing)
return self.service.delete_policy(policy, ignore_missing)
def clusters(self, **queries):
return self.conn.cluster.clusters(**queries)
return self.service.clusters(**queries)
def create_cluster(self, **attrs):
return self.conn.cluster.create_cluster(**attrs)
return self.service.create_cluster(**attrs)
def get_cluster(self, value):
return self.conn.cluster.get_cluster(value)
def get_cluster(self, cluster):
return self.service.get_cluster(cluster)
def update_cluster(self, value, **attrs):
return self.conn.cluster.update_cluster(value, **attrs)
def update_cluster(self, cluster, **attrs):
return self.service.update_cluster(cluster, **attrs)
def delete_cluster(self, value, ignore_missing=True):
return self.conn.cluster.delete_cluster(value,
ignore_missing=ignore_missing)
def delete_cluster(self, cluster, ignore_missing=True):
return self.service.delete_cluster(cluster, ignore_missing)
def cluster_add_nodes(self, cluster, nodes):
return self.conn.cluster.cluster_add_nodes(cluster, nodes)
return self.service.cluster_add_nodes(cluster, nodes)
def cluster_del_nodes(self, cluster, nodes):
return self.conn.cluster.cluster_del_nodes(cluster, nodes)
return self.service.cluster_del_nodes(cluster, nodes)
def cluster_resize(self, cluster, **params):
return self.conn.cluster.cluster_resize(cluster, **params)
return self.service.cluster_resize(cluster, **params)
def cluster_scale_out(self, cluster, count):
return self.conn.cluster.cluster_scale_out(cluster, count)
return self.service.cluster_scale_out(cluster, count)
def cluster_scale_in(self, cluster, count):
return self.conn.cluster.cluster_scale_in(cluster, count)
return self.service.cluster_scale_in(cluster, count)
def cluster_policies(self, value, **queries):
return self.list(models.ClusterPolicy, path_args={'cluster_id': value},
**queries)
def cluster_policies(self, cluster, **queries):
return self.service_policies(cluster, **queries)
def get_cluster_policy(self, value):
return self.get(models.ClusterPolicy, value)
def get_cluster_policy(self, policy, cluster):
return self.conn.get_cluster_policy(policy, cluster)
def cluster_attach_policy(self, cluster, policy, **attrs):
return self.conn.cluster.cluster_attach_policy(cluster, policy,
**attrs)
return self.service.cluster_attach_policy(cluster, policy, **attrs)
def cluster_detach_policy(self, cluster, policy):
return self.conn.cluster.cluster_detach_policy(cluster, policy)
return self.service.cluster_detach_policy(cluster, policy)
def cluster_update_policy(self, cluster, policy, **attrs):
return self.conn.cluster.cluster_update_policy(cluster, policy,
**attrs)
return self.service.cluster_update_policy(cluster, policy, **attrs)
def cluster_enable_policy(self, cluster, policy):
return self.conn.cluster.cluster_enable_policy(cluster, policy)
return self.service.cluster_enable_policy(cluster, policy)
def cluster_disable_policy(self, cluster, policy):
return self.conn.cluster.cluster_disable_policy(cluster, policy)
return self.service.cluster_disable_policy(cluster, policy)
def nodes(self, **queries):
return self.list(models.Node, **queries)
return self.service.nodes(**queries)
def create_node(self, **attrs):
return self.create(models.Node, attrs)
return self.service.create_node(**attrs)
def get_node(self, value, show_details=False):
return self.get_with_args(models.Node,
dict(id=value, show_details=show_details))
def get_node(self, node, show_details=False):
return self.service.get_node(node)
def update_node(self, value, **attrs):
attrs['id'] = value
return self.update(models.Node, attrs)
def update_node(self, node, **attrs):
return self.service.update_node(node, **attrs)
def delete_node(self, value, ignore_missing=True):
return self.delete(models.Node,
dict(id=value, ignore_missing=ignore_missing))
def delete_node(self, node, ignore_missing=True):
return self.service.delete_node(node, ignore_missing)
def node_join(self, value, cluster):
params = {
'id': value,
'action': 'join',
'action_args': {
'cluster_id': cluster,
}
}
return self.action(models.Node, params)
def node_join(self, node, cluster):
return self.service.node_join(node, cluster)
def node_leave(self, value):
params = {
'id': value,
'action': 'leave',
}
return self.action(models.Node, params)
def node_leave(self, node):
return self.service.node_leave(node)
def receivers(self, **queries):
return self.list(models.Receiver, **queries)
return self.service.receivers(**queries)
def create_receiver(self, **attrs):
return self.create(models.Receiver, attrs)
return self.service.create_receiver(**attrs)
def get_receiver(self, value):
return self.get(models.Receiver, dict(id=value))
def get_receiver(self, receiver):
return self.service.get_receiver(receiver)
def delete_receiver(self, value, ignore_missing=True):
return self.delete(models.Receiver,
dict(id=value, ignore_missing=ignore_missing))
def delete_receiver(self, receiver, ignore_missing=True):
return self.service.delete_receiver(receiver, ignore_missing)
def events(self, **queries):
return self.list(models.Event, **queries)
return self.service.events(**queries)
def get_event(self, value):
return self.get(models.Event, dict(id=value))
def get_event(self, event):
return self.service.get_event(event)
def actions(self, **queries):
return self.list(models.Action, **queries)
return self.service.actions(**queries)
def get_action(self, value):
return self.get(models.Action, dict(id=value))
######################################################################
# The operations below should go away when Senlin resources are all
# adopted into OpenStack SDK.
######################################################################
def session(self, cls_name):
if cls_name is None:
raise Exception("A cls name argument must be specified")
filtration = identity_service.IdentityService()
return self.session.get(cls_name, service=filtration).text
def list(self, cls, path_args=None, **options):
try:
return cls.list(self.session, path_args=path_args, params=options)
except Exception as ex:
client_exc.parse_exception(ex)
def create(self, cls, params, extra_attrs=False):
obj = cls.new(**params)
try:
return obj.create(self.session, extra_attrs=extra_attrs)
except Exception as ex:
client_exc.parse_exception(ex)
def get_with_args(self, cls, options=None):
if options is None:
options = {}
try:
obj = cls.new(**options)
return obj.get_with_args(self.session, options)
except Exception as ex:
client_exc.parse_exception(ex)
def get(self, cls, options=None):
if options is None:
options = {}
try:
obj = cls.new(**options)
return obj.get(self.session)
except Exception as ex:
client_exc.parse_exception(ex)
def find(self, cls, options):
return cls.find(self.session, options)
def update(self, cls, options):
obj = cls.new(**options)
try:
obj.update(self.session)
except Exception as ex:
client_exc.parse_exception(ex)
def delete(self, cls, options):
obj = cls.new(**options)
try:
obj.delete(self.session)
except Exception as ex:
client_exc.parse_exception(ex)
def action(self, cls, options):
def filter_args(method, params):
expected_args = inspect.getargspec(method).args
accepted_args = ([a for a in expected_args and params
if a != 'self'])
filtered_args = dict((d, params[d]) for d in accepted_args)
return filtered_args
def invoke_method(target, method_name, params):
action = getattr(target, method_name)
filtered_args = filter_args(action, params)
reply = action(**filtered_args)
return reply
action = options.pop('action')
if 'action_args' in options:
args = options.pop('action_args')
else:
args = {}
args.update(session=self.session)
obj = cls.new(**options)
try:
return invoke_method(obj, action, args)
except Exception as ex:
client_exc.parse_exception(ex)
def get_action(self, action):
return self.service.get_action(action)

View File

@ -19,13 +19,13 @@ from senlinclient.common import utils
logger = logging.getLogger(__name__)
def do_build_info(sc, args=None):
def do_build_info(service, args=None):
"""Retrieve build information.
:param sc: Instance of senlinclient.
:param args: Additional command line arguments, if any.
"""
result = sc.conn.cluster.get_build_info()
result = service.get_build_info()
formatters = {
'api': utils.json_formatter,
@ -37,13 +37,13 @@ def do_build_info(sc, args=None):
# PROFILE TYPES
def do_profile_type_list(sc, args=None):
def do_profile_type_list(service, args=None):
"""List the available profile types.
:param sc: Instance of senlinclient.
:param args: Additional command line arguments, if any.
"""
types = sc.conn.cluster.profile_types()
types = service.profile_types()
utils.print_list(types, ['name'], sortby_index=0)
@ -53,10 +53,10 @@ def do_profile_type_list(sc, args=None):
choices=utils.supported_formats.keys(),
help=_("The template output format, one of: %s.")
% ', '.join(utils.supported_formats.keys()))
def do_profile_type_show(sc, args):
def do_profile_type_show(service, args):
"""Get the details about a profile type."""
try:
res = sc.conn.cluster.get_profile_type(args.type_name)
res = service.get_profile_type(args.type_name)
except exc.HTTPNotFound:
raise exc.CommandError(
_('Profile Type %s not found.') % args.type_name)
@ -78,7 +78,7 @@ def do_profile_type_show(sc, args):
help=_('Only return profiles that appear after the given ID.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
def do_profile_list(sc, args=None):
def do_profile_list(service, args=None):
"""List profiles that meet the criteria."""
fields = ['id', 'name', 'type', 'created_at']
queries = {
@ -86,7 +86,7 @@ def do_profile_list(sc, args=None):
'marker': args.marker,
}
profiles = sc.conn.cluster.profiles(**queries)
profiles = service.profiles(**queries)
formatters = {}
if not args.full_id:
formatters = {
@ -95,9 +95,9 @@ def do_profile_list(sc, args=None):
utils.print_list(profiles, fields, formatters=formatters, sortby_index=1)
def _show_profile(sc, profile_id):
def _show_profile(service, profile_id):
try:
profile = sc.conn.cluster.get_profile(profile_id)
profile = service.get_profile(profile_id)
except exc.HTTPNotFound:
raise exc.CommandError(_('Profile not found: %s') % profile_id)
@ -123,7 +123,7 @@ def _show_profile(sc, profile_id):
action='append')
@utils.arg('name', metavar='<PROFILE_NAME>',
help=_('Name of the profile to create.'))
def do_profile_create(sc, args):
def do_profile_create(service, args):
"""Create a profile."""
spec = utils.get_spec_content(args.spec_file)
type_name = spec.get('type', None)
@ -147,15 +147,15 @@ def do_profile_create(sc, args):
'metadata': utils.format_parameters(args.metadata),
}
profile = sc.conn.cluster.create_profile(**params)
_show_profile(sc, profile.id)
profile = service.create_profile(**params)
_show_profile(service, profile.id)
@utils.arg('id', metavar='<PROFILE>',
help=_('Name or ID of profile to show.'))
def do_profile_show(sc, args):
def do_profile_show(service, args):
"""Show the profile details."""
_show_profile(sc, args.id)
_show_profile(service, args.id)
@utils.arg('-n', '--name', metavar='<NAME>',
@ -169,7 +169,7 @@ def do_profile_show(sc, args):
action='append')
@utils.arg('id', metavar='<PROFILE_ID>',
help=_('Name or ID of the profile to update.'))
def do_profile_update(sc, args):
def do_profile_update(service, args):
"""Update a profile."""
params = {
'name': args.name,
@ -180,22 +180,22 @@ def do_profile_update(sc, args):
# Find the profile first, we need its id
try:
profile = sc.conn.cluster.get_profile(args.id)
profile = service.get_profile(args.id)
except exc.HTTPNotFound:
raise exc.CommandError(_('Profile not found: %s') % args.id)
sc.conn.cluster.update_profile(profile.id, **params)
_show_profile(sc, profile.id)
service.update_profile(profile.id, **params)
_show_profile(service, profile.id)
@utils.arg('id', metavar='<PROFILE>', nargs='+',
help=_('Name or ID of profile(s) to delete.'))
def do_profile_delete(sc, args):
def do_profile_delete(service, args):
"""Delete profile(s)."""
failure_count = 0
for pid in args.id:
try:
sc.conn.cluster.delete_profile(pid)
service.delete_profile(pid)
except Exception as ex:
failure_count += 1
print(ex)
@ -208,9 +208,9 @@ def do_profile_delete(sc, args):
# POLICY TYPES
def do_policy_type_list(sc, args):
def do_policy_type_list(service, args):
"""List the available policy types."""
types = sc.conn.cluster.policy_types()
types = service.policy_types()
utils.print_list(types, ['name'], sortby_index=0)
@ -220,10 +220,10 @@ def do_policy_type_list(sc, args):
choices=utils.supported_formats.keys(),
help=_("The template output format, one of: %s.")
% ', '.join(utils.supported_formats.keys()))
def do_policy_type_show(sc, args):
def do_policy_type_show(service, args):
"""Get the details about a policy type."""
try:
res = sc.conn.cluster.get_policy_type(args.type_name)
res = service.get_policy_type(args.type_name)
except exc.HTTPNotFound:
raise exc.CommandError(
_('Policy type %s not found.') % args.type_name)
@ -244,7 +244,7 @@ def do_policy_type_show(sc, args):
help=_('Only return policies that appear after the given ID.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
def do_policy_list(sc, args=None):
def do_policy_list(service, args=None):
"""List policies that meet the criteria."""
fields = ['id', 'name', 'type', 'level', 'cooldown', 'created_at']
queries = {
@ -252,7 +252,7 @@ def do_policy_list(sc, args=None):
'marker': args.marker,
}
policies = sc.conn.cluster.policies(**queries)
policies = service.policies(**queries)
formatters = {}
if not args.full_id:
formatters = {
@ -261,9 +261,9 @@ def do_policy_list(sc, args=None):
utils.print_list(policies, fields, formatters=formatters, sortby_index=1)
def _show_policy(sc, policy_id):
def _show_policy(service, policy_id):
try:
policy = sc.conn.cluster.get_policy(policy_id)
policy = service.get_policy(policy_id)
except exc.HTTPNotFound:
raise exc.CommandError(_('Policy not found: %s') % policy_id)
@ -284,7 +284,7 @@ def _show_policy(sc, policy_id):
'level. Default to 0.'))
@utils.arg('name', metavar='<NAME>',
help=_('Name of the policy to create.'))
def do_policy_create(sc, args):
def do_policy_create(service, args):
"""Create a policy."""
spec = utils.get_spec_content(args.spec_file)
attrs = {
@ -294,15 +294,15 @@ def do_policy_create(sc, args):
'level': args.enforcement_level,
}
policy = sc.conn.cluster.create_policy(**attrs)
_show_policy(sc, policy.id)
policy = service.create_policy(**attrs)
_show_policy(service, policy.id)
@utils.arg('id', metavar='<POLICY>',
help=_('Name of the policy to be updated.'))
def do_policy_show(sc, args):
def do_policy_show(service, args):
"""Show the policy details."""
_show_policy(sc, policy_id=args.id)
_show_policy(service, policy_id=args.id)
@utils.arg('-c', '--cooldown', metavar='<SECONDS>',
@ -315,7 +315,7 @@ def do_policy_show(sc, args):
help=_('New name of the policy to be updated.'))
@utils.arg('id', metavar='<POLICY>',
help=_('Name of the policy to be updated.'))
def do_policy_update(sc, args):
def do_policy_update(service, args):
"""Update a policy."""
params = {
'name': args.name,
@ -323,22 +323,22 @@ def do_policy_update(sc, args):
'level': args.enforcement_level,
}
policy = sc.conn.cluster.get_policy(args.id)
policy = service.get_policy(args.id)
if policy is not None:
params['id'] = policy.id
sc.conn.cluster.update_policy(policy.id, params)
_show_policy(sc, policy_id=policy.id)
service.update_policy(policy.id, params)
_show_policy(service, policy_id=policy.id)
@utils.arg('id', metavar='<POLICY>', nargs='+',
help=_('Name or ID of policy(s) to delete.'))
def do_policy_delete(sc, args):
def do_policy_delete(service, args):
"""Delete policy(s)."""
failure_count = 0
for pid in args.id:
try:
sc.conn.cluster.delete_policy(pid)
service.delete_policy(pid)
except exc.HTTPNotFound as ex:
failure_count += 1
print(ex)
@ -373,7 +373,7 @@ def do_policy_delete(sc, args):
'checking. Default is False.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
def do_cluster_list(sc, args=None):
def do_cluster_list(service, args=None):
"""List the user's clusters."""
fields = ['id', 'name', 'status', 'created_at', 'updated_at']
sort_keys = ['name', 'status', 'created_at', 'updated_at']
@ -403,7 +403,7 @@ def do_cluster_list(sc, args=None):
else:
sortby_index = 3
clusters = sc.conn.cluster.clusters(**queries)
clusters = service.clusters(**queries)
formatters = {}
if not args.full_id:
formatters = {
@ -413,9 +413,9 @@ def do_cluster_list(sc, args=None):
sortby_index=sortby_index)
def _show_cluster(sc, cluster_id):
def _show_cluster(service, cluster_id):
try:
cluster = sc.conn.cluster.get_cluster(cluster_id)
cluster = service.get_cluster(cluster_id)
except exc.HTTPNotFound:
raise exc.CommandError(_('Cluster %s is not found') % cluster_id)
@ -446,7 +446,7 @@ def _show_cluster(sc, cluster_id):
action='append')
@utils.arg('name', metavar='<CLUSTER_NAME>',
help=_('Name of the cluster to create.'))
def do_cluster_create(sc, args):
def do_cluster_create(service, args):
"""Create the cluster."""
if args.min_size and not args.desired_capacity:
args.desired_capacity = args.min_size
@ -461,19 +461,19 @@ def do_cluster_create(sc, args):
'timeout': args.timeout
}
cluster = sc.conn.cluster.create_cluster(**attrs)
_show_cluster(sc, cluster.id)
cluster = service.create_cluster(**attrs)
_show_cluster(service, cluster.id)
@utils.arg('id', metavar='<CLUSTER>', nargs='+',
help=_('Name or ID of cluster(s) to delete.'))
def do_cluster_delete(sc, args):
def do_cluster_delete(service, args):
"""Delete the cluster(s)."""
failure_count = 0
for cid in args.id:
try:
sc.conn.cluster.delete_cluster(cid)
service.delete_cluster(cid)
except exc.HTTPNotFound as ex:
failure_count += 1
print(ex)
@ -499,9 +499,9 @@ def do_cluster_delete(sc, args):
help=_('New name for the cluster to update.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to be updated.'))
def do_cluster_update(sc, args):
def do_cluster_update(service, args):
"""Update the cluster."""
cluster = sc.conn.cluster.get_cluster(args.id)
cluster = service.get_cluster(args.id)
attrs = {
'name': args.name,
'profile_id': args.profile,
@ -510,15 +510,15 @@ def do_cluster_update(sc, args):
'timeout': args.timeout,
}
sc.conn.cluster.update_cluster(cluster.id, **attrs)
_show_cluster(sc, cluster.id)
service.update_cluster(cluster.id, **attrs)
_show_cluster(service, cluster.id)
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to show.'))
def do_cluster_show(sc, args):
def do_cluster_show(service, args):
"""Show details of the cluster."""
_show_cluster(sc, args.id)
_show_cluster(service, args.id)
@utils.arg('-f', '--filters', metavar='<KEY1=VALUE1;KEY2=VALUE2...>',
@ -534,7 +534,7 @@ def do_cluster_show(sc, args):
help=_('Print full IDs in list.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to nodes from.'))
def do_cluster_node_list(sc, args):
def do_cluster_node_list(service, args):
"""List nodes from cluster."""
queries = {
@ -546,7 +546,7 @@ def do_cluster_node_list(sc, args):
queries.update(utils.format_parameters(args.filters))
try:
nodes = sc.nodes(**queries)
nodes = service.nodes(**queries)
except exc.HTTPNotFound:
msg = _('No node matching criteria is found')
raise exc.CommandError(msg)
@ -568,10 +568,10 @@ def do_cluster_node_list(sc, args):
'with ","'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_node_add(sc, args):
def do_cluster_node_add(service, args):
"""Add specified nodes to cluster."""
node_ids = args.nodes.split(',')
resp = sc.conn.cluster.cluster_add_nodes(args.id, node_ids)
resp = service.cluster_add_nodes(args.id, node_ids)
print('Request accepted by action: %s' % resp['action'])
@ -580,10 +580,10 @@ def do_cluster_node_add(sc, args):
'with ",".'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_node_del(sc, args):
def do_cluster_node_del(service, args):
"""Delete specified nodes from cluster."""
node_ids = args.nodes.split(',')
resp = sc.conn.cluster.cluster_del_nodes(args.id, node_ids)
resp = service.cluster_del_nodes(args.id, node_ids)
print('Request accepted by action: %s' % resp['action'])
@ -610,7 +610,7 @@ def do_cluster_node_del(sc, args):
'no upper limit on cluster size.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_resize(sc, args):
def do_cluster_resize(service, args):
"""Resize a cluster."""
# validate parameters
# NOTE: this will be much simpler if cliutils supports exclusive groups
@ -677,7 +677,7 @@ def do_cluster_resize(sc, args):
action_args['min_step'] = min_step
action_args['strict'] = args.strict
resp = sc.conn.cluster.cluster_resize(args.id, **action_args)
resp = service.cluster_resize(args.id, **action_args)
print('Request accepted by action: %s' % resp['action'])
@ -685,9 +685,9 @@ def do_cluster_resize(sc, args):
help=_('Number of nodes to be added to the specified cluster.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_scale_out(sc, args):
def do_cluster_scale_out(service, args):
"""Scale out a cluster by the specified number of nodes."""
resp = sc.conn.cluster.cluster_scale_out(args.id, args.count)
resp = service.cluster_scale_out(args.id, args.count)
print('Request accepted by action %s' % resp['action'])
@ -695,9 +695,9 @@ def do_cluster_scale_out(sc, args):
help=_('Number of nodes to be deleted from the specified cluster.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_scale_in(sc, args):
def do_cluster_scale_in(service, args):
"""Scale in a cluster by the specified number of nodes."""
resp = sc.conn.cluster.cluster_scale_in(args.id, args.count)
resp = service.cluster_scale_in(args.id, args.count)
print('Request accepted by action %s' % resp['action'])
@ -714,13 +714,13 @@ def do_cluster_scale_in(sc, args):
help=_('Print full IDs in list.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to query on.'))
def do_cluster_policy_list(sc, args):
def do_cluster_policy_list(service, args):
"""List policies from cluster."""
fields = ['policy_id', 'policy', 'type', 'priority', 'level',
'cooldown', 'enabled']
sort_keys = ['priority', 'level', 'cooldown', 'enabled']
cluster = sc.get_cluster(args.id)
cluster = service.get_cluster(args.id)
queries = {
'sort_keys': args.sort_keys,
'sort_dir': args.sort_dir,
@ -737,7 +737,7 @@ def do_cluster_policy_list(sc, args):
else:
sortby_index = 3
policies = sc.cluster_policies(cluster.id, **queries)
policies = service.cluster_policies(cluster.id, **queries)
formatters = {}
if not args.full_id:
formatters = {
@ -752,13 +752,9 @@ def do_cluster_policy_list(sc, args):
help=_('ID or name of the policy to query on.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('ID or name of the cluster to query on.'))
def do_cluster_policy_show(sc, args):
def do_cluster_policy_show(service, args):
"""Show a specific policy that is bound to the specified cluster."""
queries = {
'cluster_id': args.id,
'policy_id': args.policy
}
binding = sc.get_cluster_policy(queries)
binding = service.get_cluster_policy(args.policy, args.id)
utils.print_dict(binding.to_dict())
@ -779,7 +775,7 @@ def do_cluster_policy_show(sc, args):
'Default to enabled.'))
@utils.arg('id', metavar='<NAME or ID>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_policy_attach(sc, args):
def do_cluster_policy_attach(service, args):
"""Attach policy to cluster."""
kwargs = {
'priority': args.priority,
@ -788,8 +784,7 @@ def do_cluster_policy_attach(sc, args):
'enabled': args.enabled,
}
policy = args.policy
resp = sc.conn.cluster.cluster_attach_policy(args.id, policy, **kwargs)
resp = service.cluster_attach_policy(args.id, args.policy, **kwargs)
print('Request accepted by action: %s' % resp['action'])
@ -797,9 +792,9 @@ def do_cluster_policy_attach(sc, args):
help=_('ID or name of policy to be detached.'))
@utils.arg('id', metavar='<NAME or ID>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_policy_detach(sc, args):
def do_cluster_policy_detach(service, args):
"""Detach policy from cluster."""
resp = sc.conn.cluster.cluster_detach_policy(args.id, args.policy)
resp = service.cluster_detach_policy(args.id, args.policy)
print('Request accepted by action %s' % resp['action'])
@ -817,7 +812,7 @@ def do_cluster_policy_detach(sc, args):
help=_('Whether the policy should be enabled.'))
@utils.arg('id', metavar='<NAME or ID>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_policy_update(sc, args):
def do_cluster_policy_update(service, args):
"""Update a policy's properties on a cluster."""
kwargs = {
'policy_id': args.policy,
@ -827,7 +822,7 @@ def do_cluster_policy_update(sc, args):
'enabled': args.enabled,
}
resp = sc.conn.cluster.cluster_update_policy(args.id, **kwargs)
resp = service.cluster_update_policy(args.id, **kwargs)
print('Request accepted by action: %s' % resp['action'])
@ -835,9 +830,9 @@ def do_cluster_policy_update(sc, args):
help=_('ID or name of policy to be enabled.'))
@utils.arg('id', metavar='<NAME or ID>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_policy_enable(sc, args):
def do_cluster_policy_enable(service, args):
"""Enable a policy on a cluster."""
resp = sc.conn.cluster.cluster_enable_policy(args.id, args.policy)
resp = service.cluster_enable_policy(args.id, args.policy)
print('Request accepted by action: %s' % resp['action'])
@ -845,9 +840,9 @@ def do_cluster_policy_enable(sc, args):
help=_('ID or name of policy to be disabled.'))
@utils.arg('id', metavar='<NAME or ID>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_policy_disable(sc, args):
def do_cluster_policy_disable(service, args):
"""Disable a policy on a cluster."""
resp = sc.conn.cluster.cluster_disable_policy(args.id, args.policy)
resp = service.cluster_disable_policy(args.id, args.policy)
print('Request accepted by action: %s' % resp['action'])
@ -875,7 +870,7 @@ def do_cluster_policy_disable(sc, args):
'checking. Default is False.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
def do_node_list(sc, args):
def do_node_list(service, args):
"""Show list of nodes."""
fields = ['id', 'name', 'status', 'cluster_id', 'physical_id',
@ -902,7 +897,7 @@ def do_node_list(sc, args):
else:
sortby_index = 6
nodes = sc.nodes(**queries)
nodes = service.nodes(**queries)
if not args.full_id:
formatters = {
@ -917,10 +912,12 @@ def do_node_list(sc, args):
sortby_index=sortby_index)
def _show_node(sc, node_id, show_details=False):
def _show_node(service, node_id, show_details=False):
"""Show detailed info about the specified node."""
# TODO(Qiming): Re-enable show_details after SDK adopts related patch.
try:
node = sc.get_node(node_id, show_details)
node = service.get_node(node_id)
except exc.HTTPNotFound:
msg = _('Node %s is not found') % node_id
raise exc.CommandError(msg)
@ -950,7 +947,7 @@ def _show_node(sc, node_id, show_details=False):
action='append')
@utils.arg('name', metavar='<NODE_NAME>',
help=_('Name of the node to create.'))
def do_node_create(sc, args):
def do_node_create(service, args):
"""Create the node."""
attrs = {
'name': args.name,
@ -960,28 +957,28 @@ def do_node_create(sc, args):
'metadata': utils.format_parameters(args.metadata),
}
node = sc.create_node(**attrs)
_show_node(sc, node.id)
node = service.create_node(**attrs)
_show_node(service, node.id)
@utils.arg('-D', '--details', default=False, action="store_true",
help=_('Include physical object details.'))
@utils.arg('id', metavar='<NODE>',
help=_('Name or ID of the node to show the details for.'))
def do_node_show(sc, args):
def do_node_show(service, args):
"""Show detailed info about the specified node."""
_show_node(sc, args.id, args.details)
_show_node(service, args.id, args.details)
@utils.arg('id', metavar='<NODE>', nargs='+',
help=_('Name or ID of node(s) to delete.'))
def do_node_delete(sc, args):
def do_node_delete(service, args):
"""Delete the node(s)."""
failure_count = 0
for nid in args.id:
try:
sc.delete_node(nid)
service.delete_node(nid, True)
except exc.HTTPNotFound:
failure_count += 1
print('Node id "%s" not found' % nid)
@ -1004,11 +1001,11 @@ def do_node_delete(sc, args):
action='append')
@utils.arg('id', metavar='<NODE>',
help=_('Name or ID of node to update.'))
def do_node_update(sc, args):
def do_node_update(service, args):
"""Update the node."""
# Find the node first, we need its UUID
try:
node = sc.get_node(args.id)
node = service.get_node(args.id)
except exc.HTTPNotFound:
raise exc.CommandError(_('Node not found: %s') % args.id)
@ -1019,28 +1016,28 @@ def do_node_update(sc, args):
'metadata': utils.format_parameters(args.metadata),
}
sc.update_node(args.id, **attrs)
_show_node(sc, node.id)
service.update_node(args.id, **attrs)
_show_node(service, node.id)
@utils.arg('-c', '--cluster', required=True,
help=_('ID or name of cluster for node to join.'))
@utils.arg('id', metavar='<NODE>',
help=_('Name or ID of node to operate on.'))
def do_node_join(sc, args):
def do_node_join(service, args):
"""Make node join the specified cluster."""
resp = sc.node_join(args.id, args.cluster)
resp = service.node_join(args.id, args.cluster)
print('Request accepted by action: %s' % resp['action'])
_show_node(sc, args.id)
_show_node(service, args.id)
@utils.arg('id', metavar='<NODE>',
help=_('Name or ID of node to operate on.'))
def do_node_leave(sc, args):
def do_node_leave(service, args):
"""Make node leave its current cluster."""
resp = sc.node_leave(args.id)
resp = service.node_leave(args.id)
print('Request accepted by action: %s' % resp['action'])
_show_node(sc, args.id)
_show_node(service, args.id)
# RECEIVERS
@ -1065,7 +1062,7 @@ def do_node_leave(sc, args):
'checking. Default is False.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
def do_receiver_list(sc, args=None):
def do_receiver_list(service, args=None):
"""List receivers that meet the criteria."""
fields = ['id', 'name', 'type', 'cluster_id', 'action', 'created_at']
sort_keys = ['name', 'type', 'cluster_id', 'created_at']
@ -1088,7 +1085,7 @@ def do_receiver_list(sc, args=None):
else:
sortby_index = 0
receivers = sc.receivers(**queries)
receivers = service.receivers(**queries)
formatters = {}
if not args.full_id:
formatters = {
@ -1099,9 +1096,9 @@ def do_receiver_list(sc, args=None):
sortby_index=sortby_index)
def _show_receiver(sc, receiver_id):
def _show_receiver(service, receiver_id):
try:
receiver = sc.get_receiver(receiver_id)
receiver = service.get_receiver(receiver_id)
except exc.HTTPNotFound:
raise exc.CommandError(_('Receiver not found: %s') % receiver_id)
@ -1116,9 +1113,9 @@ def _show_receiver(sc, receiver_id):
@utils.arg('id', metavar='<RECEIVER>',
help=_('Name or ID of the receiver to show.'))
def do_receiver_show(sc, args):
def do_receiver_show(service, args):
"""Show the receiver details."""
_show_receiver(sc, receiver_id=args.id)
_show_receiver(service, receiver_id=args.id)
@utils.arg('-t', '--type', metavar='<TYPE>', default='webhook',
@ -1133,7 +1130,7 @@ def do_receiver_show(sc, args):
action='append')
@utils.arg('name', metavar='<NAME>',
help=_('Name of the receiver to create.'))
def do_receiver_create(sc, args):
def do_receiver_create(service, args):
"""Create a receiver."""
params = {
@ -1144,19 +1141,19 @@ def do_receiver_create(sc, args):
'params': utils.format_parameters(args.params)
}
receiver = sc.create_receiver(**params)
_show_receiver(sc, receiver.id)
receiver = service.create_receiver(**params)
_show_receiver(service, receiver.id)
@utils.arg('id', metavar='<RECEIVER>', nargs='+',
help=_('Name or ID of receiver(s) to delete.'))
def do_receiver_delete(sc, args):
def do_receiver_delete(service, args):
"""Delete receiver(s)."""
failure_count = 0
for wid in args.id:
try:
sc.delete_receiver(wid)
service.delete_receiver(wid)
except exc.HTTPNotFound as ex:
failure_count += 1
print(ex)
@ -1188,7 +1185,7 @@ def do_receiver_delete(sc, args):
'for an admin privilege.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
def do_event_list(sc, args):
def do_event_list(service, args):
"""List events."""
fields = ['id', 'timestamp', 'obj_type', 'obj_id', 'obj_name', 'action',
@ -1219,17 +1216,17 @@ def do_event_list(sc, args):
formatters['id'] = lambda x: x.id[:8]
formatters['obj_id'] = lambda x: x.obj_id[:8] if x.obj_id else ''
events = sc.events(**queries)
events = service.events(**queries)
utils.print_list(events, fields, formatters=formatters,
sortby_index=sortby_index)
@utils.arg('id', metavar='<EVENT>',
help=_('ID of event to display details for.'))
def do_event_show(sc, args):
def do_event_show(service, args):
"""Describe the event."""
try:
event = sc.get_event(args.id)
event = service.get_event(args.id)
except exc.HTTPNotFound as ex:
raise exc.CommandError(str(ex))
@ -1254,7 +1251,7 @@ def do_event_show(sc, args):
help=_('Only return actions that appear after the given node ID.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
def do_action_list(sc, args):
def do_action_list(service, args):
"""List actions."""
fields = ['id', 'name', 'action', 'status', 'target', 'depends_on',
@ -1279,7 +1276,7 @@ def do_action_list(sc, args):
else:
sortby_index = 0
actions = sc.actions(**queries)
actions = service.actions(**queries)
formatters = {}
if args.full_id:
@ -1302,10 +1299,10 @@ def do_action_list(sc, args):
@utils.arg('id', metavar='<ACTION>',
help=_('Name or ID of the action to show the details for.'))
def do_action_show(sc, args):
def do_action_show(service, args):
"""Show detailed info about the specified action."""
try:
action = sc.get_action(args.id)
action = service.get_action(args.id)
except exc.HTTPNotFound:
msg = _('Action %(id)s is not found') % {'id': args.id}
raise exc.CommandError(msg)