Consolidate Solum and Builder API
- Modify the CLI to make languagepack commands talk to the solum-api Related to the following API side change https://review.openstack.org/#/c/157639/ Change-Id: I7df04bd3b89007e14e0a830a8c79f97d78106d6f Closes-bug: 1423778
This commit is contained in:
@@ -15,7 +15,6 @@
|
||||
|
||||
import os
|
||||
|
||||
from solumclient.builder import client as builder_client
|
||||
from solumclient import client as solum_client
|
||||
from solumclient.common import exc
|
||||
|
||||
@@ -48,8 +47,6 @@ class CommandsBase(object):
|
||||
if 'os_auth_token' in client_args:
|
||||
del client_args['os_auth_token']
|
||||
|
||||
self.bldclient = builder_client.get_client(parsed.solum_api_version,
|
||||
**client_args)
|
||||
self.client = solum_client.get_client(parsed.solum_api_version,
|
||||
**client_args)
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ from solumclient.common import yamlutils
|
||||
from solumclient.openstack.common.apiclient import exceptions
|
||||
from solumclient.openstack.common import cliutils
|
||||
from solumclient.v1 import assembly as cli_assem
|
||||
from solumclient.v1 import languagepack as cli_lp
|
||||
from solumclient.v1 import pipeline as cli_pipe
|
||||
from solumclient.v1 import plan as cli_plan
|
||||
|
||||
@@ -397,71 +398,24 @@ class LanguagePackCommands(cli_utils.CommandsBase):
|
||||
|
||||
Available commands:
|
||||
|
||||
solum languagepack create <NAME> <GIT_REPO> <METADATA>
|
||||
Create a new language pack from a git repo.
|
||||
|
||||
solum languagepack list
|
||||
Print and index of all available language packs.
|
||||
|
||||
solum languagepack show <LP>
|
||||
Print the details of a language pack.
|
||||
|
||||
solum languagepack create <LPFILE>
|
||||
Create a new language pack from a file.
|
||||
|
||||
solum languagepack build <NAME> <GIT_REPO> <METADATA>
|
||||
Create a new language pack from a git repo.
|
||||
|
||||
solum languagepack delete <LP>
|
||||
Destroy a language pack.
|
||||
|
||||
solum languagepack logs <UUID>
|
||||
Show logs for a language pack.
|
||||
"""
|
||||
|
||||
def create(self):
|
||||
"""Create a language pack."""
|
||||
self.parser.add_argument('lp_file',
|
||||
help="Language pack file.")
|
||||
self.parser._names['lp_file'] = 'languagepack file'
|
||||
args, _ = self.parser.parse_known_args()
|
||||
with open(args.lp_file) as lang_pack_file:
|
||||
try:
|
||||
data = json.load(lang_pack_file)
|
||||
except ValueError as exc:
|
||||
print("Error in language pack file: %s", str(exc))
|
||||
sys.exit(1)
|
||||
|
||||
languagepack = self.client.languagepacks.create(**data)
|
||||
fields = ['uuid', 'name', 'description', 'compiler_versions',
|
||||
'os_platform']
|
||||
data = dict([(f, getattr(languagepack, f, ''))
|
||||
for f in fields])
|
||||
cliutils.print_dict(data, wrap=72)
|
||||
|
||||
def delete(self):
|
||||
"""Delete a language pack."""
|
||||
self.parser.add_argument('lp_id',
|
||||
help="Language pack id")
|
||||
self.parser._names['lp_id'] = 'languagepack'
|
||||
args, _ = self.parser.parse_known_args()
|
||||
self.bldclient.images.delete(lp_id=args.lp_id)
|
||||
|
||||
def list(self):
|
||||
"""List all language packs."""
|
||||
fields = ['uuid', 'name', 'description', 'state', 'source_uri']
|
||||
response = self.bldclient.images.list()
|
||||
cliutils.print_list(response, fields)
|
||||
|
||||
def show(self):
|
||||
"""Get a language pack."""
|
||||
self.parser.add_argument('lp_id',
|
||||
help="Language pack id")
|
||||
self.parser._names['lp_id'] = 'languagepack'
|
||||
args, _ = self.parser.parse_known_args()
|
||||
response = self.bldclient.images.find(name_or_id=args.lp_id)
|
||||
fields = ['uuid', 'name', 'description', 'state', 'source_uri']
|
||||
data = dict([(f, getattr(response, f, ''))
|
||||
for f in fields])
|
||||
cliutils.print_dict(data, wrap=72)
|
||||
|
||||
def build(self):
|
||||
"""Build a custom language pack."""
|
||||
self.parser.add_argument('name',
|
||||
help="Language pack name.")
|
||||
self.parser.add_argument('git_url',
|
||||
@@ -481,9 +435,9 @@ Available commands:
|
||||
message = ("Malformed metadata file: %s" % str(excp))
|
||||
raise exc.CommandError(message=message)
|
||||
try:
|
||||
response = self.bldclient.images.create(name=args.name,
|
||||
source_uri=args.git_url,
|
||||
lp_metadata=lp_metadata)
|
||||
response = self.client.languagepacks.create(
|
||||
name=args.name, source_uri=args.git_url,
|
||||
lp_metadata=lp_metadata)
|
||||
except exceptions.Conflict as conflict:
|
||||
message = ("%s" % conflict.message)
|
||||
raise exc.CommandError(message=message)
|
||||
@@ -493,6 +447,60 @@ Available commands:
|
||||
for f in fields])
|
||||
cliutils.print_dict(data, wrap=72)
|
||||
|
||||
def delete(self):
|
||||
"""Delete a language pack."""
|
||||
self.parser.add_argument('lp_id',
|
||||
help="Language pack id")
|
||||
self.parser._names['lp_id'] = 'languagepack'
|
||||
args, _ = self.parser.parse_known_args()
|
||||
self.client.languagepacks.delete(lp_id=args.lp_id)
|
||||
|
||||
def list(self):
|
||||
"""List all language packs."""
|
||||
fields = ['uuid', 'name', 'description', 'state', 'source_uri']
|
||||
response = self.client.languagepacks.list()
|
||||
cliutils.print_list(response, fields)
|
||||
|
||||
def show(self):
|
||||
"""Get a language pack."""
|
||||
self.parser.add_argument('lp_id',
|
||||
help="Language pack id")
|
||||
self.parser._names['lp_id'] = 'languagepack'
|
||||
args, _ = self.parser.parse_known_args()
|
||||
response = self.client.languagepacks.find(name_or_id=args.lp_id)
|
||||
fields = ['uuid', 'name', 'description', 'state', 'source_uri']
|
||||
data = dict([(f, getattr(response, f, ''))
|
||||
for f in fields])
|
||||
cliutils.print_dict(data, wrap=72)
|
||||
|
||||
def logs(self):
|
||||
"""Get Logs."""
|
||||
self.parser.add_argument('lp_id',
|
||||
help="languagepack uuid or name")
|
||||
args, _ = self.parser.parse_known_args()
|
||||
response = cli_lp.LanguagePackManager(self.client).logs(
|
||||
lp_id=str(args.lp_id))
|
||||
|
||||
fields = ["resource_uuid"]
|
||||
for log in response:
|
||||
strategy_info = json.loads(log.strategy_info)
|
||||
if log.strategy == 'local':
|
||||
if 'local_storage' not in fields:
|
||||
fields.append('local_storage')
|
||||
log.local_storage = log.location
|
||||
elif log.strategy == 'swift':
|
||||
if 'swift_container' not in fields:
|
||||
fields.append('swift_container')
|
||||
if 'swift_path' not in fields:
|
||||
fields.append('swift_path')
|
||||
log.swift_container = strategy_info['container']
|
||||
log.swift_path = log.location
|
||||
else:
|
||||
if 'location' not in fields:
|
||||
fields.append('location')
|
||||
|
||||
cliutils.print_list(response, fields)
|
||||
|
||||
|
||||
class AppCommands(cli_utils.CommandsBase):
|
||||
"""Commands for working with applications.
|
||||
@@ -629,7 +637,7 @@ Available commands:
|
||||
if args.langpack is not None:
|
||||
plan_definition['artifacts'][0]['language_pack'] = args.langpack
|
||||
elif plan_definition['artifacts'][0].get('language_pack') is None:
|
||||
langpacks = self.bldclient.images.list()
|
||||
langpacks = self.client.languagepacks.list()
|
||||
lpnames = [lp.name for lp in langpacks]
|
||||
fields = ['uuid', 'name', 'description', 'state', 'source_uri']
|
||||
cliutils.print_list(langpacks, fields)
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
# under the License.
|
||||
|
||||
import collections
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
import uuid
|
||||
@@ -24,7 +23,6 @@ import six
|
||||
from stevedore import extension
|
||||
from testtools import matchers
|
||||
|
||||
from solumclient.builder.v1 import image
|
||||
from solumclient.common import yamlutils
|
||||
from solumclient.openstack.common.apiclient import auth
|
||||
from solumclient.openstack.common import cliutils
|
||||
@@ -337,57 +335,37 @@ class TestSolum(base.TestCase):
|
||||
expected_show_pub_keys_args)
|
||||
|
||||
# LanguagePack Tests #
|
||||
@mock.patch.object(image.ImageManager, "list")
|
||||
@mock.patch.object(languagepack.LanguagePackManager, "list")
|
||||
def test_languagepack_list(self, mock_lp_list):
|
||||
self.make_env()
|
||||
self.shell("languagepack list")
|
||||
mock_lp_list.assert_called_once()
|
||||
|
||||
@mock.patch.object(cliutils, "print_dict")
|
||||
@mock.patch.object(languagepack.LanguagePackManager, "create")
|
||||
def test_languagepack_create(self, mock_lp_create, mock_print_dict):
|
||||
def test_languagepack_create(self, mock_lp_create):
|
||||
FakeResource = collections.namedtuple("FakeResource",
|
||||
"uuid name description "
|
||||
"compiler_versions os_platform")
|
||||
|
||||
mock_lp_create.return_value = FakeResource(
|
||||
'foo', 'foo', 'foo', 'foo', 'foo')
|
||||
expected_printed_dict_args = mock_lp_create.return_value._asdict()
|
||||
lp_data = json.loads(languagepack_file_data)
|
||||
mopen = mock.mock_open(read_data=languagepack_file_data)
|
||||
with mock.patch('%s.open' % solum.__name__, mopen, create=True):
|
||||
self.make_env()
|
||||
self.shell("languagepack create /dev/null")
|
||||
mock_lp_create.assert_called_once_with(**lp_data)
|
||||
mock_print_dict.assert_called_once_with(
|
||||
expected_printed_dict_args,
|
||||
wrap=72)
|
||||
|
||||
@mock.patch.object(image.ImageManager, "create")
|
||||
def test_languagepack_build(self, mock_image_build):
|
||||
FakeResource = collections.namedtuple("FakeResource",
|
||||
"uuid name description "
|
||||
"compiler_versions os_platform")
|
||||
mock_image_build.return_value = FakeResource(
|
||||
'foo', 'foo', 'foo', 'foo', 'foo')
|
||||
lp_metadata = '{"OS": "Ubuntu"}'
|
||||
mopen = mock.mock_open(read_data=lp_metadata)
|
||||
with mock.patch('%s.open' % solum.__name__, mopen, create=True):
|
||||
self.make_env()
|
||||
self.shell("languagepack build lp_name github.com/test "
|
||||
self.shell("languagepack create lp_name github.com/test "
|
||||
"--lp_metadata=/dev/null")
|
||||
mock_image_build.assert_called_once_with(
|
||||
mock_lp_create.assert_called_once_with(
|
||||
name='lp_name',
|
||||
source_uri='github.com/test',
|
||||
lp_metadata=lp_metadata)
|
||||
|
||||
@mock.patch.object(image.ImageManager, "delete")
|
||||
@mock.patch.object(languagepack.LanguagePackManager, "delete")
|
||||
def test_languagepack_delete(self, mock_lp_delete):
|
||||
self.make_env()
|
||||
self.shell("languagepack delete fake-lp-id")
|
||||
mock_lp_delete.assert_called_once_with(lp_id='fake-lp-id')
|
||||
|
||||
@mock.patch.object(image.ImageManager, "find")
|
||||
@mock.patch.object(languagepack.LanguagePackManager, "find")
|
||||
def test_languagepack_get(self, mock_lp_get):
|
||||
self.make_env()
|
||||
self.shell("languagepack show fake-lp-id1")
|
||||
|
||||
@@ -21,6 +21,11 @@ class LanguagePack(apiclient_base.Resource):
|
||||
return "<LanguagePack %s>" % self._info
|
||||
|
||||
|
||||
class UserLog(apiclient_base.Resource):
|
||||
def __repr__(self):
|
||||
return "<Log %s>" % self._info
|
||||
|
||||
|
||||
class LanguagePackManager(solum_base.CrudManager):
|
||||
resource_class = LanguagePack
|
||||
collection_key = 'language_packs'
|
||||
@@ -40,3 +45,14 @@ class LanguagePackManager(solum_base.CrudManager):
|
||||
def delete(self, **kwargs):
|
||||
return super(LanguagePackManager,
|
||||
self).delete(base_url="/v1", **kwargs)
|
||||
|
||||
def find(self, **kwargs):
|
||||
name_or_uuid = kwargs['name_or_id']
|
||||
return super(LanguagePackManager, self).get(base_url="/v1",
|
||||
lp_id=name_or_uuid)
|
||||
|
||||
def logs(self, **kwargs):
|
||||
self.resource_class = UserLog
|
||||
url = self.build_url(base_url="/v1", **kwargs)
|
||||
url += '/logs/'
|
||||
return self._list(url)
|
||||
|
||||
Reference in New Issue
Block a user