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

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

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

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

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

@ -12,7 +12,7 @@
import mock 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.tests.unit.v1 import fakes
from senlinclient.v1 import build_info as osc_build_info 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.cmd = osc_build_info.BuildInfo(self.app, None)
self.mock_client = self.app.client_manager.clustering self.mock_client = self.app.client_manager.clustering
self.mock_client.get_build_info = mock.Mock( 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): def test_build_info(self):
arglist = [] arglist = []

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

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

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

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

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

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

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

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

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

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

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

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

@ -263,6 +263,14 @@ class Client(object):
""" """
return self.service.cluster_update_policy(cluster, policy, **attrs) 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): def check_cluster(self, cluster, **params):
"""Check cluster's health status """Check cluster's health status

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

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

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

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

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

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

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

@ -36,7 +36,7 @@ def do_build_info(service, args=None):
:param args: Additional command line arguments, if any. :param args: Additional command line arguments, if any.
""" """
show_deprecated('senlin build-info', 'openstack cluster build info') show_deprecated('senlin build-info', 'openstack cluster build info')
result = service.get_build_info() result = service.get_build_info().to_dict()
formatters = { formatters = {
'api': utils.json_formatter, 'api': utils.json_formatter,
@ -491,6 +491,33 @@ def do_cluster_create(service, args):
_show_cluster(service, cluster.id) _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='+', @utils.arg('id', metavar='<CLUSTER>', nargs='+',
help=_('Name or ID of cluster(s) to delete.')) help=_('Name or ID of cluster(s) to delete.'))
def do_cluster_delete(service, args): 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, @utils.arg('-t', '--min-step', metavar='<MIN_STEP>', type=int,
help=_('An integer specifying the number of nodes for adjustment ' help=_('An integer specifying the number of nodes for adjustment '
'when <PERCENTAGE> is specified.')) '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 ' help=_('A boolean specifying whether the resize should be '
'performed on a best-effort basis when the new capacity ' 'performed on a best-effort basis when the new capacity '
'may go beyond size constraints.')) 'may go beyond size constraints.'))
@ -910,9 +937,8 @@ def do_node_list(service, args):
def _show_node(service, node_id, show_details=False): def _show_node(service, node_id, show_details=False):
"""Show detailed info about the specified node.""" """Show detailed info about the specified node."""
args = {'show_details': True} if show_details else None
try: try:
node = service.get_node(node_id, args=args) node = service.get_node(node_id, details=show_details)
except sdk_exc.ResourceNotFound: except sdk_exc.ResourceNotFound:
raise exc.CommandError(_('Node not found: %s') % node_id) 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() data = node.to_dict()
if show_details: if show_details:
formatters['details'] = utils.nested_dict_formatter( formatters['details'] = utils.nested_dict_formatter(
list(node['details'].keys()), ['property', 'value']) list(data['details'].keys()), ['property', 'value'])
utils.print_dict(data, formatters=formatters) utils.print_dict(data, formatters=formatters)
@ -1203,7 +1229,7 @@ def do_event_list(service, args):
"""List events.""" """List events."""
show_deprecated('senlin event-list', 'openstack cluster event list') show_deprecated('senlin event-list', 'openstack cluster event list')
fields = ['id', 'timestamp', 'obj_type', 'obj_id', 'obj_name', 'action', fields = ['id', 'timestamp', 'obj_type', 'obj_id', 'obj_name', 'action',
'status', 'status_reason', 'level'] 'status', 'level', 'cluster_id']
queries = { queries = {
'sort': args.sort, 'sort': args.sort,
'limit': args.limit, 'limit': args.limit,
@ -1218,6 +1244,8 @@ def do_event_list(service, args):
if not args.full_id: if not args.full_id:
formatters['id'] = lambda x: x.id[:8] formatters['id'] = lambda x: x.id[:8]
formatters['obj_id'] = lambda x: x.obj_id[:8] if x.obj_id else '' 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) events = service.events(**queries)
utils.print_list(events, fields, formatters=formatters) utils.print_list(events, fields, formatters=formatters)
@ -1282,7 +1310,7 @@ def do_action_list(service, args):
formatters['depended_by'] = f_depby formatters['depended_by'] = f_depby
else: else:
formatters['id'] = lambda x: x.id[:8] 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_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) f_depby = lambda x: '\n'.join(a[:8] for a in x.depended_by)
formatters['depends_on'] = f_depon formatters['depends_on'] = f_depon

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