L'automazione è il grande ideale IT e DevOps, ma secondo la mia esperienza, tutto ciò che non è immediatamente conveniente potrebbe anche non esistere affatto. Ci sono state molte volte in cui ho trovato una soluzione abbastanza buona per alcune attività e la scriverò persino, ma mi fermo prima di renderla letteralmente automatizzata perché l'infrastruttura per una facile automazione non esiste sulla macchina Ci sto lavorando.
Altro su Ansible
- Una guida rapida ad Ansible
- Cheat sheet di Ansible
- Corso online gratuito:Ansible essentials
- Scarica e installa Ansible
- eBook:l'impresa automatizzata
- eBook:Ansible for DevOps
- Ebook Ansible gratuiti
- Ultimi articoli Ansible
Il mio strumento di automazione facile preferito era il sistema cron:vecchio, affidabile, rivolto all'utente e (a parte una sintassi di pianificazione che non posso mai impegnare in memoria) semplice. Tuttavia, il problema con cron è che presuppone che un computer sia acceso 24 ore al giorno, tutti i giorni. Dopo aver saltato uno di troppo backup programmati, ho scoperto anacron, il sistema cron basato su timestamp anziché su orari programmati. Se il tuo computer è spento quando in genere un lavoro sarebbe stato eseguito, anacron assicura che venga eseguito quando il computer è di nuovo acceso. Creare un lavoro è facile come trascinare uno script di shell in una delle tre directory:cron.daily
, cron.weekly
o cron.monthly
(puoi definire di più se vuoi). Con anacron, mi ritrovo a inserire script e playbook Ansible per tutti i tipi di attività banali, inclusi promemoria pop-up di date di scadenza o eventi imminenti.
È una soluzione semplice ed ovvia a un problema moderno, ma non mi aiuta se anacron non è installato sul computer.
Configurazione del software con Ansible
Ogni volta che configuro un nuovo computer, sia esso un laptop, una workstation o un server, installo anacron. È facile, ma un'installazione di anacron fornisce solo il comando anacron. Non configura l'ambiente utente anacron. Quindi ho creato un playbook Ansible per impostare ciò di cui l'utente ha bisogno per utilizzare anacron e installare il comando anacron.
Innanzitutto, lo standard Ansible boilerplate:
---
- hosts: localhost
tasks:
Creazione di directory con Ansible
Successivamente, creo l'albero delle directory che uso per anacron. Puoi pensare a questo come a una sorta di crontab trasparente.
- name: create directory tree
ansible.builtin.file:
path: "{{ item }}"
state: directory
with_items:
- '~/.local/etc/cron.daily'
- '~/.local/etc/cron.weekly'
- '~/.local/etc/cron.monthly'
- '~/.var/spool/anacron'
La sintassi di questo potrebbe sembrare un po' strana, ma in realtà è un loop. Il with_items:
La direttiva definisce quattro directory da creare e Ansible esegue un'iterazione su ansible.builtin.file:
direttiva una volta per ogni directory (il nome della directory popola il {{ item }}
variabile). Come per tutto in Ansible, non ci sono errori o conflitti se la directory esiste già.
Copiare file con Ansible
Il ansible.builtin.copy
modulo copia i file da una posizione all'altra. Affinché funzionasse, avevo bisogno di creare un file chiamato anacrontab
. Non è un playbook Ansible, quindi lo tengo nel mio ~/Ansible/data
directory, dove conservo i file di supporto per i miei playbook.
- name: copy anacrontab into place
ansible.builtin.copy:
src: ~/Ansible/data/anacrontab
dest: ~/.local/etc/anacrontab
mode: '0755'
Il mio anacrontab
è semplice e imita quello che alcune distribuzioni installano per impostazione predefinita in /etc/anacron
:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1 0 cron.day run-parts $HOME/.local/etc/cron.daily/
7 0 cron.wek run-parts $HOME/.local/etc/cron.weekly/
30 0 cron.mon run-parts $HOME/.local/etc/cron.monthly/
Esecuzione di anacron all'accesso
La maggior parte delle distribuzioni Linux configura anacron per leggere i lavori da /etc/anacron
. Uso principalmente anacron come utente normale, quindi lancio anacron dal mio login ~/.profile
. Non voglio dovermi ricordare di configurarlo da solo, quindi ho fatto fare ad Ansible. Uso il ansible.builtin.lineinfile
modulo, che crea ~/.profile
se non esiste già e inserisce la riga di lancio di anacron.
- name: add local anacrontab to .profile
ansible.builtin.lineinfile:
path: ~/.profile
regexp: '^/usr/sbin/anacron'
line: '/usr/sbin/anacron -t ~/.local/etc/anacrontab'
create: true
Installazione di anacron con Ansible
Per la maggior parte dei miei sistemi, il dnf
il modulo funzionerebbe per l'installazione del pacchetto, ma la mia workstation esegue Slackware (che utilizza slackpkg
), e talvolta una diversa distribuzione Linux si fa strada nella mia raccolta. Il ansible.builtin.package
module fornisce un'interfaccia generica per l'installazione del pacchetto, quindi lo uso per questo playbook. Fortunatamente, non mi sono imbattuto in un repository che si chiama anacron
tutt'altro che anacron
, quindi per ora non devo tenere conto di potenziali differenze nei nomi dei pacchetti.
Questo è in realtà un gioco separato perché l'installazione del pacchetto richiede l'escalation dei privilegi, fornita da becomes: true
direttiva.
- hosts: localhost
become: true
tasks:
- name: install anacron
ansible.builtin.package:
name: anacron
state: present
Utilizzo di anacron e Ansible per una facile automazione
Per installare anacron con Ansible, eseguo il playbook:
$ ansible-playbook ~/Ansible/setup-anacron.yaml
Da quel momento in poi, posso scrivere script di shell per eseguire alcune attività banali ma ripetitive e copiarle in ~/.local/etc/cron.daily
per farlo funzionare automaticamente una volta al giorno (o giù di lì). Scrivo anche playbook Ansible per attività come ripulire la mia cartella dei download. Metto i miei playbook in ~/Ansible
, che è dove tengo le mie riproduzioni Ansible, quindi creo uno script di shell in ~/.local/etc/cron.daily
per eseguire il gioco. È facile, indolore e diventa rapidamente una seconda natura.