Fabric: Kunci roledefs tambahan di luar 'host' tidak dimuat ke env

Dibuat pada 13 Feb 2015  ·  7Komentar  ·  Sumber: fabric/fabric

Cuplikan dari dokumen ini tidak membuat kunci contoh 'foo' tersedia bagi pengguna melalui env, hanya kunci 'host' yang selanjutnya dimuat oleh Fabric (ke env.hosts)

from fabric.api import env

env.roledefs = {
    'web': {
        'hosts': ['www1', 'www2', 'www3'],
        'foo': 'bar'
    },
    'dns': {
        'hosts': ['ns1', 'ns2'],
        'foo': 'baz'
    }
}

Didokumentasikan lebih lanjut tentang pertanyaan stackoverlow ini

Komentar yang paling membantu

@bitprophet Mengapa ini ditutup? Perilaku kunci roledef tambahan tidak berubah, jadi apakah ini "tidak akan diperbaiki"?

Semua 7 komentar

anda dapat menggunakan contoh di bawah ini sebagai file konfigurasi, lalu tambahkan beberapa fungsi internal untuk menangani fabfiles.py

seperti: list.db
antarmuka|ip|sandi|peran....
berharap itu akan bekerja untuk Anda.

Ada beberapa kunci env yang digunakan oleh fabric untuk menentukan host mana yang akan dihubungkan untuk setiap sesi, yaitu role, effective_roles, hosts, host_string. Dan tentu saja dekorator juga.

Yang mengatakan, roledefs hanya pemetaan nama untuk mengelompokkan host, tidak perlu digabung menjadi env.hosts.

Mendefinisikan roledefs sebagai dict membantu Anda mengatur pengaturan khusus lainnya, di samping host, yang spesifik peran. Anda dapat mengaksesnya melalui jalur env lengkap, yaitu env.roledefs.web.foo

Tetapi, seperti yang Anda keluarkan, dan mungkin diharapkan, adalah bahwa peran yang didefinisikan sebagai dict harus digabungkan ke root env.
Ini adalah apa yang saya pribadi juga menggunakannya untuk. Saya hanya belum menemukan cara yang bagus untuk mengimplementasikannya dan menarik permintaan, karena semua cara yang mungkin untuk benar-benar mengatur/mendapatkan peran "saat ini" ketika menjalankan tugas tertentu, dan kompleksitas saat memanggil subtugas dalam tugas . Sederhananya, saya melakukan ini dengan berlangganan perubahan pada env dan menggabungkan peran ketika kunci roles disetel di env. Tetapi bagian yang "sulit" adalah mempertahankan status dan membersihkan penggabungan peran apa pun saat peran baru digunakan dalam sesi.

env.roledefs.web.foo menghasilkan kesalahan: AttributeError: 'dict' object has no attribute 'web'

Maksud saya, Anda dapat mengaksesnya seperti dict biasa, env.roledefs['web']['foo'] tetapi kemudian saya tidak melihat mengapa fungsi ini ada sama sekali di Fabric, itu hanya dict biasa. Sepertinya fitur ini diimplementasikan untuk alasan yang lebih berguna?

Maaf, Anda benar, Anda harus mengaksesnya seperti yang Anda katakan.

Saat ini tidak ada alasan lain selain mengizinkan Anda untuk mengelompokkan lebih banyak pengaturan peran di sebelah host.
Tapi, ketika tonggak 1.11 dirilis dan #1092 ada, maka itu lebih masuk akal.

Juga #1088 adalah bagian dari 1.11 yang mirip dengan apa yang Anda gambarkan/harapkan. Tetapi saya belum menemukan cara yang bagus, seperti yang saya katakan, untuk mengimplementasikan penggabungan roledefs. Hanya proof-of-cocept di fork yang menggunakan patch monyet dalam yang "jelek".

Ah baiklah, aku membenturkan kepalaku ke dinding berpikir aku kehilangan sesuatu :) Nomor-nomor masalah yang direferensikan itu sepertinya akan sedikit membantu setiap kali mereka berguling. Terima kasih Jonas!

Ini membingungkan dan saya pikir perlu dicatat dalam dokumentasi bahwa variabel tambahan ini tidak dapat diakses di luar roledef.

@bitprophet Mengapa ini ditutup? Perilaku kunci roledef tambahan tidak berubah, jadi apakah ini "tidak akan diperbaiki"?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jmcgrath207 picture jmcgrath207  ·  5Komentar

shadyabhi picture shadyabhi  ·  5Komentar

TimotheeJeannin picture TimotheeJeannin  ·  3Komentar

acdha picture acdha  ·  4Komentar

bitprophet picture bitprophet  ·  4Komentar