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