рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЖрдкрдХреЛ RHEL рдФрд░ AIX рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдХреЗрдВрджреНрд░реАрдХреГрдд sudoers рдлрд╝рд╛рдЗрд▓ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред

рдЦреИрд░, рдпрд╣ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЖрдк рдПрдВрд╕рд┐рдмрд▓ рдХреА рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ - рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрдп рдХреЛ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЖрджрд░реНрд╢ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛) рд╡рд┐рд╡рд░рдг рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рдмрд┐рдирд╛ред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдВ:
рдХреЛрдб рдХреА 212 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ sudoers рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЪрд▓рддреА рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪреЗрдХрд╕рдо рдЪреЗрдХ рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реЛрд▓рд╛рд░рд┐рд╕ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдерд╛ред
рдЖрдЗрдП рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╕реВрдЯ рдореЗрдВ рдлрд╛рдЗрд▓ рдХреЛ рдлрд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╣рдореЗрдВ рдПрдирдПрдлрдПрд╕ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдХреЙрдкреА рдФрд░
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдФрд░ рдмреИрдХрдЕрдк рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдмреИрдХрдЕрдк рд▓реЗрдиреЗ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЧрдВрддрд╡реНрдп рдмрд┐рдВрджреБ рдкрд░ рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рддреНрдпрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЙрдбреНрдпреВрд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд╛рд░реНрдп, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдЪрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рдпрд╣рд╛рдБ рд╕рдВрдЧрдд рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реИ:

рднреВрдорд┐рдХрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ (рдкреНрд▓реЗрдмреБрдХ),
sudoers.yml , рдХреА рдПрдХ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
---
##
# Role playbook
##
- hosts: all
roles:
- sudoers
...
рднреВрдорд┐рдХрд╛ рдЪрд░
var / main.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪреЗрдХрд╕рдо рдлрд╝рд╛рдЗрд▓ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдРрд╕реЗ рдирд┐рд░реНрджреЗрд╢ рд╢рд╛рдорд┐рд▓ / рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЙрд╕рди рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рддрд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдореЗрдВ sudoers.d рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ HD рд╣реЛрд╕реНрдЯреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣рд╛рдБ
var / main.yml рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА
рджреА рдЧрдИ рд╣реИ :
---
MD5FILE: /root/.sudoer.md5
EXCLUDE: la
INCLUDE: hd
...
рдпрджрд┐ рд╣рдо
рдХреЙрдкреА рдФрд░
рд▓рд╛рдЗрдирдЗрдирдлрд╛рдЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреВрдорд┐рдХрд╛
рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧреАред рдХреЙрдкреА рдореЙрдбреНрдпреВрд▓ рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рд▓рд╛рдЗрдирдЗрдирдлрд╛рдЗрд▓ рд╣рд░ рдмрд╛рд░ рдЗрд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ред рдЪреВрдБрдХрд┐ рдпрд╣ рднреВрдорд┐рдХрд╛
Ansible Tower рдкрд░ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдПрдЧреА, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ jinja2 рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо
рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рдЗрдВрдбреЗрдВрдЯ рдХреЛ
рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
#jinja2: lstrip_blocks: True, trim_blocks: True
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ
рдЯреНрд░рд┐рдо_рдмреНрд▓реЙрдХ (Ansible 2.4 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛) рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ
рд╢рд╛рдорд┐рд▓ рд▓рд╛рдЗрди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:
{% if ansible_hostname[0:2] == INCLUDE %}
#includedir /etc/sudoers.d
{% endif %}
рд╣рдо рд╢реЗрд▓ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рд╕рд╢рд░реНрдд рдирд┐рд░реНрдорд╛рдг ({% if%}, {% endif%}) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣реЛрд╕реНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдирд╛рдо рдЕрдХреНрд╖рд░ "HD" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рд╣рдо рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрд╕рд┐рдмрд▓ рддрдереНрдпреЛрдВ рдФрд░ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ [0: 2] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдореЗрдЬрдмрд╛рди рдирд╛рдо рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдереНрдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рд╕рд╢рд░реНрдд рдирд┐рд░реНрдорд╛рдг рдореЗрдВ "parhost" рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
---
##
# Parse hostnames to grab 1st 2 characters
##
- name: "Parse hostname's 1st 2 characters"
set_fact: parhost={{ ansible_hostname[0:2] }}
RHEL рд╕реНрдЯреЙрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ
csum рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╣рдо рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рдХреЛ рдЪреЗрдХрд╕рдо рдХреЗ рд╕рд╛рде рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ AIX, Solaris рдФрд░ Linux рдкрд░ рдпреЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рднрд┐рдиреНрди рд╣реИрдВ, рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ AIX рдФрд░ RHEL рдкрд░ рд░реВрдЯ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
##
# Conditionally set name of checksum binary
##
- name: "set checksum binary"
set_fact:
csbin: "{{ 'cksum' if (ansible_distribution == 'RedHat') else 'csum' }}"
##
# Conditionally set name of root group
##
- name: "set system group"
set_fact:
sysgroup: "{{ 'root' if (ansible_distribution == 'RedHat') else 'sys' }}"
рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рдкреВрд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╢рд░реНрдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо "рд▓рд╛" рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
##
# Enclose in block so we can use parhost to exclude hosts
##
- block:
рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд╛рдиреНрдп рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдореЗрдЬрдмрд╛рди рдкрд░ рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирдИ sudoer рдлрд╝рд╛рдЗрд▓ рдХреА рд╡реИрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
##
# Validate will prevent bad files, no need to revert
# Jinja2 template will add include line
##
- name: Ensure sudoers file
template:
src: sudoers.j2
dest: /etc/sudoers
owner: root
group: "{{ sysgroup }}"
mode: 0440
backup: yes
validate: /usr/sbin/visudo -cf %s
register: sudochg
рдпрджрд┐ рдХреЛрдИ рдирдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЪреЗрдХрд╕рдо рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБред рд╕рд╢рд░реНрдд рдирд┐рд░реНрдорд╛рдг sudoers рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╛ рдпрджрд┐ рдЪреЗрдХрд╕рдо рдлрд╝рд╛рдЗрд▓ рдЧрд╛рдпрдм рд╣реИ, рддреЛ рдЪреЗрдХрд╕рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд░рдирд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рднреА рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реНрд░реЛрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рджрд┐рдП рдЧрдП рд╢реЗрд▓ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
- name: sudoers checksum
shell: "grep -v '/etc/sudoers' {{ MD5FILE }} > {{ MD5FILE }}.tmp ; {{ csbin }} /etc/sudoers >> {{ MD5FILE }} ; mv {{ MD5FILE }}.tmp {{ MD5FILE }}"
when: sudochg.changed or MD5STAT.exists == false
рдлрд╝рд╛рдЗрд▓ рдореЙрдбреНрдпреВрд▓ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ:
- name: Ensure MD5FILE permissions
file:
path: "{{ MD5FILE }}"
owner: root
group: "{{ sysgroup }}"
mode: 0600
state: file
рдЪреВрдВрдХрд┐ рдмреИрдХрдЕрдк рдкреИрд░рд╛рдореАрдЯрд░ рдкрд┐рдЫрд▓реЗ рдмреИрдХрдЕрдк рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рдмрдирд╛рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП "рд░рдЬрд┐рд╕реНрдЯрд░" рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ "stdout_lines" рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
##
# List and clean up backup files. Retain 3 copies.
##
- name: List /etc/sudoers.*~ files
shell: "ls -t /etc/sudoers*~ |tail -n +4"
register: LIST_SUDOERS
changed_when: false
- name: Cleanup /etc/sudoers.*~ files
file:
path: "{{ item }}"
state: absent
loop: "{{ LIST_SUDOERS.stdout_lines }}"
when: LIST_SUDOERS.stdout_lines != ""
рдмреНрд▓реЙрдХ рд╕рдорд╛рдкрди:
##
# This conditional restricts what hosts this block runs on
##
when: parhost != EXCLUDE
...
рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдЕрдВрд╕рд┐рдмрд▓ рдЯреЙрд╡рд░ рдкрд░ рдЦреЗрд▓рдирд╛ рд╣реИред рдЕрдиреНрд╕рд┐рдмрд▓ рдЯреЙрд╡рд░ рдЕрд▓рд░реНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдиреМрдХрд░реА рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдИрдореЗрд▓ рдХреЛ рд╕реНрд▓реИрдХ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЕрд▓рд░реНрдЯ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рднреВрдорд┐рдХрд╛ Ansible, Ansible Engine рдпрд╛ Ansible Tower рдореЗрдВ рдЪрд▓рддреА рд╣реИред
рдирддреАрдЬрддрди, рд╣рдордиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рдмрдХреБрдЫ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЖрджрд░реНрд╢ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдИ рдЬреЛ рд╕реВрдбрд░реНрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреА рд╣реИред SCM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рдмрдВрдзрди рдФрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬреЗрдирдХрд┐рдВрд╕ рдпрд╛ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдЖрдИ / рд╕реАрдбреА рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП Ansible рдХреЛрдб рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЖрдВрд╕рд┐рдмрд▓ рдЯреЙрд╡рд░ рдореЗрдВ рдСрдбрд┐рдЯрд░ рдХреА рднреВрдорд┐рдХрд╛ рдЖрдкрдХреЛ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдкреНрд░рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рдЪреЗрдХрд╕рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкрд╣рд▓реЗ рдЕрдкрдиреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрд╡рд╛ рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рд╕реВрдбреЛрд░реНрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдЕрдиреНрд╕рд┐рдмрд▓ рд╡реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
тЖТ рдЖрдк рдЗрд╕
рд▓рд┐рдВрдХ рдкрд░ GitHub рд╕реЗ рднреВрдорд┐рдХрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