Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
otros:fabric [2013/08/25 16:59] alfred [Comando fab] |
otros:fabric [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 67: | Línea 67: | ||
| ===== 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 74: | 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 88: | 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 102: | 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> | ||