Getting rid of 'name' and 'tags' for workbook create/update
Change-Id: I745af78861d098f4f8dedbcf1045d55cdd6e328b
This commit is contained in:
@@ -22,31 +22,15 @@ class Workbook(base.Resource):
|
||||
class WorkbookManager(base.ResourceManager):
|
||||
resource_class = Workbook
|
||||
|
||||
def create(self, name, tags=None, definition=None):
|
||||
self._ensure_not_empty(name=name)
|
||||
def create(self, definition):
|
||||
self._ensure_not_empty(definition=definition)
|
||||
|
||||
data = {
|
||||
'name': name,
|
||||
'tags': tags,
|
||||
}
|
||||
return self._create('/workbooks', {'definition': definition})
|
||||
|
||||
if definition:
|
||||
data.update({'definition': definition})
|
||||
def update(self, definition):
|
||||
self._ensure_not_empty(definition=definition)
|
||||
|
||||
return self._create('/workbooks', data)
|
||||
|
||||
def update(self, name, tags=None, definition=None):
|
||||
self._ensure_not_empty(name=name)
|
||||
|
||||
data = {
|
||||
'name': name,
|
||||
'tags': tags,
|
||||
}
|
||||
|
||||
if definition:
|
||||
data.update({'definition': definition})
|
||||
|
||||
return self._update('/workbooks/%s' % name, data)
|
||||
return self._update('/workbooks', {'definition': definition})
|
||||
|
||||
def list(self):
|
||||
return self._list('/workbooks', response_key='workbooks')
|
||||
|
@@ -69,9 +69,7 @@ class Get(show.ShowOne):
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(Get, self).get_parser(prog_name)
|
||||
|
||||
parser.add_argument(
|
||||
'id',
|
||||
help='Execution identifier')
|
||||
parser.add_argument('id', help='Execution identifier')
|
||||
|
||||
return parser
|
||||
|
||||
@@ -87,17 +85,21 @@ class Create(show.ShowOne):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(Create, self).get_parser(prog_name)
|
||||
|
||||
parser.add_argument(
|
||||
'workflow_name',
|
||||
help='Execution workflow')
|
||||
help='Execution workflow'
|
||||
)
|
||||
parser.add_argument(
|
||||
'workflow_input',
|
||||
nargs='?',
|
||||
help='Workflow input')
|
||||
help='Workflow input'
|
||||
)
|
||||
parser.add_argument(
|
||||
'params',
|
||||
nargs='?',
|
||||
help='Workflow additional parameters')
|
||||
help='Workflow additional parameters'
|
||||
)
|
||||
|
||||
return parser
|
||||
|
||||
@@ -132,9 +134,7 @@ class Delete(command.Command):
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(Delete, self).get_parser(prog_name)
|
||||
|
||||
parser.add_argument(
|
||||
'id',
|
||||
help='Execution identifier')
|
||||
parser.add_argument('id', help='Execution identifier')
|
||||
|
||||
return parser
|
||||
|
||||
@@ -150,11 +150,13 @@ class Update(show.ShowOne):
|
||||
|
||||
parser.add_argument(
|
||||
'id',
|
||||
help='Execution identifier')
|
||||
help='Execution identifier'
|
||||
)
|
||||
parser.add_argument(
|
||||
'state',
|
||||
choices=['RUNNING', 'SUSPENDED', 'STOPPED', 'SUCCESS', 'ERROR'],
|
||||
help='Execution state')
|
||||
help='Execution state'
|
||||
)
|
||||
|
||||
return parser
|
||||
|
||||
@@ -171,9 +173,8 @@ class GetInput(command.Command):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(GetInput, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'id',
|
||||
help='Execution ID')
|
||||
|
||||
parser.add_argument('id', help='Execution ID')
|
||||
|
||||
return parser
|
||||
|
||||
@@ -195,9 +196,8 @@ class GetOutput(command.Command):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(GetOutput, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'id',
|
||||
help='Execution ID')
|
||||
|
||||
parser.add_argument('id', help='Execution ID')
|
||||
|
||||
return parser
|
||||
|
||||
|
@@ -70,9 +70,12 @@ class Get(show.ShowOne):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(Get, self).get_parser(prog_name)
|
||||
|
||||
parser.add_argument(
|
||||
'name',
|
||||
help='Workbook name')
|
||||
help='Workbook name'
|
||||
)
|
||||
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
@@ -87,16 +90,9 @@ class Create(show.ShowOne):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(Create, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'name',
|
||||
help='Workbook name')
|
||||
parser.add_argument(
|
||||
'tags',
|
||||
nargs='?',
|
||||
help='Workbook tags separated by ","')
|
||||
|
||||
parser.add_argument(
|
||||
'definition',
|
||||
nargs='?',
|
||||
type=argparse.FileType('r'),
|
||||
help='Workbook definition file'
|
||||
)
|
||||
@@ -104,15 +100,8 @@ class Create(show.ShowOne):
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
if parsed_args.definition:
|
||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
||||
.create(parsed_args.name,
|
||||
str(parsed_args.tags).split(','),
|
||||
parsed_args.definition.read())
|
||||
else:
|
||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
||||
.create(parsed_args.name,
|
||||
str(parsed_args.tags).split(','), None)
|
||||
.create(parsed_args.definition.read())
|
||||
|
||||
return format(workbook)
|
||||
|
||||
@@ -122,9 +111,8 @@ class Delete(command.Command):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(Delete, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'name',
|
||||
help='Workbook name')
|
||||
|
||||
parser.add_argument('name', help='Workbook name')
|
||||
|
||||
return parser
|
||||
|
||||
@@ -137,16 +125,9 @@ class Update(show.ShowOne):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(Update, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'name',
|
||||
help='Workbook name')
|
||||
parser.add_argument(
|
||||
'tags',
|
||||
nargs='?',
|
||||
help='Workbook tags separated by ","')
|
||||
|
||||
parser.add_argument(
|
||||
'definition',
|
||||
nargs='?',
|
||||
type=argparse.FileType('r'),
|
||||
help='Workbook definition file'
|
||||
)
|
||||
@@ -154,40 +135,10 @@ class Update(show.ShowOne):
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
if parsed_args.definition:
|
||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
||||
.update(parsed_args.name,
|
||||
str(parsed_args.tags).split(','),
|
||||
parsed_args.definition.read())
|
||||
.update(parsed_args.definition.read())
|
||||
|
||||
return format(workbook)
|
||||
else:
|
||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
||||
.update(parsed_args.name,
|
||||
tags=str(parsed_args.tags).split(','))
|
||||
return format(workbook)
|
||||
|
||||
|
||||
class UploadDefinition(command.Command):
|
||||
"""Upload workbook definition."""
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(UploadDefinition, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'name',
|
||||
help='Workbook name')
|
||||
parser.add_argument(
|
||||
'path',
|
||||
type=argparse.FileType('r'),
|
||||
help='Workbook definition file')
|
||||
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
workbook = workbooks.WorkbookManager(self.app.client)\
|
||||
.update(parsed_args.name,
|
||||
definition=parsed_args.path.read())
|
||||
|
||||
self.app.stdout.write(workbook.definition or "\n")
|
||||
|
||||
|
||||
class GetDefinition(command.Command):
|
||||
@@ -195,9 +146,8 @@ class GetDefinition(command.Command):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(GetDefinition, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'name',
|
||||
help='Workbook name')
|
||||
|
||||
parser.add_argument('name', help='Workbook name')
|
||||
|
||||
return parser
|
||||
|
||||
|
@@ -235,8 +235,6 @@ class MistralShell(app.App):
|
||||
'workbook-create': mistralclient.commands.v2.workbooks.Create,
|
||||
'workbook-delete': mistralclient.commands.v2.workbooks.Delete,
|
||||
'workbook-update': mistralclient.commands.v2.workbooks.Update,
|
||||
'workbook-upload-definition':
|
||||
mistralclient.commands.v2.workbooks.UploadDefinition,
|
||||
'workbook-get-definition':
|
||||
mistralclient.commands.v2.workbooks.GetDefinition,
|
||||
'execution-list': mistralclient.commands.v2.executions.List,
|
||||
|
@@ -72,5 +72,7 @@ class BaseCommandTest(unittest2.TestCase):
|
||||
|
||||
def call(self, command, app_args=[], prog_name=''):
|
||||
cmd = command(self.app, app_args)
|
||||
|
||||
parsed_args = cmd.get_parser(prog_name).parse_args(app_args)
|
||||
|
||||
return cmd.take_action(parsed_args)
|
||||
|
@@ -31,7 +31,12 @@ WORKBOOK_DICT = {
|
||||
|
||||
|
||||
WB_DEF = """
|
||||
Workflows:
|
||||
---
|
||||
version: '2.0
|
||||
|
||||
name: wb
|
||||
|
||||
workflows:
|
||||
wf1:
|
||||
tasks:
|
||||
task1:
|
||||
@@ -45,19 +50,23 @@ WORKBOOK_WITH_DEF = workbooks.Workbook(mock, WB_WITH_DEF_DICT)
|
||||
|
||||
|
||||
class TestCLIWorkbooksV2(base.BaseCommandTest):
|
||||
@mock.patch('argparse.open', create=True)
|
||||
@mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.create')
|
||||
def test_create(self, mock):
|
||||
def test_create(self, mock, mock_open):
|
||||
mock.return_value = WORKBOOK
|
||||
mock_open.return_value = mock.MagicMock(spec=file)
|
||||
|
||||
result = self.call(workbook_cmd.Create, app_args=['name'])
|
||||
result = self.call(workbook_cmd.Create, app_args=['wb.yaml'])
|
||||
|
||||
self.assertEqual(('a', 'a, b', '1', '1'), result[1])
|
||||
|
||||
@mock.patch('argparse.open', create=True)
|
||||
@mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.update')
|
||||
def test_update(self, mock):
|
||||
def test_update(self, mock, mock_open):
|
||||
mock.return_value = WORKBOOK
|
||||
mock_open.return_value = mock.MagicMock(spec=file)
|
||||
|
||||
result = self.call(workbook_cmd.Update, app_args=['name'])
|
||||
result = self.call(workbook_cmd.Update, app_args=['definition'])
|
||||
|
||||
self.assertEqual(('a', 'a, b', '1', '1'), result[1])
|
||||
|
||||
@@ -81,21 +90,7 @@ class TestCLIWorkbooksV2(base.BaseCommandTest):
|
||||
def test_delete(self, mock):
|
||||
self.assertIsNone(self.call(workbook_cmd.Delete, app_args=['name']))
|
||||
|
||||
@mock.patch('argparse.open', create=True)
|
||||
@mock.patch(
|
||||
'mistralclient.api.v2.workbooks.WorkbookManager.update'
|
||||
)
|
||||
def test_upload_definition(self, mock, mock_open):
|
||||
mock.return_value = WORKBOOK_WITH_DEF
|
||||
mock_open.return_value = mock.MagicMock(spec=file)
|
||||
|
||||
result = self.call(workbook_cmd.UploadDefinition,
|
||||
app_args=['name', '1.txt'])
|
||||
|
||||
self.assertIsNone(result)
|
||||
|
||||
@mock.patch('mistralclient.api.v2.workbooks.'
|
||||
'WorkbookManager.get')
|
||||
@mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.get')
|
||||
def test_get_definition(self, mock):
|
||||
mock.return_value = WORKBOOK_WITH_DEF
|
||||
|
||||
|
@@ -24,62 +24,58 @@ WB_DEF = """
|
||||
---
|
||||
version: 2.0
|
||||
|
||||
name: wb
|
||||
|
||||
workflows:
|
||||
wf1:
|
||||
type: direct
|
||||
parameters:
|
||||
input:
|
||||
- param1
|
||||
- param2
|
||||
|
||||
tasks:
|
||||
task1:
|
||||
action: std.http url="localhost:8989"
|
||||
on-success: test_subsequent
|
||||
on-success:
|
||||
- test_subsequent
|
||||
|
||||
test_subsequent:
|
||||
action: std.http url="http://some_url"
|
||||
parameters:
|
||||
server_id: 1
|
||||
action: std.http url="http://some_url" server_id=1
|
||||
"""
|
||||
|
||||
WORKBOOK = {
|
||||
'name': "my_workbook",
|
||||
'tags': ['deployment', 'demo'],
|
||||
'definition': WB_DEF
|
||||
}
|
||||
WORKBOOK = {'definition': WB_DEF}
|
||||
|
||||
|
||||
URL_TEMPLATE = '/workbooks'
|
||||
URL_TEMPLATE_NAME = '/workbooks/%s'
|
||||
URL_TEMPLATE_DEFINITION = '/workbooks/%s/definition'
|
||||
|
||||
|
||||
class TestWorkbooksV2(base.BaseClientV2Test):
|
||||
def test_create(self):
|
||||
mock = self.mock_http_post(content=WORKBOOK)
|
||||
|
||||
wb = self.workbooks.create(WORKBOOK['name'],
|
||||
WORKBOOK['tags'],
|
||||
WORKBOOK['definition'])
|
||||
wb = self.workbooks.create(WORKBOOK['definition'])
|
||||
|
||||
self.assertIsNotNone(wb)
|
||||
self.assertEqual(workbooks.Workbook(self.workbooks,
|
||||
WORKBOOK).__dict__, wb.__dict__)
|
||||
self.assertEqual(
|
||||
workbooks.Workbook(self.workbooks, WORKBOOK).__dict__,
|
||||
wb.__dict__
|
||||
)
|
||||
|
||||
mock.assert_called_once_with(URL_TEMPLATE, json.dumps(WORKBOOK))
|
||||
|
||||
def test_update(self):
|
||||
mock = self.mock_http_put(content=WORKBOOK)
|
||||
|
||||
wb = self.workbooks.update(WORKBOOK['name'],
|
||||
WORKBOOK['tags'],
|
||||
WORKBOOK['definition'])
|
||||
wb = self.workbooks.update(WORKBOOK['definition'])
|
||||
|
||||
self.assertIsNotNone(wb)
|
||||
self.assertEqual(workbooks.Workbook(self.workbooks,
|
||||
WORKBOOK).__dict__, wb.__dict__)
|
||||
mock.assert_called_once_with(
|
||||
URL_TEMPLATE_NAME % WORKBOOK['name'],
|
||||
json.dumps(WORKBOOK))
|
||||
self.assertEqual(
|
||||
workbooks.Workbook(self.workbooks, WORKBOOK).__dict__,
|
||||
wb.__dict__
|
||||
)
|
||||
|
||||
mock.assert_called_once_with(URL_TEMPLATE, json.dumps(WORKBOOK))
|
||||
|
||||
def test_list(self):
|
||||
mock = self.mock_http_get(content={'workbooks': [WORKBOOK]})
|
||||
@@ -87,25 +83,32 @@ class TestWorkbooksV2(base.BaseClientV2Test):
|
||||
workbook_list = self.workbooks.list()
|
||||
|
||||
self.assertEqual(1, len(workbook_list))
|
||||
|
||||
wb = workbook_list[0]
|
||||
|
||||
self.assertEqual(workbooks.Workbook(self.workbooks,
|
||||
WORKBOOK).__dict__, wb.__dict__)
|
||||
self.assertEqual(
|
||||
workbooks.Workbook(self.workbooks, WORKBOOK).__dict__,
|
||||
wb.__dict__
|
||||
)
|
||||
|
||||
mock.assert_called_once_with(URL_TEMPLATE)
|
||||
|
||||
def test_get(self):
|
||||
mock = self.mock_http_get(content=WORKBOOK)
|
||||
|
||||
wb = self.workbooks.get(WORKBOOK['name'])
|
||||
wb = self.workbooks.get('wb')
|
||||
|
||||
self.assertIsNotNone(wb)
|
||||
self.assertEqual(workbooks.Workbook(self.workbooks,
|
||||
WORKBOOK).__dict__, wb.__dict__)
|
||||
mock.assert_called_once_with(URL_TEMPLATE_NAME % WORKBOOK['name'])
|
||||
self.assertEqual(
|
||||
workbooks.Workbook(self.workbooks, WORKBOOK).__dict__,
|
||||
wb.__dict__
|
||||
)
|
||||
|
||||
mock.assert_called_once_with(URL_TEMPLATE_NAME % 'wb')
|
||||
|
||||
def test_delete(self):
|
||||
mock = self.mock_http_delete(status_code=204)
|
||||
|
||||
self.workbooks.delete(WORKBOOK['name'])
|
||||
self.workbooks.delete('wb')
|
||||
|
||||
mock.assert_called_once_with(URL_TEMPLATE_NAME % WORKBOOK['name'])
|
||||
mock.assert_called_once_with(URL_TEMPLATE_NAME % 'wb')
|
||||
|
Reference in New Issue
Block a user