Exemplo n.º 1
0
def stop(role=None, cli=False, force=False, **kwargs):
    try:
        if config['BLKTAP_ENABLED'] is False and vlmc_get_mapped():
            vlmc_showmapped()
            raise Error("Cannot stop archipelago. Mapped volumes exist")
    except VlmcTapdiskException:
        pass

    if role:
        try:
            p = peers[role]
        except KeyError:
            raise Error("Invalid peer %s" % role)
        return stop_peer(p, cli)

    #check devices
    if cli:
        print "===================="
        print "Stoping archipelago"
        print "===================="
        print ""

    if config["BLKTAP_ENABLED"] and loaded_module('blktap'):
        mapped = vlmc_get_mapped()
        if mapped and len(mapped) > 0:
            if not force:
                vlmc_showmapped()
                raise Error("Cannot stop archipelago. Mapped volumes exist")
            for m in mapped:
                if not VlmcTapdisk.is_paused(m.device):
                    VlmcTapdisk.pause(m.device)

    stop_peers(peers, cli)
    time.sleep(0.5)
    get_segment().destroy()
Exemplo n.º 2
0
def stop(role=None, cli=False, pause=False, unmap=False, **kwargs):
    if role:
        try:
            p = peers[role]
        except KeyError:
            raise Error("Invalid peer %s" % role)
        return stop_peer(p, cli)

    # check devices
    if cli:
        print "===================="
        print "Stoping archipelago"
        print "===================="
        print ""

    if config["BLKTAP_ENABLED"] and loaded_module('blktap'):
        mapped = vlmc_get_mapped()
        if mapped and len(mapped) > 0:
            if not pause:
                vlmc_showmapped()
                print ""
                if unmap:
                    print red("Mapped volumes exist, unmapping...")
                    try:
                        for m in mapped:
                            vlmc_unmap_volume(m.device)
                    except Error as e:
                        raise Error("Error while umapping volume, during "
                                    "shutdown: %s" % e)
                else:
                    raise Error("Found mapped volumes, cannot stop "
                                "Archipelago")
            else:
                for m in mapped:
                    if not VlmcTapdisk.is_paused(m.device):
                        VlmcTapdisk.pause(m.device)

        mapped = vlmc_get_mapped()
        if mapped and len(mapped) > 0:
            vlmc_showmapped()
            print ""
            if pause:
                import operator
                if not reduce(
                        operator.and_,
                    [VlmcTapdisk.is_paused(m.device) for m in mapped], True):
                    raise Error("Found unpaused volume, cannot stop "
                                "Archipelago")
            else:
                raise Error("Found more mapped volumes, cannot stop "
                            "Archipelago")

    stop_peers(peers, cli)
    time.sleep(0.5)
    get_segment().destroy()
Exemplo n.º 3
0
def stop(role=None, cli=False, pause=False, unmap=False, **kwargs):
    if role:
        try:
            p = peers[role]
        except KeyError:
            raise Error("Invalid peer %s" % role)
        return stop_peer(p, cli)

    # check devices
    if cli:
        print "===================="
        print "Stoping archipelago"
        print "===================="
        print ""

    if config["BLKTAP_ENABLED"] and loaded_module('blktap'):
        mapped = vlmc_get_mapped()
        if mapped and len(mapped) > 0:
            if not pause:
                vlmc_showmapped()
                print ""
                if unmap:
                    print red("Mapped volumes exist, unmapping...")
                    try:
                        for m in mapped:
                            vlmc_unmap_volume(m.device)
                    except Error as e:
                        raise Error("Error while umapping volume, during "
                                    "shutdown: %s" % e)
                else:
                    raise Error("Found mapped volumes, cannot stop "
                                "Archipelago")
            else:
                for m in mapped:
                    if not VlmcTapdisk.is_paused(m.device):
                        VlmcTapdisk.pause(m.device)

        mapped = vlmc_get_mapped()
        if mapped and len(mapped) > 0:
            vlmc_showmapped()
            print ""
            if pause:
                import operator
                if not reduce(operator.and_, [VlmcTapdisk.is_paused(m.device)
                                              for m in mapped],
                              True):
                    raise Error("Found unpaused volume, cannot stop "
                                "Archipelago")
            else:
                raise Error("Found more mapped volumes, cannot stop "
                            "Archipelago")

    stop_peers(peers, cli)
    time.sleep(0.5)
    get_segment().destroy()