Home Backend Development Python Tutorial Python的自动化部署模块Fabric的安装及使用指南

Python的自动化部署模块Fabric的安装及使用指南

Jun 10, 2016 pm 03:06 PM
fabric python

fabric是python2.5或者更高的库,可以通过ssh在多个host上批量执行任务.完成系统管理任务.它提供一套基本操作在本地和远程执行shell命令,或者上传下载文件,辅助提供用户输入或终止执行.

下面安装fabric模块有2种方法:

1.使用easy_install(下面是debain5环境)

root@10.1.6.200:pshell# apt-get install python-dev (安装Python头文件)
 
root@10.1.6.200:pshell# apt-get install python-setuptools (安装easy_install)
 
root@10.1.6.200:pshell# wget http://peak.telecommunity.com/dist/ez_setup.py
 
root@10.1.6.200:pshell# python ez_setup.py
 
root@10.1.6.200:pshell# easy_install fabric
Copy after login

Searching for fabric
Reading http://pypi.python.org/simple/fabric/
Best match: Fabric 1.6.1
Downloading http://pypi.python.org/packages/source/F/Fabric/Fabric-1.6.1.tar.gz#md5=c318ac3f7011ede0be1ca9a20f435735
Processing Fabric-1.6.1.tar.gz
Running Fabric-1.6.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-CVuLrs/Fabric-1.6.1/egg-dist-tmp-ZFNoWY
warning: no previously-included files matching '*' found under directory 'docs/_build'
warning: no previously-included files matching '*.pyc' found under directory 'tests'
warning: no previously-included files matching '*.pyo' found under directory 'tests'
zip_safe flag not set; analyzing archive contents...
fabric.version: module references __file__
Adding Fabric 1.6.1 to easy-install.pth file
Installing fab script to /usr/bin
....
Installed /usr/lib/python2.5/site-packages/pycrypto-2.6-py2.5-linux-x86_64.egg
Finished processing dependencies for fabric
Copy after login

2.使用pip(下面使用的是debian7环境)

apt-get install python-pip
pip install fabric
apt-get install python-paramiko
Copy after login

导入模块未报错说明安装成功.


实例:

1.在调用fabric的时候使用命令行参数,-H 指定哪台主机

root@10.1.6.201:python# cat fabfile4.py 
Copy after login

#!/usr/bin/env python
#coding=utf-8
from fabric.api import *
 
def printMem():
   cmd_output = run('free -m')
   print cmd_output
Copy after login

root@10.1.6.201:python# fab -H root@10.1.1.45 printMem -f fabfile4.py
[root@10.1.1.45] Executing task 'printMem'
[root@10.1.1.45] run: free -m
[root@10.1.1.45] Login password for 'root': #提示输入密码
[root@10.1.1.45] out:       total    used    free   shared  buffers   cached
[root@10.1.1.45] out: Mem:     1005    968     37     0     36    831
[root@10.1.1.45] out: -/+ buffers/cache:    100    904
[root@10.1.1.45] out: Swap:     1913     0    1913
[root@10.1.1.45] out: 
Copy after login


total    used    free   shared  buffers   cached
Mem:     1005    968     37     0     36    831
-/+ buffers/cache:    100    904
Swap:     1913     0    1913
 
Done.
Disconnecting from 10.1.1.45:22000... done.
Copy after login

2.以上我们需要输入密码才能完成操作,怎样自动执行呢?可以在fabfile4文件中配置HOST.也就是环境变量.

root@10.1.6.201:python# vim fabfile.py
Copy after login

#!/usr/bin/env python
#coding=utf-8
from fabric.api import *
from fabric.context_managers import *
 
env.host_string = '10.1.1.45'
env.port = '22000'       #默认端口22,默认登录用户root
env.password='passwd'
 
def test1():
  with cd('/home'):
    run('ls -l')
 
test1()

Copy after login

root@10.1.6.201:python# python fabfile.py  #脚本执行
Copy after login

[10.1.1.45] run: ls -l
[10.1.1.45] out: total 8
[10.1.1.45] out: drwxr-xr-x 2 debian debian 4096 2012-08-27 11:54 debian
[10.1.1.45] out: drwxr-xr-x 2 root  nogroup 4096 2013-05-22 18:07 ftp
[10.1.1.45] out:

Copy after login

root@10.1.6.201:python# vim fabfile1.py
Copy after login

#!/usr/bin/env python
#coding=utf-8
from fabric.api import *
from fabric.context_managers import *
 
env.hosts = ['10.1.6.200','10.1.1.45']
env.port = '22000'
env.password='passwd'
 
def test1():
  with cd('/home'): #更改目录
    run('ls -l')

Copy after login

