前面学习了理论,下面该练练手了。两台机器: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/pythonfrom 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/pythonfrom 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/pythonfrom 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 fabricDone.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/pythonfrom 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 fabricDone.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/pythonfrom 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/pythonfrom 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/pythonfrom 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
|