рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░
v2.2
рдирдорд╕реНрддреЗ,
рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ, рдорд╢реАрди рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреНрд▓реЗрдмреЙрдХ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдиреАрдЪреЗ рд╣реИред рдЬрдм рдорд╢реАрди рд░рд┐рдмреВрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЕрдЦрд╝рдмрд╛рд░ рдХреА рдкреНрд▓реЗрдмреБрдХ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддреА рд╣реИ рдФрд░ рд╣реЛрд╕реНрдЯ рдХреЗ рдСрдирд▓рд╛рдЗрди рд╡рд╛рдкрд╕ рдЖрдиреЗ рдФрд░ рд╢реЗрд╖ рдкреНрд▓реЗрдмреБрдХ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?
- name: reboot the system when package is upgraded
command: /sbin/shutdown -r now "Ansible system package upgraded"
when: latest_state.changed
tags: upgrade_packages_all
- name: waiting for server to come back
local_action: wait_for host={{ ansible_default_ipv4.address }} port=22 state=started delay=30 timeout=60
sudo: false
tags: upgrade_packages_all
TASK [vmsetup : reboot the system when package is upgraded] ********************
fatal: [96.119.246.13]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "PolicyKit daemon disconnected from the bus.\r\nWe are no longer a registered authentication agent.\r\n", "msg": "MODULE FAILURE", "parsed": false}
рд░рд┐рдмреВрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдиреБрдкрдпреЛрдЧреА рдкреНрд▓реЗрдмреБрдХ рдиреЗ рдЗрд╕реЗ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рджрд┐рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
#tail -f /var/log/messages
Feb 10 16:25:30 nrpe[872]: Daemon shutdown
Connection to xx.xxx.xxx.xx closed by remote host.
Connection to xx.xxx.xxx.xx closed.
рдпрджрд┐ рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдзрдиреНрдпрд╡рд╛рджред
рдзрдиреНрдпрд╡рд╛рдж,
рдЧреЛрд╡рд┐рдВрдж
&& sleep 1
shell: /sbin/shutdown -r now "Ansible system package upgraded" && sleep 1
рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдмрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреНрдиреНрдпреЗрдм рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ 'рд░реАрдк' рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ https://support.ansible.com/hc/en-us/articles/201958037-Reboot-a-server-and-wait-for-it-to-come-back рдкрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЗрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдбреЙрдХреНрд╕ рдореЗрдВ, рдФрд░ docs.ansible.com рдкрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ
@bcoca рдиреЗ рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдореБрдЭреЗ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП ign_errors: true рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рддреНрд░реБрдЯрд┐:
рдШрд╛рддрдХ: [96.119.246.13]: рд╡рд┐рдлрд▓! => {"рдкрд░рд┐рд╡рд░реНрддрд┐рдд": рдЕрд╕рддреНрдп, "рд╡рд┐рдлрд▓": рд╕рддреНрдп, "рдорд╛рдбреНрдпреВрд▓_рд╕реНрдЯреИрдбрд░": "", "рдорд╛рдбреНрдпреВрд▓_рд╕реНрдЯреВрдбрдЖрдЙрдЯ": "рдкреЙрд▓рд┐рд╕реАрдХрд┐рдЯ рдбреЗрдореЙрди рдмрд╕ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЧрдпрд╛ред \ n рд╣рдо рдЕрдм рдкрдВрдЬреАрдХреГрдд рдЧреНрд░рд╛рд╣рдХ рдПрдЬреЗрдВрдЯ рдирд╣реАрдВ рд╣реИрдВ редr \ n", "рд╕рдВрджреЗрд╢": "рдореЙрдбрд▓ рд╡рд┐рдлрд▓рддрд╛", "рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛": рдЧрд▓рдд}
рдореИрдВ 2.0.0.2 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реА рдорджрдж рдХреА:
- name: Wait for server come back
wait_for: >
host="{{ inventory_hostname }}"
port=22
delay=15
timeout=60
delegate_to: localhost
@ gvenka008c :
рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
shell: sleep 2 && /sbin/shutdown -r now
@ рдХреИрдВрдбреА рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ !! :) рдзрдиреНрдпрд╡рд╛рдж! рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди Ansible 2.1 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ
- name: Restart server
become: yes
shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded"
- name: waiting 30 secs for server to come back
local_action: wait_for host={{ ansible_default_ipv4.address }} port=22 state=started delay=30 timeout=60
become: false
@sayantandas рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЕрднреА рднреА рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдореИрдВ 2.1.1.0 ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
UNREACHABLE! => {"changed": false, "msg": "SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh", "unreachable": true}
рдореБрдЭреЗ рдпрд╣ рдЙрддреНрддрд░ рдорд┐рд▓рд╛ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░реЗрдВ: http://stackoverflow.com/a/39174307
- name: Restart server
become: yes
shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded"
async: 1
poll: 0
local_action
shell
рд░рд┐рдмреВрдЯ рдХреЗ рдмрд╛рдж рд╣рдореЗрд╢рд╛ рдореЗрд░реЗ рд▓рд┐рдП рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред -vvv
рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдПрдХ рдЭрд▓рдХ рдХреЗрд╡рд▓ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╢рд░реНрдд рдХреЗ рдХрд╛рд░рдг рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд┐рд╕реА рдФрд░ рдХреЛ рдпрд╣ рдЕрдиреБрднрд╡? рдореИрдВ рдПрдХ рдирдпрд╛ рдЯрд┐рдХрдЯ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдЗрд╕рдХреЗ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдореЗрдВ 2.1 рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1.9 рдореЗрдВ "1.9" рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдЕрдиреНрд╕рд┐рдмрд▓ рдХреЛ 2.1 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛, рдХрд╛рд░реНрдп рдХреЛ "2.1" рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рд╣рд░ рдмрд╛рд░ рдЯреВрдЯ рдЧрдпрд╛ред
рдпрд╣ рд╕реЙрд▓реНрдпреВрд╢рди рдереЛрдирд╛ рдореЗрд░реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, local_action
рдкреВрд░реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдореЗрд░рд╛ рд╣реЛрд╕реНрдЯ ~ 30 рд╕реЗрдХрдВрдб рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ wait_for
3600 рддрдХ рдХрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ Ansible рдкреНрд▓реЗрдмреБрдХ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдПрдХ рдШрдВрдЯреЗ рдкрд╣рд▓реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ред .. рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рд░рд┐рдмреВрдЯ рджреВрд╕рд░реЛрдВ (рдЕрдкрдбреЗрдЯ) рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЙрдЪреНрдЪ рд╕рдордп рд╕реАрдорд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП 15 рдорд┐рдирдЯ рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдореЗрд░реА рдореБрдЦреНрдп рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ 5 рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ :()
рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрд░реЗ рд▓рд┐рдП 2.1.2 рдкрд░ рдЙрдмрдВрдЯреВ 16.04 рдЕрддрд┐рдерд┐ рд╡реАрдПрдо рдФрд░ рдУрдПрд╕ рдПрдХреНрд╕ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╡реИрдЧреНрд░рд╛рдВрдд (1.8.6) рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓рдмреЙрдХреНрд╕ (5.1.8) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
- name: "Reboot if required"
shell: sleep 2 && shutdown -r now 'Reboot required' removes=/var/run/reboot-required
become: true
async: 1
poll: 0
ignore_errors: true
- name: "Wait for reboot"
local_action: wait_for host={{ ansible_default_ipv4.address }} port=22 delay=10 state=started
become: false
@Furiml : рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕ рдкрд░ рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдп 10 рд╕реЗрдХрдВрдб рдХреА рджреЗрд░реА рдХреЗ рдмрд╛рдж рд╣рд░ 10 рд╕реЗрдХрдВрдб (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдкрд░ рдорддрджрд╛рди рдХрд░реЗрдЧрд╛, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЕрддрд┐рдерд┐ рдорд╢реАрди рдкрд░ рдкреЛрд░реНрдЯ 22 рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЦреБрд▓рд╛ рд╣реИ рдпрд╛рдиреА рдпрд╣ рдЬреАрддрд╛ рдкреВрд░реНрдг рдЖрд╡рдВрдЯрд┐рдд рдЯрд╛рдЗрдордЖрдЙрдЯ рдорд╛рди рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдбреЙрдХреНрд╕ рдФрд░ / рдпрд╛ рд╕рдорд░реНрдерди рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрджреНрдпрддрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рдкреВрд░реНрдг YAML рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- name: reboot nodes
shell: sleep 2 && shutdown -r now "Ansible reboot"
async: 1
poll: 0
ignore_errors: true
- name: wait for server to come back
local_action: wait_for
args:
host: "{{ inventory_hostname }}"
port: 22
state: started
delay: 30
timeout: 300
рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рд▓рд┐рдЦрд╛ред рдПрдХ рдореЗрдЬрдмрд╛рди рдХреЗ рдЙрдардиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЗрд╕рдХреЗ рдХрдо рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
- name: "Wait for the machine to be down"
local_action: wait_for
args:
host={{target}}
port=22
state=stopped
delay=1
timeout=3600
become: false
рдЕрдЧрд░ рдореИрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдЧрдпрд╛, рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рдХреНрд╖реНрдп рдХреЗ рдмрдВрджрд░рдЧрд╛рд╣ 22 рдХреЛ рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рд╣реА рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред рдореИрдВрдиреЗ рдорд╢реАрди рдХреЛ рдЦреБрдж рд╣реА рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдм 5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреНрд╕рд┐рдмрд▓ рдлрдВрд╕ рдЧрдпрд╛ рд╣реИ :(
@martineg рдЬреЛ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЕрдм рдпрд╣ рд╣реИ рд╢рд╛рдорд┐рд▓ рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛ рднреВрдорд┐рдХрд╛ рдореЗрдВ jmcvetta.debian-upgrade-reboot
ред
2.2 рдкрд░ ansible рдкрд░ рдпрд╣ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рд░рд┐рдмреВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд╕ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдиреМрдХрд░реА рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдлрд┐рд░ 22 рдкреЛрд░реНрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдиреЛрдб рд░рд┐рдмреВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ!
рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдмрдВрдЯреВ 16.04 / ansible 2.2.1.0 рдкрд░ @sashgorokhov рдЬреИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рд╣реИред
рдмрд╕ "рдареАрдХ рд╣реИ" рдХрд╣рддрд╛ рд╣реИ рдФрд░ рд░рд┐рдмреВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
ok: [IP] => {
"ansible_job_id": "575686775528.32762",
"changed": false,
"finished": 0,
"results_file": "/root/.ansible_async/575686775528.32762",
"started": 1
}
@ рдиреЛрд╣рд╛рдУ рд╢рд╛рдпрдж рдпрд╣ рдЫреЛрдЯрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
tasks:
- shell: shutdown -r now
рдпрд╣ рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдиреЛрдб рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рддрд╛ рд╣реИ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)
@ sashgorokhov рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдЗрд╕реЗ рд░реАрдмреВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрдорд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рд╕реЗ 1 рдорд┐рдирдЯ рдкрд╣рд▓реЗ рдмрд░реНрдмрд╛рдж рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред
Cent25 7.3 рд╕рд░реНрд╡рд░ рдкрд░ F25 рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рд╕реЗ Ansible 2.2.1 рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреЛрдИ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб?
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рднреВрдорд┐рдХрд╛ рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдореБрдЭреЗ рд░рд┐рдмреВрдЯ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ 2 рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдореЗрдВ рдПрдХ рд▓рдВрдмреА рдкрд░реНрдпрд╛рдкреНрдд рдиреАрдВрдж рдХреЗ рд╕рд╛рде рдпрд╛ рдпрджрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдХ ssh-keycan рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ рд╕рд╛рде рд╣реА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рд░реНрд╡рд░ рдЪрд╛рд▓реВ рд╣реИ .. рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрд╡рдЪрд╛рд▓рди рдЙрдкрдХрд░рдг рд╣реИ;)
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдареАрдХ рд╣реИ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрд╡рдХреВрдл рдерд╛ рдФрд░ рдЖрдзреА рд░рд╛рдд рдХреЗ рдХрд░реАрдм рдпрд╣рд╛рдБ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рдбрд░рддрд╛ ... рдЧрд▓рдд рдЗрдиреНрд╡реЗрдВрдЯрд░реА рдПрдлрдПрдлрдПрд╕ред рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдорд╛рдлрд╝ рдХрд░рдирд╛...
рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдореИрдХ рд╕рдВрд╕реНрдХрд░рдг 2.3.0.0), рд▓рдХреНрд╖реНрдп AWS рдореЗрдВ рдПрдХ рдлреЗрдбреЛрд░рд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрдкрддреНрд░рдХ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ (рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд░реАрдмреВрдЯ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛) рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ (рдЬрд╣рд╛рдВ рджреЗрд░реА_рдмрд░реНрдм рд╕рд┐рд░реНрдл рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдиреАрдВрдж рдФрд░ рд░рд┐рдмреВрдЯ рд╣реИ):
- copy:
src: files/delayed_reboot
dest: /tmp/delayed_reboot
owner: root
group: root
mode: 0700
- name: Restart machine
shell: nohup /tmp/delayed_reboot &
async: 1
poll: 0
ignore_errors: true
become: true
become_method: sudo
when: new_kernel.changed or new_kernel_headers.changed
- name: Wait for machine to restart
local_action:
module: wait_for
host={{ inventory_hostname }}
port=22
delay=20
timeout=300
state=started
become: false
when: new_kernel.changed or new_kernel_headers.changed
рд╕рд╛рдЭрд╛ рдХрд┐рдпреЗ рд╕рдВрдкрд░реНрдХ
ansible 2.3.0.0
config file = /Users/ebalduf/PD-git/LabOnDemand/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]
grep '^[^#]' ansible.cfg
[defaults]
host_key_checking = False
timeout = 15
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
control_path = %(directory)s/%%h-%%r
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
Ansible рдореЗрдЬрдмрд╛рди: macOS рд╕рд┐рдПрд░рд╛ 10.12.4
рд▓рдХреНрд╖реНрдп: AWS рдореЗрдВ рдлреЗрдбреЛрд░рд╛ 25 рдЙрджрд╛рд╣рд░рдгред
- name: install python and deps for ansible modules
raw: dnf install -y python2 python2-dnf libselinux-python
- name: gather facts
setup:
- name: Install new Kernel
dnf:
name: https://kojipkgs.fedoraproject.org//packages/kernel/4.9.13/201.fc25/x86_64/kernel-core-4.9.13-201.fc25.x86_64.rpm
register: new_kernel
- name: Install new Kernel headers
dnf:
name: https://kojipkgs.fedoraproject.org//packages/kernel/4.9.13/201.fc25/x86_64/kernel-headers-4.9.13-201.fc25.x86_64.rpm
register: new_kernel_headers
- name: Restart machine
command: reboot
async: 1
poll: 0
ignore_errors: true
become: true
become_method: sudo
when: new_kernel.changed or new_kernel_headers.changed
- name: Wait for machine to restart
local_action:
module: wait_for
host={{ inventory_hostname }}
port=22
delay=20
timeout=300
state=started
become: false
when: new_kernel.changed or new_kernel_headers.changed
- рдЖрдк рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП gist.github.com рд▓рд┐рдВрдХ рднреА рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд▓рдХреНрд╖реНрдп рдХреЛ рдареАрдХ рд╕реЗ рд░рд┐рдмреВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреНрд▓реЗрдмреБрдХ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
-Vvv рдХреЗ рд╕рд╛рде рдиреАрдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ
Using module file /usr/local/lib/python2.7/site-packages/ansible/modules/commands/command.py
<34.209.10.206> ESTABLISH SSH CONNECTION FOR USER: fedora
<34.209.10.206> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=fedora -o ConnectTimeout=15 -o ControlPath=/Users/ebalduf/.ansible/cp/%h-%r 34.209.10.206 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<34.209.10.206> (0, '/home/fedora\n', '')
<34.209.10.206> ESTABLISH SSH CONNECTION FOR USER: fedora
<34.209.10.206> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=fedora -o ConnectTimeout=15 -o ControlPath=/Users/ebalduf/.ansible/cp/%h-%r 34.209.10.206 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672 `" && echo ansible-tmp-1493487050.48-176600574616672="` echo /home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672 `" ) && sleep 0'"'"''
<34.209.10.206> (0, 'ansible-tmp-1493487050.48-176600574616672=/home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672\n', '')
<34.209.10.206> PUT /var/folders/sd/5jlrqcms5qg3bjc0g5mp5r1r0000gn/T/tmpeV4QiT TO /home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672/command.py
<34.209.10.206> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=fedora -o ConnectTimeout=15 -o ControlPath=/Users/ebalduf/.ansible/cp/%h-%r '[34.209.10.206]'
<34.209.10.206> (0, 'sftp> put /var/folders/sd/5jlrqcms5qg3bjc0g5mp5r1r0000gn/T/tmpeV4QiT /home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672/command.py\n', '')
<34.209.10.206> ESTABLISH SSH CONNECTION FOR USER: fedora
<34.209.10.206> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=fedora -o ConnectTimeout=15 -o ControlPath=/Users/ebalduf/.ansible/cp/%h-%r 34.209.10.206 '/bin/sh -c '"'"'chmod u+x /home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672/ /home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672/command.py && sleep 0'"'"''
<34.209.10.206> (0, '', '')
<34.209.10.206> ESTABLISH SSH CONNECTION FOR USER: fedora
<34.209.10.206> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=fedora -o ConnectTimeout=15 -o ControlPath=/Users/ebalduf/.ansible/cp/%h-%r -tt 34.209.10.206 '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-jplodcrkimvnywjebybiuhwijxipglmt; /usr/bin/python /home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672/command.py; rm -rf "/home/fedora/.ansible/tmp/ansible-tmp-1493487050.48-176600574616672/" > /dev/null 2>&1'"'"'"'"'"'"'"'"' && sleep 0'"'"''
<34.209.10.206> (255, '', 'Shared connection to 34.209.10.206 closed.\r\n')
fatal: [34.209.10.206]: UNREACHABLE! => {
"changed": false,
"unreachable": true
}
MSG:
Failed to connect to the host via ssh: Shared connection to 34.209.10.206 closed.
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП @ebalduf рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдпрд╣ рднреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рднреА macs / CentOS рдХреЗ рд╕рд╛рде ansible 2.2 рдХреЗ рд░реВрдк рдореЗрдВ ansible рдореЗрдЬрдмрд╛рдиреЛрдВ рдФрд░ CentOS7 рдХреЛ рд▓рдХреНрд╖реНрдп рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рдЕрдВрдХ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЗрд╕ рдмрдЧ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛ рд╕рдХреЗ!
рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдЙрддреНрддрд░ рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕рдВрд╕реНрдХрд░рдг - 2.3
рд╕рд░реНрд╡рд░ - рдЙрдмрдВрдЯреВ 16.04.2 LTS
рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА - рдЖрд░рдПрдЪрдИрдПрд▓ 7.3
- name: restart server
become: yes
shell: sleep 2 && /sbin/shutdown -r now "RedHat system package upgraded"
async: 1
poll: 0
- name: waiting 60 secs for server to come back
become: false
local_action: wait_for host={{ ansible_default_ipv4.address }} port=22 state=started delay=60 timeout=120
@Sayantandas рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рдзрд╛рди рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЙрддреНрддрд░ рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕рдВрд╕реНрдХрд░рдг: 2.3.0.0
рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг: CentOS Linux рд░рд┐рд▓реАрдЬрд╝ 7.3.1611
рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА: CentOS Linux рд░рд┐рд▓реАрдЬрд╝ 7.3.1611
@Sayantandas рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдЙрддреНрддрд░ рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕рдВрд╕реНрдХрд░рдг: 2.3.0.0
рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг: рдЖрд░рдПрдЪрдИрдПрд▓ 7.3
рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА: рдЖрд░рдПрдЪрдИрдПрд▓ 7.3
рдзрдиреНрдпрд╡рд╛рдж
рдЙрддреНрддрд░ рджреЗрдиреЗ рдпреЛрдЧреНрдп 2.3, Centos7, рдиреАрдЪреЗ рдореИрдВ рдЬреЛ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рд╛рде рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд░реНрдиреЗрд▓ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдореЗрдЬрдмрд╛рди рд░рд┐рдмреВрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рддреЛ 'рдмреВрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ' рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
- name: Check for reboot hint.
shell: LAST_KERNEL=$(rpm -q --last kernel | perl -pe 's/^kernel-(\S+).*/$1/' | head -1);CURRENT_KERNEL=$(uname -r); if [ $LAST_KERNEL != $CURRENT_KERNEL ]; then echo 'reboot'; else echo 'no'; fi
ignore_errors: true
register: reboot_hint
- name: Rebooting ...
shell: sleep 2 && /usr/sbin/reboot
async: 1
poll: 0
ignore_errors: true
when: reboot_hint.stdout.find("reboot") != -1
- name: Wait for host to boot
become: false
local_action: wait_for
args:
host: "{{ inventory_hostname }}"
port: 22
state: started
delay: 30
timeout: 180
when: reboot_hint.stdout.find("reboot") != -1
рдареАрдХ рд╕реЗ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд┐рд╡реЗрдХ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рдеред
рдЕрд╕реНрдерд┐рд░ 2.2.2.0
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Ubuntu 16.04 LTS рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдмреБрдХ
---
- name: Refresh apt cache
apt:
update_cache: yes
- name: Update all packages
apt:
upgrade: dist
- name: Rebooting server
shell: >
sleep 2 &&
/sbin/shutdown -r now "Ansible system package upgraded"
async: 1
poll: 0
ignore_errors: true
- name: Wait for host to boot
become: false
local_action: wait_for
args:
host: "{{ inventory_hostname }}"
port: 22
state: started
delay: 30
timeout: 200
- name: Sanity check
shell: ps -ef | grep sshd | grep `whoami` | awk '{print \"kill -9\", $2}' | sh
async: 1
poll: 0
ignore_errors: true
- name: Remove useless packages from the cache
apt:
autoclean: yes
- name: Remove dependencies that are no longer required
apt:
autoremove: yes
рдкрд░рд┐рдгрд╛рдо
TASK [apt-refresh : Remove useless packages from the cache] ********************
fatal: [xxxx]: FAILED! => {"changed": false, "failed": true, "module_stderr": "OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g 1 Mar 2016\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 19: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug1: mux_client_request_session: master session id: 2\r\nShared connection to xxxx closed.\r\n", "module_stdout": "Traceback (most recent call last):\r\n File \"/tmp/ansible_MJ_gDg/ansible_module_apt.py\", line 903, in <module>\r\n main()\r\n File \"/tmp/ansible_MJ_gDg/ansible_module_apt.py\", line 855, in main\r\n for package in packages:\r\nTypeError: 'NoneType' object is not iterable\r\n", "msg": "MODULE FAILURE"}
ansible.cfg
[defaults]
inventory = hosts
host_key_checking = False
remote_user = ubuntu
private_key_file = id_rsa
retry_files_enabled = False
[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s
control_path = /tmp/%%h-%%p-%%r
рдореБрдЭреЗ рднреА рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереАред рдореИрдВрдиреЗ 30 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╢реЗрд▓ рдореЗрдВ рдЗрдирдмреЗрдЯрди рдХреЗ рд▓рд┐рдП 'рдкреЙрдЬрд╝' рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рд╛: рд╢рдЯрдбрд╛рдЙрди рдЖрд░-рдЖрд░ рдФрд░ рд╡реЗрдЯ_рдлреЙрд░ рдХрд╛рд░реНрдпред рдЕрдм рдЪреАрдЬреЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рднреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдХреЗрд╡рд▓ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╣реА рдЪрд▓рддреЗ рд╣реИрдВред
рдореЗрд░реЗ рд╕рдорд╛рди рдореБрджреНрджреЗ рдереЗ рдЬрдм рд╣рдорд╛рд░реЗ Ubuntu 16.04 рдореЗрдЬрдмрд╛рди рдХреЛ рдкреБрдирд░реНрдЬрдиреНрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП python3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдЙрдмрдВрдЯреВ 16.04 рдореЗрдЬрдмрд╛рдиреЛрдВ рдкрд░ рдЕрдЬрдЧрд░ 2.7 рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ (рдЙрдкрдпреБрдХреНрдд-рдкрд╛рдпрдерди-рдиреНрдпреВрдирддрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ) рдФрд░ рд░рд┐рдореЛрдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рд░рд┐рдмреВрдЯ рдиреЗ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдЬрдм рднреА рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдореЗрдВ "async" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ рдЬрдм ansible рдиреЗ python3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, "echo test> / tmp / testfile" рдЬреИрд╕реА рдмрд╣реБрдд рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЗрдВ рднреА рдирд╣реАрдВред
рдкрд░рд┐рд╡рд░реНрдзрди: рдореИрдВ http://ppa.launchpad.net/ansible/ansible/suntu рд╕реЗ рдбреЗрдм рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд 2.3.1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рддреЛ рд╡рд╣рд╛рдБ рдПрдХ Wait_for_connection рдПрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рд╕рд┐рд╕реНрдЯрдо рдлрд┐рд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдЯреЗрд╕реНрдЯ рдХрд░рдХреЗ рдЗрд╕реЗ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ рдпрджрд┐ рдХреЛрдИ рдкреЛрд░реНрдЯ рдлрд┐рд░ рд╕реЗ рдЬрд╡рд╛рдм рджреЗ рд░рд╣рд╛ рд╣реИред
рд╣рдо рдПрдХ рдирдП рд░рд┐рдмреВрдЯ рдПрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд░рд┐рдмреВрдЯ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛, рдХрдиреЗрдХреНрд╢рди рдХреЗ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд┐рдмреВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВред
cc @AnderEnder @gregswift @jarv @jhoekx
рдмреЙрдЯ рдорджрдж рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА - рд╕реЗрдВрдЯреЛрд╕ 7.4
- name: restart server
become: yes
shell: sleep 2 && /sbin/shutdown -r now "System reboot"
#command: /usr/bin/systemd-run --on-active=10 /usr/bin/systemctl reboot
async: 1
poll: 0
- name: waiting 10 secs for server to come back
become: false
local_action: wait_for host={{ ansible_default_ipv4.address }} port={{ ansible_port }} state=started delay=10 timeout=120
@peterwillcn IMO рдЖрдк рдмреЗрд╣рддрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ wait_for рдХреЗ рдмрдЬрд╛рдп wait_for_connection, рджреЗрдЦреЗрдВ: http://docs.ansible.com/ansible/latest/wait_for_connection_module.html
рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЬрдореНрдлреЙрд╕реНрдЯреНрд╕ рдпрд╛ рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓рдХреНрд╖реНрдп рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдкрд░рд┐рд╡рд╣рди рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
@dagwieers рд░рд┐рдмреВрдЯ рдПрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рдХреИрд╕реЗ рд╕рд╛рде рдЖ рд░рд╣рд╛ рд╣реИ?
рдЗрд╕рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреВрдорд┐рдХрд╛рдПрдБ рдорд┐рд▓реАрдВ:
@ рдлреЗрд▓реНрдб рдХрд┐ рднреВрдорд┐рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреЛрд▓ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ ssh рдкреЛрд░реНрдЯ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдм рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╢рдЯрдбрд╛рдЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдЕрдкрд░рд╛рдзреА рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмреА рджреЗрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреА рд╣реЛрдЧреА рдпрд╛ рдЖрдк рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред
рдирдпрд╛ рдкреНрд░рддреАрдХреНрд╖рд╛_рдлреЛрд░рд╛_рд╕рдВрдХреНрд░рдордг рдХреЗрд╡рд▓ рдкрд┐рдВрдЧ рдФрд░ рдПрдХ рдЕрдиреНрдп рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд┐рд▓рдВрдм рдХрд╛рд░рдХ (рдКрдкрд░ рджреЗрдЦреЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддреЛ рдлрд┐рд░ рд╕реЗ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХрд╛ рдмрдбрд╝рд╛ рдЬреЛрдЦрд┐рдо (рд░реЗрдбрд╣реИрдЯ рд╕рдорд░реНрдерди рджреНрд╡рд╛рд░рд╛ рдкреБрд╖реНрдЯрд┐)ред
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдордЬрдмреВрдд рдмрдирд╛рдпрд╛ рд╣реИ рд╡рд╣ 2 рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдкрд╣рд▓реЗ рдПрдХ ssh рдкреЛрд░реНрдЯ рдХреЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХрддрдо 15 рдорд┐рдирдЯ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рд╣рд░ рд╕реЗрдХрдВрдб рдорддрджрд╛рди рд╣реЛрддрд╛ рд╣реИ - рд╕рд░реНрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдирд┐рдпрдорд┐рдд рдУрдПрд╕ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рджреВрд╕рд░рд╛ ssh рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдп 2 рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ - ssh рдкреЛрд░реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ - 1 рдорд┐рдирдЯ рдХреА рджреЗрд░реА рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рд╣реБрдЖред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдЧрд░ рдкреЛрд░реНрдЯ рдЪрд╛рд▓реВ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╣ рдПрдХ рдЕрдЬрдЧрд░ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ssh рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛
рдПрдВрдбреА
рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛
12 рджрд┐рд╕рдВрдмрд░ 2017 рдХреЛ 05:41 рдкрд░, рд╢реЙрди рд╕реНрдорд╛рдЗрд▓реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
@ рдлреЗрд▓реНрдб рдХрд┐ рднреВрдорд┐рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИред
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред
@akcrisp рдФрд░ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рд░рд▓ рдкреНрд░рддреНрдпрдХреНрд╖-рдХрдиреЗрдХреНрд╢рди рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИред Wait_for_connection рдореЙрдбреНрдпреВрд▓ рднреА рдРрд╕рд╛ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ ssh_proxy, рдпрд╛ рдЕрдиреНрдп рдЕрдиреБрдорд╛рдирд┐рдд рдкрд░рд┐рд╡рд╣рди рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рдкрдбрд╝рд╛ред
рдЖрдк рдкреНрд░рддрд┐ рд╕рд┐рд╕реНрдЯрдо / рд╕рдореВрд╣ рдпрд╛ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рджреЗрд░реА-рд╕рдордп рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИред
рд╕рд╣рдордд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ рдареАрдХ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рд╣рд╡рд╛ рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрдзрд╛рд░рдХ рдЙрдВрдЧрд▓реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджреЗрд░реА?
рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛
12 рджрд┐рд╕рдВрдмрд░ 2017 рдХреЛ 16:20 рдмрдЬреЗ, Dag Wieers рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:
@akcrisp рдФрд░ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рд░рд▓ рдкреНрд░рддреНрдпрдХреНрд╖-рдХрдиреЗрдХреНрд╢рди рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИред Wait_for_connection рдореЙрдбреНрдпреВрд▓ рднреА рдРрд╕рд╛ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ ssh_proxy, рдпрд╛ рдЕрдиреНрдп рдЕрдиреБрдорд╛рдирд┐рдд рдкрд░рд┐рд╡рд╣рди рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рдкрдбрд╝рд╛ред
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред
рдХреНрдпрд╛ ssh check рдХреЛ wait_for connection
рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ
рд╕рд╛рде рд╣реА AWS рдСрдЯреЛрд╕рд╛рд▓рд┐рдВрдЧ рдЧреНрд░реБрдкреНрд╕ рдореЗрдВ рдЧреНрд░реЗрд╕_ рдЯрд╛рдЗрдордЖрдЙрдЯ рдереЛрдбрд╝реЗ рдЪреАрдЬрд╝ рдЬреЛрдбрд╝реЗрдВ - "рдХрдиреЗрдХреНрд╢рди" рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдФрд░ рд╕рдордп рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛:
_ansible: 2.4.1.0
рдЙрдмрдВрдЯреВ: 16.04.3 рдПрд▓рдЯреАрдПрд╕
рд▓рд┐рдирдХреНрд╕ 4.4.0-98-рдЬреЗрдиреЗрд░рд┐рдХ_
- name: reboot server
become: yes
shell: sleep 2 && /sbin/shutdown -r now "System reboot"
async: 1
poll: 0
- name: Wait for restart
local_action: wait_for port=22 host="{{ ansible_ssh_host | default(inventory_hostname) }}" search_regex=OpenSSH delay=60
- name: continue running script after reboot
shell: 'sh /home/ubuntu/my_script.sh'
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП Ansible 2.4.2.0 рдФрд░ Ubuntu 16.04 LTS рдкрд░ Azure рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛
- hosts: all
become: yes
become_user: root
pre_tasks:
- name: Patching for Spectre and Meltdown followed by a reboot
become: yes
shell: nohup bash -c 'sleep 2 && apt -y update && apt -y upgrade && apt -y autoremove && reboot "System reboot"' &
async: 1
poll: 0
- name: Wait for 3 minutes for server to come online
become: false
local_action: wait_for port=22 host={{ ansible_ssh_host | default(inventory_hostname) }} search_regex='OpenSSH' delay=180 timeout=300
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдерд╛ред рдпрд╣рд╛рдБ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
- name: Inform of reboot required
listen: reboot machine
debug:
msg: "System {{ inventory_hostname }} needs to be rebooted for changes to take effect"
- name: Update GRUB to pick up changes to default config, if any
command: update-grub2
listen: reboot machine
# Send the reboot command and let it run in the background
# so we can disconnect...
- name: Send reboot command
listen: reboot machine
shell: '(sleep 5; shutdown -r now) &'
- name: Clear host errors
listen: reboot machine
meta: clear_host_errors
failed_when: false
- name: Reset connection
listen: reboot machine
meta: reset_connection
failed_when: false
- name: Wait for SSH to be available
listen: reboot machine
local_action: wait_for
args:
host: "{{ ansible_host }}"
port: "{{ ansible_port | default('22') }}"
delay: 60
state: started
- name: Ansible ping
listen: reboot machine
local_action: ping
register: result
until: result.ping is defined and result.ping == 'pong'
retries: 30
delay: 10
- name: Run uptime
listen: reboot machine
command: uptime
# LACP and spanning-tree take a bit of time to start working
- name: Ping default gateway
listen: reboot machine
command: "ping -c 1 {{ ansible_default_ipv4.gateway }}"
register: result
until: result.rc == 0
retries: 30
delay: 10
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ (Ansible 2.4.2):
- name: restart machine
shell: nohup sh -c '(sleep 5; shutdown -r now "Ansible restart") &' &>/dev/null
become: yes
- name: wait for machine to restart
wait_for_connection:
delay: 60
sleep: 5
timeout: 300
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:
- name: restart the system
shell: "sleep 5 & reboot"
async: 1
poll: 0
- name: wait for the system to reboot
wait_for_connection:
connect_timeout: 20
sleep: 5
delay: 5
timeout: 60
рдпреЗ рд╕рднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрд╕рд▓реА рдлрд┐рдХреНрд╕ рд╣реЛрдВрдЧреЗ
рд╣рдо рдПрдХ рдирдП рд░рд┐рдмреВрдЯ рдПрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд░рд┐рдмреВрдЯ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛, рдХрдиреЗрдХреНрд╢рди рдХреЗ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд┐рдмреВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рд╣реА? (https://github.com/ansible/ansible/issues/14413#issuecomment-330523110 рд╕реЗ)
рдХреА рдкреБрд╖реНрдЯрд┐ рдХреАред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ
рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд░рд┐рдмреВрдЯ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдирдХреНрд╕ рд╕реЗ рдкрд░реЗ рд╡рд┐рднрд┐рдиреНрди рдпреВрдирд┐рдХреНрд╕ рд╕реНрд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛? рдпрд╛рдиреА Aix / Solaris рдЖрджрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдХреЛ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ - рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╕ рдкреЛрд░реНрдЯ 22 рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдХреЗ рд╕рдордп рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рд╕реЗ - рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ - рдЕрдЧрд░ рдПрдХ рдореЗрдЬрдмрд╛рди рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдпрд╛рдиреА рдмрдбрд╝реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ - рджреЗрд░реА рдХрд╛рд░рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд░рд┐рдмреВрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рд╕рд╛рдмрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг рдкрд╣рд▓реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИред
рдПрдВрдбреА
рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛
28 рдлрд░рд╡рд░реА 2018 рдХреЛ, 15:04 рдкрд░, рдбреЗрдЧ рд╡рд┐рдпрд░реНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдХреА рдкреБрд╖реНрдЯрд┐ рдХреАред
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред
@akcrisp рдпрд╣реА рдЗрд░рд╛рджрд╛ рд╣реИред рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛: https://github.com/ansible/ansible/issues/16186
---
- hosts: all
- name: restart the system
shell: "sleep 5 & reboot"
async: 1
poll: 0
- name: wait for the system to reboot
wait_for_connection:
connect_timeout: 20
sleep: 5
delay: 5
timeout: 60
ansible-playbook test.yaml
рддреНрд░реБрдЯрд┐! YAML рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ред
рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░рдг рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ
рддреНрд░реБрдЯрд┐ '/etc/ansible/test.yaml' рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ: рдкрдВрдХреНрддрд┐ 4, рдХреЙрд▓рдо 10, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╕рдЯреАрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рд╣реЛред
рдЖрдХреНрд░рд╛рдордХ рд░реЗрдЦрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ:
рдХреГрдкрдпрд╛ рдорджрдж рдХрд░реЗрдВ ;-)
---
- hosts: all
- name: restart the system
shell: "sleep 5 & reboot"
async: 1
poll: 0
- name: wait for the system to reboot
wait_for_connection:
connect_timeout: 20
sleep: 5
delay: 5
timeout: 60
рдпреЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рджреБрдЦ - рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рдкрдврд╝реЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИред рд╣рд░ рдХреЛрдИ рдмрд╕ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдПрдХ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЬреЛрдЦрд┐рдо рдЙрдард╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд╢рдЯрдбрд╛рдЙрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреЗ рд╕рд╛рде рдПрдХ рдРрдк рд▓реЗрдЧрд╛ рдФрд░ рд░рд┐рдмреВрдЯ рдХреЗ рдмрд╛рдж ssh рдКрдкрд░ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред
рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВ рдХрд┐ ssh рдХреА рдЬрд╛рдБрдЪ рдкрд╣рд▓реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ - рдЬреЛ shh рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИ - рдПрдХ рдЕрдЬрдЧрд░ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛
16 рдЕрдкреНрд░реИрд▓ 2018 рдХреЛ, 09:21 рдмрдЬреЗ, рдмреЗрди рдПрдмрдиреЗрд░реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
- рдпрдЬрдорд╛рди: рд╕рднреА
рдирд╛рдо: рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ
рдЦреЛрд▓: "рдиреАрдВрдж 5 рдФрд░ рд░рд┐рдмреВрдЯ"
async: 1
рдЬрдирдордд: режрдирд╛рдо: рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд░реАрдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
Wait_for_connection:
connect_timeout: 20
рдиреАрдВрдж: рел
рджреЗрд░реА: 5
рд╕рдордп рд╕рдорд╛рдкреНрдд: 60
рдпреЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред
рдЖрдк рд╕рд╣реА рд╣реИрдВ - рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдереА, рдореИрдВ рд╕рд┐рд░реНрдл рд╕рд╣реА рдкреНрд░рд╛рд░реВрдкрдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ async рд░рд┐рдмреВрдЯ рдХрд╛рд░реНрдп рдХреЛ рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ @pyroxde рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ
рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд┐рдмреВрдЯ рдФрд░ win_reboot рдПрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рдпреВрдирд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдбреЙрдХреНрд╕ рдФрд░ / рдпрд╛ рд╕рдорд░реНрдерди рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрджреНрдпрддрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рдкреВрд░реНрдг YAML рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: