Herramientas de usuario

Herramientas del sitio


otros:fabric

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
otros:fabric [2013/08/25 16:56]
alfred [Copiar un directorio]
otros:fabric [2020/05/09 09:25] (actual)
Línea 50: Línea 50:
  
 ===== Comando fab ===== ===== Comando fab =====
-Usage:+==== Usage ====
 <​code>​ <​code>​
 fab [options] <​command>​[:​arg1,​arg2=val2,​host=foo,​hosts='​h1;​h2',​...] ... fab [options] <​command>​[:​arg1,​arg2=val2,​host=foo,​hosts='​h1;​h2',​...] ...
 </​code>​ </​code>​
-Parámetros:+==== Parámetros ​====
   * ''​-H''​ indica distintos hosts donde se ejecutará.   * ''​-H''​ indica distintos hosts donde se ejecutará.
 +==== Parámetros a las tareas ==== 
 +<code python>​ 
 +def hello(name="​world"​):​ 
 +    print("​Hello %s!" % name) 
 +</​code>​ 
 +<code python>​ 
 +$ fab hello:​name=Jeff 
 +$ fab hello:​Jeff 
 +</​code>​
 ===== En código... ===== ===== En código... =====
 ==== Variables de entorno ==== ==== Variables de entorno ====
- 
 Si creamos las siguientes variables: Si creamos las siguientes variables:
 <code python> <code python>
Línea 66: Línea 73:
 </​code>​ </​code>​
 Ejecutará las tareas en los servidores serverX y serverY con nombre de usuario '​username'​. En el servidor serverZ utilizará userX. Ejecutará las tareas en los servidores serverX y serverY con nombre de usuario '​username'​. En el servidor serverZ utilizará userX.
 +
 +==== Tareas complejas ====
 +<code python>
 +from fabric.api import local
 +
 +def test():
 +    local("​./​manage.py test my_app"​) ​    # ejecuta los tests
 +
 +def commit():
 +    local("​git add -p && git commit"​)
 +
 +def push():
 +    local("​git push")
 +
 +def prepare_deploy():​
 +    test()
 +    commit()
 +    push()
 +</​code>​
 ==== Roles ==== ==== Roles ====
  
Línea 80: Línea 106:
 </​code>​ </​code>​
 Ejecutará ''​get_versión''​ únicamente en los hosts: www1, www2, www3, www4, www5, nas1 y nas2. Ejecutará ''​get_versión''​ únicamente en los hosts: www1, www2, www3, www4, www5, nas1 y nas2.
 +
 +==== Gestión de errores ====
 +<code python>
 +def test():
 +    with settings(warn_only=True):​
 +        result = local('​./​manage.py test my_app',​ capture=True)
 +    if result.failed and not confirm("​Tests failed. Continue anyway?"​):​
 +        abort("​Aborting at user request."​)
 +</​code>​
 ===== Ejemplos ===== ===== Ejemplos =====
 ==== Copiar un directorio ==== ==== Copiar un directorio ====
Línea 94: Línea 129:
 </​code>​ </​code>​
  
 +==== Llamadas complejas ====
 +<code python>
 +def install(pkg=None):​
 +   if pkg is not None:
 +      env["​pkg"​] = pkg
 +   elif pkg is None and env.get("​pkg"​) is None:
 +      env["​pkg"​] = prompt("​Which package? ")
 +   ​sudo('​yum install -y %s' % env["​pkg"​])
 +</​code>​
 +<​code>​
 +$ fab --hosts=host1,​host2,​host3 install
 +$ fab --hosts=host1,​host2,​host3 install:​pkg=wormux
 +$ fab --hosts=host1,​host2,​host3 install:​wormux
 +$ fab --skip-bad-hosts -u user -p 12345 -i ~/​.ssh/​id_dsa --warn-only --hosts=host1,​host2,​host3,​host4 --parallel --pool-size=20 install:​pkg=wormux
 +</​code>​
 +==== Script que ejecuta tareas según host ====
 +  * {{:​otros:​fabric:​fabric-executing.zip|script}}
 +===== Tips & tricks =====
  
 +==== Utilizar un fichero con los nombres de hosts ====
 +<code python>
 +def set_hosts():​
 +   ​env.hosts = open('​hosts',​ '​r'​).readlines()
 +</​code>​
 +Con esta tarea pondríamos los hostnames en un fichero llamado host y podríamos lanzar nuestro fabfile así:
 +<​code>​
 +$ fab --skip-bad-hosts -u user -p 12345 -i ~/​.ssh/​id_dsa --warn-only --parallel set_hosts
 +</​code>​
 +
 +==== Ejecutar comandos en un directorio concreto ====
 +Usando ''​with'':​
 +<code python>
 +with cd("​~/​gitrepo"​):​
 +   ​run('​git add --all'​)
 +   ​run('​git commit -m "My super awesome automated commit script for `date`"'​)
 +</​code>​
 +
 +==== Usar los nombres en ssh.config ====
 +<code python>
 +from fabric.api import run, env
 +env.use_ssh_config = True
 +</​code>​
otros/fabric.1377449807.txt.gz · Última modificación: 2020/05/09 09:25 (editor externo)