Risposte:
Documentazione degli argomenti dell'attività di Fabric 2:
http://docs.pyinvoke.org/en/latest/concepts/invoking-tasks.html#task-command-line-arguments
Fabric 1.X utilizza la seguente sintassi per il passaggio di argomenti alle attività:
fab task:'hello world'
fab task:something='hello'
fab task:foo=99,bar=True
fab task:foo,bar
Puoi leggere di più a riguardo nella documentazione di Fabric .
hello world
sembrano necessarie però?
world
era una nuova attività.
'hello world'
risulterebbe in una stringa Python di 'hello world'
, ma "hello world"
risulterebbe in hello world
(che è probabilmente ciò che la maggior parte delle persone vorrebbe).
bar=True
comando in fabric verrà passato in quanto bar='True'
non è un valore booleano
Gli argomenti del fabric vengono compresi con un'analisi delle stringhe molto semplice, quindi devi stare un po 'attento a come li invii.
Di seguito sono riportati alcuni esempi di modi diversi per passare argomenti alla seguente funzione di test:
@task
def test(*args, **kwargs):
print("args:", args)
print("named args:", kwargs)
$ fab "test:hello world"
('args:', ('hello world',))
('named args:', {})
$ fab "test:hello,world"
('args:', ('hello', 'world'))
('named args:', {})
$ fab "test:message=hello world"
('args:', ())
('named args:', {'message': 'hello world'})
$ fab "test:message=message \= hello\, world"
('args:', ())
('named args:', {'message': 'message = hello, world'})
Uso le virgolette doppie qui per togliere la shell dall'equazione, ma le virgolette singole potrebbero essere migliori per alcune piattaforme. Nota anche gli escape per i caratteri che fabric considera delimitatori.
Maggiori dettagli nei documenti: http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
In Fabric 2, aggiungi semplicemente l'argomento alla tua funzione task. Ad esempio, per passare l' version
argomento all'attività deploy
:
@task
def deploy(context, version):
...
Eseguilo come segue:
fab -H host deploy --version v1.2.3
Fabric documenta anche automaticamente le opzioni:
$ fab --help deploy
Usage: fab [--core-opts] deploy [--options] [other tasks here ...]
Docstring:
none
Options:
-v STRING, --version=STRING
Devi passare tutte le variabili Python come stringhe, specialmente se stai usando un sottoprocesso per eseguire gli script, altrimenti otterrai un errore. Sarà necessario riconvertire le variabili in tipi int / booleani separatamente.
def print_this(var):
print str(var)
fab print_this:'hello world'
fab print_this='hello'
fab print_this:'99'
fab print_this='True'
Se qualcuno sta cercando di passare parametri da un'attività a un'altra in fabric2, usa semplicemente il dizionario dell'ambiente per quello:
@task
def qa(ctx):
ctx.config.run.env['counter'] = 22
ctx.config.run.env['conn'] = Connection('qa_host')
@task
def sign(ctx):
print(ctx.config.run.env['counter'])
conn = ctx.config.run.env['conn']
conn.run('touch mike_was_here.txt')
E corri:
fab2 qa sign