Come ripulire le cose da ruoli che non vengono più utilizzati su un server?


15

Supponiamo di avere un host che è, tra le altre cose, un web server, in cui viene installato il ruolo Ansible correlato nginx, esegue una configurazione essenziale /etc/nginxe apre le porte 80 e 443 nel firewall.

Ad un certo punto voglio che quel particolare host non sia più un web server, perché per qualche ragione ho spostato quel servizio altrove. La semplice rimozione del server [webservers]dall'inventario lascerebbe immondizia nel server. Idealmente, vorrei disinstallare nginx, rimuovere la /etc/nginxdirectory (e alcune altre directory) e chiudere le porte 80 e 443 nel firewall.

In Puppet posso farlo. Un host che è un server Web avrà qualcosa di simile nella sua configurazione:

class { 'nginx':
  ensure => present,
}

e tutto quello che devo fare è sostituire "presente" con "assente". Se la nginxclasse è ben scritta, annullerà le modifiche apportate. (In genere un amministratore sostituisce "presente" con "assente" e, successivamente, quando è sicuro che tutti gli host interessati abbiano annullato la configurazione, rimuoverà l'elemento dal manifest.)

Inoltre, penso che il modulo firewall Puppet rimuova automaticamente le regole del firewall che non possono più essere trovate nel manifest; quindi penso che, per il firewall, non sia nemmeno necessario fare quella cosa "assente" sopra, il firewall si chiuderà automaticamente comunque.

Come posso ottenere queste cose con Ansible?


1
Penso che le domande ipotetiche non siano realmente in tema qui, sebbene la domanda stessa non sia priva di merito. Invece di "fingiamo ..." riformula e dì per esempio "In Puppet posso cambiare un ruolo del server e disinstallare nginx che è stato installato in precedenza cambiando ensure => present in ensure => absentquale sarà anche ... Come fare lo stesso con ansible" ecc. Idealmente con un esempio di tutto ciò che hai già provato.
HBruijn,

2
Direi che Ansible non è progettato per questo genere di cose. È destinato a server riproducibili e monouso. Se non si desidera più che una macchina diventi un server Web, è sufficiente cancellarla (o terminarla se si tratta di un'istanza cloud) anziché riproporla.
Ceejayoz,

@ceejayoz il massimo che ho letto su Ansibles è nel gioco Ender's Card & sequences di Orson Scott Card Card, ma quello che dici ha molto senso nell'orchestrazione cloud
HBruijn

@ceejayoz: Al momento non utilizzo Ansible per l'installazione multi-server, ma per configurare piccoli server autonomi. Penso che questo sia un uso valido. Quindi un server può avere nginx + django + PostgreSQL. Se in seguito decido di mettere nginx o nginx + django altrove, cancellare l'intero server e dover ripristinare PostgreSQL dal backup sembrerebbe non ottimale (per non parlare dei tempi di inattività).
Antonis Christofides,

Risposte:


10

Con Ansible, non lo faresti in modo diverso da come lo faresti con Puppet.

Nel tuo esempio dove vorresti impostare

class { 'nginx':
  ensure => absent,
}

stai facendo affidamento sull'autore di quel modulo fantoccio dopo aver scritto il codice necessario per gestire la rimozione di tutto. Non tutti i moduli fantoccio hanno questo.

Allo stesso modo, con Ansible, potresti avere ruoli che hanno sia i passaggi necessari per installarlo che per rimuoverlo. La differenza sta solo nel modo di invocare i due.

Un approccio potrebbe essere quello in cui il ruolo in questione espone una variabile per attivare / disattivare il comportamento. Ad esempio, quel ruolo nginx potrebbe assumere una variabile nginx_stateche accetta i valori installede absent.

Nel ruolo tasks/main.yml, l'autore del ruolo potrebbe avere qualcosa sulla falsariga di ..

- include: install.yml
  when: nginx_state|default('present') == "present"

- include: uninstall.yml
  when: nginx_state|default('present') == "absent"

..con la rispettiva logica di installazione / disinstallazione suddivisa tra quei due file inclusi in modo condizionale.

È possibile nidificare anche i ruoli sensibili. Come altro modo di fare lo stesso, un autore di ruoli potrebbe ad esempio fornire un ruolo nginxcon un altro ruolo al suo interno, chiamato uninstalled. Potresti quindi fare:

- name: Uninstall nginx
  hosts: some_group
  roles:
    - nginx/uninstalled

Ansible, rispetto a Puppet, ha probabilmente meno regole e linee guida su come le cose dovrebbero essere fatte, quindi le pratiche variano un po 'di più in natura, ma si applicano gli stessi concetti.


1
Mentre tecnicamente puoi anche passare argomenti direttamente nei ruoli, ti consiglio di usare il ruolo nidificato. Troverei davvero strano vedere in un playbook un ruolo, che verrà effettivamente disinstallato nell'esecuzione del playbook poiché nelle variabili è definito come tale. Avere esplicito tramite il ruolo nidificato sembra molto più pulito. Tecnicamente è possibile passare argomenti al ruolo ( - { role: nginx, state: absent }) ma mi sembra estremamente prolisso. L'unico inconveniente del ruolo nidificato che ho visto era che dovevo collegare i var predefiniti dal genitore.
bogdan.mustiata,

Cosa devi fare perché qualcosa di simile roles: -nginx/uninstalledfunzioni? Ho cercato dappertutto, ma non riesco a trovare alcuna documentazione sui ruoli di nidificazione in un modo che mi consenta di farlo.
aggregato

1

Dal momento che hai la tua configurazione / provisioning in Ansible, puoi semplicemente spazzare via l'intero server, reinstallare / eseguire il provisioning di uno nuovo e avere un buon stato pulito e funzionante.

Se in realtà si desidera "riconfigurarlo" per altri scopi, è necessario creare un nuovo playbook che esegua le attività di pulizia necessarie.

Per quanto ne so, tutti i moduli di packaging Ansible supportano state=absentper garantire che un determinato pacchetto non sia installato sul tuo server. Inoltre, il aptmodulo ha un purge=yesparametro che pulirà tutti i file di configurazione personalizzati rimanenti.

È inoltre possibile creare attività per confermare che la porta 80 è protetta da firewall. Tuttavia, poiché non avrai alcun processo in esecuzione su quella porta, il firewall non farà alcuna differenza per la sicurezza del tuo server.


Per aggiungere questo, scommetto che la maggior parte delle commedie in quel ruolo avrebbero potuto essere state=absentaggiunte. C'è una buona probabilità che eliminerebbe o annullerebbe una buona maggioranza delle modifiche alla configurazione che hai apportato. A seconda di quanto sia grande il ruolo, questo potrebbe essere un vero PITA da testare.
Christopher Karel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.