• 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的当前值逐个运行函数。

  • 相关阅读:
    Kafka 1.0.0集群安装
    java实现以docx格式导出
    基于java处理.docx格式的word合并
    基于java 合并.doc和docx格式的Word文件
    Docker版本Jenkins的使用
    Codeforces 1243 D 0-1 MST
    Public model for matrix
    Codeforces 1220 E Tourism
    Codeforces 1221 G Graph And Numbers
    Codeforces 1221 F Choose a Square
  • 原文地址:https://www.cnblogs.com/cerana/p/11117692.html
Copyright © 2020-2023  润新知