Allow showing/deleting by name as well as uuid
Partial-bug: #1294505 Change-Id: I543b17160882c8a6c39fdf871377d348605e8505
This commit is contained in:
@@ -79,16 +79,17 @@ class AppCommands(cli_utils.CommandsBase):
|
|||||||
def delete(self):
|
def delete(self):
|
||||||
"""Delete an application."""
|
"""Delete an application."""
|
||||||
self.parser.add_argument('plan_uuid',
|
self.parser.add_argument('plan_uuid',
|
||||||
help="Tenant/project-wide unique plan uuid")
|
help="Tenant/project-wide unique "
|
||||||
|
"plan uuid or name")
|
||||||
args = self.parser.parse_args()
|
args = self.parser.parse_args()
|
||||||
self.client.plans.delete(plan_id=args.plan_uuid)
|
self.client.plans.find(name_or_id=args.plan_uuid).delete()
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
"""Show an application's resource."""
|
"""Show an application's resource."""
|
||||||
self.parser.add_argument('plan_uuid',
|
self.parser.add_argument('plan_uuid',
|
||||||
help="Plan uuid")
|
help="Plan uuid or name")
|
||||||
args = self.parser.parse_args()
|
args = self.parser.parse_args()
|
||||||
response = self.client.plans.get(plan_id=args.plan_uuid)
|
response = self.client.plans.find(name_or_id=args.plan_uuid)
|
||||||
fields = ['uuid', 'name', 'description', 'uri']
|
fields = ['uuid', 'name', 'description', 'uri']
|
||||||
data = dict([(f, getattr(response, f, ''))
|
data = dict([(f, getattr(response, f, ''))
|
||||||
for f in fields])
|
for f in fields])
|
||||||
@@ -122,9 +123,9 @@ class AssemblyCommands(cli_utils.CommandsBase):
|
|||||||
def delete(self):
|
def delete(self):
|
||||||
"""Delete an assembly."""
|
"""Delete an assembly."""
|
||||||
self.parser.add_argument('assembly_uuid',
|
self.parser.add_argument('assembly_uuid',
|
||||||
help="Assembly uuid")
|
help="Assembly uuid or name")
|
||||||
args = self.parser.parse_args()
|
args = self.parser.parse_args()
|
||||||
self.client.assemblies.delete(assembly_id=args.assembly_uuid)
|
self.client.assemblies.find(name_or_id=args.assembly_uuid).delete()
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
"""List all assemblies."""
|
"""List all assemblies."""
|
||||||
@@ -135,9 +136,9 @@ class AssemblyCommands(cli_utils.CommandsBase):
|
|||||||
def show(self):
|
def show(self):
|
||||||
"""Show an assembly's resource."""
|
"""Show an assembly's resource."""
|
||||||
self.parser.add_argument('assembly_uuid',
|
self.parser.add_argument('assembly_uuid',
|
||||||
help="Assembly uuid")
|
help="Assembly uuid or name")
|
||||||
args = self.parser.parse_args()
|
args = self.parser.parse_args()
|
||||||
response = self.client.assemblies.get(assembly_id=args.assembly_uuid)
|
response = self.client.assemblies.find(name_or_id=args.assembly_uuid)
|
||||||
fields = ['uuid', 'name', 'description', 'status', 'application_uri',
|
fields = ['uuid', 'name', 'description', 'status', 'application_uri',
|
||||||
'trigger_uri']
|
'trigger_uri']
|
||||||
data = dict([(f, getattr(response, f, ''))
|
data = dict([(f, getattr(response, f, ''))
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
import uuid
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
import mock
|
import mock
|
||||||
@@ -111,29 +112,40 @@ class TestSolum(base.TestCase):
|
|||||||
@mock.patch.object(assembly.AssemblyManager, "create")
|
@mock.patch.object(assembly.AssemblyManager, "create")
|
||||||
def test_assembly_create(self, mock_assembly_create):
|
def test_assembly_create(self, mock_assembly_create):
|
||||||
self.make_env()
|
self.make_env()
|
||||||
self.shell("assembly create fake-plan-uri --assembly=test")
|
self.shell("assembly create http://example.com/a.yaml --assembly=test")
|
||||||
mock_assembly_create.assert_called_once_with(name='test',
|
mock_assembly_create.assert_called_once_with(
|
||||||
plan_uri='fake-plan-uri')
|
name='test',
|
||||||
|
plan_uri='http://example.com/a.yaml')
|
||||||
|
|
||||||
@mock.patch.object(assembly.AssemblyManager, "create")
|
@mock.patch.object(assembly.AssemblyManager, "create")
|
||||||
def test_assembly_create_without_name(self, mock_assembly_create):
|
def test_assembly_create_without_name(self, mock_assembly_create):
|
||||||
self.make_env()
|
self.make_env()
|
||||||
self.shell("assembly create fake-plan-uri")
|
self.shell("assembly create http://example.com/a.yaml")
|
||||||
mock_assembly_create.assert_called_once_with(name=None,
|
mock_assembly_create.assert_called_once_with(
|
||||||
plan_uri='fake-plan-uri')
|
name=None,
|
||||||
|
plan_uri='http://example.com/a.yaml')
|
||||||
|
|
||||||
@mock.patch.object(assembly.AssemblyManager, "delete")
|
@mock.patch.object(assembly.AssemblyManager, "find")
|
||||||
def test_assembly_delete(self, mock_assembly_delete):
|
def test_assembly_delete(self, mock_assembly_find):
|
||||||
self.make_env()
|
self.make_env()
|
||||||
self.shell("assembly delete fake-assembly-id")
|
the_id = str(uuid.uuid4())
|
||||||
mock_assembly_delete.assert_called_once_with(
|
self.shell("assembly delete %s" % the_id)
|
||||||
assembly_id='fake-assembly-id')
|
mock_assembly_find.assert_called_once_with(
|
||||||
|
name_or_id=the_id)
|
||||||
|
mock_assembly_find.return_value.delete.assert_called_once_with()
|
||||||
|
|
||||||
@mock.patch.object(assembly.AssemblyManager, "get")
|
@mock.patch.object(assembly.AssemblyManager, "find")
|
||||||
def test_assembly_get(self, mock_assembly_get):
|
def test_assembly_get(self, mock_assembly_find):
|
||||||
self.make_env()
|
self.make_env()
|
||||||
self.shell("assembly show test_uuid_1")
|
the_id = str(uuid.uuid4())
|
||||||
mock_assembly_get.assert_called_once_with(assembly_id='test_uuid_1')
|
self.shell("assembly show %s" % the_id)
|
||||||
|
mock_assembly_find.assert_called_once_with(name_or_id=the_id)
|
||||||
|
|
||||||
|
@mock.patch.object(assembly.AssemblyManager, "find")
|
||||||
|
def test_assembly_get_by_name(self, mock_assembly_find):
|
||||||
|
self.make_env()
|
||||||
|
self.shell("assembly show app2")
|
||||||
|
mock_assembly_find.assert_called_once_with(name_or_id='app2')
|
||||||
|
|
||||||
# Plan Tests #
|
# Plan Tests #
|
||||||
@mock.patch.object(plan.PlanManager, "create")
|
@mock.patch.object(plan.PlanManager, "create")
|
||||||
@@ -148,17 +160,20 @@ class TestSolum(base.TestCase):
|
|||||||
self.shell("app list")
|
self.shell("app list")
|
||||||
mock_app_list.assert_called_once_with()
|
mock_app_list.assert_called_once_with()
|
||||||
|
|
||||||
@mock.patch.object(plan.PlanManager, "delete")
|
@mock.patch.object(plan.PlanManager, "find")
|
||||||
def test_app_delete(self, mock_app_delete):
|
def test_app_delete(self, mock_app_find):
|
||||||
self.make_env()
|
self.make_env()
|
||||||
self.shell("app delete fake-id")
|
the_id = str(uuid.uuid4())
|
||||||
mock_app_delete.assert_called_once_with(plan_id='fake-id')
|
self.shell("app delete %s" % the_id)
|
||||||
|
mock_app_find.assert_called_once_with(name_or_id=the_id)
|
||||||
|
mock_app_find.return_value.delete.assert_called_once_with()
|
||||||
|
|
||||||
@mock.patch.object(plan.PlanManager, "get")
|
@mock.patch.object(plan.PlanManager, "find")
|
||||||
def test_app_get(self, mock_app_get):
|
def test_app_get(self, mock_app_find):
|
||||||
self.make_env()
|
self.make_env()
|
||||||
self.shell("app show fake-id")
|
the_id = str(uuid.uuid4())
|
||||||
mock_app_get.assert_called_once_with(plan_id='fake-id')
|
self.shell("app show %s" % the_id)
|
||||||
|
mock_app_find.assert_called_once_with(name_or_id=the_id)
|
||||||
|
|
||||||
# LanguagePack Tests #
|
# LanguagePack Tests #
|
||||||
@mock.patch.object(languagepack.LanguagePackManager, "list")
|
@mock.patch.object(languagepack.LanguagePackManager, "list")
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from solumclient.openstack.common.apiclient import exceptions
|
||||||
from solumclient.openstack.common.apiclient import fake_client
|
from solumclient.openstack.common.apiclient import fake_client
|
||||||
from solumclient.tests import base
|
from solumclient.tests import base
|
||||||
from solumclient.v1 import assembly
|
from solumclient.v1 import assembly
|
||||||
@@ -122,6 +123,28 @@ class AssemblyManagerTest(base.TestCase):
|
|||||||
self.assertEqual(assembly_list[0]['uri'], assemblies[0].uri)
|
self.assertEqual(assembly_list[0]['uri'], assemblies[0].uri)
|
||||||
self.assertEqual(assembly_list[1]['uri'], assemblies[1].uri)
|
self.assertEqual(assembly_list[1]['uri'], assemblies[1].uri)
|
||||||
|
|
||||||
|
def test_find_one(self):
|
||||||
|
fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_list)
|
||||||
|
api_client = sclient.Client(fake_http_client)
|
||||||
|
mgr = assembly.AssemblyManager(api_client)
|
||||||
|
assemblies = mgr.findall(name='database')
|
||||||
|
self.assertEqual(len(assemblies), 1)
|
||||||
|
self.assertIn('Assembly', repr(assemblies[0]))
|
||||||
|
self.assertEqual(assembly_list[0]['uri'], assemblies[0].uri)
|
||||||
|
|
||||||
|
def test_find_one_only(self):
|
||||||
|
fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_list)
|
||||||
|
api_client = sclient.Client(fake_http_client)
|
||||||
|
mgr = assembly.AssemblyManager(api_client)
|
||||||
|
result = mgr.find(name_or_id='database')
|
||||||
|
self.assertEqual(assembly_list[0]['uri'], result.uri)
|
||||||
|
|
||||||
|
def test_find_none(self):
|
||||||
|
fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_list)
|
||||||
|
api_client = sclient.Client(fake_http_client)
|
||||||
|
mgr = assembly.AssemblyManager(api_client)
|
||||||
|
self.assertRaises(exceptions.NotFound, mgr.find, name_or_id='what')
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_create)
|
fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_create)
|
||||||
api_client = sclient.Client(fake_http_client)
|
api_client = sclient.Client(fake_http_client)
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
from solumclient.common import base as solum_base
|
from solumclient.common import base as solum_base
|
||||||
from solumclient.openstack.common.apiclient import base as apiclient_base
|
from solumclient.openstack.common.apiclient import base as apiclient_base
|
||||||
|
from solumclient.openstack.common import uuidutils
|
||||||
|
|
||||||
|
|
||||||
class Assembly(apiclient_base.Resource):
|
class Assembly(apiclient_base.Resource):
|
||||||
@@ -21,7 +22,7 @@ class Assembly(apiclient_base.Resource):
|
|||||||
return "<Assembly %s>" % self._info
|
return "<Assembly %s>" % self._info
|
||||||
|
|
||||||
|
|
||||||
class AssemblyManager(solum_base.CrudManager):
|
class AssemblyManager(solum_base.CrudManager, solum_base.FindMixin):
|
||||||
resource_class = Assembly
|
resource_class = Assembly
|
||||||
collection_key = 'assemblies'
|
collection_key = 'assemblies'
|
||||||
key = 'assembly'
|
key = 'assembly'
|
||||||
@@ -40,3 +41,15 @@ class AssemblyManager(solum_base.CrudManager):
|
|||||||
|
|
||||||
def delete(self, **kwargs):
|
def delete(self, **kwargs):
|
||||||
return super(AssemblyManager, self).delete(base_url="/v1", **kwargs)
|
return super(AssemblyManager, self).delete(base_url="/v1", **kwargs)
|
||||||
|
|
||||||
|
def find(self, **kwargs):
|
||||||
|
if 'assembly_id' in kwargs:
|
||||||
|
return super(AssemblyManager, self).get(base_url="/v1", **kwargs)
|
||||||
|
elif 'name_or_id' in kwargs:
|
||||||
|
name_or_uuid = kwargs['name_or_id']
|
||||||
|
if uuidutils.is_uuid_like(name_or_uuid):
|
||||||
|
return super(AssemblyManager, self).get(
|
||||||
|
base_url="/v1",
|
||||||
|
assembly_id=name_or_uuid)
|
||||||
|
else:
|
||||||
|
return super(AssemblyManager, self).findone(name=name_or_uuid)
|
||||||
|
@@ -16,6 +16,7 @@ import six
|
|||||||
|
|
||||||
from solumclient.common import base as solum_base
|
from solumclient.common import base as solum_base
|
||||||
from solumclient.openstack.common.apiclient import base as apiclient_base
|
from solumclient.openstack.common.apiclient import base as apiclient_base
|
||||||
|
from solumclient.openstack.common import uuidutils
|
||||||
|
|
||||||
|
|
||||||
class Requirement(apiclient_base.Resource):
|
class Requirement(apiclient_base.Resource):
|
||||||
@@ -74,7 +75,7 @@ class Plan(apiclient_base.Resource):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class PlanManager(solum_base.CrudManager):
|
class PlanManager(solum_base.CrudManager, solum_base.FindMixin):
|
||||||
resource_class = Plan
|
resource_class = Plan
|
||||||
collection_key = 'plans'
|
collection_key = 'plans'
|
||||||
key = 'plan'
|
key = 'plan'
|
||||||
@@ -94,6 +95,17 @@ class PlanManager(solum_base.CrudManager):
|
|||||||
def get(self, **kwargs):
|
def get(self, **kwargs):
|
||||||
return super(PlanManager, self).get(base_url="/v1", **kwargs)
|
return super(PlanManager, self).get(base_url="/v1", **kwargs)
|
||||||
|
|
||||||
|
def find(self, **kwargs):
|
||||||
|
if 'plan_id' in kwargs:
|
||||||
|
return super(PlanManager, self).get(base_url="/v1", **kwargs)
|
||||||
|
elif 'name_or_id' in kwargs:
|
||||||
|
name_or_uuid = kwargs['name_or_id']
|
||||||
|
if uuidutils.is_uuid_like(name_or_uuid):
|
||||||
|
return super(PlanManager, self).get(base_url="/v1",
|
||||||
|
plan_id=name_or_uuid)
|
||||||
|
else:
|
||||||
|
return super(PlanManager, self).findone(name=name_or_uuid)
|
||||||
|
|
||||||
def put(self, plan, **kwargs):
|
def put(self, plan, **kwargs):
|
||||||
kwargs = self._filter_kwargs(kwargs)
|
kwargs = self._filter_kwargs(kwargs)
|
||||||
kwargs['data'] = plan
|
kwargs['data'] = plan
|
||||||
|
Reference in New Issue
Block a user