root@10.1.6.201:python# fab test1 -f fabfile.py #使用fab指定任务执行,注意文件后默认跟fabfile.py
Copy after login

[10.1.6.200] Executing task 'test1'
[10.1.6.200] run: ls -l
[10.1.6.200] out: total 24
[10.1.6.200] out: drwxr-xr-x 2 davehe davehe 4096 2013-02-27 10:00 davehe
[10.1.6.200] out: -rw-r--r-- 1 root  root  1990 2013-02-27 09:55 davehe.tar.gz
[10.1.6.200] out: -rw-r--r-- 1 root  root  396 2013-05-17 18:27 rsync_log_130517
[10.1.6.200] out: -rw-r--r-- 1 root  root  7916 2013-05-20 21:04 rsync_log_130520
[10.1.6.200] out: drwxr-xr-x 2 taomee taomee 4096 2013-01-29 04:27 taomee
[10.1.6.200] out: 
 
[10.1.1.45] Executing task 'test1'
[10.1.1.45] run: ls -l
[10.1.1.45] out: total 8
[10.1.1.45] out: drwxr-xr-x 2 debian debian 4096 2012-08-27 11:54 debian
[10.1.1.45] out: drwxr-xr-x 2 root  nogroup 4096 2013-05-22 18:07 ftp
[10.1.1.45] out: 
 
 
Done.
Disconnecting from 10.1.1.45:22000... done.
Disconnecting from 10.1.6.200:22000... done.

Copy after login

3.使用get/put.利用sftp协议上传下载文件

root@10.1.6.201:python# cat fabfile1.py
Copy after login


#!/usr/bin/env python
#coding=utf-8
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
 
env.hosts = ['10.1.1.45']
env.port = '22000'
env.password='passwd'
 
def test1():
  print(red("i'm 201"))
  local('ls -l /tmp')
 
def test2():
  print (green("i'm get file 45 to 186"))
  get('/home/ftp/a.txt','/tmp/') #下载
#  put('/tmp/','/home/ftp/') #上传
  local('ls -l /tmp')  #local运行本地命令
 
 
def final():
  execute(test1)
  execute(test2)
Copy after login


root@10.1.6.201:python# fab final -f fabfile1.py
Copy after login

[10.1.1.45] Executing task 'final'
[10.1.1.45] Executing task 'test1'
i'm 201
[localhost] local: ls -l /tmp
total 31684
drwxr-xr-x 2 root root   4096 May 13 22:08 bin
drwxr-xr-x 3 root root   4096 May 13 22:08 conf
drwxr-xr-x 6 root root   4096 May 13 22:08 etc
-rwxr-xr-x 1 root root   6797 May 13 22:08 init
-rw-r--r-- 1 root root 32400896 May 13 22:07 initrd.img-3.2.0-4-amd64
drwxr-xr-x 6 root root   4096 May 13 22:08 lib
drwxr-xr-x 2 root root   4096 May 13 22:08 lib64
drwxr-xr-x 2 root root   4096 May 13 22:08 run
drwxr-xr-x 2 root root   4096 May 13 22:08 sbin
drwxr-xr-x 6 root root   4096 May 13 22:08 scripts
[10.1.1.45] Executing task 'test2'
i'm get file 45 to 186
[10.1.1.45] download: /tmp/a.txt <- /home/ftp/a.txt
[localhost] local: ls -l /tmp
total 31688
-rw-r--r-- 1 root root    6 May 29 22:29 a.txt
drwxr-xr-x 2 root root   4096 May 13 22:08 bin
drwxr-xr-x 3 root root   4096 May 13 22:08 conf
drwxr-xr-x 6 root root   4096 May 13 22:08 etc
-rwxr-xr-x 1 root root   6797 May 13 22:08 init
-rw-r--r-- 1 root root 32400896 May 13 22:07 initrd.img-3.2.0-4-amd64
drwxr-xr-x 6 root root   4096 May 13 22:08 lib
drwxr-xr-x 2 root root   4096 May 13 22:08 lib64
drwxr-xr-x 2 root root   4096 May 13 22:08 run
drwxr-xr-x 2 root root   4096 May 13 22:08 sbin
drwxr-xr-x 6 root root   4096 May 13 22:08 scripts
 
Done.
Disconnecting from 10.1.1.45:22000... done.

Copy after login


上面实例中只列举了几个常用的farbic环境变量.如env.hosts,env.password等,可以不需要交互输入密码.

以下还有常用环境变量以供参考:

  • exclude_hosts:指定一个主机列表,在fab执行时,忽略列表中的机器
  • user:ssh使用哪个用户登录远程主机
  • hosts :全局的host列表
  • host_string :当fabric连接远程机器执行run、put时,设置的user/host/port等
  • password:默认ssh连接远程主机密码,也可以是sudo提示输入密码
  • password:一个字典供内部使用,为每台主机host设置密码,key是主机,value值存放密码
  • port:设置默认端口
  • roledefs:使用字典定义角色名字对应的主机ip
  • roles:一个全局的role列表
from fabric.api import run, roles
 
env.roledefs = {
  'db': ['db1', 'db2'],
  'web': ['web1', 'web2', 'web3'],
}
 
@roles('db')
def migrate():
  # Database stuff here.
  pass
 
@roles('web')
def update():
  # Code updates here.
  pass

Copy after login

fab也可以使用命令设置环境变量,常用命令

  • -f FABFILE, --fabfile=FABFILE  默认fabfile.py
  • -H HOSTS, --hosts=HOSTS     env.hosts=hosts
  • -p PASSWORD, --password=PASSWORD  env.password
  • -R ROLES, --roles=ROLES   env.roles
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to download deepseek Xiaomi How to download deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

How to download DeepSeek Xiaomi? Search for "DeepSeek" in the Xiaomi App Store. If it is not found, continue to step 2. Identify your needs (search files, data analysis), and find the corresponding tools (such as file managers, data analysis software) that include DeepSeek functions.

How do you ask him deepseek How do you ask him deepseek Feb 19, 2025 pm 04:42 PM

The key to using DeepSeek effectively is to ask questions clearly: express the questions directly and specifically. Provide specific details and background information. For complex inquiries, multiple angles and refute opinions are included. Focus on specific aspects, such as performance bottlenecks in code. Keep a critical thinking about the answers you get and make judgments based on your expertise.

How to search deepseek How to search deepseek Feb 19, 2025 pm 05:18 PM

Just use the search function that comes with DeepSeek. Its powerful semantic analysis algorithm can accurately understand the search intention and provide relevant information. However, for searches that are unpopular, latest information or problems that need to be considered, it is necessary to adjust keywords or use more specific descriptions, combine them with other real-time information sources, and understand that DeepSeek is just a tool that requires active, clear and refined search strategies.

How to program deepseek How to program deepseek Feb 19, 2025 pm 05:36 PM

DeepSeek is not a programming language, but a deep search concept. Implementing DeepSeek requires selection based on existing languages. For different application scenarios, it is necessary to choose the appropriate language and algorithms, and combine machine learning technology. Code quality, maintainability, and testing are crucial. Only by choosing the right programming language, algorithms and tools according to your needs and writing high-quality code can DeepSeek be successfully implemented.

How to use deepseek to settle accounts How to use deepseek to settle accounts Feb 19, 2025 pm 04:36 PM

Question: Is DeepSeek available for accounting? Answer: No, it is a data mining and analysis tool that can be used to analyze financial data, but it does not have the accounting record and report generation functions of accounting software. Using DeepSeek to analyze financial data requires writing code to process data with knowledge of data structures, algorithms, and DeepSeek APIs to consider potential problems (e.g. programming knowledge, learning curves, data quality)

The Key to Coding: Unlocking the Power of Python for Beginners The Key to Coding: Unlocking the Power of Python for Beginners Oct 11, 2024 pm 12:17 PM

Python is an ideal programming introduction language for beginners through its ease of learning and powerful features. Its basics include: Variables: used to store data (numbers, strings, lists, etc.). Data type: Defines the type of data in the variable (integer, floating point, etc.). Operators: used for mathematical operations and comparisons. Control flow: Control the flow of code execution (conditional statements, loops).

Problem-Solving with Python: Unlock Powerful Solutions as a Beginner Coder Problem-Solving with Python: Unlock Powerful Solutions as a Beginner Coder Oct 11, 2024 pm 08:58 PM

Pythonempowersbeginnersinproblem-solving.Itsuser-friendlysyntax,extensivelibrary,andfeaturessuchasvariables,conditionalstatements,andloopsenableefficientcodedevelopment.Frommanagingdatatocontrollingprogramflowandperformingrepetitivetasks,Pythonprovid

How to access DeepSeekapi - DeepSeekapi access call tutorial How to access DeepSeekapi - DeepSeekapi access call tutorial Mar 12, 2025 pm 12:24 PM

Detailed explanation of DeepSeekAPI access and call: Quick Start Guide This article will guide you in detail how to access and call DeepSeekAPI, helping you easily use powerful AI models. Step 1: Get the API key to access the DeepSeek official website and click on the "Open Platform" in the upper right corner. You will get a certain number of free tokens (used to measure API usage). In the menu on the left, click "APIKeys" and then click "Create APIkey". Name your APIkey (for example, "test") and copy the generated key right away. Be sure to save this key properly, as it will only be displayed once

See all articles