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')