Saat ini, fungsi peta hanya dapat digunakan seperti ini:
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attribute='path')
dengan kembalinya
['/var/file1', '/var/file2']
(Dokumen: http://jinja.pocoo.org/docs/dev/templates/#map)
Saya ingin mengusulkan mengizinkan ini:
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attribute=['path', 'mtime'])
atau
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attributes=['path', 'mtime'])
yang harus kembali
[{'path':'/var/file1', 'mtime': '123'},{'path':'/var/file2', 'mtime': '123'}]
Anda sudah dapat melihat apa kegunaannya: memanipulasi daftar dict sehingga dict ini hanya mempertahankan sekumpulan atribut yang terbatas.
Akan MENYUKAI fitur ini.
Saya tidak jelas mengapa ini diperlukan dalam templat. Hanya mengulangi kamus dan menggunakan atribut yang Anda butuhkan akan mencapai hal yang sama. Jika Anda membutuhkan data yang berbeda, mungkin ide yang lebih baik untuk melakukan manipulasi itu dengan Python sebelum melakukan rendering. Saya bisa _mungkin_ melihat kegunaannya mengembalikan tupel.
Jika ada yang masih membutuhkan ini, Anda dapat menggunakan kode berikut (masukkan playbooks/filter_plugins/mapattributes.py
):
#!/usr/bin/env python
class FilterModule(object):
def filters(self):
return { 'mapattributes': self.mapattributes }
def mapattributes(self, list_of_dicts, list_of_keys):
l = []
for di in list_of_dicts:
newdi = { }
for key in list_of_keys:
newdi[key] = di[key]
l.append(newdi)
return l
Gunakan melalui:
ansible_mounts | mapattributes(['mount', 'size_total', 'size_available',])
Mengapa masalah ini ditutup dan solusi Nee6ione tidak diimplementasikan secara resmi? Akan jauh lebih sederhana jika ini didukung tanpa plugin tambahan
Komentar yang paling membantu
Jika ada yang masih membutuhkan ini, Anda dapat menggunakan kode berikut (masukkan
playbooks/filter_plugins/mapattributes.py
):Gunakan melalui: