рдЬрдм рдореИрдВ ansible 1.9.1 рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ _individual_ рдкреНрд░рддрд┐-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдВрдЬреА рдХреЛ рдЕрдирдиреНрдп рдорд╛рдирддрд╛ рд╣реИ, рди рдХрд┐ рдкреНрд░рддрд┐-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ _group_ рдХреЛ рдЕрдирдиреНрдп рдорд╛рдирддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рддрд┐-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдВрдЬреА рдкреНрд░рдпреЛрдЧ рдпреЛрдЧреНрдп рд╣реИред
- name: sync all users keys
authorized_key: user={{item.0.name}} key='{{item.1}}' state=present exclusive=yes
with_subelements:
- users
- keys
рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рдЖрдк рдореЙрдбреНрдпреВрд▓ X рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рд░ рдмрд╛рд░ рдЕрдирдиреНрдп (X == рдЖрдЗрдЯрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЗ рд╕рд╛рдеред
рдирдорд╕реНрддреЗ!
Ansible рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдЬреЛ рдЯрд┐рдХрдЯ рджрд╛рдЦрд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕реЗ рдХреБрдЫ рдЧрд▓рдд рд╕рдордЭрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрд╛рдд рдмрддрд╛рдИ рдЧрдИ рд╕реЗ рдереЛрдбрд╝реА рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рд╖рдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж рдФрд░ Ansible рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐!
рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░рдг рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣
# Read each file and split by newline, allowing for multiple keys per file
- name: Assemble keys
set_fact:
key_item: "{{ lookup('file', role_path + '/files/' + item).split('\n') }}"
with_items:
- bob.pub
- fred.pub
- barney.pub
register: keys
# Select each key, joining it again and join all keys. Internally the ansible
# module will then split the string by newline and work at each one. This is
# the only way exclusive works with a list of keys.
- name: Distribute operations ssh-keys to root
authorized_key:
key : "{{ keys.results|selectattr('ansible_facts','defined')|map(attribute='ansible_facts.key_item')|map('join', '\n')|join('\n') }}"
manage_dir : yes
state : present
user : root
exclusive : yes
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░рдг рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