Ansible: рдлрд╝реЗрдЪрд▓рд┐рд╕реНрдЯрдлрд╝реНрд░реЙрдордбрд┐рдХреНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдорд╛рд░реНрдЪ 2016  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ansible/ansible

рд╡рд┐рд╖рдп рд╡рд░реНрдЧ

  • рдлрд╝реАрдЪрд░ рдЖрдЗрдбрд┐рдпрд╛
    рд╕рд╛рд░рд╛рдВрд╢

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ рдФрд░ рдЖрдк рдХреБрдЫ рд╢рдмреНрджрдХреЛрд╢ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ: selectattr, map рдФрд░ рдирдпрд╛ рдПрдХреНрд╕рдЯреНрд░реЗрдХреНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ред

рдпрд╣ рддрдм рддрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдХрд┐рд╕реА рд╕рдореВрд╣ рдХреЗ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓реЗрддреЗред рддреЛ рдЖрдкрдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд╛рд▓реЗ рд╕рдореВрд╣ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП hostvars рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реЗ рдХреБрдЫ рдЬрд┐рдиреНрдЬрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЙрд╕рдиреЗ рдХрд╣рд╛ рдХрд┐ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ :

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 рдореЗрд░реЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдорд┐рд▓рдиреЗ рд╕реЗ рдХрд╛рдлреА рдкрд╣рд▓реЗ рдЦреЛрдЬрддрд╛ рд╣реВрдВред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

рдпрд╣ рдЗрд╕рд╕реЗ рдЕрд▓рдЧ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ

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

?

@amenonsen рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ map(attribute= рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИ!

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдорд┐рд▓рдиреЗ рд╕реЗ рдХрд╛рдлреА рдкрд╣рд▓реЗ рдЦреЛрдЬрддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