Python fabric实践操作

前面学习了理论,下面该练练手了。两台机器:10.1.6.186、10.1.6.159。fabric部署在10.1.6.186上面。

1  执行一个简单的task任务,显示两台机器的/home/guol/目录下的文件

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

#!/usr/bin/python

from fabric.api import *

from fabric.context_managers import *

env.hosts=[‘10.1.6.186‘,‘10.1.6.159‘]

env.password=‘xxxxxx‘

def task1():

    with cd(‘/home/guol‘):

        run(‘ls -l‘)

##结果

[email protected]:/tmp# fab task1

[10.1.6.186] Executing task ‘task1‘

[10.1.6.186] run: ls -l

[10.1.6.186] out: total 0

[10.1.6.186] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 186-local

[10.1.6.186] out:

[10.1.6.159] Executing task ‘task1‘

[10.1.6.159] run: ls -l

[10.1.6.159] out: total 0

[10.1.6.159] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 159-remote

[10.1.6.159] out:

Done.

Disconnecting from 10.1.6.159... done.

Disconnecting from 10.1.6.186... done.

2  执行和1相同的任务,不过排除掉10.1.6.159这台机器

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#!/usr/bin/python

from fabric.api import *

from fabric.context_managers import *

env.hosts=[‘10.1.6.186‘,‘10.1.6.159‘]

env.password=‘xxxxxx‘

env.exclude_hosts=[‘10.1.6.159‘]

def task1():

    with cd(‘/home/guol‘):

        run(‘ls -l‘)

##执行

[email protected]:/tmp# fab task1

[10.1.6.186] Executing task ‘task1‘

[10.1.6.186] run: ls -l

[10.1.6.186] out: total 0

[10.1.6.186] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 186-local

[10.1.6.186] out:

Done.

Disconnecting from 10.1.6.186... done.

3  执行和2相同任务,再增加一个task2,并且把taskN伪装成meta任务执行

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#!/usr/bin/python

from fabric.api import *

from fabric.colors import *

from fabric.context_managers import *

env.hosts=[‘10.1.6.186‘,‘10.1.6.159‘]

env.password=‘xxxxxx‘

env.exclude_hosts=[‘10.1.6.159‘]

def task1():

    with cd(‘/home/guol‘):

        run(‘ls -l‘)

def task2():

    print(green("I‘m fabric"))

def deploy():

    execute(task1)

    execute(task2)

##执行

[email protected]:/tmp# fab deploy

[10.1.6.186] Executing task ‘deploy‘

[10.1.6.186] Executing task ‘task1‘

[10.1.6.186] run: ls -l

[10.1.6.186] out: total 0

[10.1.6.186] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 186-local

[10.1.6.186] out:

[10.1.6.186] Executing task ‘task2‘

I‘m fabric

Done.

Disconnecting from 10.1.6.186... done.

4  不同的机器执行不同的task

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#!/usr/bin/python

from fabric.api import *

from fabric.colors import *

from fabric.context_managers import *

env.roledefs={‘web1‘:[‘10.1.6.186‘],‘web2‘:[‘10.1.6.159‘]}

env.password=‘xxxxxx‘

@roles(‘web1‘)

def task1():

    with cd(‘/home/guol‘):

        run(‘ls -l‘)

@roles(‘web2‘)

def task2():

    print(green("I‘m fabric"))

def deploy():

    execute(task1)

    execute(task2)

##执行

[email protected]:/tmp# fab deploy

[10.1.6.186] Executing task ‘task1‘

[10.1.6.186] run: ls -l

[10.1.6.186] out: total 0

[10.1.6.186] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 186-local

[10.1.6.186] out:

[10.1.6.159] Executing task ‘task2‘

I‘m fabric

Done.

Disconnecting from 10.1.6.186... done.

5  把159的/home/guol/159-remote拉取到186的 /home/guol/目录下

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

#!/usr/bin/python

from fabric.api import *

from fabric.colors import *

from fabric.context_managers import *

env.hosts=[‘10.1.6.159‘]

env.password=‘xxxxxx‘

def task1():

    print(green("I‘m 186 /home/guol/"))

    local(‘ls -l /home/guol‘)

def task2():

    print(green("I‘m get 159‘s 159-remote file to 186"))

    get(‘/home/guol/159-remote‘,‘/home/guol‘)

    print(yellow("I‘m 186 /home/guol/"))

    local(‘ls -l /home/guol‘)

def deploy():

    execute(task1)

    execute(task2)

##执行

[email protected]:/tmp# fab deploy

[10.1.6.159] Executing task ‘deploy‘

[10.1.6.159] Executing task ‘task1‘

I‘m 186 /home/guol/

[localhost] local: ls -l /home/guol

total 0

-rw-r--r-- 1 root root 0 Dec 21 13:32 186-local

[10.1.6.159] Executing task ‘task2‘

I‘m get 159‘s 159-remote file to 186

[10.1.6.159] download: /home/guol/159-remote <- /home/guol/159-remote

I‘m 186 /home/guol/

[localhost] local: ls -l /home/guol

total 0

-rw-r--r-- 1 root root 0 Dec 21 14:28 159-remote

-rw-r--r-- 1 root root 0 Dec 21 13:32 186-local

Done.

Disconnecting from 10.1.6.159... done.

6   把186的/home/guol/ 186-local推送到159的 /home/guol/目录下

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#!/usr/bin/python

from fabric.api import *

from fabric.colors import *

from fabric.context_managers import *

env.hosts=[‘10.1.6.159‘]

env.password=‘xxxxxx‘

