fixed tap id for each NIC, add more logging when VM is declared killed
This commit is contained in:
		
					parent
					
						
							
								66b7cf525f
							
						
					
				
			
			
				commit
				
					
						bbe09667a6
					
				
			
		
					 3 changed files with 21 additions and 12 deletions
				
			
		|  | @ -36,6 +36,8 @@ class CreateVM(Resource): | |||
|                 "hdd": validator.specs["hdd"], | ||||
|             } | ||||
|             macs = [generate_mac() for i in range(len(data["network"]))] | ||||
|             tap_ids = [counters.increment_etcd_counter(etcd_client, "/v1/counter/tap") | ||||
|                        for i in range(len(data["network"]))] | ||||
|             vm_entry = { | ||||
|                 "name": data["vm_name"], | ||||
|                 "owner": data["name"], | ||||
|  | @ -46,7 +48,7 @@ class CreateVM(Resource): | |||
|                 "image_uuid": validator.image_uuid, | ||||
|                 "log": [], | ||||
|                 "vnc_socket": "", | ||||
|                 "network": list(zip(data["network"], macs)), | ||||
|                 "network": list(zip(data["network"], macs, tap_ids)), | ||||
|                 "metadata": {"ssh-keys": []}, | ||||
|             } | ||||
|             etcd_client.put(vm_key, vm_entry, value_in_json=True) | ||||
|  | @ -73,8 +75,8 @@ class VmStatus(Resource): | |||
|             ) | ||||
|             vm_value = vm.value.copy() | ||||
|             vm_value["ip"] = [] | ||||
|             for network_and_mac in vm.network: | ||||
|                 network_name, mac = network_and_mac | ||||
|             for network_mac_and_tap in vm.network: | ||||
|                 network_name, mac, tap = network_mac_and_tap | ||||
|                 network = etcd_client.get( | ||||
|                     join_path( | ||||
|                         env_vars.get("NETWORK_PREFIX"), | ||||
|  |  | |||
|  | @ -63,6 +63,7 @@ def maintenance(host): | |||
|         # initiated by user inside VM. OR crash of VM by some | ||||
|         # user running process | ||||
|         if (_vm and not _vm.handle.is_running()) or not _vm: | ||||
|             logger.debug("_vm = %s, is_running() = %s" % (_vm, _vm.handle.is_running())) | ||||
|             vm_entry.add_log("""{} is not running but is said to be running. | ||||
|                                 So, shutting it down and declare it killed""".format(vm_entry.key)) | ||||
|             vm_entry.declare_killed() | ||||
|  |  | |||
|  | @ -11,9 +11,9 @@ import tempfile | |||
| import time | ||||
| 
 | ||||
| from functools import wraps | ||||
| from os.path import join as join_path | ||||
| from string import Template | ||||
| from typing import Union | ||||
| from os.path import join as join_path | ||||
| 
 | ||||
| import bitmath | ||||
| import sshtunnel | ||||
|  | @ -49,7 +49,7 @@ def create_dev(script, _id, dev, ip=None): | |||
|         return output.decode("utf-8").strip() | ||||
| 
 | ||||
| 
 | ||||
| def create_vxlan_br_tap(_id, _dev, ip=None): | ||||
| def create_vxlan_br_tap(_id, _dev, tap_id, ip=None): | ||||
|     network_script_base = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'network') | ||||
|     vxlan = create_dev(script=os.path.join(network_script_base, 'create-vxlan.sh'), | ||||
|                        _id=_id, dev=_dev) | ||||
|  | @ -58,7 +58,7 @@ def create_vxlan_br_tap(_id, _dev, ip=None): | |||
|                             _id=_id, dev=vxlan, ip=ip) | ||||
|         if bridge: | ||||
|             tap = create_dev(script=os.path.join(network_script_base, 'create-tap.sh'), | ||||
|                              _id=str(random.randint(1, 100000)), dev=bridge) | ||||
|                              _id=str(tap_id), dev=bridge) | ||||
|             if tap: | ||||
|                 return tap | ||||
| 
 | ||||
|  | @ -108,6 +108,7 @@ def update_radvd_conf(etcd_client): | |||
|     except Exception: | ||||
|         sp.check_output(['service', 'radvd', 'restart']) | ||||
| 
 | ||||
| 
 | ||||
| def get_start_command_args(vm_entry, vnc_sock_filename: str, migration=False, migration_port=None): | ||||
|     threads_per_core = 1 | ||||
|     vm_memory = int(bitmath.parse_string_unsafe(vm_entry.specs["ram"]).to_MB()) | ||||
|  | @ -129,8 +130,8 @@ def get_start_command_args(vm_entry, vnc_sock_filename: str, migration=False, mi | |||
|         command += " -incoming tcp:[::]:{}".format(migration_port) | ||||
| 
 | ||||
|     tap = None | ||||
|     for network_and_mac in vm_networks: | ||||
|         network_name, mac = network_and_mac | ||||
|     for network_mac_and_tap in vm_networks: | ||||
|         network_name, mac, tap = network_mac_and_tap | ||||
| 
 | ||||
|         _key = os.path.join(env_vars.get('NETWORK_PREFIX'), vm_entry.owner, network_name) | ||||
|         network = etcd_client.get(_key, value_in_json=True) | ||||
|  | @ -139,7 +140,10 @@ def get_start_command_args(vm_entry, vnc_sock_filename: str, migration=False, mi | |||
|         network_ipv6 = network.value["ipv6"] | ||||
| 
 | ||||
|         if network_type == "vxlan": | ||||
|             tap = create_vxlan_br_tap(network_id, env_vars.get("VXLAN_PHY_DEV"), network_ipv6) | ||||
|             tap = create_vxlan_br_tap(_id=network_id, | ||||
|                                       _dev=env_vars.get("VXLAN_PHY_DEV"), | ||||
|                                       tap_id=tap, | ||||
|                                       ip=network_ipv6) | ||||
|             update_radvd_conf(etcd_client) | ||||
| 
 | ||||
|         command += " -netdev tap,id=vmnet{net_id},ifname={tap},script=no,downscript=no" \ | ||||
|  | @ -237,11 +241,13 @@ def delete(vm_entry): | |||
|     logger.info("Deleting VM | %s", vm_entry) | ||||
|     stop(vm_entry) | ||||
| 
 | ||||
|     r_status = image_storage_handler.delete_vm_image(vm_entry.uuid) | ||||
|     if r_status: | ||||
|     if image_storage_handler.is_vm_image_exists(vm_entry.uuid): | ||||
|         r_status = image_storage_handler.delete_vm_image(vm_entry.uuid) | ||||
|         if r_status: | ||||
|             etcd_client.client.delete(vm_entry.key) | ||||
|     else: | ||||
|         etcd_client.client.delete(vm_entry.key) | ||||
| 
 | ||||
| 
 | ||||
| def transfer(request_event): | ||||
|     # This function would run on source host i.e host on which the vm | ||||
|     # is running initially. This host would be responsible for transferring | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue