Fabric quickly

環境很重要、環境很重要、環境很重要python

# CentOS 7
$ setenforce 0  # 能夠設置配置文件永久關閉
$ systemctl stop iptables.service
$ systemctl stop firewalld.service

一. 準備 Python3 和 Python 虛擬環境

1.1 安裝依賴包mysql

$ yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git

1.2 編譯安裝git

$ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
$ tar xvf Python-3.6.1.tar.xz  && cd Python-3.6.1
$ ./configure && make && make install

1.3 創建 Python 虛擬環境web

由於 CentOS 6/7 自帶的是 Python2,而 Yum 等工具依賴原來的 Python,爲了避免擾亂原來的環境咱們來使用 Python 虛擬環境sql

$ cd /opt
$ python3 -m venv py3
$ source /opt/py3/bin/activate

# 看到下面的提示符表明成功,之後運行 Jumpserver 都要先運行以上 source 命令,如下全部命令均在該虛擬環境中運行
(py3) [root@localhost py3]

2、Fabric 安裝和使用

  fabric版本:(十分重要)
  pip install fabric3 or pip3 install fabric3shell

  經常使用命令:api

  fab -u root -p '123456.' -H ‘10.0.0.1’ -- 'free -m'bash

  fab -u root -p 123456 -H "192.168.1.108" -- 'uname -a'服務器

  fab -u root -p '123456' -H '10.0.0.1' -- 'hostname anthony-aliyun'網絡

  fab -u root -p '123456' -H '192.168.1.108' -- 'hostname anthony-local'

  經常使用腳本格式:

  

 1 #conding:utf-8
 2 from fabric.api import *
 3 
 4 env.user = "root"
 5 env.hosts = ["192.168.1.104","192.168.1.108"]
 6 env.passwords = {
 7         "root@192.168.1.104:22":'123456789',
 8         "root@192.168.1.108:22":'123456'
 9 }
10 
11 env.roledefs = {
12         "webserver":["192.168.1.104"],
13         "dbserver":["192.168.1.108"]
14 }
15 
16 @task
17 def show():
18         run("free -m")
19 
20 @task
21 @roles("webserver")
22 def install_httpd():
23         print("install webserver")
24 
25 @task
26 @roles("dbserver")
27 def install_mysql():
28         print("install mysql")
View Code
 1 #!/usr/bin/python env
 2 # -*- coding: utf-8 -*-
 3 from fabric.api import *
 4 
 5 env.hosts = ["192.168.1.108"]
 6 env.user = "root"
 7 env.password = "123456"
 8 env.port = 22
 9 
10 @task
11 def show():
12         run("df -lh")
13         run("free -m")
14         run("hostname")
View Code

   經常使用參數:

 1 Usage: fab [options] <command>[:arg1,arg2=val2,host=foo,hosts='h1;h2',...] ....
 2 -l,顯示定義好的任務函數名;
 3 -f,指定fab入口文件,默認入口文件名爲fabfile.py
 4 -g,指定網關(中轉)設備,好比堡壘機環境,填寫堡壘機ip便可
 5 -H,指定目標主機,多臺主機用「,」號分隔;
 6 -P,以異步並行方式運行多主機任務,默認爲串行運行;
 7 -R,指定role,以角色名區分不一樣業務組設備;
 8 -t,設置設備鏈接超時時間(秒);
 9 -T,設置遠程主機命令執行超時時間(秒);
10 -w,當命令執行失敗,發出告警,而非默認終止任務。
View Code

  經常使用環境變量:

 1 abort_on_prompts 設置是否運行在交互模式下,例如會提示輸入密碼之類,默認是false
 2 connection_attempts fabric嘗試鏈接到新服務器的次數,默認1次
 3 cwd 目前的工做目錄,通常用來肯定cd命令的上下文環境
 4 disable_known_hosts 默認是false,若是是true,則會跳過用戶知道的hosts文件
 5 exclude_hosts 指定一個主機列表,在fab執行時,忽略列表中的機器
 6 fabfile 默認值是fabfile.py在fab命令執行時,會自動搜索這個文件執行。
 7 host_string 當fabric鏈接遠程機器執行run、put時,設置的user/host/port等
 8 hosts 一個全局的host列表
 9 keepalive 默認0 設置ssh的keepalive
10 loacl_user 一個只讀的變量,包含了本地的系統用戶,同user變量同樣,可是user能夠修改
11 parallel 默認false,若是是true則會並行的執行全部的task
12 pool_size 默認0 在使用parallel執行任務時設置的進程數
13 password ssh遠程鏈接時使用的密碼,也能夠是在使用sudo時使用的密碼
14 passwords 一個字典,能夠爲每一臺機器設置一個密碼,key是ip,value是密碼
15 path 在使用run/sudo/local執行命令時設置的$PATH環境變量
16 port 設置主機的端口
17 roledefs 一個字典,設置主機名到規則組的映射
18 roles 一個全局的role列表
19 shell 默認是/bin/bash -1 -c 在執行run命令時,默認的shell環境
20 skip_bad_hosts 默認false,爲ture時,會致使fab跳過沒法鏈接的主機
21 sudo_prefix 默認值"sudo -S -p '%(sudo_prompt)s' " % env 執行sudo命令時調用的sudo環境
22 sudo_prompt 默認值"sudo password:"
23 timeout 默認10 網絡鏈接的超時時間
24 user ssh使用哪一個用戶登陸遠程主機
25 local 執行本地命令,如: local('uname -s')
26 lcd 切換本地目錄,如: lcd('/home')
27 cd 切換遠程目錄,如: cd('/data/logs')
28 run 執行遠程命令 如: run('free -m')
29 sudo sudo方式執行命令,如sudo('/etc/init.d/httpd start')
30 put 上傳本地文件到遠程主機,如put('/home/user.info',/data/user.info'')
31 get 從遠程主機下載文件到本地,如get('/home/user.info',/data/user.info'')
32 prompt 得到用戶輸入信息,如: prompt('please input user:')
33 confirm 得到提示信息確認, 如: confirm('Tests failed. Continue[Y/N]?')
34 reboot 重啓遠程主機,如: reboot();
35 @task 函數修飾符,標識的函數爲fab可調用的,非標記對fab不可見,純業務邏輯。
36 @runs_once, 函數修飾符,標識的函數只會執行一次,不會受多臺主機的影響
View Code
相關文章
相關標籤/搜索