Fabric: وثائق لتكوين وقت التشغيل

تم إنشاؤها على ١٧ مايو ٢٠١٨  ·  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 لأنه لا يسحب اسم المستخدم من التكوين وهو ليس شيئًا أحتاجه ولكن يبدو أنه يجب أن تكون هناك طريقة لقول "احصل على المعالجة التكوين وتحديث هذه القيمة الواحدة ".

Bug Feature Needs investigation

التعليق الأكثر فائدة

هل هناك مثال بسيط على hello world باستخدام ملف fabfile.py؟ لقد كنت أقرأ جميع المستندات وأبحث في الإنترنت لبضعة أيام ولم أتمكن من تشغيل أمر واحد عن بُعد حتى الآن في الإصدار 2. بقدر ما أعلق مع SSHException "لا توجد طرق مصادقة متاحة"

ال 4 كومينتر

كنت أنوي أن تملأ ملفات التكوين "بتنسيق Python" فجوة "ملء قيم التكوين عبر تنفيذ رمز وقت التشغيل" تقريبًا ، لذلك يمكن القول أنك على المسار الصحيح باستخدام الملف .py . ومع ذلك - لم أتبع هذا الفكر طوال الطريق حتى الاستنتاج ويبدو أنك تدفع ثمن ذلك ، معذرةً. (سألاحظ أن جزءًا من السبب هو أنني افترضت أن معظم المستخدمين المتقدمين سيقومون بأشياء في ملف مهامهم / ملف fabfile ، ولكن في كلتا الحالتين يحتاج الجسر من بيانات config-esque إلى هيئات مهام وقت التشغيل إلى العمل.)

لا تتذكر بشكل مرتجل ما الذي يمكن أن يتسبب في تخليل الأشياء ، لكن من المحتمل أن يكون ذلك بمثابة غرابة في نظام التكوين ، وسأحتاج إلى البحث في ذلك. أنا لا أحب المخلل (في هذه الأيام ، من يفعل) لذلك كان من المدهش بعض الشيء أن أجدها منبثقة في هذا السياق.

بغض النظر ، السبب المباشر هو أننا نفترض أن محتويات الوحدة "هي" التكوين ، لذلك نحتاج إلى ترشيح أكثر صرامة عندما ننتقل من سمات كائن الوحدة إلى التكوين المتداخل dict. قد يكون استبعاد الوحدات النمطية هو كل ما هو مطلوب بصدق ، نظرًا لأن أي تخصيص متغير آخر سيكون سلوكًا سيئًا من جانب مؤلف ملف التكوين.

رد: سؤال التصميم ذو المستوى الأعلى "قم بتغيير قيمة تكوين متداخلة واحدة فقط" ، والتي _ يجب أن تعمل بشكل حدسي في معظم الحالات (تميل عملية دمج التكوين إلى إجراء دمج عميق ، لذلك يقوم ملف .py الخاص بك بتعيين connect_kwargs = {'user': foo', 'password': 'bar'} يجب أن ينتهي الأمر بالاندماج مع محتويات أي مصدر تكوين آخر connect_kwargs ) ولكن أعتقد أنه قد يكون هناك بعض الأخطاء حول connect_kwargs وجه التحديد ، على سبيل المثال # 1762.

يجب أن أعيد اختبار هذا نظرًا لأن هذه كانت محاولتي الأولية لترقية Fabric 2 ورأيت الكثير من التعهدات تحلق منذ ذلك الحين.

هل هناك مثال بسيط على hello world باستخدام ملف fabfile.py؟ لقد كنت أقرأ جميع المستندات وأبحث في الإنترنت لبضعة أيام ولم أتمكن من تشغيل أمر واحد عن بُعد حتى الآن في الإصدار 2. بقدر ما أعلق مع SSHException "لا توجد طرق مصادقة متاحة"

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات