1. 程式人生 > >python部署工具fabric

python部署工具fabric

不同的 pre eric line toolbar ubunt nag file -c

兩臺機器: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) ##執行 [email protected]:/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) ##執行 [email protected]:/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)

##執行
[email protected]:/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)

##執行
[email protected]:/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)

##執行
[email protected]:/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‘
[email protected]:~# 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