fabric应用:
1、fab -H 172.23.177.40,172.23.177.41 host_type
2、fab host_type check_ver
3、role: 当client较多时可以定义角色,然后按角色进行操作。
#!/usr/bin/pyhton
from fabric.api import *
env.user = 'root'
env.password = 'vagrant'
env.roledefs = {
'web': ['172.23.177.41','172.23.177.43'],
'dns': ['172.23.177.46','177.23.177.73']
}
def test():
run('uname -a')
run:
fab -R web test
result:
[172.23.177.41] Executing task 'test'
[172.23.177.41] run: uname -a
[172.23.177.41] out: Linux salt-master 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[172.23.177.41] out:
[172.23.177.43] Executing task 'test'
[172.23.177.43] run: uname -a
[172.23.177.43] out: Linux salt-minion-3 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[172.23.177.43] out:
Done.
Disconnecting from 172.23.177.43... done.
Disconnecting from 172.23.177.41... done.
#从结果可以看到,fab只执行了属于web组的client。
4、extend属性
from fabric.api import env, run
env.hosts.extend(['host3', 'host4'])
def test():
run('uname -r')
When this fabfile is run as fab -H host1,host2 mytask, env.hosts will then contain ['host1', 'host2', 'host3', 'host4'] at the time that mytask is executed.
5、fabfile中没有定义client,可以在命令行中指定
fab mytask:hosts='172.23.177.41;172.23.177.46'
6、使用task方式:
from fabric.api import hosts, run
@hosts('172.23.177.41', '172.23.188.46')
def test():
run('uname -r')
或者:
my_hosts = ('172.23.177.41', '172.23.177.46')
@hosts(my_hosts)
def test():
run('uname -r')
run:
fab test
resule: 从结果中可以看到,fab只执行了task定义的test部分
[172.23.177.41] Executing task 'test'
[172.23.177.41] run: uname -a
[172.23.177.41] out: Linux salt-master 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[172.23.177.41] out:
[172.23.177.46] Executing task 'test'
[172.23.177.46] run: uname -a
[172.23.177.46] out: Linux salt-minion-1 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[172.23.177.46] out:
Done.
Disconnecting from 172.23.177.41... done.
Disconnecting from 172.23.177.46... done.
7、综合应用:
from fabric.api import env, hosts, roles, run
env.roledefs = {'role1': ['b', 'c']}
@hosts('a', 'b')
@roles('role1')
def test():
run('uname -r')
8、遇到主机不可达的情况,可以使用--skip-bad-hosts参数,这样就会跳过不存在或有问题的client,而执行其他的client,从返回结果中可以排除那些是有问题的client,进而在进行处理
fab --skip-bad-hosts test
node:
my_hosts = ('172.23.177.41','172.23.177.40','172.23.177.46')
@hosts(my_hosts)
def test():
run('uname -a')