Add basic OVA profile support
This commit is contained in:
		| @@ -661,6 +661,10 @@ def delete_script(name): | ||||
|     close_database(conn, cur) | ||||
|     return retmsg, retcode | ||||
|  | ||||
| # | ||||
| # OVA functions | ||||
| # | ||||
|  | ||||
| # | ||||
| # Profile functions | ||||
| # | ||||
| @@ -691,12 +695,16 @@ def list_profile(limit, is_fuzzy=True): | ||||
|         profile_data = dict() | ||||
|         profile_data['id'] = profile['id'] | ||||
|         profile_data['name'] = profile['name'] | ||||
|         profile_data['type'] = profile['profile_type'] | ||||
|         # Parse the name of each subelement | ||||
|         for etype in 'system_template', 'network_template', 'storage_template', 'userdata', 'script': | ||||
|         for etype in 'system_template', 'network_template', 'storage_template', 'userdata', 'script', 'ova': | ||||
|             query = 'SELECT name from {} WHERE id = %s'.format(etype) | ||||
|             args = (profile[etype],) | ||||
|             cur.execute(query, args) | ||||
|             name = cur.fetchone()['name'] | ||||
|             try: | ||||
|                 name = cur.fetchone()['name'] | ||||
|             except: | ||||
|                 name = "N/A" | ||||
|             profile_data[etype] = name | ||||
|         # Split the arguments back into a list | ||||
|         profile_data['arguments'] = profile['arguments'].split('|') | ||||
| @@ -708,12 +716,17 @@ def list_profile(limit, is_fuzzy=True): | ||||
|     else: | ||||
|         return {'message': 'No profiles found'}, 404 | ||||
|  | ||||
| def create_profile(name, system_template, network_template, storage_template, userdata, script, arguments=None): | ||||
| def create_profile(name, profile_type, system_template, network_template, storage_template, userdata=None, script=None, ova=None, arguments=None): | ||||
|     if list_profile(name, is_fuzzy=False)[-1] != 404: | ||||
|         retmsg = { 'message': 'The profile "{}" already exists'.format(name) } | ||||
|         retcode = 400 | ||||
|         return retmsg, retcode | ||||
|  | ||||
|     if profile_type not in ['script', 'clone', 'ova']: | ||||
|         retmsg = { 'message': 'A valid profile type (script, clone, ova) must be specified' } | ||||
|         retcode = 400 | ||||
|         return retmsg, retcode | ||||
|  | ||||
|     system_templates, code = list_template_system(None) | ||||
|     system_template_id = None | ||||
|     for template in system_templates: | ||||
| @@ -749,20 +762,18 @@ def create_profile(name, system_template, network_template, storage_template, us | ||||
|     for template in userdatas: | ||||
|         if template['name'] == userdata: | ||||
|             userdata_id = template['id'] | ||||
|     if not userdata_id: | ||||
|         retmsg = { 'message': 'The userdata template "{}" for profile "{}" does not exist'.format(userdata, name) } | ||||
|         retcode = 400 | ||||
|         return retmsg, retcode | ||||
|  | ||||
|     scripts, code = list_script(None) | ||||
|     script_id = None | ||||
|     for scr in scripts: | ||||
|         if scr['name'] == script: | ||||
|             script_id = scr['id'] | ||||
|     if not script_id: | ||||
|         retmsg = { 'message': 'The script "{}" for profile "{}" does not exist'.format(script, name) } | ||||
|         retcode = 400 | ||||
|         return retmsg, retcode | ||||
|  | ||||
|     ovas, code = list_ova(None) | ||||
|     ova_id = None | ||||
|     for ov in ovas: | ||||
|         if ov['name'] == ova: | ||||
|             ova_id = ov['id'] | ||||
|  | ||||
|     if arguments is not None and isinstance(arguments, list): | ||||
|         arguments_formatted = '|'.join(arguments) | ||||
| @@ -771,8 +782,8 @@ def create_profile(name, system_template, network_template, storage_template, us | ||||
|  | ||||
|     conn, cur = open_database(config) | ||||
|     try: | ||||
|         query = "INSERT INTO profile (name, system_template, network_template, storage_template, userdata, script, arguments) VALUES (%s, %s, %s, %s, %s, %s, %s);" | ||||
|         args = (name, system_template_id, network_template_id, storage_template_id, userdata_id, script_id, arguments_formatted) | ||||
|         query = "INSERT INTO profile (name, type, system_template, network_template, storage_template, userdata, script, ova, arguments) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s);" | ||||
|         args = (name, profile_type, system_template_id, network_template_id, storage_template_id, userdata_id, script_id, ova_id, arguments_formatted) | ||||
|         cur.execute(query, args) | ||||
|         retmsg = { "message": 'Created VM profile "{}"'.format(name) } | ||||
|         retcode = 200 | ||||
| @@ -782,7 +793,7 @@ def create_profile(name, system_template, network_template, storage_template, us | ||||
|     close_database(conn, cur) | ||||
|     return retmsg, retcode | ||||
|  | ||||
| def modify_profile(name, system_template, network_template, storage_template, userdata, script, arguments=None): | ||||
| def modify_profile(name, profile_type, system_template, network_template, storage_template, userdata, script, ova, arguments=None): | ||||
|     if list_profile(name, is_fuzzy=False)[-1] != 200: | ||||
|         retmsg = { 'message': 'The profile "{}" does not exist'.format(name) } | ||||
|         retcode = 400 | ||||
| @@ -790,6 +801,13 @@ def modify_profile(name, system_template, network_template, storage_template, us | ||||
|  | ||||
|     fields = [] | ||||
|  | ||||
|     if profile_type is not None: | ||||
|         if profile_type not in ['script', 'clone', 'ova']: | ||||
|             retmsg = { 'message': 'A valid profile type (script, clone, ova) must be specified' } | ||||
|             retcode = 400 | ||||
|             return retmsg, retcode | ||||
|         fields.append({'field': 'type', 'data': profile_type}) | ||||
|  | ||||
|     if system_template is not None: | ||||
|         system_templates, code = list_template_system(None) | ||||
|         system_template_id = None | ||||
| @@ -850,6 +868,18 @@ def modify_profile(name, system_template, network_template, storage_template, us | ||||
|             return retmsg, retcode | ||||
|         fields.append({'field': 'script', 'data': script_id}) | ||||
|  | ||||
|     if ova is not None: | ||||
|         ovas, code = list_ova(None) | ||||
|         ova_id = None | ||||
|         for ov in ovas: | ||||
|             if ov['name'] == ova: | ||||
|                 ova_id = ov['id'] | ||||
|         if not ova_id: | ||||
|             retmsg = { 'message': 'The OVA "{}" for profile "{}" does not exist'.format(ova, name) } | ||||
|             retcode = 400 | ||||
|             return retmsg, retcode | ||||
|         fields.append({'field': 'ova', 'data': ova_id}) | ||||
|  | ||||
|     if arguments is not None: | ||||
|         if isinstance(arguments, list): | ||||
|             arguments_formatted = '|'.join(arguments) | ||||
| @@ -857,7 +887,6 @@ def modify_profile(name, system_template, network_template, storage_template, us | ||||
|             arguments_formatted = '' | ||||
|         fields.append({'field': 'arguments', 'data': arguments_formatted}) | ||||
|  | ||||
|  | ||||
|     conn, cur = open_database(config) | ||||
|     try: | ||||
|         for field in fields: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user