كيفية جعل تنفيذ النسيج اتبع ترتيب قائمة Env.Hosts؟
سؤال
لدي ما يلي fabfile.py:
from fabric.api import env, run
host1 = '192.168.200.181'
host2 = '192.168.200.182'
host3 = '192.168.200.183'
env.hosts = [host1, host2, host3]
def df_h():
run("df -h | grep sda3")
وأحصل على الإخراج التالي:
[192.168.200.181] run: df -h | grep sda3
[192.168.200.181] out: /dev/sda3 365G 180G 185G 50% /usr/local/nwe
[192.168.200.183] run: df -h | grep sda3
[192.168.200.183] out: /dev/sda3 365G 41G 324G 12% /usr/local/nwe
[192.168.200.182] run: df -h | grep sda3
[192.168.200.182] out: /dev/sda3 365G 87G 279G 24% /usr/local/nwe
Done.
Disconnecting from 192.168.200.182... done.
Disconnecting from 192.168.200.181... done.
Disconnecting from 192.168.200.183... done.
لاحظ أن أمر التنفيذ يختلف عن مواصفات Env.Hosts.
لماذا تعمل بهذه الطريقة؟ هل هناك طريقة لجعل ترتيب التنفيذ كما هو محدد في قائمة Env.Hosts؟
المحلول
السبب الدقيق لعدم الحفاظ على النظام env.hosts
هو أن هناك ثلاثة "مستويات" يمكن تحديدها للمضيفين-يمكن تحديدها-Hosts ، خط الأوامر ، لكل وظيفة-والتي يتم دمجها معًا. في fabric/main.py
تشغيل الخط 309, ، يمكنك أن ترى أنهم يستخدمون set()
اكتب لإزالة التكرارات في القوائم الثلاثة الممكنة للمضيفين. حيث set()
ليس لديه طلب ، سيتم إرجاع المضيفين كقائمة في ترتيب "عشوائي".
هناك سبب وجيه أن هذه الطريقة. إنها آلية فعالة للغاية لإزالة التكرارات من القائمة وللسيق ، من المهم أن يكون الأمر مهمًا. أنت تطلب من النسيج أداء سلسلة من الإجراءات الذرية المتوازية تمامًا على مختلف المضيفين. من خلال طبيعة الإجراءات الذرية المتوازية ، لا يؤثر النظام على قدرة الإجراءات التي يتعين تنفيذها بنجاح. إذا أمر فعل المسألة ، عندها ستكون الإستراتيجية المختلفة ضرورية ولن تكون النسيج هي الأداة الصحيحة للوظيفة.
ومع ذلك ، هل هناك سبب معين لأنك بحاجة إلى حدوث هذه العمليات بالترتيب؟ ربما إذا كنت تواجه نوعًا من المشكلات ، فهذا نتيجة لأمر التنفيذ ، فيمكننا مساعدتك في العمل.
نصائح أخرى
فقط للتحديث ، أحدث VICRIP 1.1+ (فكر حتى 1.0) DEDUPES في طلب الحفاظ على الطريق الآن. لذلك يجب أن يكون هذا غير قضية الآن.