Skip to content

Commit 01a2507

Browse files
New translations 03_configuration_engine.md (Italian)
1 parent ecac5cf commit 01a2507

File tree

1 file changed

+182
-0
lines changed

1 file changed

+182
-0
lines changed
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
---
2+
title: 3. Il motore di configurazione
3+
author: Wale Soyinka
4+
contributors: Steven Spencer
5+
tags:
6+
- cloud-init
7+
- rocky linux
8+
- cloud-init modules
9+
- automation
10+
---
11+
12+
## Approfondimento sui moduli cloud-init
13+
14+
Nell'ultimo capitolo, si è avviato con successo un'immagine cloud e si è eseguito una semplice personalizzazione. Sebbene efficace, il vero potere, la portabilità e l'idempotenza di `cloud-init` si sbloccano attraverso il suo sistema di moduli. Questi moduli sono strumenti specializzati del toolkit `cloud-init`, progettati per gestire attività di configurazione specifiche in modo dichiarativo e prevedibile.
15+
16+
Questo capitolo approfondisce il sistema dei moduli, spiegando cosa sono, come funzionano e come utilizzare quelli più essenziali per costruire un server ben configurato.
17+
18+
## 1. L'anatomia della configurazione
19+
20+
### Cosa sono i moduli cloud-init
21+
22+
Un modulo `cloud-init` è uno script Python specializzato progettato per gestire una singola attività di provisioning discreta. Considerarli come plugin per attività quali la gestione degli utenti, l'installazione di pacchetti o la scrittura di file.
23+
24+
Il vantaggio principale dell'utilizzo dei moduli rispetto ai semplici script (come `runcmd`) è l'**idempotenza**. Un'operazione idempotente produce lo stesso risultato sia che venga eseguita una volta o dieci volte. Quando dichiari che un utente dovrebbe esistere, il modulo garantisce che tale condizione sia soddisfatta: creerà l'utente se non esiste, ma non farà nulla se esiste già. Questo rende le tue configurazioni affidabili e ripetibili.
25+
26+
### Il formato `#cloud-config` rivisitato
27+
28+
Quando `cloud-init` rileva l'intestazione `#cloud-config`, interpreta il file come un insieme di istruzioni in formato YAML: le chiavi di primo livello in questo file YAML corrispondono direttamente ai moduli `cloud-init`.
29+
30+
### Esecuzione e ordine dei moduli
31+
32+
I moduli vengono eseguiti in fasi specifiche del processo di avvio in una sequenza definita in `/etc/cloud/cloud.cfg`. Una visione semplificata di questo flusso è la seguente:
33+
34+
```
35+
System Boot
36+
|
37+
+--- Stage: Generator (Very early boot)
38+
| `--- cloud_init_modules (e.g., migrator)
39+
|
40+
+--- Stage: Local (Pre-network)
41+
| `--- (Modules for local device setup)
42+
|
43+
+--- Stage: Network (Network is up)
44+
| `--- cloud_config_modules (e.g., users-groups, packages, write_files)
45+
|
46+
`--- Stage: Final (Late boot)
47+
`--- cloud_final_modules (e.g., runcmd, scripts-user)
48+
```
49+
50+
L'ordine è fondamentale. Ad esempio, il modulo `users-groups` viene eseguito prima di `runcmd`, garantendo che uno script possa essere eseguito da un utente appena creato nella stessa configurazione.
51+
52+
!!! tip "Personalizzazione del comportamento di `cloud-init`"
53+
54+
Sebbene il file `/etc/cloud/cloud.cfg` definisca il comportamento predefinito, non si dovrebbe mai modificarlo direttamente. Per personalizzazioni permanenti a livello di sistema, inserire i vostri file `.cfg` nella directory `/etc/cloud/cloud.cfg.d/`. Questa è la pratica standard per la creazione di immagini personalizzate, che approfondiremo in un capitolo successivo.
55+
56+
## 2. Moduli ad alta utilità: i drivers quotidiani
57+
58+
Mettiamoci all'opera con i moduli più comuni utilizzando il metodo di iniezione diretta con `virt-install`.
59+
60+
### Approfondimento sul modulo: `users` e `groups`
61+
62+
Una corretta gestione degli account utente è fondamentale per garantire la sicurezza di una nuova istanza server. Il modulo `users` è lo strumento principale per farlo, che ti permette di creare nuovi utenti, modificare quelli esistenti, gestire le appartenenze ai gruppi e, soprattutto, inserire chiavi SSH per facilitare accessi sicuri e senza password fin dal primo avvio.
63+
64+
**Esempio 1: Creazione di un nuovo utente amministratore**
65+
66+
In questo esempio, provvederemo a fornire un nuovo utente amministratore dedicato denominato `sysadmin`. Concederemo a questo utente funzionalità `sudo` senza password aggiungendolo al gruppo `wheel` e fornendo una regola `sudo` specifica. Inseriremo anche una chiave pubblica SSH per garantire un accesso sicuro.
67+
68+
1. **Creare `user-data.yml`:**
69+
70+
```bash
71+
cat <<EOF > user-data.yml
72+
#cloud-config
73+
users:
74+
- name: sysadmin
75+
groups: [ wheel ]
76+
sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
77+
shell: /bin/bash
78+
ssh_authorized_keys:
79+
- <YOUR_SSH_PUBLIC_KEY_HERE>
80+
EOF
81+
```
82+
83+
2. **Spiegazione delle direttive chiave:**
84+
85+
- `name`: Il nome utente per il nuovo account.
86+
- `gruppi`: un elenco di gruppi a cui aggiungere l'utente. Su Rocky Linux, l'appartenenza al gruppo `wheel` è comunemente utilizzata per concedere diritti amministrativi.
87+
- `sudo`: un elenco di regole `sudoers` da applicare. La regola `ALL=(ALL) NOPASSWD:ALL` consente all'utente di eseguire qualsiasi comando con `sudo` senza richiedere la password.
88+
- `ssh_authorized_keys`: un elenco di chiavi SSH pubbliche da aggiungere al file `~/.ssh/authorized_keys` dell'utente.
89+
90+
3. **Avvio e verifica:** avvia la VM con questi `user-data`. Si dovrebbe essere in grado di eseguire SSH come `sysadmin` ed eseguire comandi `sudo`.
91+
92+
**Esempio 2: Modifica dell'utente predefinito**
93+
94+
Un'operazione più comune consiste semplicemente nel proteggere l'utente predefinito fornito con l'immagine cloud (`rocky`). Qui modificheremo questo utente per aggiungere la nostra chiave SSH.
95+
96+
1. **Creare `user-data.yml`:**
97+
98+
```bash
99+
cat <<EOF > user-data.yml
100+
#cloud-config
101+
users:
102+
- default
103+
- name: rocky
104+
ssh_authorized_keys:
105+
- <YOUR_SSH_PUBLIC_KEY_HERE>
106+
EOF
107+
```
108+
109+
2. **Spiegazione delle direttive chiave:**
110+
111+
- `default`: questa voce speciale indica a `cloud-init` di eseguire prima la configurazione utente predefinita.
112+
- `name: rocky`: Specificando il nome di un utente esistente, il modulo modificherà quell'utente invece di crearne uno nuovo. Qui, unisce la chiave SSH fornita all'account dell'utente `rocky`.
113+
114+
3. **Avvio e verifica:** avviare la VM. Ora è possibile eseguire SSH come utente `rocky` senza password.
115+
116+
### Approfondimento sul modulo: `packages`
117+
118+
Il modulo `packages` offre un modo dichiarativo per gestire il software sulla vostra istanza, assicurando l'installazione di applicazioni specifiche all'avvio.
119+
120+
In questo esempio, provvederemo all'installazione di due strumenti utili, `nginx` (un server web ad alte prestazioni) e `htop` (un visualizzatore di processi interattivo). Inoltre, istruiremo `cloud-init` ad aggiornare prima i metadati del repository dei pacchetti per garantire che possa trovare le versioni più recenti.
121+
122+
1. **Creare `user-data.yml`:**
123+
124+
```bash
125+
cat <<EOF > user-data.yml
126+
#cloud-config
127+
package_update: true
128+
packages:
129+
- nginx
130+
- htop
131+
EOF
132+
```
133+
134+
2. **Spiegazione delle direttive chiave:**
135+
136+
- `package_update: true`: indica al gestore dei pacchetti di aggiornare i propri metadati locali. Su Rocky Linux, ciò equivale a eseguire `dnf check-update`.
137+
- `packages`: un elenco dei nomi dei pacchetti da installare.
138+
139+
3. **Avvio e verifica:** dopo l'avvio, eseguire l'accesso SSH e verificare l'installazione di `nginx` con `rpm -q nginx`.
140+
141+
!!! note "Idempotenza in azione"
142+
143+
Se si dovesse riavviare questa VM con gli stessi `user-data`, il modulo `packages` vedrebbe che `nginx` e `htop` sono già installati e non farebbe nulla. Ciò garantisce lo stato desiderato (i pacchetti sono presenti) senza intraprendere azioni inutili. Questa è l'idempotenza.
144+
145+
### Approfondimento sul modulo: `write_files`
146+
147+
Questo modulo è incredibilmente versatile e consente di scrivere qualsiasi contenuto di testo su qualsiasi file presente nel sistema. È lo strumento perfetto per distribuire file di configurazione delle applicazioni, popolare contenuti web o creare script di supporto.
148+
149+
Per dimostrarne la potenza, useremo `write_files` per creare una homepage personalizzata per il server web `nginx` che installeremo nella stessa sessione.
150+
151+
1. **Creare `user-data.yml`:**
152+
153+
```bash
154+
cat <<EOF > user-data.yml
155+
#cloud-config
156+
packages: [nginx]
157+
write_files:
158+
- path: /usr/share/nginx/html/index.html
159+
content: '<h1>Hello from cloud-init!</h1>'
160+
owner: nginx:nginx
161+
permissions: '0644'
162+
runcmd:
163+
- [ systemctl, enable, --now, nginx ]
164+
EOF
165+
```
166+
167+
2. **Spiegazione delle direttive chiave:**
168+
169+
- `path`: Il percorso assoluto sul filesystem dove il file verrà scritto.
170+
- `content`: Il contenuto testuale da scrivere nel file.
171+
- `owner`: specifica l'utente e il gruppo che devono essere proprietari del file (ad esempio, `nginx:nginx`).
172+
- `permissions`: i permessi del file in formato ottale (ad esempio, `0644`).
173+
174+
3. **Avvio e verifica:** dopo l'avvio, accedi tramite SSH e utilizza `curl localhost` per visualizzare la nuova homepage.
175+
176+
!!! tip "Scrittura di file binari"
177+
178+
Il modulo `write_files` non è limitato al testo. Specificando un `encoding`, è possibile distribuire file binari. Ad esempio, è possibile utilizzare `encoding: b64` per scrivere dati codificati in base64. Per casi d'uso avanzati, fare riferimento alla [documentazione ufficiale di `write_files`](https://cloudinit.readthedocs.io/en/latest/topics/modules.html#write-files).
179+
180+
## Prossimo passo
181+
182+
Ora si è appreso i tre moduli fondamentali di `cloud-init`. Combinandoli, è possibile eseguire una quantità significativa di configurazioni automatizzate del server. Nel prossimo capitolo affronteremo scenari più avanzati, tra cui la configurazione di rete e la combinazione di diversi formati di `dati utente` in un unico processo.

0 commit comments

Comments
 (0)