Ansible: مرشح fetchlistfromdict

تم إنشاؤها على ٢٥ مارس ٢٠١٦  ·  3تعليقات  ·  مصدر: ansible/ansible

نوع القضية

  • فكرة الميزة
    ملخص

لنفترض أن لديك مجموعة من القواميس وتريد إنشاء مصفوفة ببعض سمات القاموس. هناك عدة طرق للقيام بذلك: selectattr ، و map ، ومرشح الاستخراج الجديد.

يعمل هذا بشكل رائع حتى تقرر استخدام مضيفات بعض المجموعات كمصفوفة أولية من القواميس. لذلك يجب أن تحصل على hostvars لكل مضيف في مجموعة مع مرشح. يمكننا عادة حل هذا مع بعض تكرارات jinja ولكن هذا لا يعمل مع تعيين المتغيرات.

ومع ذلك ، هناك حل :

def fetchlistfromdict(d, l):
    result = []
    for item in l:
        result.append(d[item])

    return result

class FilterModule(object):
    def filters(self):
        return {
            'fetchlistfromdict': fetchlistfromdict,
        }

و الأن:

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

هذه الحالة تبدو محددة للغاية وقد تكون مرتبطة بالوحدة route53 .

فهل يمكننا إضافة هذا المرشح إلى ansible؟ هل أقوم بعمل علاقات عامة؟ ماذا عن التسمية؟ لقد قمت بحفظ النسخة الأصلية ولكن يبدو أن list_from_dict أفضل بالنسبة لي.

feature

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

يجب تضمين هذا المثال في الوثائق. أنا أبحث قبل وقت طويل من العثور على هذه المشكلة.

ال 3 كومينتر

{{hostvars | fetchlistfromdict (المجموعات ['webservers']) | الخريطة (السمة = 'custom_facts.aliases.0.ip') | القائمة}}

ماذا يفعل هذا بشكل مختلف عن

{{groups ['webservers'] | خريطة ('extract'، hostvars، ['custom_facts'، 'aliases'، '0'، 'ip']) | قائمة}}

؟

@ amenonsen نقطة جيدة ، لقد حاولت فقط الحصول على هذا بـ map(attribute= ، يبدو أن مرشح الاستخراج الجديد يقوم بالمهمة ، وأتطلع إلى اللعب به في إصدار جديد!

يجب تضمين هذا المثال في الوثائق. أنا أبحث قبل وقت طويل من العثور على هذه المشكلة.

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