首页 > 代码库 > python部署工具fabric

python部署工具fabric

两台机器:10.1.6.186、10.1.6.159。fabric部署在10.1.6.186上面

 

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

 

 1 #!/usr/bin/python
 2 from fabric.api import *
 3 from fabric.context_managers import *
 4 
 5 env.hosts=[10.1.6.186,10.1.6.159]
 6 env.password=xxxxxx
 7 env.exclude_hosts=[10.1.6.159]
 8 
 9 def task1():
10     with cd(/home/guol):
11         run(ls -l)

fab task1

 

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

#!/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

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

#!/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

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

#!/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
Im 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
Im get 159s 159-remote file to 186
[10.1.6.159] download: /home/guol/159-remote <- /home/guol/159-remote
Im 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.

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

#!/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
Im 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
Im put 186s 186-local file to 159
[10.1.6.159] put: /home/guol/186-local -> /home/guol/186-local
Im 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

#!/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

 

 

python部署工具fabric