Update senlinclient for new sdk version

This patch fixes problem found after sdk version 0.9.1 which includes a
new implementation of senlin cluster resources.

Change-Id: I67b265731f34080df85233dac09c1256f43aecdb
This commit is contained in:
tengqm 2016-07-29 02:15:56 -04:00
parent f8fb80693d
commit dd21b7aa0b
27 changed files with 157 additions and 128 deletions

View File

@ -12,6 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import pbr.version
# Senlin Release Notes documentation build configuration file, created by
# sphinx-quickstart on Tue Nov 3 17:40:50 2015.
#
@ -63,7 +65,7 @@ copyright = u'2015, Senlin Developers'
# built documents.
#
# The short X.Y version.
import pbr.version
senlin_version = pbr.version.VersionInfo('python-muranoclient')
# The full version, including alpha/beta/rc tags.
release = senlin_version.version_string_with_vcs()

View File

@ -240,7 +240,7 @@ def process_stack_spec(spec):
new_spec = {
# TODO(Qiming): add context support
'disable_rollback': spec.get('disable_rollback', True),
'context': spec.get('context', {}),
'context': spec.get('context', {}),
'parameters': spec.get('parameters', {}),
'timeout': spec.get('timeout', 60),
'template': template,

View File

@ -181,8 +181,8 @@ class SenlinShell(object):
raise exc.CommandError(msg)
# project name or ID is needed, or else sdk may find the wrong project
if (not (args.project_id or args.project_name or args.tenant_id
or args.tenant_name)):
if (not (args.project_id or args.project_name or args.tenant_id or
args.tenant_name)):
if not (args.user_id):
msg = _('Either project/tenant ID or project/tenant name '
'must be specified, or else Senlin cannot know '

View File

@ -159,7 +159,7 @@ class TestActionList(TestAction):
class TestActionShow(TestAction):
get_response = {
response = {
"action": "CLUSTER_DELETE",
"cause": "RPC Request",
"context": {},
@ -184,7 +184,7 @@ class TestActionShow(TestAction):
super(TestActionShow, self).setUp()
self.cmd = osc_action.ShowAction(self.app, None)
self.mock_client.get_action = mock.Mock(
return_value=sdk_action.Action(attrs=self.get_response))
return_value=sdk_action.Action(**self.response))
def test_action_show(self):
arglist = ['my_action']

View File

@ -12,7 +12,7 @@
import mock
from openstack.cluster.v1 import build_info as sdk_build_info
from openstack.cluster.v1 import build_info as sbi
from senlinclient.tests.unit.v1 import fakes
from senlinclient.v1 import build_info as osc_build_info
@ -33,7 +33,7 @@ class TestBuildInfo(fakes.TestClusteringv1):
self.cmd = osc_build_info.BuildInfo(self.app, None)
self.mock_client = self.app.client_manager.clustering
self.mock_client.get_build_info = mock.Mock(
return_value=sdk_build_info.BuildInfo(None, self.response))
return_value=sbi.BuildInfo(**self.response['build_info']))
def test_build_info(self):
arglist = []

View File

@ -147,7 +147,7 @@ class TestClusterList(TestCluster):
class TestClusterShow(TestCluster):
get_response = {"cluster": {
response = {"cluster": {
"created_at": "2015-02-11T15:13:20",
"data": {},
"desired_capacity": 0,
@ -174,8 +174,7 @@ class TestClusterShow(TestCluster):
super(TestClusterShow, self).setUp()
self.cmd = osc_cluster.ShowCluster(self.app, None)
self.mock_client.get_cluster = mock.Mock(
return_value=sdk_cluster.Cluster(
attrs=self.get_response['cluster']))
return_value=sdk_cluster.Cluster(**self.response['cluster']))
def test_cluster_show(self):
arglist = ['my_cluster']
@ -231,9 +230,9 @@ class TestClusterCreate(TestCluster):
super(TestClusterCreate, self).setUp()
self.cmd = osc_cluster.CreateCluster(self.app, None)
self.mock_client.create_cluster = mock.Mock(
return_value=sdk_cluster.Cluster(attrs=self.response['cluster']))
return_value=sdk_cluster.Cluster(**self.response['cluster']))
self.mock_client.get_cluster = mock.Mock(
return_value=sdk_cluster.Cluster(attrs=self.response['cluster']))
return_value=sdk_cluster.Cluster(**self.response['cluster']))
def test_cluster_create_defaults(self):
arglist = ['test_cluster', '--profile', 'mystack']
@ -301,11 +300,11 @@ class TestClusterUpdate(TestCluster):
super(TestClusterUpdate, self).setUp()
self.cmd = osc_cluster.UpdateCluster(self.app, None)
self.mock_client.update_cluster = mock.Mock(
return_value=sdk_cluster.Cluster(attrs=self.response['cluster']))
return_value=sdk_cluster.Cluster(**self.response['cluster']))
self.mock_client.get_cluster = mock.Mock(
return_value=sdk_cluster.Cluster(attrs=self.response['cluster']))
return_value=sdk_cluster.Cluster(**self.response['cluster']))
self.mock_client.find_cluster = mock.Mock(
return_value=sdk_cluster.Cluster(attrs=self.response['cluster']))
return_value=sdk_cluster.Cluster(**self.response['cluster']))
def test_cluster_update_defaults(self):
arglist = ['--name', 'new_cluster', '--metadata', 'nk1=nv1;nk2=nv2',

View File

@ -12,7 +12,7 @@
import mock
from openstack.cluster.v1 import cluster_policy as sdk_cluster_policy
from openstack.cluster.v1 import cluster_policy as scp
from senlinclient.tests.unit.v1 import fakes
from senlinclient.v1 import cluster_policy as osc_cluster_policy
@ -76,7 +76,7 @@ class TestClusterPolicyList(TestClusterPolicy):
class TestClusterPolicyShow(TestClusterPolicy):
get_response = {"cluster_policy": {
response = {"cluster_policy": {
"cluster_id": "7d85f602-a948-4a30-afd4-e84f47471c15",
"cluster_name": "my_cluster",
"enabled": True,
@ -90,8 +90,7 @@ class TestClusterPolicyShow(TestClusterPolicy):
super(TestClusterPolicyShow, self).setUp()
self.cmd = osc_cluster_policy.ClusterPolicyShow(self.app, None)
self.mock_client.get_cluster_policy = mock.Mock(
return_value=sdk_cluster_policy.ClusterPolicy(None,
self.get_response))
return_value=scp.ClusterPolicy(**self.response['cluster_policy']))
def test_cluster_policy_show(self):
arglist = ['--policy', 'my_policy', 'my_cluster']

View File

@ -60,7 +60,7 @@ class TestEventList(TestEvent):
super(TestEventList, self).setUp()
self.cmd = osc_event.ListEvent(self.app, None)
self.mock_client.events = mock.Mock(
return_value=sdk_event.Event(None, {}))
return_value=[sdk_event.Event(**self.response['events'][0])])
def test_event_list_defaults(self):
arglist = []
@ -95,8 +95,7 @@ class TestEventList(TestEvent):
self.assertEqual(self.columns, columns)
def test_event_list_sort_invalid_key(self):
self.mock_client.events = mock.Mock(
return_value=self.response)
self.mock_client.events = mock.Mock(return_value=self.response)
kwargs = copy.deepcopy(self.defaults)
kwargs['sort'] = 'bad_key'
arglist = ['--sort', 'bad_key']
@ -106,8 +105,7 @@ class TestEventList(TestEvent):
self.cmd.take_action, parsed_args)
def test_event_list_sort_invalid_direction(self):
self.mock_client.events = mock.Mock(
return_value=self.response)
self.mock_client.events = mock.Mock(return_value=self.response)
kwargs = copy.deepcopy(self.defaults)
kwargs['sort'] = 'name:bad_direction'
arglist = ['--sort', 'name:bad_direction']
@ -136,7 +134,7 @@ class TestEventList(TestEvent):
class TestEventShow(TestEvent):
get_response = {"event": {
response = {"event": {
"action": "create",
"cluster_id": 'null',
"id": "2d255b9c-8f36-41a2-a137-c0175ccc29c3",
@ -155,7 +153,7 @@ class TestEventShow(TestEvent):
super(TestEventShow, self).setUp()
self.cmd = osc_event.ShowEvent(self.app, None)
self.mock_client.get_event = mock.Mock(
return_value=sdk_event.Event(None, self.get_response))
return_value=sdk_event.Event(**self.response['event']))
def test_event_show(self):
arglist = ['my_event']

View File

@ -144,7 +144,7 @@ class TestNodeList(TestNode):
class TestNodeShow(TestNode):
get_response = {"node": {
response = {"node": {
"cluster_id": None,
"created_at": "2015-02-10T12:03:16",
"data": {},
@ -171,7 +171,7 @@ class TestNodeShow(TestNode):
super(TestNodeShow, self).setUp()
self.cmd = osc_node.ShowNode(self.app, None)
self.mock_client.get_node = mock.Mock(
return_value=sdk_node.Node(attrs=self.get_response['node']))
return_value=sdk_node.Node(**self.response['node']))
def test_node_show(self):
arglist = ['my_node']
@ -230,9 +230,9 @@ class TestNodeCreate(TestNode):
super(TestNodeCreate, self).setUp()
self.cmd = osc_node.CreateNode(self.app, None)
self.mock_client.create_node = mock.Mock(
return_value=sdk_node.Node(attrs=self.response['node']))
return_value=sdk_node.Node(**self.response['node']))
self.mock_client.get_node = mock.Mock(
return_value=sdk_node.Node(attrs=self.response['node']))
return_value=sdk_node.Node(**self.response['node']))
def test_node_create_defaults(self):
arglist = ['my_node', '--profile', 'mystack']
@ -305,11 +305,11 @@ class TestNodeUpdate(TestNode):
super(TestNodeUpdate, self).setUp()
self.cmd = osc_node.UpdateNode(self.app, None)
self.mock_client.update_node = mock.Mock(
return_value=sdk_node.Node(attrs=self.response['node']))
return_value=sdk_node.Node(**self.response['node']))
self.mock_client.get_node = mock.Mock(
return_value=sdk_node.Node(attrs=self.response['node']))
return_value=sdk_node.Node(**self.response['node']))
self.mock_client.find_node = mock.Mock(
return_value=sdk_node.Node(attrs=self.response['node']))
return_value=sdk_node.Node(**self.response['node']))
def test_node_update_defaults(self):
arglist = ['--name', 'new_node', '--metadata', 'nk1=nv1;nk2=nv2',

View File

@ -141,7 +141,7 @@ class TestPolicyList(TestPolicy):
class TestPolicyShow(TestPolicy):
get_response = {"policy": {
response = {"policy": {
"created_at": "2015-03-02T07:40:31",
"data": {},
"domain": 'null',
@ -170,7 +170,7 @@ class TestPolicyShow(TestPolicy):
super(TestPolicyShow, self).setUp()
self.cmd = osc_policy.ShowPolicy(self.app, None)
self.mock_client.get_policy = mock.Mock(
return_value=sdk_policy.Policy(attrs=self.get_response['policy']))
return_value=sdk_policy.Policy(**self.response['policy']))
def test_policy_show(self):
arglist = ['sp001']
@ -230,9 +230,9 @@ class TestPolicyCreate(TestPolicy):
super(TestPolicyCreate, self).setUp()
self.cmd = osc_policy.CreatePolicy(self.app, None)
self.mock_client.create_policy = mock.Mock(
return_value=sdk_policy.Policy(attrs=self.response['policy']))
return_value=sdk_policy.Policy(**self.response['policy']))
self.mock_client.get_policy = mock.Mock(
return_value=sdk_policy.Policy(attrs=self.response['policy']))
return_value=sdk_policy.Policy(**self.response['policy']))
def test_policy_create_defaults(self):
arglist = ['my_policy', '--spec-file', self.spec_path]
@ -274,11 +274,11 @@ class TestPolicyUpdate(TestPolicy):
super(TestPolicyUpdate, self).setUp()
self.cmd = osc_policy.UpdatePolicy(self.app, None)
self.mock_client.update_policy = mock.Mock(
return_value=sdk_policy.Policy(attrs=self.response['policy']))
return_value=sdk_policy.Policy(**self.response['policy']))
self.mock_client.get_policy = mock.Mock(
return_value=sdk_policy.Policy(attrs=self.response['policy']))
return_value=sdk_policy.Policy(**self.response['policy']))
self.mock_client.find_policy = mock.Mock(
return_value=sdk_policy.Policy(attrs=self.response['policy']))
return_value=sdk_policy.Policy(**self.response['policy']))
def test_policy_update_defaults(self):
arglist = ['--name', 'new_policy', '9f779ddf']

View File

@ -29,15 +29,9 @@ class TestPolicyType(fakes.TestClusteringv1):
class TestPolicyTypeList(TestPolicyType):
expected_columns = ['name']
list_response = [
sdk_policy_type.PolicyType({'name': 'BBB',
'schema': {
'foo': 'bar'}}),
sdk_policy_type.PolicyType({'name': 'AAA',
'schema': {
'foo': 'bar'}}),
sdk_policy_type.PolicyType({'name': 'CCC',
'schema': {
'foo': 'bar'}}),
sdk_policy_type.PolicyType(name='BBB', schema={'foo': 'bar'}),
sdk_policy_type.PolicyType(name='AAA', schema={'foo': 'bar'}),
sdk_policy_type.PolicyType(name='CCC', schema={'foo': 'bar'}),
]
expected_rows = [
['AAA'],
@ -71,7 +65,7 @@ class TestPolicyTypeShow(TestPolicyType):
super(TestPolicyTypeShow, self).setUp()
self.cmd = osc_policy_type.PolicyTypeShow(self.app, None)
self.mock_client.get_policy_type = mock.Mock(
return_value=sdk_policy_type.PolicyType(self.response)
return_value=sdk_policy_type.PolicyType(**self.response)
)
def test_policy_type_show(self):

View File

@ -30,7 +30,7 @@ class TestProfile(fakes.TestClusteringv1):
class TestProfileShow(TestProfile):
get_response = {"profile": {
response = {"profile": {
"created_at": "2015-03-01T14:28:25",
"domain": 'false',
"id": "7fa885cd-fa39-4531-a42d-780af95c84a4",
@ -92,8 +92,7 @@ class TestProfileShow(TestProfile):
super(TestProfileShow, self).setUp()
self.cmd = osc_profile.ShowProfile(self.app, None)
self.mock_client.get_profile = mock.Mock(
return_value=sdk_profile.Profile(
attrs=self.get_response['profile']))
return_value=sdk_profile.Profile(**self.response['profile']))
utils.get_dict_properties = mock.Mock(return_value='')
def test_profile_show(self):
@ -305,13 +304,15 @@ class TestProfileCreate(TestProfile):
"updated_at": None,
"user": "2d7aca950f3e465d8ef0c81720faf6ff"}}
defaults = {"spec": {
"version": 1.0,
"type": "os.nova.server",
"properties": {
"flavor": 1,
"name": "cirros_server",
"image": "cirros-0.3.4-x86_64-uec"}
defaults = {
"spec": {
"version": 1.0,
"type": "os.nova.server",
"properties": {
"flavor": 1,
"name": "cirros_server",
"image": "cirros-0.3.4-x86_64-uec"
},
},
"name": "my_profile",
"metadata": {}
@ -321,9 +322,9 @@ class TestProfileCreate(TestProfile):
super(TestProfileCreate, self).setUp()
self.cmd = osc_profile.CreateProfile(self.app, None)
self.mock_client.create_profile = mock.Mock(
return_value=sdk_profile.Profile(attrs=self.response['profile']))
return_value=sdk_profile.Profile(**self.response['profile']))
self.mock_client.get_profile = mock.Mock(
return_value=sdk_profile.Profile(attrs=self.response['profile']))
return_value=sdk_profile.Profile(**self.response['profile']))
utils.get_dict_properties = mock.Mock(return_value='')
def test_profile_create_defaults(self):
@ -376,11 +377,11 @@ class TestProfileUpdate(TestProfile):
super(TestProfileUpdate, self).setUp()
self.cmd = osc_profile.UpdateProfile(self.app, None)
self.mock_client.update_profile = mock.Mock(
return_value=sdk_profile.Profile(attrs=self.response['profile']))
return_value=sdk_profile.Profile(**self.response['profile']))
self.mock_client.get_profile = mock.Mock(
return_value=sdk_profile.Profile(attrs=self.response['profile']))
return_value=sdk_profile.Profile(**self.response['profile']))
self.mock_client.find_profile = mock.Mock(
return_value=sdk_profile.Profile(attrs=self.response['profile']))
return_value=sdk_profile.Profile(**self.response['profile']))
utils.get_dict_properties = mock.Mock(return_value='')
def test_profile_update_defaults(self):

View File

@ -29,18 +29,9 @@ class TestProfileType(fakes.TestClusteringv1):
class TestProfileTypeList(TestProfileType):
expected_columns = ['name']
list_response = [
sdk_profile_type.ProfileType({'name': 'BBB',
'schema': {
'foo': 'bar'}}
),
sdk_profile_type.ProfileType({'name': 'AAA',
'schema': {
'foo': 'bar'}}
),
sdk_profile_type.ProfileType({'name': 'CCC',
'schema': {
'foo': 'bar'}}
),
sdk_profile_type.ProfileType(name='BBB', schema={'foo': 'bar'}),
sdk_profile_type.ProfileType(name='AAA', schema={'foo': 'bar'}),
sdk_profile_type.ProfileType(name='CCC', schema={'foo': 'bar'}),
]
expected_rows = [
['AAA'],
@ -74,7 +65,7 @@ class TestProfileTypeShow(TestProfileType):
super(TestProfileTypeShow, self).setUp()
self.cmd = osc_profile_type.ProfileTypeShow(self.app, None)
self.mock_client.get_profile_type = mock.Mock(
return_value=sdk_profile_type.ProfileType(self.response)
return_value=sdk_profile_type.ProfileType(**self.response)
)
def test_profile_type_show(self):

View File

@ -67,8 +67,7 @@ class TestReceiverList(TestReceiver):
def setUp(self):
super(TestReceiverList, self).setUp()
self.cmd = osc_receiver.ListReceiver(self.app, None)
self.mock_client.receivers = mock.Mock(
return_value=self.response)
self.mock_client.receivers = mock.Mock(return_value=self.response)
def test_receiver_list_defaults(self):
arglist = []
@ -172,9 +171,8 @@ class TestReceiverShow(TestReceiver):
def setUp(self):
super(TestReceiverShow, self).setUp()
self.cmd = osc_receiver.ShowReceiver(self.app, None)
self.mock_client.get_receiver = mock.Mock(
return_value=sdk_receiver.Receiver(
attrs=self.get_response['receiver']))
x_receiver = sdk_receiver.Receiver(**self.get_response['receiver'])
self.mock_client.get_receiver = mock.Mock(return_value=x_receiver)
def test_receiver_show(self):
arglist = ['my_receiver']
@ -231,11 +229,9 @@ class TestReceiverCreate(TestReceiver):
super(TestReceiverCreate, self).setUp()
self.cmd = osc_receiver.CreateReceiver(self.app, None)
self.mock_client.create_receiver = mock.Mock(
return_value=sdk_receiver.Receiver(
attrs=self.response['receiver']))
return_value=sdk_receiver.Receiver(**self.response['receiver']))
self.mock_client.get_receiver = mock.Mock(
return_value=sdk_receiver.Receiver(
attrs=self.response['receiver']))
return_value=sdk_receiver.Receiver(**self.response['receiver']))
def test_receiver_create(self):
arglist = ['my_receiver', '--action', 'CLUSTER_SCALE_OUT',

View File

@ -66,8 +66,9 @@ class ShellTest(testtools.TestCase):
'api': utils.json_formatter,
'engine': utils.json_formatter,
}
mock_print.assert_called_once_with(result, formatters=formatters)
self.assertTrue(service.get_build_info.called)
mock_print.assert_called_once_with(result.to_dict(),
formatters=formatters)
service.get_build_info.assert_called_once_with()
@mock.patch.object(utils, 'print_list')
def test_do_profile_type_list(self, mock_print):
@ -1104,7 +1105,7 @@ class ShellTest(testtools.TestCase):
sh._show_node(service, node_id, show_details=False)
service.get_node.assert_called_once_with(node_id, args=None)
service.get_node.assert_called_once_with(node_id, details=False)
mock_print.assert_called_once_with(data, formatters=formatters)
@mock.patch.object(sh, '_show_node')
@ -1232,7 +1233,7 @@ class ShellTest(testtools.TestCase):
def test_do_event_list(self, mock_print):
service = mock.Mock()
fields = ['id', 'timestamp', 'obj_type', 'obj_id', 'obj_name',
'action', 'status', 'status_reason', 'level']
'action', 'status', 'level', 'cluster_id']
args = {
'sort': 'timestamp:asc',
'limit': 20,

View File

@ -104,7 +104,8 @@ class ListAction(lister.Lister):
return (
columns,
(utils.get_item_properties(a, columns, formatters=formatters)
(utils.get_item_properties(a.to_dict(), columns,
formatters=formatters)
for a in actions)
)
@ -141,6 +142,7 @@ class ShowAction(show.ShowOne):
'depends_on': senlin_utils.list_formatter,
'depended_by': senlin_utils.list_formatter,
}
columns = sorted(list(six.iterkeys(action)))
return columns, utils.get_dict_properties(action.to_dict(), columns,
data = action.to_dict()
columns = sorted(list(six.iterkeys(data)))
return columns, utils.get_dict_properties(data, columns,
formatters=formatters)

View File

@ -13,7 +13,6 @@
"""Clustering v1 build_info action implementations"""
import logging
import six
from cliff import show
from openstackclient.common import utils
@ -40,6 +39,10 @@ class BuildInfo(show.ShowOne):
'api': senlin_utils.json_formatter,
'engine': senlin_utils.json_formatter,
}
columns = sorted(list(six.iterkeys(result)))
return columns, utils.get_dict_properties(result.to_dict(), columns,
data = {
'api': result.api,
'engine': result.engine,
}
columns = ['api', 'engine']
return columns, utils.get_dict_properties(data, columns,
formatters=formatters)

View File

@ -263,6 +263,14 @@ class Client(object):
"""
return self.service.cluster_update_policy(cluster, policy, **attrs)
def cluster_collect(self, cluster, path):
"""Resize cluster
Doc link:
http://developer.openstack.org/api-ref-clustering-v1.html#clusterAction
"""
return self.service.cluster_collect(cluster, path)
def check_cluster(self, cluster, **params):
"""Check cluster's health status

View File

@ -137,8 +137,9 @@ def _show_cluster(senlin_client, cluster_id):
'metadata': senlin_utils.json_formatter,
'nodes': senlin_utils.list_formatter
}
columns = sorted(list(six.iterkeys(cluster)))
return columns, utils.get_dict_properties(cluster.to_dict(), columns,
data = cluster.to_dict()
columns = sorted(list(six.iterkeys(data)))
return columns, utils.get_dict_properties(data, columns,
formatters=formatters)

View File

@ -83,7 +83,8 @@ class ClusterPolicyList(lister.Lister):
}
return (
columns,
(utils.get_item_properties(p, columns, formatters=formatters)
(utils.get_item_properties(p.to_dict(), columns,
formatters=formatters)
for p in policies)
)
@ -113,8 +114,9 @@ class ClusterPolicyShow(show.ShowOne):
senlin_client = self.app.client_manager.clustering
policy = senlin_client.get_cluster_policy(parsed_args.policy,
parsed_args.cluster)
columns = sorted(list(six.iterkeys(policy)))
return columns, utils.get_dict_properties(policy.to_dict(), columns)
data = policy.to_dict()
columns = sorted(list(six.iterkeys(data)))
return columns, utils.get_dict_properties(data, columns)
class ClusterPolicyUpdate(command.Command):

View File

@ -99,11 +99,10 @@ class ListEvent(lister.Lister):
formatters['obj_id'] = lambda x: x[:8] if x else ''
events = senlin_client.events(**queries)
return (
columns,
(utils.get_item_properties(e, columns, formatters=formatters)
for e in events)
)
return (columns,
(utils.get_item_properties(e.to_dict(), columns,
formatters=formatters)
for e in events))
class ShowEvent(show.ShowOne):
@ -129,5 +128,6 @@ class ShowEvent(show.ShowOne):
except sdk_exc.ResourceNotFound:
raise exc.CommandError(_("Event not found: %s")
% parsed_args.event)
columns = sorted(list(six.iterkeys(event)))
return columns, utils.get_dict_properties(event.to_dict(), columns)
data = event.to_dict()
columns = sorted(list(six.iterkeys(data)))
return columns, utils.get_dict_properties(data, columns)

View File

@ -158,12 +158,12 @@ def _show_node(senlin_client, node_id, show_details=False):
'metadata': senlin_utils.json_formatter,
'data': senlin_utils.json_formatter,
}
if show_details and node:
data = node.to_dict()
if show_details:
formatters['details'] = senlin_utils.nested_dict_formatter(
list(node['details'].keys()), ['property', 'value'])
columns = sorted(list(six.iterkeys(node)))
return columns, utils.get_dict_properties(node.to_dict(), columns,
list(data['details'].keys()), ['property', 'value'])
columns = sorted(list(six.iterkeys(data)))
return columns, utils.get_dict_properties(data, columns,
formatters=formatters)

View File

@ -63,6 +63,7 @@ class PolicyTypeShow(format_utils.YamlFormat):
except sdk_exc.ResourceNotFound:
raise exc.CommandError(_('Policy Type not found: %s')
% parsed_args.type_name)
rows = list(six.itervalues(res))
columns = list(six.iterkeys(res))
data = res.to_dict()
rows = list(six.itervalues(data))
columns = list(six.iterkeys(data))
return columns, rows

View File

@ -63,6 +63,7 @@ class ProfileTypeShow(format_utils.YamlFormat):
except sdk_exc.ResourceNotFound:
raise exc.CommandError(_('Profile Type not found: %s')
% parsed_args.type_name)
rows = list(six.itervalues(res))
columns = list(six.iterkeys(res))
data = res.to_dict()
rows = list(six.itervalues(data))
columns = list(six.iterkeys(data))
return columns, rows

View File

@ -142,8 +142,9 @@ def _show_receiver(senlin_client, receiver_id):
'params': senlin_utils.json_formatter,
'channel': senlin_utils.json_formatter,
}
columns = sorted(list(six.iterkeys(receiver)))
return columns, utils.get_dict_properties(receiver.to_dict(), columns,
data = receiver.to_dict()
columns = sorted(list(six.iterkeys(data)))
return columns, utils.get_dict_properties(data, columns,
formatters=formatters)

View File

@ -36,7 +36,7 @@ def do_build_info(service, args=None):
:param args: Additional command line arguments, if any.
"""
show_deprecated('senlin build-info', 'openstack cluster build info')
result = service.get_build_info()
result = service.get_build_info().to_dict()
formatters = {
'api': utils.json_formatter,
@ -491,6 +491,33 @@ def do_cluster_create(service, args):
_show_cluster(service, cluster.id)
@utils.arg('-p', '--path', metavar='<PATH>',
help=_('A Json path string specifying the attribute to collect.'))
@utils.arg('-L', '--list', default=False, action="store_true",
help=_('Print a full list that contains both node ids and '
'attribute values instead of values only. Default is True.'))
@utils.arg('-F', '--full-id', default=False, action="store_true",
help=_('Print full IDs in list.'))
@utils.arg('id', metavar='<CLUSTER>',
help=_('Name or ID of cluster(s) to operate on.'))
def do_cluster_collect(service, args):
"""Collect attributes across a cluster."""
show_deprecated('senlin cluster-collect', 'openstack cluster collect')
attrs = service.cluster_collect(args.id, args.path)
if args.list:
fields = ['node_id', 'value']
formatters = {
'value': utils.json_formatter
}
if not args.full_id:
formatters['node_id'] = lambda x: x.node_id[:8]
utils.print_list(attrs, fields, formatters=formatters)
else:
for attr in attrs:
print(attr.value)
@utils.arg('id', metavar='<CLUSTER>', nargs='+',
help=_('Name or ID of cluster(s) to delete.'))
def do_cluster_delete(service, args):
@ -624,7 +651,7 @@ def do_cluster_node_del(service, args):
@utils.arg('-t', '--min-step', metavar='<MIN_STEP>', type=int,
help=_('An integer specifying the number of nodes for adjustment '
'when <PERCENTAGE> is specified.'))
@utils.arg('-s', '--strict', action='store_true', default=False,
@utils.arg('-s', '--strict', action='store_true', default=False,
help=_('A boolean specifying whether the resize should be '
'performed on a best-effort basis when the new capacity '
'may go beyond size constraints.'))
@ -910,9 +937,8 @@ def do_node_list(service, args):
def _show_node(service, node_id, show_details=False):
"""Show detailed info about the specified node."""
args = {'show_details': True} if show_details else None
try:
node = service.get_node(node_id, args=args)
node = service.get_node(node_id, details=show_details)
except sdk_exc.ResourceNotFound:
raise exc.CommandError(_('Node not found: %s') % node_id)
@ -923,7 +949,7 @@ def _show_node(service, node_id, show_details=False):
data = node.to_dict()
if show_details:
formatters['details'] = utils.nested_dict_formatter(
list(node['details'].keys()), ['property', 'value'])
list(data['details'].keys()), ['property', 'value'])
utils.print_dict(data, formatters=formatters)
@ -1203,7 +1229,7 @@ def do_event_list(service, args):
"""List events."""
show_deprecated('senlin event-list', 'openstack cluster event list')
fields = ['id', 'timestamp', 'obj_type', 'obj_id', 'obj_name', 'action',
'status', 'status_reason', 'level']
'status', 'level', 'cluster_id']
queries = {
'sort': args.sort,
'limit': args.limit,
@ -1218,6 +1244,8 @@ def do_event_list(service, args):
if not args.full_id:
formatters['id'] = lambda x: x.id[:8]
formatters['obj_id'] = lambda x: x.obj_id[:8] if x.obj_id else ''
formatters['cluster_id'] = (lambda x: x.cluster_id[:8]
if x.cluster_id else '')
events = service.events(**queries)
utils.print_list(events, fields, formatters=formatters)
@ -1282,7 +1310,7 @@ def do_action_list(service, args):
formatters['depended_by'] = f_depby
else:
formatters['id'] = lambda x: x.id[:8]
formatters['target'] = lambda x: x.target[:8]
formatters['target'] = lambda x: x.target_id[:8]
f_depon = lambda x: '\n'.join(a[:8] for a in x.depends_on)
f_depby = lambda x: '\n'.join(a[:8] for a in x.depended_by)
formatters['depends_on'] = f_depon

View File

@ -35,6 +35,7 @@ commands=
commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
[flake8]
ignore = D100,D101,D102,D103,D104,D105,D200,D201,D202,D204,D205,D300,D301,D400,D401
show-source = True
exclude=.venv,.git,.tox,dist,*openstack/common*,*lib/python*,*egg,build
max-complexity=20