自动化部署工具Fabric(二)

本文介绍Fabric的几种装饰器task,host,role,runs_once,serial,parallel。

1.task

fabfile中所有可调用的对象都是一个task,但是如果使用了task装饰器显示的定义了一个task,没有通过task装饰器装饰的函数将被不会认为一个task。

from fabric.api import run,task,env

env.hosts = ['192.168.244.155']

@task
def hostname():
    run('hostname')

def ls(path='.'):
    sudo('ls {}'.format(path))

验证

[root@Ansible Python]# fab -f fab1.py -l
Available commands:

    hostname

2.host

fabfile文件中我们可以通过env.hosts定义,或通过fab命令行参数-H指定。指定host时可以同时指定用户名和端口号:username@hostname:port,通过命令行指定对哪些hosts指定哪些任务,fab mytask:hosts=”host1;host2″

通过hosts装饰器指定对哪些主机执行task.

#!/usr/bin/python
from fabric.api import run,task,env,hosts,sudo

host1 = '192.168.244.155'
host2 = '192.168.244.244'

@hosts(host1)
def hostname():
    run('hostname')

@hosts(host2)
def ls(path='.'):
    sudo('ls {}'.format(path))

验证

[root@Ansible Python]# fab -f fab1.py hostname
[192.168.244.155] Executing task 'hostname'
[192.168.244.155] run: hostname
[192.168.244.155] out: localhost.localdomain
[192.168.244.155] out:

3.role

定义服务器角色。

from fabric.api import run,task,env,hosts,sudo,roles

env.roledefs = {
    'db':['192.168.244.155'],
    'web':['192.168.244.244'],
}

@roles('db')
def hostname():
    run('hostname')

@roles('web')
def ls(path='.'):
    sudo('ls {}'.format(path))

验证

[root@Ansible Python]# fab -f fab1.py ls:/
[192.168.244.244] Executing task 'ls'
[192.168.244.244] sudo: ls /
[192.168.244.244] out: bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  web
[192.168.244.244] out:

4.runs_once

task只执行一次,防止被多次调用。

6.serial

强制当前task串行执行。使用该装饰器后,即使用户通过命令行参数–parallel,该task依然会串行。

5.parallel

强制当前task并行。

其他功能函数

1.execute

对task经行分装,将多个task组合成一个

2.util

辅助性函数,fabric.util

3.colors

颜色函数,fabric.colors


「 文章如果对你有帮助,请点个赞哦^^ 」 

0