Cluster policy listing support

This commit is contained in:
tengqm 2015-02-11 23:43:21 +08:00
parent a8ec309453
commit 77022d6512
2 changed files with 206 additions and 46 deletions
senlinclient/v1

@ -193,7 +193,6 @@ class Policy(resource.Resource):
return pb_dict
class Cluster(resource.Resource):
resource_key = 'cluster'
resources_key = 'clusters'
@ -251,6 +250,62 @@ class Cluster(resource.Resource):
}
return self.action(session, body)
def attach_policy(self, session, policy_id, priority, level, enabled,
cooldown):
body = {
'attach_policy': {
'policy_id': policy_id,
'priority': priority,
'level': level,
'enabled': enabled,
'cooldown': cooldown,
}
}
return self.action(session, body)
def detach_policy(self, session, policy_id):
body = {
'detach_policy': {
'policy_id': policy_id,
}
}
return self.action(session, body)
def enable_policy(self, session, policy_id, priority, level, cooldown):
body = {
'attach_policy': {
'policy_id': policy_id,
'priority': priority,
'level': level,
'cooldown': cooldown,
}
}
return self.action(session, body)
def disable_policy(self, session, policy_id):
body = {
'disable_policy': {
'policy_id': policy_id,
}
}
return self.action(session, body)
def scale_out(self, session, count):
body = {
'scale_out': {
'count': count,
}
}
return self.action(session, body)
def scale_in(self, session, count):
body = {
'scale_in': {
'count': count,
}
}
return self.action(session, body)
def to_dict(self):
info = {
'id': self.id,
@ -276,7 +331,8 @@ class Cluster(resource.Resource):
class ClusterPolicy(resource.Resource):
resources_key = 'policies'
resource_key = 'cluster_policy'
resources_key = 'cluster_policies'
base_path = '/clusters/%(cluster_id)s/policies'
service = clustering_service.ClusteringService()

@ -156,7 +156,7 @@ def do_profile_create(sc, args):
_show_profile(sc, profile.id)
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('id', metavar='<PROFILE>',
help=_('Name or ID of profile to show.'))
def do_profile_show(sc, args):
'''Show the profile details.'''
@ -165,7 +165,7 @@ def do_profile_show(sc, args):
@utils.arg('-f', '--force', default=False, action="store_true",
help=_('Delete the profile completely from database.'))
@utils.arg('id', metavar='<NAME or ID>', nargs='+',
@utils.arg('id', metavar='<PROFILE>', nargs='+',
help=_('Name or ID of profile(s) to delete.'))
def do_profile_delete(sc, args):
'''Delete profile(s).'''
@ -303,7 +303,7 @@ def do_policy_create(sc, args):
_show_policy(sc, policy.id)
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('id', metavar='<POLICY>',
help=_('Name or ID of policy to show.'))
def do_policy_show(sc, args):
'''Show the policy details.'''
@ -312,7 +312,7 @@ def do_policy_show(sc, args):
@utils.arg('-f', '--force', default=False, action="store_true",
help=_('Delete the policy completely from database.'))
@utils.arg('id', metavar='<NAME or ID>', nargs='+',
@utils.arg('id', metavar='<POLICY>', nargs='+',
help=_('Name or ID of policy(s) to delete.'))
def do_policy_delete(sc, args):
'''Delete policy(s).'''
@ -426,7 +426,7 @@ def do_cluster_create(sc, args):
_show_cluster(sc, cluster.id)
@utils.arg('id', metavar='<NAME or ID>', nargs='+',
@utils.arg('id', metavar='<CLUSTER>', nargs='+',
help=_('Name or ID of cluster(s) to delete.'))
def do_cluster_delete(sc, args):
'''Delete the cluster(s).'''
@ -458,7 +458,7 @@ def do_cluster_delete(sc, args):
'This can be specified multiple times, or once with tags'
'separated by a semicolon.'),
action='append')
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to update.'))
def do_cluster_update(sc, args):
'''Update the cluster.'''
@ -476,7 +476,7 @@ def do_cluster_update(sc, args):
do_cluster_list(sc)
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to show.'))
def do_cluster_show(sc, args):
'''Show details of the cluster.'''
@ -496,7 +496,7 @@ def do_cluster_show(sc, args):
help=_('Only return nodes that appear after the given node ID.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to nodes from.'))
def do_cluster_node_list(sc, args):
'''List nodes from cluster.'''
@ -555,7 +555,7 @@ def do_cluster_node_add(sc, args):
@utils.arg('-n', '--nodes', metavar='<NODES>', required=True,
help=_('ID of nodes to be deleted; multiple nodes can be separated'
'with ",".'))
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_node_del(sc, args):
'''Delete specified nodes from cluster.'''
@ -571,59 +571,163 @@ def do_cluster_node_del(sc, args):
print('Request accepted by action %s' % resp['action'])
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('-c', '--count', metavar='<COUNT>', default=1,
help=_('Number of nodes to be added.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_scale_out(sc, args):
'''Scale out a cluster by the specified number of nodes.'''
params = {
'id': args.id,
'action': 'scale_out',
'action_args': {
'count': args.count,
}
}
resp = sc.action(models.Cluster, params)
print('Request accepted by action %s' % resp['action'])
@utils.arg('-c', '--count', metavar='<COUNT>', default=1,
help=_('Number of nodes to be added.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_scale_in(sc, args):
'''Scale in a cluster by the specified number of nodes.'''
params = {
'id': args.id,
'action': 'scale_in',
'action_args': {
'count': args.count,
}
}
resp = sc.action(models.Cluster, params)
print('Request accepted by action %s' % resp['action'])
@utils.arg('-f', '--filters', metavar='<KEY1=VALUE1;KEY2=VALUE2...>',
help=_('Filter parameters to apply on returned results. '
'This can be specified multiple times, or once with '
'parameters separated by a semicolon.'),
action='append')
@utils.arg('-l', '--limit', metavar='<LIMIT>',
help=_('Limit the number of profiles returned.'))
@utils.arg('-m', '--marker', metavar='<ID>',
help=_('Only return profiles that appear after the given ID.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster to query on.'))
def do_cluster_policy_list(sc, args):
'''List policies from cluster.'''
query = {'id': args.id}
policies = sc.list(models.ClusterPolicy, query)
fields = ['id', 'name', 'enabled', 'level']
cluster = sc.get(models.Cluster, query)
queries = {
'limit': args.limit,
'marker': args.marker,
'filters': utils.format_parameters(args.filters),
}
policies = sc.list(models.ClusterPolicy,
path_args={'cluster_id': cluster.id},
**queries)
fields = ['cluster_id', 'policy_id', 'priority', 'level', 'cooldown',
'enabled']
utils.print_list(policies, fields, sortby_index=1)
@utils.arg('-p', '--policy', metavar='<POLICY_ID>',
help=_('ID of policy to be attached.'))
@utils.arg('-p', '--policy', metavar='<POLICY>', required=True,
help=_('ID or name of policy to be attached.'))
@utils.arg('-r', '--priority', metavar='<PRIORITY>',
help=_('An integer specifying the relative priority among '
'all policies attached to a cluster. The lower the '
'value, the higher the priority. Default is 50.'))
@utils.arg('-l', '--enforcement-level', metavar='<LEVEL>', default=0,
help=_('An integer beteen 0 and 100 representing the enforcement '
'level. Default to enforcement level of policy.'))
@utils.arg('-c', '--cooldown', metavar='<SECONDS>', default=0,
help=_('An integer indicating the cooldown seconds once the '
'policy is effected. Default to cooldown of policy.'))
@utils.arg('-e', '--enabled', default=True, action="store_true",
help=_('Whether the policy should be enabled once attached. '
'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):
'''Attach policy to cluster.'''
params = {'cluster_id': args.id, 'policy_id': args.policy}
sc.create(models.ClusterPolicy, params)
do_cluster_policy_list(sc, args.id)
params = {
'id': args.id,
'action': 'attach_policy',
'action_args': {
'policy_id': args.policy,
'priority': args.priority,
'level': args.enforcement_level,
'enabled': args.enabled,
'cooldown': args.cooldown,
}
}
resp = sc.action(models.Cluster, params)
print('Request accepted by action %s' % resp['action'])
@utils.arg('-p', '--policy', metavar='<POLICY_ID>',
help=_('ID of policy to be detached.'))
@utils.arg('-p', '--policy', metavar='<POLICY>', required=True,
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):
'''Detach policy from cluster.'''
params = {'cluster_id': args.id, 'policy_id': args.policy}
sc.delete(models.ClusterPolicy, params)
do_cluster_policy_list(sc, args.id)
params = {
'id': args.id,
'action': 'detach_policy',
'action_args': {
'policy_id': args.policy,
}
}
resp = sc.action(models.Cluster, params)
print('Request accepted by action %s' % resp['action'])
@utils.arg('-p', '--policy', metavar='<POLICY_ID>',
help=_('ID of policy to be enabled.'))
@utils.arg('-p', '--policy', metavar='<POLICY>', required=True,
help=_('ID or name of policy to be enabled.'))
@utils.arg('-r', '--priority', metavar='<PRIORITY>',
help=_('An integer specifying the relative priority among '
'all policies attached to a cluster. The lower the '
'value, the higher the priority. Default is 50.'))
@utils.arg('-l', '--level', metavar='<LEVEL>',
help=_('New enforcement level.'))
@utils.arg('-c', '--cooldown', metavar='<COOLDOWN>',
help=_('Cooldown interval in seconds.'))
@utils.arg('-l', '--level', metavar='<LEVEL>',
help=_('Enforcement level.'))
@utils.arg('-e', '--enabled', metavar='<BOOLEAN>',
help=_('Specify whether to enable policy.'))
@utils.arg('id', metavar='<NAME or ID>',
help=_('Name or ID of cluster to operate on.'))
def do_cluster_policy_update(sc, args):
'''Enable policy on cluster.'''
def do_cluster_policy_enable(sc, args):
'''Enable a policy on cluster.'''
params = {
'cluster_id': args.id,
'policy_id': args.policy,
'cooldown': args.cooldown,
'enabled': args.enabled,
'level': args.level,
'id': args.id,
'action': 'enable_policy',
'action_args': {
'policy_id': args.policy,
'priority': args.priority,
'level': args.enforcement_level,
'cooldown': args.cooldown,
}
}
sc.update(models.ClusterPolicy, params)
do_cluster_policy_list(sc, args.id)
resp = sc.action(models.Cluster, params)
print('Request accepted by action %s' % resp['action'])
@utils.arg('-p', '--policy', metavar='<POLICY>', required=True,
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):
'''Disable a policy on a cluster.'''
params = {
'id': args.id,
'action': 'disable_policy',
'action_args': {
'policy_id': args.policy,
}
}
resp = sc.action(models.Cluster, params)
print('Request accepted by action %s' % resp['action'])
#### NODES
@ -733,14 +837,14 @@ def do_node_create(sc, args):
_show_node(sc, node.id)
@utils.arg('id', metavar='<NODE ID>',
@utils.arg('id', metavar='<NODE>',
help=_('Name or ID of the node to show the details for.'))
def do_node_show(sc, args):
'''Show detailed info about the specified node.'''
_show_node(sc, args.id)
@utils.arg('id', metavar='<NAME or ID>', nargs='+',
@utils.arg('id', metavar='<NODE>', nargs='+',
help=_('Name or ID of node(s) to delete.'))
def do_node_delete(sc, args):
'''Delete the node(s).'''
@ -770,8 +874,8 @@ def do_node_delete(sc, args):
'This can be specified multiple times, or once with tags'
'separated by a semicolon.'),
action='append')
@utils.arg('id', metavar='<ID>',
help=_('ID of node to update.'))
@utils.arg('id', metavar='<NODE>',
help=_('Name or ID of node to update.'))
def do_node_update(sc, args):
'''Update the node.'''
params = {
@ -788,7 +892,7 @@ def do_node_update(sc, args):
@utils.arg('-c', '--cluster', required=True,
help=_('ID or name of cluster for node to join.'))
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('id', metavar='<NODE>',
help=_('Name or ID of node to operate on.'))
def do_node_join(sc, args):
'''Make node join the specified cluster.'''
@ -804,7 +908,7 @@ def do_node_join(sc, args):
_show_node(sc, args.id)
@utils.arg('id', metavar='<NAME or ID>',
@utils.arg('id', metavar='<NODE>',
help=_('Name or ID of node to operate on.'))
def do_node_leave(sc, args):
'''Make node leave its current cluster.'''
@ -929,7 +1033,7 @@ def do_action_list(sc, args):
utils.print_list(actions, fields, formatters=formatters, sortby_index=0)
@utils.arg('id', metavar='<ACTION ID>',
@utils.arg('id', metavar='<ACTION>',
help=_('Name or ID of the action to show the details for.'))
def do_action_show(sc, args):
'''Show detailed info about the specified action.'''