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)