Revert Add name argument to Sync template feature.

Extra columns are added to the kingbird
database to identify the job.
Hence there is no need of "name" argument in
"Sync template" feature.
Added test-cases for the same.

Change-Id: I6a412e550c3cd1ded7088af484dd92f6f2f79e39
This commit is contained in:
mounikasreeram 2018-01-25 12:09:17 +05:30
parent 87687bc662
commit 7667932ab8
5 changed files with 85 additions and 142 deletions

View File

@ -97,6 +97,7 @@ Eg::
target: target:
- fake_target_region_1 - fake_target_region_1
- fake_target_region_2 - fake_target_region_2
force: "True"
Sample input file for .json Sample input file for .json
@ -112,11 +113,13 @@ Eg::
"fake_resource_2" "fake_resource_2"
], ],
"source":["fake_source_region"], "source":["fake_source_region"],
"target":["fake_target_region_1","fake_target_region_2"] "target":["fake_target_region_1","fake_target_region_2"],
"force":"True"
} }
] ]
} }
Note: "force" is optional in .yaml and .json files.
Useful Links Useful Links
============ ============

View File

@ -83,8 +83,7 @@ class ResourceManager(object):
json_object = json_response_key['job_status'] json_object = json_response_key['job_status']
resource = [] resource = []
resource.append(self.resource_class( resource.append(self.resource_class(
self, name=json_object['name'], self, id=json_object['id'],
id=json_object['id'],
status=json_object['status'], status=json_object['status'],
created_at=json_object['created_at'])) created_at=json_object['created_at']))
return resource return resource
@ -98,8 +97,7 @@ class ResourceManager(object):
resource = [] resource = []
for json_object in json_objects: for json_object in json_objects:
resource.append(self.resource_class( resource.append(self.resource_class(
self, name=json_object['name'], self, id=json_object['id'],
id=json_object['id'],
status=json_object['sync_status'], status=json_object['sync_status'],
created_at=json_object['created_at'], created_at=json_object['created_at'],
updated_at=json_object['updated_at'])) updated_at=json_object['updated_at']))

View File

@ -21,9 +21,8 @@ class Resource(base.Resource):
def __init__(self, manager, status, created_at, updated_at=None, def __init__(self, manager, status, created_at, updated_at=None,
resource_type=None, target_region=None, resource_type=None, target_region=None,
source_region=None, name=None, id=None, resource_name=None,): source_region=None, id=None, resource_name=None,):
self.manager = manager self.manager = manager
self.name = name
self.id = id self.id = id
self.source_region = source_region self.source_region = source_region
self.target_region = target_region self.target_region = target_region

View File

