[Python] distribuire programmi python

Daniele Varrazzo piro a develer.com
Ven 5 Set 2014 20:34:56 CEST


On 2014-09-05 19:04, Francesco Pischedda wrote:
> Il giorno 05 settembre 2014 20:01, Daniele Varrazzo 
> <piro a 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



Maggiori informazioni sulla lista Python