Come automatizzare con Ansible apt upgrade

Ansible APT Package Manager è l’equivalente per Ubuntu del RedHat yum package manager. Come qualsiasi altro modulo Ansible, è costruito per interfacciarsi con uno specifico comando Unix, in questo caso apt e apt-get.

Ricordiamo che è sempre raccomandato utilizzare i moduli di Ansible piuttosto che lanciare comandi Unix grezzi attraverso il modulo shell, questo perché l’utilizzo dei moduli Ansible garantiscono una maggiore standardizzazione e fault tolerance ai nostri Ansible Playbooks.

Vediamo quindi ora come utilizzare il modulo apt di Ansible.

Tabella dei Contenuti

Introduzione al modulo apt di Ansible

Il modulo apt di Ansible gestisce i package apt nei sistemi Debian o Ubuntu.

Tipicamente in una macchina Ubuntu per installare un package eseguiremmo questo comando

				
					sudo apt install nginx
				
			

In Ansible questa cosa la possiamo realizzare nel seguente modo

				
					---
- name: Playbook to install NGINX
  hosts: webservers
  become: true
  tasks: 
    - name: Ansible apt install nginx
      apt:
        name: nginx
        state: present
				
			

Differenza tra apt e apt-get

Erroneamente si pensa che apt e apt-get siano la stessa cosa e che possiamo quindi usarli intercambiabilmente.

Apt è una interfaccia di front-end per apt-get che cerca di risolvere certe mancanze presenti in apt-get.

Direttamente dal blog di Debian prendiamo questa frase per capire la differenza tra apt e apt-get:

apt is a second command-line based front end provided by APT which overcomes some design mistakes of apt-get.

Quindi apt può fare tutto quello che apt-get può fare, migliorandone l’interazione con l’utente.

Il modulo apt di Ansible, così come è concepito, favorisce il comando apt rispetto ad apt-get, passando eventualmente a quest’ultimo in modo del tutto automatico nei casi in cui necessario.

Cosa fare però se volessimo forzare Ansible ad usare apt-get invece di apt?

Forzare l'uso di apt-get in Ansible

Per obbligare Ansible ad usare apt-get invece di apt, possiamo utilizzare il parametro force_apt_get

L’esempio precedente in cui installiamo nginx diventerebbe quindi così

				
					---
- name: Playbook to install NGINX
  hosts: webservers
  become: true
  tasks: 
    - name: Ansible apt install nginx
      apt:
        name: nginx
        state: present
        force_apt_get: yes
				
			

Rimuovere un package con Ansible apt

Per rimuovere un pacchetto utilizzando il modulo apt di Ansible, tutto ciò che è necessario fare è utilizzare state: absent

				
					---
- name: Playbook to install NGINX
  hosts: webservers
  become: true
  tasks: 
    - name: Ansible apt install nginx
      apt:
        name: nginx
        state: absent
				
			

Aggiornare la cache di apt con Ansible

La prima fase da seguire quando ci si appronta ad installare un pacchetto mediante apt è quella di aggiornare la cache locale di apt.

In un playbook Ansible, per aggiornarla dobbiamo usare il parametro update_cache

				
					---
- name: Esempio di Ansible apt module
  hosts: web
  become: true
  tasks:
   - name: Ansible apt update
     register: updatesys
     apt:
       update_cache: yes
				
			

Nel caso in cui volessimo aggiornare la cache di apt solo se più vecchia di un certo tempo è sufficiente aggiungere il parametro cache_valid_time

				
					---
- name: Esempio di Ansible apt module
  hosts: web
  become: true
  tasks:
   - name: Ansible apt update se cache più vecchia di un'ora
     register: updatesys
     apt:
       update_cache: yes
       cache_valid_time: 3600
				
			

Aggiornare un singolo package con Ansible apt

L’aggiornamento di un singolo pacchetto può essere fatto indicando il parametro state: latest

				
					---
- name: Esempio di Ansible apt module
  hosts: web
  become: true
  tasks:
   - name: Ansible apt update se cache più vecchia di un'ora
     register: updatesys
     apt:
       name: openssl
       state: latest
       update_cache: yes
				
			

Eseguire l'update e l'upgrade di tutti i pacchetti

