[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