Respuestas:
Documentación de argumentos de tareas de Fabric 2:
http://docs.pyinvoke.org/en/latest/concepts/invoking-tasks.html#task-command-line-arguments
Fabric 1.X utiliza la siguiente sintaxis para pasar argumentos a las tareas:
fab task:'hello world'
fab task:something='hello'
fab task:foo=99,bar=True
fab task:foo,bar
Puede leer más al respecto en los documentos de Fabric .
hello world
embargo, ¿las citas son necesarias?
world
era una tarea nueva.
'hello world'
daría como resultado una cadena de Python de 'hello world'
, pero "hello world"
daría como resultado hello world
(que es probablemente lo que la mayoría de la gente desearía).
bar=True
comando en la estructura pasará como un bar='True'
valor no booleano
Los argumentos de estructura se entienden con un análisis de cadenas muy básico, por lo que debe tener un poco de cuidado con la forma en que los envía.
Aquí hay algunos ejemplos de diferentes formas de pasar argumentos a la siguiente función de prueba:
@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'})
Utilizo comillas dobles aquí para sacar la concha de la ecuación, pero las comillas simples pueden ser mejores para algunas plataformas. También tenga en cuenta los escapes para los caracteres que la tela considera delimitadores.
Más detalles en los documentos: http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
En Fabric 2, simplemente agregue el argumento a su función de tarea. Por ejemplo, para pasar el version
argumento a la tarea deploy
:
@task
def deploy(context, version):
...
Ejecútelo de la siguiente manera:
fab -H host deploy --version v1.2.3
Fabric incluso documenta las opciones automáticamente:
$ fab --help deploy
Usage: fab [--core-opts] deploy [--options] [other tasks here ...]
Docstring:
none
Options:
-v STRING, --version=STRING
Debe pasar todas las variables de Python como cadenas, especialmente si está utilizando un subproceso para ejecutar los scripts, o recibirá un error. Deberá convertir las variables de nuevo a tipos int / booleanos por separado.
def print_this(var):
print str(var)
fab print_this:'hello world'
fab print_this='hello'
fab print_this:'99'
fab print_this='True'
Si alguien está buscando pasar parámetros de una tarea a otra en fabric2, solo use el diccionario de entorno para eso:
@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')
Y correr:
fab2 qa sign