Mantenere aggiornati i pacchetti installati è assolutamente necessario per mantenere sicuro e integro il nostro sistema. Possiamo quindi automatizzarlo tramite Ansible con il seguente Playbook

				
					---
- name: Ansible apt module examples
  hosts: web
  become: true
  tasks:
   - name: Ansible Update Cache and Upgrade all Packages
     register: updatesys
     apt:
       name: "*"
       state: latest
       update_cache: yes

   - name: Show the last line from the previous task to check the stats
     debug:
     msg:  "{{updatesys.stdout_lines|last}}"

				
			

Come installare una lista di pacchetti con Ansible apt

Se in un colpo solo volessimo installare una lista di pacchetti, possiamo utilizzare un Playbook così costruito

				
					---
- name: Ansible apt module examples
  hosts: web
  become: yes
  tasks:
   - name: Ansible apt to install multiple packages - LAMP
     register: updatesys
     apt:
       update_cache: yes
       name:
        - firewalld
        - apache2
        - mariadb-server
        - php
        - php-mysql
       state: present
				
			

Installare una specifica versione di un package con Ansible apt

A volte può essere necessario installare una specifica verisone di un package. Il nostro Playbook Ansible sarà quindi simile al seguente

				
					---
- name: Ansible apt module examples
  hosts: web
  become: true
  tasks: 
   - name: Ansible apt install tomcat Version 8.0.32
     register: updatesys
     apt:
       update_cache: yes
       name: tomcat8=8.0.32-1ubuntu1.11
       state: present
				
			

In questo esempio abbiamo installato la versione 8.0.32 di tomcat.

Installare un file .deb o un package usando Ansible apt

Il modulo apt di Ansible può essere utilizzato anche per installare i package .deb oppure per scaricare il file da un URL remoto e successivamente installarlo.

In questo esempio il Playbook si occupa di installare filebeat utilizzando il relativo .deb package.

Il file è già stato scaricato ed è contenuto nella directory locale /tmp

				
					---
- name: Ansible apt module examples
  hosts: web
  become: true
  tasks: 

   - name: Ansible install filebeat deb file from local
     apt:
       deb: /tmp/filebeat-7.6.0-amd64.deb
				
			

In quest’altro esempio invece, il file .deb deve ancora essere scaricato e pertanto ne indichiamo il suo URL.

Sarà quindi Ansible apt a scaricare il file .deb dal percorso remoto ed installarlo senza alcun intervento manuale.

				
					---
- name: Ansible apt module examples
  hosts: web
  become: true
  tasks: 

   - name: Ansible install filebeat deb file from url
     apt:
       deb: https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.0-amd64.deb
				
			

Validare se un package è installato usando Ansible apt

Quando, prima di effettuare una qualsiasi operazione, vogliamo validare con Ansible la presenza o meno sul sistema di un certo package, possiamo farlo utilizzando il modulo apt e l’opzione check_mode.

Il metodo però consigliato per questo tipo di validazione è quello che passa per l’utilizzo del modulo package_facts. Qui di seguito li Playbook di esempio

				
					---
- name: Ansible validate if the packages are installed
  hosts: web
  become: true
  tasks:
  
   - name: Gather Package facts
     package_facts:
       manager: auto

   - name: Validating if the package is installed or not
     debug:
       msg: "{{item}} is installed"
     when: '"{{item}}" in ansible_facts.packages'
     with_items:
       - apache2
       - nginx
       - filebeat
				
			

Rimuovere i pacchetti inutilizzati usando Ansible apt

Per ripulire il sistema dai pacchetti inutilizzati si può utilizzare il modulo apt di Ansible nel seguente modulo

				
					---
- name: Remove useless packages from the cache
  apt:
    autoclean: yes

- name: Remove dependencies that are no longer required
  apt:
    autoremove: yes
				
			

Questo comando ripulisce la cache dai package non più utilizzati e ne rimuove le dipendenze che non sono più necessarie.

Link utili

Per maggiori dettagli sul funzionamento del modulo apt fare riferimento alla documentazione ufficiale Ansible https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Most Recent

Come aggiungere e rimuovere utenti su Debian

Debian, così come tutte le altre distribuzioni Linux, è un sistema operativo multiutente. Ogni utente può avere differenti livelli di permission e specifici settaggi per

Partners