рдлрд┐рд▓рд╣рд╛рд▓, рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attribute='path')
рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рд╕рд╛рде
['/var/file1', '/var/file2']
(рджрд╕реНрддрд╛рд╡реЗрдЬрд╝: http://jinja.pocoo.org/docs/dev/templates/#map)
рдореИрдВ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attribute=['path', 'mtime'])
рдпрд╛
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attributes=['path', 'mtime'])
рдЬреЛ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП
[{'path':'/var/file1', 'mtime': '123'},{'path':'/var/file2', 'mtime': '123'}]
рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ: dicts рдХреА рдПрдХ рд╕реВрдЪреА рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рддрд╛рдХрд┐ рдпреЗ dicts рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдВред
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкрд╕рдВрдж рдЖрдПрдЧреАред
рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдкрд░ рдмрд╕ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╡рд╣реА рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рдпрдерди рдореЗрдВ рдЙрд╕ рд╣реЗрд░рдлреЗрд░ рдХреЛ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореИрдВ _maybe_ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯреБрдкрд▓реНрд╕ рд▓реМрдЯрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЕрднреА рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдк рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( 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
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ:
ansible_mounts | mapattributes(['mount', 'size_total', 'size_available',])
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ Nee6ione рд╕рдорд╛рдзрд╛рди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛? рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рдорд░реНрдерд┐рдд рдерд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЕрднреА рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдк рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (
playbooks/filter_plugins/mapattributes.py
рдореЗрдВ рдбрд╛рд▓реЗрдВ):рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ: