как эффективно использовать python -fabri c, когда настройки иерархические - PullRequest
0 голосов
/ 01 августа 2020

Как использовать python -fabri c, когда настройки являются иерархическими по своей природе. например, когда одна система имеет несколько конечных точек сети, вся наша сеть доступна через разные порты. Вполне вероятно, что в будущем у нас будет больше service_points, которые можно будет динамически обнаруживать, особенно через их dhcp-IP, через некоторые файлы в файловой системе, когда они находятся в сети.

ниже - это массив настроек в моей топологии. Здесь S1 - это одна установка с несколькими точками обслуживания.

setups = {
   'S1' :  {
        'service_point_1' : [ ip1, user, password, port1 ],
        'service_point_2' : [ ip2, user, password, port2 ],
   },
   'S2' : {
        'service_point_1' : [ ip1, user, password, port1 ],
        'service_point_2' : [ ip2, user, password, port2 ],
   },
}

Я пробовал играть с ролевыми определениями, но API стал очень сложным в программировании. Я попытался создать задачу setupname, которая инициализирует roledefs, но API, который обменивается данными между S1 и S2, не работает.

@task
def pingcall(ipx, ipy):
    run('ping ipx to ipy')

@task
def setupname(name):
    env.__name__ = name
    env.roledefs.update(setups[name])

@task
def ping_neighbor(to=None):
    ipy = env.setups[to][0]
    ipx = socket(gethost(env.setups[env.__name][0])
    pingcall(ipx, ipy)
    . . .

предоставляет команду как

fab -f thislib.py setupname:S1 ping_neighbor:S2

Любая идея, как я могу используйте python -fabri c более эффективно, чем API остается простым ??

...