zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    pspc命令使用(转)
    NSArray数组的使用常用方法(转)
    css兼容的问题 持续更新
    关于memcache
    drupal7 学习笔记(持续更新中...)
    JavaScript的继承 转载
    浏览器的缓存机制
    我的js单例模式
    javascript运行机制
    javascrpt绑定事件之匿名函数
  • 原文地址:https://www.cnblogs.com/zhepama/p/4151721.html
Copyright © 2011-2022 走看看