πŸ“œ Как с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ansible ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² Ubuntu / Debian Linux

by itisgood

Π£ мСня Π΅ΡΡ‚ΡŒ нСсколько сСрвСров Π½Π° Π±Π°Π·Π΅ Ubuntu ΠΈ Debian Linux.

Как ΠΌΠ½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡ… всС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля apt ΠΎΡ‚ Ansible?

Как я ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ansible для систСмных ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ послС обновлСния ядра?

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ вашСй систСмы Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ всСх исправлСний бСзопасности являСтся Π²Π°ΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ для систСмных администраторов ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ apt Ansible для управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Π² дистрибутивах Linux Π½Π° основС Debian / Ubuntu.

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ aptitude ΠΈΠ»ΠΈ apt-get Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС для управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ.

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅, Ссли Π±Ρ‹ Π²Ρ‹ использовали ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ansible, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π°Π·Π°Π΄ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Π’ этом руководствСС ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ apt / apt-get update, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Ansible ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ такая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ.

Π‘ Ansible обновляСм всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля apt

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ запускаСтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для обновлСния кэша ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ apt-get ΠΈΠ»ΠΈ apt:

sudo apt-get update

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ кСш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ansible:

    - name: Update apt-get repo and cache
      apt: update_cache=yes force_apt_get=yes cache_valid_time=3600

Π“Π΄Π΅,

  • update_cache = yes – Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ обновлСния apt-get Π½Π° всСх сСрвСрах
  • force_apt_get = yes – Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ aptitude, вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ apt-get для систСм Debian / Ubuntu
  • cache_valid_time = 3600 – ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ кэш apt, Ссли ΠΎΠ½ ΡΡ‚Π°Ρ€ΡˆΠ΅, Ρ‡Π΅ΠΌ cache_valid_time. Π­Ρ‚Π° опция устанавливаСтся Π² сСкундах. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ½ΠΎ установлСно Π½Π° 3600 сСкунд.

ОбновлСниС всСх ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с использованиСм Ansible

Бинтаксис:

   - name: Upgrade all apt packages
      apt: upgrade=dist force_apt_get=yes

Π“Π΄Π΅,

  • upgrade = dist – Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«apt-get upgradeΒ» Π½Π° всСх сСрвСрах Ubuntu ΠΈΠ»ΠΈ Debian Linux. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π΄ΠΎ послСднСй вСрсии.
  • force_apt_get = yes – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ apt-get вмСсто aptitude.

Π£Π·Π½Π°Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ сСрвСры

Если Ρ„Π°ΠΉΠ» /var/run/reboot-required сущСствуСт, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ систСму Debian ΠΈΠ»ΠΈ Ubuntu Linux.

Нам Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ссли Ρ„Π°ΠΉΠ» /var/run/reboot-required сущСствуСт Π² систСмС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    - name: Check if a reboot is needed for Debian and Ubuntu boxes
      register: reboot_required_file
      stat: path=/var/run/reboot-required get_md5=no

Π“Π΄Π΅,

  • register: reboot_required_file – ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«registerΒ» Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈ ΠΌΡ‹ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±Π»ΠΎΠΊΠ°.
  • stat: path = /var/run/reboot-required – ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сущСствуСт Π»ΠΈ ΠΏΡƒΡ‚ΡŒ (/var/run/reboot-required)
  • get_md5 = no – Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ опрСдСлСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы Ρ„Π°ΠΉΠ»Π°. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ md5, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sha1, sha224, sha256, sha384 ΠΈ sha512.

ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сСрвСра ΠΏΡ€ΠΈ установкС Π½ΠΎΠ²ΠΎΠ³ΠΎ ядра

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сСрвСра Linux ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ядра ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    - name: Reboot the Debian or Ubuntu server
      reboot:
        msg: "Reboot initiated by Ansible due to kernel updates"
        connect_timeout: 5
        reboot_timeout: 300
        pre_reboot_delay: 0
        post_reboot_delay: 30
        test_command: uptime
      when: reboot_required_file.stat.exists

Π“Π΄Π΅,

  • test_command: uptime – Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ uptime Π½Π° ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌ сСрвСрС ΠΈ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ успСха, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π³ΠΎΡ‚ΠΎΠ² Π»ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΊ дальнСйшим Π·Π°Π΄Π°Ρ‡Π°ΠΌ.
  • when: reboot_required_file.stat.exists – Π‘Π½Π°Ρ‡Π°Π»Π° ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ /var/run/reboot-required сущСствуСт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ reboot_required_file. ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли этот Ρ„Π°ΠΉΠ» сущСствуСт, ΠΈ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ примСняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ условия Β«AnsibleΒ»: Β«: reboot_required_file.stat.existsΒ».

ИспользованиС Ansible для обновлСния систСмы ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сСрвСров Linux ΠΏΡ€ΠΈ нСобходимости

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» хостов:

vi hosts

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:
## set up ssh user name and path to python3 ##
[all:vars]
ansible_user='ubuntu'
ansible_become=yes
ansible_become_method=sudo
ansible_python_interpreter='/usr/bin/env python3'
Β 
##########################
## our aws server names
## aws-ls-www-1 may be mapped using /etc/hosts or ~/.ssh/config
## you can use ip address here too
###########################
[servers]
aws-ls-www-1
aws-ls-www-2
aws-ls-www-3
aws-ls-www-4

ΠžΠ±Ρ€Π°Π·Π΅Ρ† ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊΠ°

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ update.yml ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

vi update.yml

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Ansible:

---
- hosts: servers
  become: true
  become_user: root
  tasks:
    - name: Update apt repo and cache on all Debian/Ubuntu boxes
      apt: update_cache=yes force_apt_get=yes cache_valid_time=3600

    - name: Upgrade all packages on servers
      apt: upgrade=dist force_apt_get=yes

    - name: Check if a reboot is needed on all servers
      register: reboot_required_file
      stat: path=/var/run/reboot-required get_md5=no

    - name: Reboot the box if kernel updated
      reboot:
        msg: "Reboot initiated by Ansible for kernel updates"
        connect_timeout: 5
        reboot_timeout: 300
        pre_reboot_delay: 0
        post_reboot_delay: 30
        test_command: uptime
      when: reboot_required_file.stat.exists
Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ настроили ssh-ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ запуститС ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
ansible-playbook -i hosts update.yml

You may also like

4 коммСнтария

Alex 16.03.2020 - 19:23

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.
The error appears to have been in ‘/home/alex/tmp/system-update-2.yml’: line 16, column 7, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
– name: Reboot server if kernel updated
^ here

Reply
bigtyper 03.02.2023 - 11:11

Бпасибо большоС!
Π­Ρ‚ΠΎΡ‚ скриптик Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π» сразу, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ внСс измСнСния согласно своСму inventory Ρ„Π°ΠΉΠ»Ρƒ

Reply
itisgood 03.02.2023 - 12:47

ВсСгда Ρ€Π°Π΄Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ!

Reply
skycheg 13.09.2023 - 07:21

Бпасибо
Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ для RHEL 7.8 ))

Reply

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ для Alex Cancel Reply