@ -23,7 +23,6 @@ from kingbirdclient import exceptions
def format(resources=None): def format(resources=None):
columns = ( columns = (
'NAME',
'ID', 'ID',
'STATUS', 'STATUS',
'CREATED_AT', 'CREATED_AT',
@ -32,7 +31,6 @@ def format(resources=None):
if resources: if resources:
data = ( data = (
resources.name,
resources.id, resources.id,
resources.status, resources.status,
resources.created_at, resources.created_at,
@ -95,26 +93,6 @@ def sync_format(resources=None):
return columns, data return columns, data
def template_sync_format(resources=None):
columns = (
'NAME',
'STATUS',
'CREATED_AT',
)
if resources:
data = (
resources.name,
resources.status,
resources.created_at,
)
else:
data = (tuple('<none>' for _ in range(len(columns))),)
return columns, data
class ResourceSync(base.KingbirdLister): class ResourceSync(base.KingbirdLister):
"""Sync Resources from One region to other.""" """Sync Resources from One region to other."""
@ -173,71 +151,65 @@ class TemplateResourceSync(base.KingbirdLister):
"""Sync multiple resource-types to multiple regions.""" """Sync multiple resource-types to multiple regions."""
def _get_format_function(self): def _get_format_function(self):
return template_sync_format return sync_format
def get_parser(self, parsed_args): def get_parser(self, parsed_args):
parser = super(TemplateResourceSync, self).get_parser(parsed_args) parser = super(TemplateResourceSync, self).get_parser(parsed_args)
parser.add_argument( parser.add_argument(
'--template', 'template',
required=True,
help='Specify the name of an input file in .yaml/.yml/.json.' help='Specify the name of an input file in .yaml/.yml/.json.'
) )
parser.add_argument(
'--name',
required=True,
help='Name of the job.'
)
return parser return parser
def _get_resources(self, parsed_args): def _get_resources(self, parsed_args):
kingbird_client = self.app.client_manager.sync_engine kingbird_client = self.app.client_manager.sync_engine
kwargs = dict() kwargs = dict()
sync_template = parsed_args.template sync_template = parsed_args.template
kwargs['name'] = parsed_args.name try:
if sync_template.endswith('.yaml') or sync_template.endswith('.yml') \ with open(sync_template) as template_data:
or sync_template.endswith('.json'): if sync_template.endswith('.yaml') or sync_template.endswith('.yml') \
try: or sync_template.endswith('.json'):
if sync_template.endswith('.json'): try:
with open(sync_template) as json_data: if sync_template.endswith('.json'):
data = json.load(json_data) data = json.load(template_data)
else:
data = yaml.load(template_data)
except Exception:
raise exceptions.TemplateError(
'Syntactical errors in the template')
else: else:
data = yaml.load(open(sync_template)) raise exceptions.TemplateError(
except Exception: 'Invalid extension.Provide .yaml/.yml/.json template')
raise exceptions.TemplateError( for iteration in data['Sync']:
'Syntactical errors in the template') if 'source' not in iteration:
else: raise exceptions.TemplateError(
raise exceptions.TemplateError( 'source_region parameter is missing in template')
'Provide a template with a valid extension(.yaml/.yml/.json)') if not iteration['source']:
for iteration in data['Sync']: raise exceptions.TemplateError(
if 'source' not in iteration: 'source_region parameter value is missing')
raise exceptions.TemplateError( if 'target' not in iteration:
'source_region parameter is missing in template') raise exceptions.TemplateError(
if not iteration['source']: 'target_region parameter is missing in template')
raise exceptions.TemplateError( if not iteration['target']:
'source_region parameter value is missing') raise exceptions.TemplateError(
if 'target' not in iteration: 'target_region parameter value is missing')
raise exceptions.TemplateError( if 'resource_type' not in iteration:
'target_region parameter is missing in template') raise exceptions.TemplateError(
if not iteration['target']: 'resource_type parameter is missing in template')
raise exceptions.TemplateError( if not iteration['resource_type']:
'target_region parameter value is missing') raise exceptions.TemplateError(
if 'resource_type' not in iteration: 'resource_type parameter value is missing')
raise exceptions.TemplateError( if 'resources' not in iteration:
'resource_type parameter is missing in template') raise exceptions.TemplateError(
if not iteration['resource_type']: 'resources parameter is missing in template')
raise exceptions.TemplateError( if not iteration['resources']:
'resource_type parameter value is missing') raise exceptions.TemplateError(
if 'resources' not in iteration: 'resources parameter value is missing')
raise exceptions.TemplateError( except Exception:
'resources parameter is missing in template') raise
if not iteration['resources']:
raise exceptions.TemplateError(
'resources parameter value is missing')
kwargs.update(data) kwargs.update(data)
return kingbird_client.sync_manager.sync_resources(**kwargs) return kingbird_client.sync_manager.sync_resources(**kwargs)
@ -277,14 +249,14 @@ class SyncShow(base.KingbirdLister):
parser = super(SyncShow, self).get_parser(parsed_args) parser = super(SyncShow, self).get_parser(parsed_args)
parser.add_argument( parser.add_argument(
'job', 'job_id',
help='ID/Name of the job to view the details.' help='ID of the job to view the details.'
) )
return parser return parser
def _get_resources(self, parsed_args): def _get_resources(self, parsed_args):
job = parsed_args.job job = parsed_args.job_id
kingbird_client = self.app.client_manager.sync_engine kingbird_client = self.app.client_manager.sync_engine
return kingbird_client.sync_manager.sync_job_detail(job) return kingbird_client.sync_manager.sync_job_detail(job)

View File

@ -31,7 +31,6 @@ FAKE_RESOURCE = 'fake_item'
FAKE_SOURCE_REGION = 'fake_region_1' FAKE_SOURCE_REGION = 'fake_region_1'
FAKE_TARGET_REGION = 'fake_region_2' FAKE_TARGET_REGION = 'fake_region_2'
FAKE_RESOURCE_TYPE = 'fake_resource' FAKE_RESOURCE_TYPE = 'fake_resource'
FAKE_NAME = 'fake_name'
tempdef = """Sync: tempdef = """Sync:
- resource_type: fake_resource_type - resource_type: fake_resource_type
@ -69,7 +68,6 @@ SOURCE_INDEX_JSON = tempdefjson.index('"source"')
TARGET_INDEX_JSON = tempdefjson.index(",", SOURCE_INDEX_JSON) TARGET_INDEX_JSON = tempdefjson.index(",", SOURCE_INDEX_JSON)
RESOURCE_DICT = { RESOURCE_DICT = {
'NAME': FAKE_NAME,
'ID': ID, 'ID': ID,
'STATUS': FAKE_STATUS, 'STATUS': FAKE_STATUS,
'CREATED_AT': TIME_NOW, 'CREATED_AT': TIME_NOW,
@ -77,21 +75,18 @@ RESOURCE_DICT = {
} }
ACTIVE_RESOURCE_DICT = { ACTIVE_RESOURCE_DICT = {
'NAME': FAKE_NAME,
'ID': ID, 'ID': ID,
'STATUS': ACTIVE_FAKE_STATUS, 'STATUS': ACTIVE_FAKE_STATUS,
'CREATED_AT': TIME_NOW, 'CREATED_AT': TIME_NOW,
'UPDATED_AT': TIME_NOW 'UPDATED_AT': TIME_NOW
} }
SYNCMANAGER = sm.Resource(mock, name=FAKE_NAME, SYNCMANAGER = sm.Resource(mock, id=RESOURCE_DICT['ID'],
id=RESOURCE_DICT['ID'],
status=RESOURCE_DICT['STATUS'], status=RESOURCE_DICT['STATUS'],
created_at=RESOURCE_DICT['CREATED_AT'], created_at=RESOURCE_DICT['CREATED_AT'],
updated_at=RESOURCE_DICT['UPDATED_AT']) updated_at=RESOURCE_DICT['UPDATED_AT'])
ACTIVE_SYNCMANAGER = sm.Resource(mock, name=FAKE_NAME, ACTIVE_SYNCMANAGER = sm.Resource(mock, id=ACTIVE_RESOURCE_DICT['ID'],
id=ACTIVE_RESOURCE_DICT['ID'],
status=ACTIVE_RESOURCE_DICT['STATUS'], status=ACTIVE_RESOURCE_DICT['STATUS'],
created_at=ACTIVE_RESOURCE_DICT['CREATED_AT'], created_at=ACTIVE_RESOURCE_DICT['CREATED_AT'],
updated_at=ACTIVE_RESOURCE_DICT['UPDATED_AT']) updated_at=ACTIVE_RESOURCE_DICT['UPDATED_AT'])
@ -121,11 +116,6 @@ SYNC_RESOURCEMANAGER = sm.Resource(mock, id=RESOURCE_DICT['ID'],
status=RESOURCE_DICT['STATUS'], status=RESOURCE_DICT['STATUS'],
created_at=RESOURCE_DICT['CREATED_AT']) created_at=RESOURCE_DICT['CREATED_AT'])
TEMPLATE_SYNC_RESOURCEMANAGER = sm.Resource(mock, name=RESOURCE_DICT['NAME'],
status=RESOURCE_DICT['STATUS'],
created_at=RESOURCE_DICT[
'CREATED_AT'])
class TestCLISyncManagerV1(base.BaseCommandTest): class TestCLISyncManagerV1(base.BaseCommandTest):
"""Testcases for sync command.""" """Testcases for sync command."""
@ -133,20 +123,20 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
def test_sync_jobs_list(self): def test_sync_jobs_list(self):
self.client.sync_manager.list_sync_jobs.return_value = [SYNCMANAGER] self.client.sync_manager.list_sync_jobs.return_value = [SYNCMANAGER]
actual_call = self.call(sync_cmd.SyncList) actual_call = self.call(sync_cmd.SyncList)
self.assertEqual([(FAKE_NAME, ID, FAKE_STATUS, TIME_NOW, TIME_NOW)], self.assertEqual([(ID, FAKE_STATUS, TIME_NOW, TIME_NOW)],
actual_call[1]) actual_call[1])
def test_negative_sync_jobs_list(self): def test_negative_sync_jobs_list(self):
self.client.sync_manager.list_sync_jobs.return_value = [] self.client.sync_manager.list_sync_jobs.return_value = []
actual_call = self.call(sync_cmd.SyncList) actual_call = self.call(sync_cmd.SyncList)
self.assertEqual((('<none>', '<none>', '<none>', '<none>', '<none>'),), self.assertEqual((('<none>', '<none>', '<none>', '<none>'),),
actual_call[1]) actual_call[1])
def test_active_sync_jobs_list(self): def test_active_sync_jobs_list(self):
self.client.sync_manager.list_sync_jobs.\ self.client.sync_manager.list_sync_jobs.\
return_value = [ACTIVE_SYNCMANAGER] return_value = [ACTIVE_SYNCMANAGER]
actual_call = self.call(sync_cmd.SyncList, app_args=['--active']) actual_call = self.call(sync_cmd.SyncList, app_args=['--active'])
self.assertEqual([(FAKE_NAME, ID, ACTIVE_FAKE_STATUS, self.assertEqual([(ID, ACTIVE_FAKE_STATUS,
TIME_NOW, TIME_NOW)], TIME_NOW, TIME_NOW)],
actual_call[1]) actual_call[1])
@ -247,17 +237,21 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
'--force']) '--force'])
self.assertEqual([(ID, FAKE_STATUS, TIME_NOW)], actual_call[1]) self.assertEqual([(ID, FAKE_STATUS, TIME_NOW)], actual_call[1])
def test_template_resource_sync_file_not_found(self):
self.assertRaises(
IOError, self.call,
sync_cmd.TemplateResourceSync, app_args=['test_template.txt'])
def test_template_resource_sync_with_template_yaml(self): def test_template_resource_sync_with_template_yaml(self):
with open('test_template.yaml', 'w') as f: with open('test_template.yaml', 'w') as f:
f.write(tempdef) f.write(tempdef)
f.close() f.close()
self.client.sync_manager.sync_resources.\ self.client.sync_manager.sync_resources.\
return_value = [TEMPLATE_SYNC_RESOURCEMANAGER] return_value = [SYNC_RESOURCEMANAGER]
actual_call = self.call( actual_call = self.call(
sync_cmd.TemplateResourceSync, app_args=[ sync_cmd.TemplateResourceSync, app_args=[
'--template', 'test_template.yaml', 'test_template.yaml'])
'--name', FAKE_NAME]) self.assertEqual([(ID, FAKE_STATUS, TIME_NOW)], actual_call[1])
self.assertEqual([(FAKE_NAME, FAKE_STATUS, TIME_NOW)], actual_call[1])
os.remove("test_template.yaml") os.remove("test_template.yaml")
def test_template_resource_sync_with_template_yml(self): def test_template_resource_sync_with_template_yml(self):
@ -265,12 +259,11 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
f.write(tempdef) f.write(tempdef)
f.close() f.close()
self.client.sync_manager.sync_resources.\ self.client.sync_manager.sync_resources.\
return_value = [TEMPLATE_SYNC_RESOURCEMANAGER] return_value = [SYNC_RESOURCEMANAGER]
actual_call = self.call( actual_call = self.call(
sync_cmd.TemplateResourceSync, app_args=[ sync_cmd.TemplateResourceSync, app_args=[
'--template', 'test_template.yml', 'test_template.yml'])
'--name', FAKE_NAME]) self.assertEqual([(ID, FAKE_STATUS, TIME_NOW)], actual_call[1])
self.assertEqual([(FAKE_NAME, FAKE_STATUS, TIME_NOW)], actual_call[1])
os.remove("test_template.yml") os.remove("test_template.yml")
def test_template_resource_sync_with_template_json(self): def test_template_resource_sync_with_template_json(self):
@ -278,40 +271,28 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
f.write(tempdefjson) f.write(tempdefjson)
f.close() f.close()
self.client.sync_manager.sync_resources.\ self.client.sync_manager.sync_resources.\
return_value = [TEMPLATE_SYNC_RESOURCEMANAGER] return_value = [SYNC_RESOURCEMANAGER]
actual_call = self.call( actual_call = self.call(
sync_cmd.TemplateResourceSync, app_args=[ sync_cmd.TemplateResourceSync, app_args=[
'--template', 'test_template.json', 'test_template.json'])
'--name', FAKE_NAME]) self.assertEqual([(ID, FAKE_STATUS, TIME_NOW)], actual_call[1])
self.assertEqual([(FAKE_NAME, FAKE_STATUS, TIME_NOW)], actual_call[1])
os.remove("test_template.json") os.remove("test_template.json")
def test_template_resource_sync_without_arguments(self):
self.client.sync_manager.sync_resources.\
return_value = [SYNC_RESOURCEMANAGER]
self.assertRaises(
SystemExit, self.call, sync_cmd.TemplateResourceSync, app_args=[])
def test_template_resource_sync_without_template(self): def test_template_resource_sync_without_template(self):
self.client.sync_manager.sync_resources.\ self.client.sync_manager.sync_resources.\
return_value = [SYNC_RESOURCEMANAGER] return_value = [SYNC_RESOURCEMANAGER]
self.assertRaises( self.assertRaises(
SystemExit, self.call, sync_cmd.TemplateResourceSync, SystemExit, self.call, sync_cmd.TemplateResourceSync,
app_args=['--name', FAKE_NAME]) app_args=[])
def test_template_resource_sync_without_name(self):
self.client.sync_manager.sync_resources.\
return_value = [SYNC_RESOURCEMANAGER]
self.assertRaises(
SystemExit, self.call, sync_cmd.TemplateResourceSync, app_args=[
'--template', 'test_template.yaml'])
def test_template_resource_sync_invalid_extension(self): def test_template_resource_sync_invalid_extension(self):
with open('test_template_invalid_extension.yzx', 'w') as f:
f.write("")
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, app_args=[ sync_cmd.TemplateResourceSync, app_args=[
'--template', 'test_template.yzx', 'test_template_invalid_extension.yzx'])
'--name', 'FAKE_NAME']) os.remove("test_template_invalid_extension.yzx")
def test_template_resource_sync_source_missing_yaml(self): def test_template_resource_sync_source_missing_yaml(self):
temp = tempdef.replace(tempdef[SOURCE_INDEX:TARGET_INDEX], "") temp = tempdef.replace(tempdef[SOURCE_INDEX:TARGET_INDEX], "")
@ -321,8 +302,7 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, sync_cmd.TemplateResourceSync,
app_args=['--template', 'test_source_missing_template.yaml', app_args=['test_source_missing_template.yaml'])
'--name', FAKE_NAME])
os.remove("test_source_missing_template.yaml") os.remove("test_source_missing_template.yaml")
def test_template_resource_sync_target_missing_yaml(self): def test_template_resource_sync_target_missing_yaml(self):
@ -333,8 +313,7 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, sync_cmd.TemplateResourceSync,
app_args=['--template', 'test_target_missing_template.yaml', app_args=['test_target_missing_template.yaml'])
'--name', FAKE_NAME])
os.remove("test_target_missing_template.yaml") os.remove("test_target_missing_template.yaml")
def test_template_resource_sync_resource_type_missing_yaml(self): def test_template_resource_sync_resource_type_missing_yaml(self):
@ -345,9 +324,7 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, sync_cmd.TemplateResourceSync,
app_args=['--template', app_args=['test_resource_type_missing_template.yaml'])
'test_resource_type_missing_template.yaml',
'--name', FAKE_NAME])
os.remove("test_resource_type_missing_template.yaml") os.remove("test_resource_type_missing_template.yaml")
def test_template_resource_sync_resources_missing_yaml(self): def test_template_resource_sync_resources_missing_yaml(self):
@ -358,8 +335,7 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, sync_cmd.TemplateResourceSync,
app_args=['--template', 'test_resource_missing_template.yaml', app_args=['test_resource_missing_template.yaml'])
'--name', FAKE_NAME])
os.remove("test_resource_missing_template.yaml") os.remove("test_resource_missing_template.yaml")
def test_template_resource_sync_source_missing_json(self): def test_template_resource_sync_source_missing_json(self):
@ -371,8 +347,7 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, sync_cmd.TemplateResourceSync,
app_args=['--template', 'test_source_missing_template.json', app_args=['test_source_missing_template.json'])
'--name', FAKE_NAME])
os.remove("test_source_missing_template.json") os.remove("test_source_missing_template.json")
def test_template_resource_sync_target_missing_json(self): def test_template_resource_sync_target_missing_json(self):
@ -384,8 +359,7 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, sync_cmd.TemplateResourceSync,
app_args=['--template', 'test_target_missing_template.json', app_args=['test_target_missing_template.json'])
'--name', FAKE_NAME])
os.remove("test_target_missing_template.json") os.remove("test_target_missing_template.json")
def test_template_resource_sync_resource_type_missing_json(self): def test_template_resource_sync_resource_type_missing_json(self):
@ -397,9 +371,7 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, sync_cmd.TemplateResourceSync,
app_args=['--template', app_args=['test_resource_type_missing_template.json'])
'test_resource_type_missing_template.json',
'--name', FAKE_NAME])
os.remove("test_resource_type_missing_template.json") os.remove("test_resource_type_missing_template.json")
def test_template_resource_sync_resources_missing_json(self): def test_template_resource_sync_resources_missing_json(self):
@ -411,6 +383,5 @@ class TestCLISyncManagerV1(base.BaseCommandTest):
self.assertRaises( self.assertRaises(
exceptions.TemplateError, self.call, exceptions.TemplateError, self.call,
sync_cmd.TemplateResourceSync, sync_cmd.TemplateResourceSync,
app_args=['--template', 'test_resource_missing_template.json', app_args=['test_resource_missing_template.json'])
'--name', FAKE_NAME])
os.remove("test_resource_missing_template.json") os.remove("test_resource_missing_template.json")