On 2014-09-05 19:04, Francesco Pischedda wrote:
Il giorno 05 settembre 2014 20:01, Daniele Varrazzo <p...@develer.com> ha
scritto:

Ho mandato patch upstream e mi sono gia' fatto mandare affanculo dagli
sviluppatori, e tutto in pochi giorni!


LOLissimo! :D

molto OT: a quanto sento non sei il primo che si lamenta dell'accoglienza
degli sviluppatori di ansible però il progetto è veramente valido

A mio avviso hanno fatto una cappellata con la priorita' delle variabili, ma ora e' troppo tardi per tornare indietro perche' ormai ci sono ettolitri di script che fanno affidamento sul comportamento attuale.

Il problema e' che loro non dicono "si' abbiamo cappellato ma ormai e' cosi'", che sarebbe giustificabilissimo. Loro dicono "come vuoi fare tu non e' idiomatico". Insomma sbaglio io. Ok, ci puo' anche stare. Pero' googlando vedo che il problema ce l'hanno in molti. Quello che non puoi fare in ansible e' qualcosa tipo (scusate l'ansiblese per chi non lo mastica):

- un role "webserver" definisce un default, tipo http_port = 80
- un role "firewall" deve poter accedere alla variabile per aprire quella porta - in un inventory vorrei avere la possibilita' di sovrascrivere questo default,
  ad esempio sull'installazione di test avere http_port=8080.

Questo non posso farlo: se usassi include_vars nel firewall la variabile diventa "troppo potente" e l'inventory non puo' sovrascriverla (un default puo' essere sovrascritto invece). Se introduco una dipendenza esplicita tra i ruoli il webserver mi viene installato anche sulla macchina del firewall, che puo' essere diversa.

La mia soluzione e' stata di aggiungere un comando include_defaults che funzioni come include_vars ma con le variabili overridabili. Il comportamento di ansible non cambia e se uno script non usa include_defaults tutto resta come prima.

La loro risposta e' che i default condivisi vanno scritti invece... in un file globale (tipo group_vars/all). E che la nuova regola sottoporrebbe gli utenti ad un carico cognitivo eccessivo.

Wat™?

Insomma nei doc scrivono "le variabili di inventory sono potentissime" ed e' falso, puoi solo overridarci i default, se una cosa la tiri dentro con include_vars diventa semi-immortale. Dicono "i role sono un modo di rendere modulare un playbook" e poi ti serve un file globale per passare un default tra due role... A me sembra il caso di invocare Upton Sinclair (it is difficult to get a man to understand something, when his salary depends upon his not understanding it) e tirare avanti.

Per fortuna "tirare avanti" si fa bene, perche' anche se non hanno accettato il nuovo comando upstream e' possibile metterlo nel proprio playbook e Ansible lo usa senza dar fastidio a nessuno. Il che mi sembra grandioso. A chi interessa include_defaults e' disponibile a <https://gist.github.com/dvarrazzo/7418a89b7278ff69267c>.

Quindi si', confermo l'impressione: gli sviluppatori di Ansible sono *molto* opinionati. Ma il progetto e' veramente ben fatto.

-- Daniele

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a