Яндекс.Метрика
    Поиск по тегу

    planetlab


    Найдено: 2 записи

    P2P

    Краткий Обзор PlanetLab

    Это статья будет посвящена PlanetLab (http://www.planet-lab.eu) – сети, широко используемой учеными для тестирования новых сетевых сервисов или модификации уже существующих. На текущий момент, использование PlanetLab в качестве платформы для тестирования вошло в список стандартной методологии исследования распределенных систем. За время своего существования PlanetLab использовалась для тестирования большого числа различных сервисов: p2p сетей, включая DHT1, anycast2, 3, распределения файлов большого размера4, анализа сети5, диагностики аномалий и ошибок6, и многих других.

    image

    Программирование

    Скрипт для PlanetLab. Удаление и добаление Nodes

    Так как недавно пришлось вникать в тонкости пользования PlanetLab, я решила поделиться примером скрипта на автоматическое добавление-удаление нодов. Возможно, это в будущем сократит кому-нибудь время.

    image

    Опишу вкратце, о чем идет речь. PlanetLab – это сеть, широко используемая для тестирования новых сетевых сервисов или модификации уже существующих. Узлы PlanetLab (их около 1024-х) распределены в различных странах и доступ к ним получают только сотрудники тех учреждений, которые содержат у себя узлы PlanetLab. Более подробная статья о PlanetLab есть здесь.

    Если вы занимаетесь разработкой распределенных приложений, без PlanetLab обойтись будет сложно. При тестировании распределенного приложения, Вам скорее всего придется иметь дело с большим количеством узлов (Nodes). Проблема состоит в том, что в PlanetLab ноды часто уходят в оффлайн. Соответственно, эти ноды нужно удалить из своего аккаунта (slice) и подключить взамен них новые. Это, безусловно, возможно сделать и через веб-интерфейс руками. Однако, процесс это муторный, поэтому луче всего использовать скрипт. Таким скриптом я и хочу в Вами поделиться. Написан он на питоне.

    Описение всех методов API PlanetLab можно найти по адресу www.planet-lab.eu/doc/api. Сам скрипт постаралась снабдить достаточным колчеством комментариев, чтобы было понятно что происходит.

    #!/usr/bin/env python

    import xmlrpclib
    import sys
    plc_host = 'www.planet-lab.eu'
    auth =
    { 'AuthMethod': 'gpg',
    'name': 'your user name',
    'signature': 'GnuPG signature',


    slice_name = 'tudresdenple_backup'

    api_url = «%s:443/PLCAPI/»%plc_host
    #api_url = «%s/PLCAPI/»%plc_host

    plc_api = xmlrpclib.ServerProxy(api_url,allow_none=True)

    #get list of all nodes
    print «Getting list of all attached to your slice nodes:»
    nodes = plc_api.GetNodes(auth, {}, ['node_id', 'hostname', 'boot_state'])

    #get ids of the nodes that already are added to you slice
    attached_nodes_ids = plc_api.GetSlices(auth, [ slice_name ], ['node_ids'])[0]['node_ids']
    #obtain nodes hostnames, which will look like {'hostname': ''}
    attached_nodes = plc_api.GetNodes(auth, attached_nodes_ids, ['hostname', 'boot_state'])

    #extract hostname only
    have_nodes = []

    for node in attached_nodes:
    have_nodes.append(node['hostname'])

    for node in have_nodes:
    print node

    #Filter all your nodes that are not in the boot state and therefor have to be deleted
    print «Searching for non-boot nodes attached to you slice:»
    to_delete = []

    for node_record in attached_nodes:
    if node_record['boot_state'] != 'boot':
    to_delete.append(node_record['hostname'])

    for node_record in to_delete:
    print node_record
    #delete those nodes

    num_of_deleted = len(to_delete)

    if num_of_deleted > 0:
    success = plc_api.DeleteSliceFromNodes(auth, slice_name, to_delete)
    if success == 1:
    print «Successfullly detached non-booted nodes»
    else:
    print «Deleting of the non-booted nodes has failed!»
    sys.exit()
    else:
    print «Nothing to delete or add»
    sys.exit()

    #add exactly the same number of new now, as the number of deleted ones
    print «Adding new booted nodes»
    to_add = []

    for node_record in nodes:
    if num_of_deleted > 0:
    num_of_deleted -= num_of_deleted
    else:
    break
    if (node_record['hostname'] not in have_nodes) and node_record['boot_state'] == 'boot':
    to_add.append( node_record['hostname'] )

    if len(to_add) > 0:
    success = plc_api.AddSliceToNodes(auth, slice_name, to_add)
    if success == 1:
    print «Successfullly attached new nbooted nodes»
    else:
    print «Addint of the booted nodes has failed!»
    sys.exit()

    print «The following nodes were added:»
    for node_record in to_add:
    print node_record