Ansible: fetchlistfromdict filter

Dibuat pada 25 Mar 2016  ·  3Komentar  ·  Sumber: ansible/ansible

JENIS MASALAH

  • Ide Fitur
    RINGKASAN

Katakanlah Anda memiliki larik kamus dan Anda ingin membuat larik dengan beberapa atribut kamus. Ada beberapa metode untuk melakukan ini: selectattr, map dan filter ekstrak baru.

Itu berfungsi dengan baik sampai Anda memutuskan untuk menggunakan host dari beberapa grup sebagai larik kamus awal. Jadi Anda harus mendapatkan hostvars untuk setiap host dalam grup dengan filter. Kami biasanya dapat mengatasi ini dengan beberapa iterasi jinja tetapi itu tidak berfungsi untuk mengatur variabel.

Yang mengatakan ada solusi :

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

    return result

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

Dan sekarang:

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

Kasus ini tampaknya sangat spesifik dan mungkin terkait dengan modul route53 .

Jadi bisakah kita menambahkan filter ini ke ansible? Haruskah saya membuat PR? Bagaimana dengan penamaan? Saya telah menyimpan yang asli tetapi list_from_dict terlihat lebih baik untuk saya.

feature

Komentar yang paling membantu

Contoh ini harus disertakan dalam dokumentasi. Saya mencari cukup lama sebelum saya menemukan masalah ini.

Semua 3 komentar

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

Apa yang dilakukan ini berbeda dari

{{ groups['webservers']|map('extract', hostvars, ['custom_facts','aliases','0','ip'])|list }}

?

@amenonsen poin bagus, saya hanya mencoba mendapatkan ini dengan map(attribute= , sepertinya filter ekstrak baru berfungsi, menantikan untuk bermain dengannya di rilis baru!

Contoh ini harus disertakan dalam dokumentasi. Saya mencari cukup lama sebelum saya menemukan masalah ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat