def delete_vm(vm: data.VM) -> None: """ Delete the specific VM. :param vm: A VM instance. :return: None. """ server = vm.server if vm.config.is_double: server.A_cpu_rest += vm.config.cpu // 2 server.B_cpu_rest += vm.config.cpu // 2 server.A_memory_rest += vm.config.memory // 2 server.B_memory_rest += vm.config.memory // 2 server.AB_vm.remove(vm) elif vm.node == 'A': server.A_cpu_rest += vm.config.cpu server.A_memory_rest += vm.config.memory server.A_vm.remove(vm) else: server.B_cpu_rest += vm.config.cpu server.B_memory_rest += vm.config.memory server.B_vm.remove(vm) vm.server = None vm.node = None
def deploy_vm(vm: data.VM, server: data.Server, server_node: str = None) -> None: """ Deploy the specific VM on the specific Server. :param vm: A VM instance. :param server: A Server instance. :param server_node: The value must be 'A' or 'B'. If the VM is deployed on both nodes 'AB', the value will be ignored. :return: None. """ if not vm.config.is_double and server_node not in ['A', 'B']: raise ValueError('You must specify the server node.') if not has_capacity(server=server, server_node=server_node, vm=vm): raise ValueError('The Server has no capacity for the VM.') if vm.config.is_double: server.A_cpu_rest -= vm.config.cpu // 2 server.B_cpu_rest -= vm.config.cpu // 2 server.A_memory_rest -= vm.config.memory // 2 server.B_memory_rest -= vm.config.memory // 2 server.AB_vm.append(vm) vm.server = server deploy = data.Deploy(vm=vm, to_server=server) data.Operation_List[-1].deploy.append(deploy) elif server_node == 'A': server.A_cpu_rest -= vm.config.cpu server.A_memory_rest -= vm.config.memory server.A_vm.append(vm) vm.server = server vm.node = 'A' deploy = data.Deploy(vm=vm, to_server=server, to_node='A') data.Operation_List[-1].deploy.append(deploy) else: server.B_cpu_rest -= vm.config.cpu server.B_memory_rest -= vm.config.memory server.B_vm.append(vm) vm.server = server vm.node = 'B' deploy = data.Deploy(vm=vm, to_server=server, to_node='B') data.Operation_List[-1].deploy.append(deploy)