Ansible: рдЕрдзрд┐рдХреГрдд_рдХреА "рдЕрдирдиреНрдп" рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ w/ with_subelements

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЬреВрди 2015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ansible/ansible

рдЬрдм рдореИрдВ 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

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

рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░рдг рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣

# 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

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

рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рдЖрдк рдореЙрдбреНрдпреВрд▓ 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
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

hyperfocus1338 picture hyperfocus1338  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

robbwagoner picture robbwagoner  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yatesr picture yatesr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Pallokala picture Pallokala  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bhuddleston picture bhuddleston  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