{"id":1254,"date":"2022-10-24T00:06:29","date_gmt":"2022-10-23T22:06:29","guid":{"rendered":"https:\/\/alessandromasciadri.com\/?p=1254"},"modified":"2022-10-24T10:12:22","modified_gmt":"2022-10-24T08:12:22","slug":"come-automatizzare-con-ansible-apt-upgrade","status":"publish","type":"post","link":"https:\/\/alessandromasciadri.com\/come-automatizzare-con-ansible-apt-upgrade\/","title":{"rendered":"Come automatizzare con Ansible apt upgrade"},"content":{"rendered":"\t\t<div data-akihiro-type=\"ama-post\" data-akihiro-id=\"1254\" class=\"akihiro akihiro-1254\" data-akihiro-post-type=\"post\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-dda7285 e-flex e-con-boxed e-con e-parent\" data-id=\"dda7285\" data-element_type=\"container\" data-e-type=\"container\" id=\"my-post\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"akihiro-element akihiro-element-8f69bc0 akihiro-widget akihiro-widget-text-editor\" data-id=\"8f69bc0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ansible APT Package Manager \u00e8 l&#8217;equivalente per Ubuntu del RedHat yum package manager. Come qualsiasi altro modulo Ansible, \u00e8 costruito per interfacciarsi con uno specifico comando Unix, in questo caso apt e apt-get.<\/p><p>Ricordiamo che \u00e8 sempre raccomandato utilizzare i moduli di Ansible piuttosto che lanciare comandi Unix grezzi attraverso il modulo shell, questo perch\u00e9 l&#8217;utilizzo dei moduli Ansible garantiscono una maggiore standardizzazione e fault tolerance ai nostri Ansible Playbooks.<\/p><p>Vediamo quindi ora come utilizzare il modulo apt di Ansible.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-d4783b5 akihiro-toc--minimized-on-tablet akihiro-widget akihiro-widget-table-of-contents\" data-id=\"d4783b5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;container&quot;:&quot;#my-post&quot;,&quot;exclude_headings_by_selector&quot;:[],&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;marker_view&quot;:&quot;numbers&quot;,&quot;no_headings_message&quot;:&quot;Non sono state trovate intestazioni in questa pagina.&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"akihiro-toc__header\">\n\t\t\t\t\t\t<h4 class=\"akihiro-toc__header-title\">\n\t\t\t\tTabella dei Contenuti\t\t\t<\/h4>\n\t\t\t\t\t\t\t\t\t\t<div class=\"akihiro-toc__toggle-button akihiro-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"akihiro-toc__d4783b5\" aria-expanded=\"true\" aria-label=\"Apri l&#039;indice dei contenuti\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/div>\n\t\t\t\t<div class=\"akihiro-toc__toggle-button akihiro-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"akihiro-toc__d4783b5\" aria-expanded=\"true\" aria-label=\"Chiudi l&#039;indice dei contenuti\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"akihiro-toc__d4783b5\" class=\"akihiro-toc__body\">\n\t\t\t<div class=\"akihiro-toc__spinner-container\">\n\t\t\t\t<svg class=\"akihiro-toc__spinner eicon-animation-spin e-font-icon-svg e-eicon-loading\" aria-hidden=\"true\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-a74cd45 akihiro-widget akihiro-widget-heading\" data-id=\"a74cd45\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Introduzione al modulo apt di Ansible<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-1530d5a akihiro-widget akihiro-widget-text-editor\" data-id=\"1530d5a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Il modulo apt di Ansible gestisce i package apt nei sistemi Debian o Ubuntu.<\/p><p>Tipicamente in una macchina Ubuntu per installare un package eseguiremmo questo comando<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2b3170a akihiro-widget akihiro-widget-code-highlight\" data-id=\"2b3170a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>sudo apt install nginx<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-600f621 akihiro-widget akihiro-widget-text-editor\" data-id=\"600f621\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In Ansible questa cosa la possiamo realizzare nel seguente modo<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-59b51d7 akihiro-widget akihiro-widget-code-highlight\" data-id=\"59b51d7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Playbook to install NGINX\n  hosts: webservers\n  become: true\n  tasks: \n    - name: Ansible apt install nginx\n      apt:\n        name: nginx\n        state: present<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-33d8298 akihiro-widget akihiro-widget-heading\" data-id=\"33d8298\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Differenza tra apt e apt-get<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-5d71530 akihiro-widget akihiro-widget-text-editor\" data-id=\"5d71530\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Erroneamente si pensa che apt e apt-get siano la stessa cosa e che possiamo quindi usarli intercambiabilmente.<\/p><p>Apt \u00e8 una interfaccia di front-end per apt-get che cerca di risolvere certe mancanze presenti in apt-get.<\/p><p>Direttamente dal blog di Debian prendiamo questa frase per capire la differenza tra apt e apt-get:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-a5cc9d8 akihiro-blockquote--skin-border akihiro-widget akihiro-widget-blockquote\" data-id=\"a5cc9d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"blockquote.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<blockquote class=\"akihiro-blockquote\">\n\t\t\t<p class=\"akihiro-blockquote__content\">\n\t\t\t\tapt is a second command-line based front end provided by APT which overcomes some design mistakes of apt-get.\t\t\t<\/p>\n\t\t\t\t\t<\/blockquote>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-7067a88 akihiro-widget akihiro-widget-text-editor\" data-id=\"7067a88\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Quindi apt pu\u00f2 fare tutto quello che apt-get pu\u00f2 fare, migliorandone l&#8217;interazione con l&#8217;utente.<\/p><p>Il modulo apt di Ansible, cos\u00ec come \u00e8 concepito, favorisce il comando apt rispetto ad apt-get, passando eventualmente a quest&#8217;ultimo in modo del tutto automatico nei casi in cui necessario.<\/p><p>Cosa fare per\u00f2 se volessimo forzare Ansible ad usare apt-get invece di apt?<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-07b5aed akihiro-widget akihiro-widget-heading\" data-id=\"07b5aed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Forzare l'uso di apt-get in Ansible<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-752682b akihiro-widget akihiro-widget-text-editor\" data-id=\"752682b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Per obbligare Ansible ad usare apt-get invece di apt, possiamo utilizzare il parametro <code>force_apt_get<\/code><\/p><p>L&#8217;esempio precedente in cui installiamo nginx diventerebbe quindi cos\u00ec<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-5cb5955 akihiro-widget akihiro-widget-code-highlight\" data-id=\"5cb5955\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Playbook to install NGINX\n  hosts: webservers\n  become: true\n  tasks: \n    - name: Ansible apt install nginx\n      apt:\n        name: nginx\n        state: present\n        force_apt_get: yes<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-c75f47f akihiro-widget akihiro-widget-heading\" data-id=\"c75f47f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Rimuovere un package con Ansible apt<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-4cee491 akihiro-widget akihiro-widget-text-editor\" data-id=\"4cee491\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Per rimuovere un pacchetto utilizzando il modulo apt di Ansible, tutto ci\u00f2 che \u00e8 necessario fare \u00e8 utilizzare <code>state: absent<\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-ba595b3 akihiro-widget akihiro-widget-code-highlight\" data-id=\"ba595b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Playbook to install NGINX\n  hosts: webservers\n  become: true\n  tasks: \n    - name: Ansible apt install nginx\n      apt:\n        name: nginx\n        state: absent<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-dd3cb1f akihiro-widget akihiro-widget-heading\" data-id=\"dd3cb1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Aggiornare la cache di apt con Ansible<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-e535a85 akihiro-widget akihiro-widget-text-editor\" data-id=\"e535a85\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>La prima fase da seguire quando ci si appronta ad installare un pacchetto mediante apt \u00e8 quella di aggiornare la cache locale di apt.<\/p><p>In un playbook Ansible, per aggiornarla dobbiamo usare il parametro <code>update_cache<\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-6773f32 akihiro-widget akihiro-widget-code-highlight\" data-id=\"6773f32\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Esempio di Ansible apt module\n  hosts: web\n  become: true\n  tasks:\n   - name: Ansible apt update\n     register: updatesys\n     apt:\n       update_cache: yes<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-d7bff52 akihiro-widget akihiro-widget-text-editor\" data-id=\"d7bff52\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Nel caso in cui volessimo aggiornare la cache di apt solo se pi\u00f9 vecchia di un certo tempo \u00e8 sufficiente aggiungere il parametro <code>cache_valid_time<\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-e050831 akihiro-widget akihiro-widget-code-highlight\" data-id=\"e050831\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Esempio di Ansible apt module\n  hosts: web\n  become: true\n  tasks:\n   - name: Ansible apt update se cache pi\u00f9 vecchia di un'ora\n     register: updatesys\n     apt:\n       update_cache: yes\n       cache_valid_time: 3600<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-91b9b15 akihiro-widget akihiro-widget-heading\" data-id=\"91b9b15\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Aggiornare un singolo package con Ansible apt<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-5089168 akihiro-widget akihiro-widget-text-editor\" data-id=\"5089168\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>L&#8217;aggiornamento di un singolo pacchetto pu\u00f2 essere fatto indicando il parametro <code>state: latest<\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-5823e4e akihiro-widget akihiro-widget-code-highlight\" data-id=\"5823e4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Esempio di Ansible apt module\n  hosts: web\n  become: true\n  tasks:\n   - name: Ansible apt update se cache pi\u00f9 vecchia di un'ora\n     register: updatesys\n     apt:\n       name: openssl\n       state: latest\n       update_cache: yes<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-f754862 akihiro-widget akihiro-widget-heading\" data-id=\"f754862\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Eseguire l'update e l'upgrade di tutti i pacchetti<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-3070397 akihiro-widget akihiro-widget-text-editor\" data-id=\"3070397\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Mantenere aggiornati i pacchetti installati \u00e8 assolutamente necessario per mantenere sicuro e integro il nostro sistema. Possiamo quindi automatizzarlo tramite Ansible con il seguente Playbook<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-09b8dad akihiro-widget akihiro-widget-code-highlight\" data-id=\"09b8dad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Ansible apt module examples\n  hosts: web\n  become: true\n  tasks:\n   - name: Ansible Update Cache and Upgrade all Packages\n     register: updatesys\n     apt:\n       name: \"*\"\n       state: latest\n       update_cache: yes\n\n   - name: Show the last line from the previous task to check the stats\n     debug:\n     msg:  \"{{updatesys.stdout_lines|last}}\"\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-da75400 akihiro-widget akihiro-widget-heading\" data-id=\"da75400\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Come installare una lista di pacchetti con Ansible apt<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-ffe1326 akihiro-widget akihiro-widget-text-editor\" data-id=\"ffe1326\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Se in un colpo solo volessimo installare una lista di pacchetti, possiamo utilizzare un Playbook cos\u00ec costruito<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-a808010 akihiro-widget akihiro-widget-code-highlight\" data-id=\"a808010\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Ansible apt module examples\n  hosts: web\n  become: yes\n  tasks:\n   - name: Ansible apt to install multiple packages - LAMP\n     register: updatesys\n     apt:\n       update_cache: yes\n       name:\n        - firewalld\n        - apache2\n        - mariadb-server\n        - php\n        - php-mysql\n       state: present<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-cc9699e akihiro-widget akihiro-widget-heading\" data-id=\"cc9699e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Installare una specifica versione di un package con Ansible apt<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-fd99add akihiro-widget akihiro-widget-text-editor\" data-id=\"fd99add\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A volte pu\u00f2 essere necessario installare una specifica verisone di un package. Il nostro Playbook Ansible sar\u00e0 quindi simile al seguente<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-4d1ca12 akihiro-widget akihiro-widget-code-highlight\" data-id=\"4d1ca12\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Ansible apt module examples\n  hosts: web\n  become: true\n  tasks: \n   - name: Ansible apt install tomcat Version 8.0.32\n     register: updatesys\n     apt:\n       update_cache: yes\n       name: tomcat8=8.0.32-1ubuntu1.11\n       state: present<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-6dadb62 akihiro-widget akihiro-widget-text-editor\" data-id=\"6dadb62\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In questo esempio abbiamo installato la versione 8.0.32 di tomcat.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-8c473f4 akihiro-widget akihiro-widget-heading\" data-id=\"8c473f4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Installare un file .deb o un package usando Ansible apt<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-9309a50 akihiro-widget akihiro-widget-text-editor\" data-id=\"9309a50\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Il modulo apt di Ansible pu\u00f2 essere utilizzato anche per installare i package .deb oppure per scaricare il file da un URL remoto e successivamente installarlo.<\/p><p>In questo esempio il Playbook si occupa di installare filebeat utilizzando il relativo .deb package.<\/p><p>Il file \u00e8 gi\u00e0 stato scaricato ed \u00e8 contenuto nella directory locale \/tmp<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-ca59acb akihiro-widget akihiro-widget-code-highlight\" data-id=\"ca59acb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Ansible apt module examples\n  hosts: web\n  become: true\n  tasks: \n\n   - name: Ansible install filebeat deb file from local\n     apt:\n       deb: \/tmp\/filebeat-7.6.0-amd64.deb<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-bb87e8e akihiro-widget akihiro-widget-text-editor\" data-id=\"bb87e8e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In quest&#8217;altro esempio invece, il file .deb deve ancora essere scaricato e pertanto ne indichiamo il suo URL.<\/p><p>Sar\u00e0 quindi Ansible apt a scaricare il file .deb dal percorso remoto ed installarlo senza alcun intervento manuale.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-0d17002 akihiro-widget akihiro-widget-code-highlight\" data-id=\"0d17002\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Ansible apt module examples\n  hosts: web\n  become: true\n  tasks: \n\n   - name: Ansible install filebeat deb file from url\n     apt:\n       deb: https:\/\/artifacts.elastic.co\/downloads\/beats\/filebeat\/filebeat-7.6.0-amd64.deb<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-c3f383c akihiro-widget akihiro-widget-heading\" data-id=\"c3f383c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Validare se un package \u00e8 installato usando Ansible apt<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2d008c6 akihiro-widget akihiro-widget-text-editor\" data-id=\"2d008c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>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&#8217;opzione check_mode.<\/p><p>Il metodo per\u00f2 consigliato per questo tipo di validazione \u00e8 quello che passa per l&#8217;utilizzo del modulo package_facts. Qui di seguito li Playbook di esempio<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-a08d5a0 akihiro-widget akihiro-widget-code-highlight\" data-id=\"a08d5a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Ansible validate if the packages are installed\n  hosts: web\n  become: true\n  tasks:\n  \n   - name: Gather Package facts\n     package_facts:\n       manager: auto\n\n   - name: Validating if the package is installed or not\n     debug:\n       msg: \"{{item}} is installed\"\n     when: '\"{{item}}\" in ansible_facts.packages'\n     with_items:\n       - apache2\n       - nginx\n       - filebeat<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-46a2cdb akihiro-widget akihiro-widget-heading\" data-id=\"46a2cdb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Rimuovere i pacchetti inutilizzati usando Ansible apt<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-0a35df5 akihiro-widget akihiro-widget-text-editor\" data-id=\"0a35df5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Per ripulire il sistema dai pacchetti inutilizzati si pu\u00f2 utilizzare il modulo apt di Ansible nel seguente modulo<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-43c90cd akihiro-widget akihiro-widget-code-highlight\" data-id=\"43c90cd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>---\n- name: Remove useless packages from the cache\n  apt:\n    autoclean: yes\n\n- name: Remove dependencies that are no longer required\n  apt:\n    autoremove: yes<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-da46eca akihiro-widget akihiro-widget-text-editor\" data-id=\"da46eca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Questo comando ripulisce la cache dai package non pi\u00f9 utilizzati e ne rimuove le dipendenze che non sono pi\u00f9 necessarie.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-72e1707 akihiro-widget akihiro-widget-heading\" data-id=\"72e1707\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t<h3 class=\"akihiro-heading-title akihiro-size-default\">Link utili<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"akihiro-element akihiro-element-2ed71c7 akihiro-widget akihiro-widget-text-editor\" data-id=\"2ed71c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"akihiro-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Per maggiori dettagli sul funzionamento del modulo apt fare riferimento alla documentazione ufficiale Ansible <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/collections\/ansible\/builtin\/apt_module.html\">https:\/\/docs.ansible.com\/ansible\/latest\/collections\/ansible\/builtin\/apt_module.html<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Ansible APT Package Manager \u00e8 l&#8217;equivalente per Ubuntu del RedHat yum package manager. Come qualsiasi altro modulo Ansible, \u00e8 costruito per interfacciarsi con uno specifico comando Unix, in questo caso apt e apt-get. Ricordiamo che \u00e8 sempre raccomandato utilizzare i moduli di Ansible piuttosto che lanciare comandi Unix grezzi attraverso il modulo shell, questo perch\u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[43,20,19],"class_list":["post-1254","post","type-post","status-publish","format-standard","hentry","category-sistemistica","tag-ansible","tag-linux","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/1254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/comments?post=1254"}],"version-history":[{"count":28,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/1254\/revisions"}],"predecessor-version":[{"id":1283,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/posts\/1254\/revisions\/1283"}],"wp:attachment":[{"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/media?parent=1254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/categories?post=1254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alessandromasciadri.com\/ama-json\/wp\/v2\/tags?post=1254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}