Ansible: рд░рд┐рдмреВрдЯ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдлрд╝рд░ре░ 2016  ┬╖  58рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ansible/ansible

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░
  • рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ
рдШрдЯрдХ рдХрд╛ рдирд╛рдо

рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░

рдЙрддреНрддрд░ рд╕рдВрд╕реНрдХрд░рдг

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.

рдпрджрд┐ рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдзрдиреНрдпрд╡рд╛рджред

рдзрдиреНрдпрд╡рд╛рдж,
рдЧреЛрд╡рд┐рдВрдж

affects_2.2 affects_2.3 bug module core

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

рдбреЙрдХреНрд╕ рдФрд░ / рдпрд╛ рд╕рдорд░реНрдерди рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрджреНрдпрддрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рдкреВрд░реНрдг 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

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

&& 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

  • рдирд╛рдо: рдкреИрдХреЗрдЬ рдХреЗ рдЕрдкрдЧреНрд░реЗрдб рд╣реЛрдиреЗ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░реЗрдВ
    рдХрдорд╛рдВрдб: / sbin / shutdown -r рдЕрдм "Ansible рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛" рдФрд░& рдиреАрдВрдж 1
    рдЬрдм: latest_state.changed
    ign_errors: рд╕рдЪ
    рдЯреИрдЧ: upgrade_packages_all

рддреНрд░реБрдЯрд┐:
рдШрд╛рддрдХ: [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 --version" рд╕реЗ рд╡рд░реНрдмреЗрдЯрд┐рдо рдЖрдЙрдЯрдкреБрдЯ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ
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)]
рд╕рдВрдЧрдо
- рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ ansible.cfg (рдпрд╛ ANSIBLE_ * рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдореЗрдВ рдХреЛрдИ рднреА рд╕реЗрдЯрд┐рдВрдЧ рдЬреЛ рдЖрдкрдиреЗ рдмрджрд▓ / рдЬреЛрдбрд╝реА / рд╣рдЯрд╛ рджреА рд╣реИ, рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред
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 рдПрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рд╕рд┐рд╕реНрдЯрдо рдлрд┐рд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдЯреЗрд╕реНрдЯ рдХрд░рдХреЗ рдЗрд╕реЗ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ рдпрджрд┐ рдХреЛрдИ рдкреЛрд░реНрдЯ рдлрд┐рд░ рд╕реЗ рдЬрд╡рд╛рдм рджреЗ рд░рд╣рд╛ рд╣реИред

рд╣рдо рдПрдХ рдирдП рд░рд┐рдмреВрдЯ рдПрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд░рд┐рдмреВрдЯ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛, рдХрдиреЗрдХреНрд╢рди рдХреЗ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд┐рдмреВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВред

рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА - рд╕реЗрдВрдЯреЛрд╕ 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, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╕рдЯреАрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рд╣реЛред

рдЖрдХреНрд░рд╛рдордХ рд░реЗрдЦрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ:

  • рдирд╛рдо: рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ
    рдЦреЛрд▓: "рдиреАрдВрдж 5 рдФрд░ рд░рд┐рдмреВрдЯ"
    ^ рдпрд╣рд╛рдБ

рдХреГрдкрдпрд╛ рдорджрдж рдХрд░реЗрдВ ;-)

---
- 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 рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ

37941 рд╣реИ

рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд┐рдмреВрдЯ рдФрд░ win_reboot рдПрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рдпреВрдирд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

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

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

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

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

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

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

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