diff --git a/muranorepository/api/utils.py b/muranorepository/api/utils.py index 1249239..dacfa13 100644 --- a/muranorepository/api/utils.py +++ b/muranorepository/api/utils.py @@ -211,7 +211,7 @@ def save_archive(request): return path_to_archive -def create_service(data): +def create_service(service_id, data): required = ['full_service_name', 'service_display_name'] optional = {'enabled': True, 'version': 0.1, @@ -227,15 +227,23 @@ def create_service(data): if not data.get(parameter): data[parameter] = optional[parameter] - service_id = data.get('full_service_name') path_to_manifest = os.path.join(CONF.manifests, service_id + '-manifest.yaml') + + backup_done = False + with tempfile.NamedTemporaryFile() as backup: + # make a backup + if os.path.exists(path_to_manifest): + backup_done = True + shutil.copy(path_to_manifest, backup.name) try: with open(path_to_manifest, 'w') as service_manifest: service_manifest.write(serialize(data)) except Exception as e: log.exception(e) - if os.path.exists(path_to_manifest): + if backup_done: + shutil.move(backup.name, path_to_manifest) + elif os.path.exists(path_to_manifest): os.remove(path_to_manifest) return make_response('Error during service manifest creation', 500) return jsonify(result='success') diff --git a/muranorepository/api/v1.py b/muranorepository/api/v1.py index 43b50e6..fc35b98 100644 --- a/muranorepository/api/v1.py +++ b/muranorepository/api/v1.py @@ -217,28 +217,12 @@ def reset_caches(): return jsonify(result='success') -@v1_api.route('/admin/services/create', methods=['PUT']) -def create_service(): +@v1_api.route('/admin/services/', methods=['PUT']) +def create_service(service_name): try: service_data = json.loads(request.data) except: return make_response('Unable to load json data', 500) - resp = api.create_service(service_data) + resp = api.create_service(service_name, service_data) api.reset_cache() return resp - - -@v1_api.route('/admin/services/', methods=['POST']) -def update_service(service_name): - api.check_service_name(service_name) - parser = ManifestParser() - try: - service_data = json.loads(request.data) - except: - return make_response('Unable to load json data', 500) - result = parser.update_service(service_name, service_data) - if result: - api.reset_cache() - return jsonify(result='success') - else: - return make_response('Unable to update service', 500)