python三大神器之fabric(2.0新特性)


  fabric經常出現在自動化運維領域,批量處理一些運維工作。fabric是在paramiko之上又封裝了一層,操作起來更加簡單易用。

 

  本來只是想寫個博客記錄一下,然后發現之前寫的代碼不能運行了,報以下錯誤:No module named 'fabric.api'

Traceback (most recent call last):
  File "D:/PycharmProjects/TestTool/Publish/fabric_sample.py", line 3, in <module>
    from fabric.api import *
ModuleNotFoundError: No module named 'fabric.api'

  然后百度了下,說是2.0以上的fabric版本已經移除了fabric.api,解決方法是指定安裝2.0以下的版本,比如pip install fabric==1.14.0  ~_~ ,但都並沒有介紹新的特性。然后去官網看了下文檔,使用方法如下:

 

1.連接服務器

  通過fabric.Connection方法連接服務器:

  conn = fabric.Connection(host , user = 'root',port = 22, config = None, geteway = None, connect_kwargs={"password": "123456"})

  Connection參數的含義:

  def __init__(
    self,
    host,                       #主機ip
    user=None,                  #用戶名
    port=None,                  #ssh端口,默認是22
    config=None,                #登錄配置文件
    gateway=None,               #連接網關
    forward_agent=None,         #是否開啟agent forwarding
    connect_timeout=None,       #設置超時
    connect_kwargs=None,        #設置 密碼登錄connect_kwargs={"password": "123456"}) 還是 密鑰登錄connect_kwargs={"key_filename": "/home/myuser/.ssh/private.key"}
    inline_ssh_env=None,      
    )

 

2.通過fabric安裝軟件

  下面通過一段代碼實現在Ubuntu上批量安裝docker,順序取走列表中的ip。

import fabric

def docker_install():
    for host in ['10.1.4.24',
                 '10.1.15.154',
                 '10.1.14.106']:
        conn = fabric.Connection(host , user = 'root', connect_kwargs={"password": "123456"})
        print("%s:" % host)
        conn.run("echo Y|apt-get remove docker.io")
docker_install()

  是不是很簡單,幾行代碼就解決了~

 

  cnn獲取Connetction對象后,有很多屬性方法可以使用,介紹下幾個常用的:

run:                #執行遠程命令,如:run('uname -a')

cd:                 #切換遠程目錄,如:cd('/root');   with conn.cd('/root'):繼承這個狀態

put:                #上傳本地文件到遠程主機,如:put('/root/test.py','/root/test.py')

get:                 #獲取服務器上文件,如:get('/root/project/test.log')

sudo:               #sudo方式執行遠程命令,如:sudo('service docker start')

   全部屬性:

['cd', 'clear', 'client', 'close', 'config', 'connect_kwargs', 'connect_timeout', 'create_session', 'cwd', 'derive_shorthand', 'forward_agent', 'forward_local', 'forward_remote', 'from_data', 'from_v1', 'gateway', 'get', 'get_gateway', 'host', 'is_connected', 'local', 'open', 'open_gateway', 'original_host', 'pop', 'popitem', 'port', 'prefix', 'put', 'resolve_connect_kwargs', 'run', 'setdefault', 'sftp', 'ssh_config', 'sudo', 'transport', 'update', 'user']
View Code

 

  調用本地命令:

import invoke

invoke.run('uname -a')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM