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' )
 
##结果
root@vm11: / 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' )
 
##执行
root@vm11: / 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)
 
##执行
root@vm11: / 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)
##执行
root@vm11: / 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)
 
##执行
root@vm11: / 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)
 
##执行
root@vm11: / 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)
 
##执行
root@vm11: / 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'
root@vm12:~ # ifconfig eth0|grep '10.1.6.159'
           inet addr: 10.1 . 6.159  Bcast: 10.1 . 6.255  Mask: 255.255 . 255.0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值