def task1():

    print(green("I‘m 159 /home/guol/"))

    with cd(‘/home/guol‘):

        run(‘ls -l‘)

def task2():

    print(green("I‘m put 186‘s 186-local file to 159"))

    put(‘/home/guol/186-local‘,‘/home/guol‘)

    print(yellow("I‘m 159 /home/guol/"))

    with cd(‘/home/guol‘):

        run(‘ls -l‘)

def deploy():

    execute(task1)

    execute(task2)

##执行

[email protected]:/tmp# fab deploy

[10.1.6.159] Executing task ‘deploy‘

[10.1.6.159] Executing task ‘task1‘

I‘m 159 /home/guol/

[10.1.6.159] run: ls -l

[10.1.6.159] out: total 0

[10.1.6.159] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 159-remote

[10.1.6.159] out:

[10.1.6.159] Executing task ‘task2‘

I‘m put 186‘s 186-local file to 159

[10.1.6.159] put: /home/guol/186-local -> /home/guol/186-local

I‘m 159 /home/guol/

[10.1.6.159] run: ls -l

[10.1.6.159] out: total 0

[10.1.6.159] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 159-remote

[10.1.6.159] out: -rw-r--r-- 1 root root 0 Dec 21 14:33 186-local

[10.1.6.159] out:

Done.

Disconnecting from 10.1.6.159... done.

7  在186上打开一个159的交互式的shell

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#!/usr/bin/python

from fabric.api import *

from fabric.colors import *

from fabric.context_managers import *

env.hosts=[‘10.1.6.159‘]

env.password=‘xxxxxx‘

def task3():

    open_shell("ifconfig eth0|grep ‘10.1.6.159‘")

def deploy():

     execute(task3)

##执行

[email protected]:/tmp# fab deploy

[10.1.6.159] Executing task ‘deploy‘

[10.1.6.159] Executing task ‘task3‘

Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic x86_64)

Last login: Fri Dec 21 14:39:39 2012 from 10.1.6.186

ifconfig eth0|grep ‘10.1.6.159‘

[email protected]:~# ifconfig eth0|grep ‘10.1.6.159‘

          inet addr:10.1.6.159  Bcast:10.1.6.255  Mask:255.255.255.0

时间: 2024-10-11 19:49:54

Python fabric实践操作的相关文章

Python fabric远程自动部署简介

2.1.    Hello,fab 1. 在当前目录下新建文件fabfile.py,输入内容如下 1 def hello(): 2   3     print("Hello fab!") 2. 执行命令fab hello,结果如下 1 # fab hello 2   3 Hello fab! 3. 文件名不为fabfile.py时需进行指定 1 # mv fabfile.py test.py 2   3 # fab hello 4   5    6   7 Fatal error: C

使用python fabric搭建RHEL 7.2大数据基础环境以及部分优化

1.使用python fabric进行Linux基础配置 使用python,可以让任何事情高效起来,包括运维工作,fabric正式这样一套基于python2的类库,它执行本地或远程shell命令提供了操作的基本套件(正常或通过sudo)和上传/下载文件,如提示用户输入运行辅助功能,或中止执行. 用Python3开发的部署工具叫fabric3:fabric3,和fabric一样最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署. 典型用途包括创建一个包含一个或多个

Python入门经典. 以解决计算问题为导向的Python编程实践(高清版)PDF

Python入门经典. 以解决计算问题为导向的Python编程实践(高清版)PDF百度网盘链接:https://pan.baidu.com/s/1juLsew8UiOErRheQPOuTaw 提取码:fssd 复制这段内容后打开百度网盘手机App,操作更方便哦内容简介 · · · · · · <Python入门经典:以解决计算问题为导向的Python编程实践>是一本系统而科学的Python入门教程,美国密歇根州立大学等多所美国知名高校采用其作为编程语言的入门教材,被奉为经典.它不仅从计算机教学

python MySQLdb 常用操作

我采用的是MySQLdb操作的MYSQL数据库.先来一个简单的例子吧: import MySQLdb try:     conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)     cur=conn.cursor()     cur.execute('select * from user')     cur.close()     conn.close() except MySQL

python之文件操作-复制、剪切、删除等

下面是把sourceDir文件夹下的以.JPG结尾的文件全部复制到targetDir文件夹下: <span style="font-size:18px;">>>>import os >>> import os.path >>> import shutil >>> def copyFiles(sourceDir,targetDir): for files in os.listdir(sourceDir):

python文件相关操作

Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中,open()方法进行打开文件等相关操作,open()方法其中第一个参数是要打开的文件的文件路径,第二个参数是对要打开文件要执行的权限,第三个参数是文件采用字符编码. 而open()方法返回的内容叫做文件句柄.我们可以打印返回的文件句柄来看下: f = open('test_file.txt','r

Python 文件常见操作

[python] view plain copy print? # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() 去掉文件名, 返回目录路径 join() 将分离的各部分组合成一个路径名 split() 返回 (dirname(), basename()) 元组 splitdrive() 返回 (drivename, pathname) 元组 sp

Python对Excel操作详解

  Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl  tcom包对excel操作. 关键字: Python.Excel.xlrd.xlwt.xlutils.TCl.tcom     1 Python简介 Python是一种面向对象.直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.

python excel读写操作

1.读操作 xlrd 下载地址:https://pypi.python.org/pypi/xlrd 使用代码 # encoding : utf-8 #设置编码方式 import xlrd #导入xlrd模块 #打开指定文件路径的excel文件 xlsfile = r'D:\AutoPlan\apisnew.xls' book = xlrd.open_workbook(xlsfile) #获得excel的book对象 #获取sheet对象,方法有2种: sheet_name=book.sheet_