GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment mettre à jour/mettre à niveau Debian/Ubuntu Linux à l'aide d'Ansible

De même, s'il y a des mises à jour du noyau qui nécessitent un redémarrage du système d'exploitation, il serait préférable d'utiliser le module reboot ansible pour redémarrer la machine, attendre qu'elle s'arrête, se rallume et réponde aux commandes

Dans ce guide, nous allons créer un script pour mettre à jour le cache des systèmes basés sur Debian et mettre à niveau les packages installés. Nous inclurons également une tâche pour redémarrer le serveur si des mises à jour du noyau nécessitent un redémarrage.

Vérifiez également :

  • SSH – Génération et utilisation des clés SSH

Table des matières

  1. Utilisation du module Ansible apt pour mettre à jour tous les packages
  2. Redémarrer le système s'il y a des mises à jour du noyau
  3. Création du fichier hosts
  4. Tout le livre de jeu
  5. Exécuter le playbook

1. Utilisation du module Ansible apt pour mettre à jour tous les packages

Avant d'effectuer une mise à niveau de paquet dans les systèmes basés sur Debian, il est toujours recommandé d'effectuer une actualisation du cache apt. Ceci peut être réalisé en utilisant cette commande :

sudo apt-get update

Nous pouvons obtenir la même chose en utilisant Ansible avec cette tâche :

- name: Update apt repo and cache on all Debian/Ubuntu boxes
  apt:
    update_cache: yes
    force_apt_get: yes
    cache_valid_time: 3600

Où,

  1. update_cache :oui – Exécutez l'équivalent de apt-get update commande sur tous les serveurs
  2. force_apt_get :oui – N'utilisez pas la commande aptitude, utilisez plutôt la commande apt-get sur les boîtes Debian/Ubuntu
  3. cache_valid_time :3600 – Mettre à jour le cache apt s'il est plus ancien que le cache_valid_time . Cette option est définie en secondes. Dans ces exemples, il est défini sur 3600 secondes.

Ensuite, nous effectuons la mise à niveau. Nous exécutons normalement cette commande apt-get pour obtenir la fonction :

sudo apt-get upgrade -y

Voici la tâche Ansible pour réaliser la mise à niveau :

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

Où,

  1. mise à niveau :dist – Exécutez l'équivalent de apt-get upgrade commande sur tous les serveurs Ubuntu ou Debian Linux. En d'autres termes, mettez à niveau tous les packages vers la dernière version.
  2. force_apt_get :oui – Utilisez apt-get au lieu d'aptitude.

2. Redémarrer le système s'il y a des mises à jour du noyau

S'il y a des mises à niveau du noyau, nous aurions besoin de redémarrer le système pour appliquer ces modifications. Si un redémarrage est requis, un fichier avec ce chemin /var/run/reboot-required sera créé.

Ce que nous voudrions faire, c'est vérifier si ce fichier existe, puis redémarrer le système. Nous pouvons enregistrer une nouvelle variable si le fichier /var/run/reboot-required existe sur le système en utilisant la statistique ansible :

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

Où :

  1. s'inscrire :reboot_required_file – Le register Le mot-clé décide dans quelle variable enregistrer un résultat et nous allons l'utiliser comme suit pour redémarrer la boîte.
  2. stat :chemin :/var/run/reboot-required – Déterminer si un chemin (/var/run/reboot-required) existe
  3. get_md5 :non – Algorithme pour déterminer la somme de contrôle du fichier. Dans cet exemple, j'utilise md5, mais vous pouvez utiliser sha1, sha224, sha256, sha384 et sha512.

Maintenant que nous savons si le serveur doit être redémarré ou non, ajoutons une tâche pour redémarrer le serveur si le fichier existe :

- name: Reboot the server 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

Où,

  1. test_command :disponibilité – Exécutez la commande uptime sur le serveur redémarré et attendez le succès de pour déterminer que la machine est prête pour d'autres tâches.
  2. lorsque :reboot_required_file.stat.existe – Tout d'abord, vérifiez que le fichier nommé /var/run/reboot-required existe à l'aide d'une variable nommée reboot_required_file. Le module de redémarrage ne fonctionnera que si ce fichier existe et qu'il est appliqué à l'aide de la condition Ansible "when:reboot_required_file.stat.exists".

3. Création du fichier hosts

Maintenant que nous avons la logique en place, créons un fichier hosts.yaml. Enregistrez ce contenu dans un fichier appelé hosts.yaml .

all:
  hosts:
    ubuntusrv:
      ansible_ssh_host: 10.2.11.10
      ansible_ssh_user: ubuntu
    debiansrv:
      ansible_ssh_host: 10.2.11.11
      ansible_ssh_user: admin
  children:
    allservers:
      hosts:
        ubuntusrv:
        debiansrv:

4. Tout le playbook

Nous pouvons mettre toute la logique dans un playbook. Enregistrez ce contenu dans le fichier upgrade.yaml

---
- name: Playbook to Update cache, upgrade packages and reboot os if necessary
  hosts: allservers
  become: yes
  gather_facts: False
  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 server 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

5. Exécuter le playbook

Assurez-vous de configurer les clés SSH et de les exécuter comme suit :

ansible-playbook -i hosts.yaml upgrade.yaml -vv

Ceci est la sortie sur mon serveur

➜ ansible-playbook -i hosts.yaml upgrade.yaml -vv
ansible-playbook [core 2.12.1]
  config file = /Users/etowett/.ansible.cfg
  configured module search path = ['/Users/etowett/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/3.8/site-packages/ansible
  ansible collection location = /Users/etowett/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.2 (default, Apr  8 2021, 23:19:18) [Clang 12.0.5 (clang-1205.0.22.9)]
  jinja version = 3.0.3
  libyaml = True
Using /Users/etowett/.ansible.cfg as config file
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: upgrade.yaml ************************************************************************************************************************************************************
1 plays in upgrade.yaml

PLAY [Playbook to Update cache, upgrade packages and reboot os if necessary] ******************************************************************************************************
META: ran handlers

TASK [Update apt repo and cache on all Debian/Ubuntu boxes] ***********************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:7
changed: [ubuntusrv] => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"}, "cache_update_time": 1639737368, "cache_updated": true, "changed": true}

TASK [Upgrade all packages on servers] ********************************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:13
ok: [ubuntusrv] => {"changed": false, "msg": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nCalculating upgrade...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n", "stderr": "", "stderr_lines": [], "stdout": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nCalculating upgrade...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n", "stdout_lines": ["Reading package lists...", "Building dependency tree...", "Reading state information...", "Calculating upgrade...", "0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded."]}

TASK [Check if a reboot is needed on all servers] *********************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:18
ok: [ubuntusrv] => {"changed": false, "stat": {"atime": 1639737351.6237016, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 8, "charset": "us-ascii", "checksum": "20f7959b87e8cd55b7c985e46d6fa38a4063037d", "ctime": 1639679787.0725238, "dev": 26, "device_type": 0, "executable": false, "exists": true, "gid": 0, "gr_name": "root", "inode": 1143, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mimetype": "text/x-diff", "mode": "0644", "mtime": 1639679787.0725238, "nlink": 1, "path": "/var/run/reboot-required", "pw_name": "root", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 32, "uid": 0, "version": null, "wgrp": false, "woth": false, "writeable": true, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}}

TASK [Reboot the server if kernel updated] ****************************************************************************************************************************************
task path: /Users/etowett/Proj/me/infme/ansible/upgrade.yaml:24
changed: [ubuntusrv] => {"changed": true, "elapsed": 73, "rebooted": true}
META: ran handlers
META: ran handlers

PLAY RECAP ************************************************************************************************************************************************************************
ubuntusrv                  : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Conclusion

Vous avez appris à mettre à jour tous les packages sur vos machines Debian et Ubuntu Linux et à redémarrer le serveur si nécessaire à l'aide des playbooks Ansible.


Ubuntu
  1. Comment mettre à niveau Debian 8 Jessie vers Debian Linux 9 Stretch

  2. Comment mettre à jour le noyau Linux dans Ubuntu

  3. Comment mettre à niveau vers Ubuntu 20.04

  4. Comment mettre à jour Kali Linux

  5. Comment mettre à jour Debian Linux

Comment installer Ansible sur Ubuntu 20.04

Comment redémarrer Debian en utilisant la ligne de commande

Comment mettre à niveau Ubuntu 20.04 vers 21.04

Comment mettre à niveau Ubuntu 16.04 vers Ubuntu 16.10

Comment mettre à jour Ubuntu Linux [Astuce du débutant]

Comment mettre à niveau de 12.04 à 12.10 à l'aide d'un CD ?