Fabric: Документация по настройке среды выполнения

Созданный на 17 мая 2018  ·  4Комментарии  ·  Источник: fabric/fabric

У меня есть куча фабричных файлов Fabric 1, которые устанавливают env . В настоящее время неочевидно переносить этот код в Fabric 2. В документации есть ссылки, например, connect_kwargs но не так много о том, как и где это установить. После прочтения документации Invoke мне кажется, что я не могу использовать какие-либо параметры конфигурации YAML / JSON, поскольку мне нужно выполнить код (в приведенном ниже примере, используя keyring для получения паролей).

Казалось, что-то вроде переноса всего этого в файл fabric.py может сработать:

import subprocess
import sys
from getpass import getuser
import os

domain = os.environ.get("DOMAIN", "loctest")

def get_config():
    user = getuser()

    try:
        password = subprocess.check_output(["keyring", "get", domain, user]).strip()
        print("Loaded %s password for %s from keyring" % (domain, user))
    except subprocess.CalledProcessError:
        print(
            "Unable to set password using `keyring` (is it in your PATH?) — expect to be nagged",
            file=sys.stderr,
        )

    return {'user': user, 'password': password}

connect_kwargs = get_config()

К сожалению, это дает TypeError: can't pickle module objects . Установка __all__ недостаточна, чтобы этого избежать, но перемещение всего в функцию, похоже, работает:

def get_config():
    import subprocess
    import sys
    from getpass import getuser
    import os

    domain = os.environ.get("DOMAIN", "loctest")
    user = os.environ.get("USER", getuser())

    try:
        password = subprocess.check_output(["keyring", "get", domain, user]).strip()
        print("Loaded %s password for %s from keyring" % (domain, user))
    except subprocess.CalledProcessError:
        print(
            "Unable to set password using `keyring` (is it in your PATH?) — expect to be nagged",
            file=sys.stderr,
        )

    return {"user": user, "password": password}

connect_kwargs = get_config()

Есть ли / планируется ли создать более чистый способ сделать это? Среди прочего, этот код не совсем эквивалентен версии Fabric 1, потому что он не извлекает имя пользователя из конфигурации, что мне не нужно, но похоже, что должен быть способ сказать: «Получить обработанный config и обновите это одно значение ».

Bug Feature Needs investigation

Самый полезный комментарий

Есть ли простой пример hello world с использованием файла fabfile.py? Я читал все документы и рыскал по Интернету пару дней, но пока не смог запустить ни одной команды удаленно на v2. Насколько я понимаю, он застрял с SSHException "Нет доступных методов аутентификации"

Все 4 Комментарий

Я имел в виду, что файлы конфигурации «формата Python» примерно заполнят дыру в «заполнении значений конфигурации посредством выполнения кода времени выполнения», так что, возможно, вы на правильном пути с файлом .py . Тем не менее - я не до конца понял эту мысль, и похоже, что вы платите за это, извинения. (Замечу, что отчасти причина в том, что я предполагал, что большинство продвинутых пользователей будут делать что-то в своем файле задач / fabfile, но в любом случае мост от данных config-esque к телам задач времени выполнения нуждается в доработке.)

Навскидку не помню, что бы травили, но, вероятно, это какая-то причуда системы конфигурации, мне нужно в этом разобраться. Я не люблю маринад (в наши дни, кто любит), поэтому было немного удивительно, что он всплывает в этом контексте.

В любом случае, ближайшая причина заключается в том, что мы предполагаем, что содержимое модуля «является» конфигурацией, поэтому нам нужна более строгая фильтрация, когда мы переходим от атрибутов объекта модуля к вложенному dict конфигурации. Честно говоря, удаление модулей может быть всем, что нужно, поскольку любое другое присвоение переменных, возможно, будет плохим поведением со стороны автора файла конфигурации.

Re: вопрос дизайна более высокого уровня «изменить только одно вложенное значение конфигурации», который _ должен_ работать интуитивно в большинстве случаев (процесс слияния конфигурации имеет тенденцию к глубокому слиянию, поэтому ваш файл .py просто устанавливает connect_kwargs = {'user': foo', 'password': 'bar'} должен быть объединен с содержимым любого другого источника конфигурации connect_kwargs ), но я думаю, что могут быть некоторые ошибки, в частности, около connect_kwargs , например, # 1762.

Я должен повторно протестировать это, так как это была моя первая попытка обновления Fabric 2, и с тех пор я видел много коммитов.

Есть ли простой пример hello world с использованием файла fabfile.py? Я читал все документы и рыскал по Интернету пару дней, но пока не смог запустить ни одной команды удаленно на v2. Насколько я понимаю, он застрял с SSHException "Нет доступных методов аутентификации"

Была ли эта страница полезной?
0 / 5 - 0 рейтинги