Fabric: Dokumentasi untuk konfigurasi runtime

Dibuat pada 17 Mei 2018  ·  4Komentar  ·  Sumber: fabric/fabric

Saya memiliki banyak fabfile Fabric 1 yang harganya env . Saat ini tidak jelas untuk memigrasi kode itu ke Fabric 2. Referensi dokumentasi misalnya connect_kwargs tetapi tidak banyak tentang bagaimana atau di mana menyetelnya. Setelah membaca dokumen Invoke, sepertinya saya tidak dapat menggunakan salah satu opsi konfigurasi YAML / JSON karena saya perlu mengeksekusi kode (dalam contoh di bawah ini, menggunakan keyring untuk mengambil kata sandi).

Sepertinya sesuatu seperti memindahkan semuanya ke file fabric.py mungkin berhasil:

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()

Sayangnya, itu menghasilkan TypeError: can't pickle module objects . Menetapkan __all__ tidak cukup untuk menghindarinya tetapi memindahkan semuanya ke dalam fungsi tampaknya berhasil:

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()

Apakah ada / direncanakan ada cara yang lebih bersih untuk melakukan ini? Antara lain, kode ini tidak cukup setara dengan versi Fabric 1 karena tidak menarik nama pengguna dari konfigurasi yang bukan sesuatu yang saya butuhkan tetapi sepertinya ada cara untuk mengatakan "Dapatkan diproses config dan perbarui nilai yang satu ini ”.

Bug Feature Needs investigation

Komentar yang paling membantu

Apakah ada contoh hello world sederhana yang menggunakan file fabfile.py? Saya telah membaca semua dokumen dan menjelajahi internet selama beberapa hari dan belum dapat menjalankan satu perintah pun dari jarak jauh di v2. Sejauh saya terjebak dengan SSHException "Tidak ada metode otentikasi yang tersedia"

Semua 4 komentar

Saya bermaksud agar file konfigurasi "format Python" secara kasar akan mengisi lubang "mengisi nilai konfigurasi melalui eksekusi kode runtime", jadi Anda bisa dibilang berada di jalur yang benar dengan file .py . Yang mengatakan - Saya tidak mengikuti pemikiran itu sampai ke kesimpulan dan sepertinya Anda membayar untuk itu, maaf. (Saya akan mencatat bahwa sebagian alasannya adalah saya berasumsi sebagian besar pengguna tingkat lanjut akan melakukan hal-hal dalam file tugas / fabfile mereka, tetapi bagaimanapun juga, jembatan dari data config-esque ke badan tugas runtime perlu bekerja.)

Tidak ingat begitu saja apa yang akan menjadi acar tetapi mungkin itu beberapa kekhasan dari sistem konfigurasi, saya perlu menggali lebih dalam. Saya tidak suka acar (sekarang ini, siapa yang suka) jadi agak mengejutkan menemukannya muncul dalam konteks ini.

Terlepas dari itu, penyebab terdekatnya adalah kita menganggap konten modul "menjadi" konfigurasi, jadi kita memerlukan pemfilteran yang lebih ketat saat kita beralih dari atribut objek modul ke dikt bersarang konfigurasi. Jujur saja, menghapus modul mungkin adalah semua yang dibutuhkan, karena tugas variabel lainnya bisa dibilang akan menjadi perilaku buruk di pihak pembuat file konfigurasi.

Re: pertanyaan desain tingkat yang lebih tinggi dari "mutasikan hanya satu nilai konfigurasi bersarang", yang _berpikir_ untuk bekerja secara intuitif dalam banyak kasus (proses penggabungan konfigurasi cenderung melakukan penggabungan mendalam, jadi file .py Anda hanya menyetel connect_kwargs = {'user': foo', 'password': 'bar'} seharusnya digabungkan dengan konten connect_kwargs dari sumber konfigurasi lain) tetapi saya pikir mungkin ada beberapa bug khusus sekitar connect_kwargs , misalnya # 1762.

Saya harus menguji ulang ini karena itu adalah upaya peningkatan Fabric 2 pertama saya dan saya telah melihat banyak komitmen terbang sejak saat itu.

Apakah ada contoh hello world sederhana yang menggunakan file fabfile.py? Saya telah membaca semua dokumen dan menjelajahi internet selama beberapa hari dan belum dapat menjalankan satu perintah pun dari jarak jauh di v2. Sejauh saya terjebak dengan SSHException "Tidak ada metode otentikasi yang tersedia"

Apakah halaman ini membantu?
0 / 5 - 0 peringkat