Fabric管理组件的使用

Fabric的官方网站:
http://www.fabfile.org
帮助文档:
https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html

  1. Fabric的安装
yum install -y make gcc gcc++ python-devel python-pip
$ pip install fabric==1.14.0
或者
$ pip3 install fabric2 (没有fabric.api模块)
  1. 验证安装
python
>>> import fabric
或者
python3
>>> import fabric
  1. 命令行入口fab
fab [options]  --  [shell command]

基本用法

Fabric的核心API

核心API 类别
带颜色的输出类 color output
上下文管理类 context managers
装饰类 decorators
网络类 network
操作类 operations
任务类 tasks
工具类 utils

fabric.api命令集

  1. 使用方法
$ cat fabfile.py
----------------------------------
#!/usr/bin/python
# -*- coding: utf-8 -*-

from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *

env.user = 'beeworkshop'
env.hosts = ['192.168.30.66']
env.password = '123456'

@task
def run_remote_cmds():
    print yellow("我要执行命令啦")
    with settings(warn_only=True):  <---错误也继续执行
        local("hostname")
        local("uname -a")
        run("w")
        run("hostname")
        run("ifconfig")
        run("ls -l")
---------------------------------
$ fab -l
Available commands:

    run_remote_cmds

$ fab run_remote_cmds
[192.168.30.66] Executing task 'run_remote_cmds'
我要执行命令啦
[localhost] local: hostname
bee-a
[localhost] local: uname -a
Linux bee-a 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[192.168.30.66] run: w
[192.168.30.66] out:  01:04:50 up  1:35,  1 user,  load average: 0.00, 0.00, 0.00
[192.168.30.66] out: USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
[192.168.30.66] out: beeworks pts/0    192.168.30.6     01:04    0.00s  0.02s  0.02s w
[192.168.30.66] out: 

[192.168.30.66] run: hostname
[192.168.30.66] out: sdn-testbed
[192.168.30.66] out: 

[192.168.30.66] run: ifconfig
[192.168.30.66] out: ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
[192.168.30.66] out:         inet 192.168.74.128  netmask 255.255.255.0  broadcast 192.168.74.255
[192.168.30.66] out:         inet6 fe80::4dec:63ce:223b:a7cf  prefixlen 64  scopeid 0x20<link>
[192.168.30.66] out:         ether 00:0c:29:68:44:26  txqueuelen 1000  (Ethernet)
[192.168.30.66] out:         RX packets 89251  bytes 115992608 (115.9 MB)
[192.168.30.66] out:         RX errors 0  dropped 0  overruns 0  frame 0
[192.168.30.66] out:         TX packets 27312  bytes 1844389 (1.8 MB)
[192.168.30.66] out:         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[192.168.30.66] out: 
[192.168.30.66] out: ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
[192.168.30.66] out:         inet 192.168.30.66  netmask 255.255.255.0  broadcast 192.168.30.255
[192.168.30.66] out:         inet6 fe80::6094:b573:8d2f:dd5  prefixlen 64  scopeid 0x20<link>
[192.168.30.66] out:         ether 00:0c:29:68:44:30  txqueuelen 1000  (Ethernet)
[192.168.30.66] out:         RX packets 305  bytes 39864 (39.8 KB)
[192.168.30.66] out:         RX errors 0  dropped 0  overruns 0  frame 0
[192.168.30.66] out:         TX packets 230  bytes 38470 (38.4 KB)
[192.168.30.66] out:         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[192.168.30.66] out: 
[192.168.30.66] out: lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
[192.168.30.66] out:         inet 127.0.0.1  netmask 255.0.0.0
[192.168.30.66] out:         inet6 ::1  prefixlen 128  scopeid 0x10<host>
[192.168.30.66] out:         loop  txqueuelen 1000  (Local Loopback)
[192.168.30.66] out:         RX packets 373  bytes 28853 (28.8 KB)
[192.168.30.66] out:         RX errors 0  dropped 0  overruns 0  frame 0
[192.168.30.66] out:         TX packets 373  bytes 28853 (28.8 KB)
[192.168.30.66] out:         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[192.168.30.66] out: 
[192.168.30.66] out: 

[192.168.30.66] run: ls -l
[192.168.30.66] out: total 48
[192.168.30.66] out: drwxrwxr-x 2 beeworkshop beeworkshop 4096 4月  24 21:20 bak
[192.168.30.66] out: drwxr-xr-x 2 beeworkshop beeworkshop 4096 4月  24 19:40 Desktop
[192.168.30.66] out: drwxr-xr-x 2 beeworkshop beeworkshop 4096 4月  24 19:40 Documents
[192.168.30.66] out: drwxr-xr-x 2 beeworkshop beeworkshop 4096 4月  24 19:40 Downloads
[192.168.30.66] out: drwxr-xr-x 2 beeworkshop beeworkshop 4096 4月  24 19:40 Music
[192.168.30.66] out: drwxr-xr-x 2 beeworkshop beeworkshop 4096 4月  24 19:40 Pictures
[192.168.30.66] out: drwxr-xr-x 2 beeworkshop beeworkshop 4096 4月  24 19:40 Public
[192.168.30.66] out: drwxrwxr-x 5 beeworkshop beeworkshop 4096 4月  25 01:09 sdnsoftware
[192.168.30.66] out: drwxr-xr-x 2 beeworkshop beeworkshop 4096 4月  24 19:40 Templates
[192.168.30.66] out: drwxrwxr-t 2 beeworkshop beeworkshop 4096 4月  25 18:23 thinclient_drives
[192.168.30.66] out: drwxrwxr-x 3 beeworkshop beeworkshop 4096 4月  24 23:33 tools
[192.168.30.66] out: drwxr-xr-x 2 beeworkshop beeworkshop 4096 4月  24 19:40 Videos
[192.168.30.66] out: 


Done.
Disconnecting from 192.168.30.66... done.

如果不是默认的文件fabfile.py,则必须用参数-f指出:

fab -f ~/test.py run_remote_cmds

指出默认的task。此时fab后边可以不必给出函数名,直接fab即可。

@task(default=True)

注意:\cmd 可以取消别名的作用。

例子1

#!/usr/bin/python
# -*- coding: utf-8 -*-

from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *

env.user = 'beeworkshop'
env.hosts = ['192.168.30.66','192.168.30.67','192.168.30.68','192.168.30.69']
env.password = '123456'

@task
def put_hosts_files():
    print yellow("rsync /etc/host file")
    with settings(warn_only=true):
        put("/etc/hosts","/etc/hosts")
        print green("rsync file success")

for host in env.hosts
    env.host_string = host
    put_hosts_files()

这里@task装饰的函数可以多个,然后全部放在for循环中。fab会根据env.host_string的当前值逐个运行函数。

posted @ 2019-07-02 01:41  cerana  阅读(559)  评论(0编辑  收藏  举报