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 |