Python fabric using Notes

Source: Internet
Author: User
Fabric

Title is development, but at the same time to do development testing and operation of the work ... For Mao Task*3 Not salary * 3 (O (╯-╰) o)

Recently took over more and more things, release and operation of the work is quite mechanical, coupled with the frequency is quite high, resulting in time wasted or a lot of advantages.

Fix bugs, test, submit repository (2 minutes), SSH to test environment pull deployment (2 minutes), rsync to online machine a,b,c,d,e (1 min), ssh to ABCDE five machines, one by one reboot (8-10 minutes) = 13-15 minutes

One of the depressed is that each operation is the same, the same command, deadly in a number of machines, it is difficult to do a script in this machine, the main time is wasted in ssh, Knock command, written script, can be executed in one click, spend two minutes to see the results of execution

Until we found the fabric.

Role

Very powerful tool.

You can solidify commands for automated deployment or multi-machine operations into a single script

Like some OPS tools, it's mostly because, Python .....

Easy to use and easy to get started

Of course, the shell commands can be combined, the difference between the ancient artifact and the modern weapon.

Environment configuration

Install the corresponding package on the machine and the target machine (note, all must have)
Copy the Code code as follows:


sudo easy_install fabric


Currently 1.6 version (or with Pip install, same)

After installation, you can see if the installation was successful
Copy the Code code as follows:


[ken@~$] which fab
/usr/local/bin/fab

After loading, you can browse the official document http://docs.fabfile.org/en/1.6/

Then, you can do it.

Hello World

First, the simple operation of the machine, there is a preliminary understanding, examples of sources and official website

Create a new PY script: fabfile.py
Copy the Code code as follows:


def hello ():
Print ("Hello world!")


Command line execution:
Copy CodeThe code is as follows:


[ken@~/tmp/fab$] Fab hello
Hello world!

Done.

Note that you can use Fabfile as the file name, but you need to specify the file when executing
Copy the Code code as follows:


[ken@~/tmp/fab$] MV fabfile.py test.py
fabfile.py-test.py
[ken@~/tmp/fab$] Fab hello

Fatal error:couldn ' t find any fabfiles!

Remember That-f can is used to specify Fabfile path, and use-h for help.

Aborting.
[ken@~/tmp/fab$] fab-f test.py Hello
Hello world!

Done.

With parameters:

To modify the fabfile.py script:
Copy the Code code as follows:


def hello (name, value):
Print ("%s =%s!"% (name, value))

Perform
Copy the Code code as follows:


[ken@~/tmp/fab$] Fab hello:name=age,value=20
Age = 20!

Done.
[ken@~/tmp/fab$] Fab hello:age,20
Age = 20!

Done.

Perform a native operation

Simple local operation:
Copy the Code code as follows:


From FABRIC.API Import Local

Def lsfab ():
Local (' CD ~/tmp/fab ')
Local (' ls ')


Results:
Copy CodeThe code is as follows:


[ken@~/tmp/fab$] Pwd;ls
/users/ken/tmp/fab
fabfile.py FABFILE.PYC test.py Test.pyc
[ken@~/tmp/fab$] fab-f test.py lsfab
[localhost] local:cd ~/tmp/fab
[localhost] Local:ls
fabfile.py FABFILE.PYC test.py Test.pyc

Done.


Practical Start:

Suppose you are submitting a copy of the configuration file settings.py to the repository every day (there is no conflict case)

If this is done manually:
Copy the Code code as follows:


cd/home/project/test/conf/
git add settings.py
Git commit-m ' daily update settings.py '
Git pull origin
Git push origin


In other words, these commands you have to manually knock every day, the so-called daily job, is to repeat every day, mechanized work, let us see how to achieve a key with fabric: (in fact, with shell script can be directly done, but the advantage of FAB is not here, Here the main bit behind the local + remote operation to prepare, after all, two places to write a script for easy maintenance)
Copy CodeThe code is as follows:


From FABRIC.API Import Local

Def setting_ci ():
Local ("cd/home/project/test/conf/")
Local ("Git add settings.py")
#后面你懂的, too lazy to knock .....

Mashup Integration Remote operation

At this point, suppose you want to update the configuration file to the/home/ken/project corresponding project directory of machine A.
Copy the Code code as follows:


#!/usr/bin/env python
# Encoding:utf-8

From FABRIC.API import Local,cd,run

env.hosts=[' User@ip:port ',] #ssh要用到的参数
Env.password = ' pwd '


Def setting_ci ():
Local (' echo ' Add and commit settings in local "')
#刚才的操作换到这里, you know.

Def update_setting_remote ():
print "Remote Update"
With CD (' ~/temp '): #cd用于进入某个目录
Run (' ls-l | wc-l ') #远程操作用run

def update ():
Setting_ci ()
Update_setting_remote ()

Then, do it:
Copy the Code code as follows:


[ken@~/tmp/fab$] fab-f deploy.py Update
[User@ip:port] Executing task ' update '
[localhost] local:echo "Add and commit settings in local"
Add and commit settings in local
Remote Update
[User@ip:port] run:ls-l | Wc-l
[User@ip:port] Out:12
[User@ip:port] Out:

Done.


Note that if you do not declare env.password, the interaction that is required to enter the password is taken out of the corresponding machine.

Multi-server Mashup

To operate multiple servers, you need to configure more than one host
Copy the Code code as follows:


#!/usr/bin/env python
# Encoding:utf-8

From FABRIC.API Import *

#操作一致的服务器可以放在一组, perform the same set of actions as the same group
Env.roledefs = {
' TestServer ': [' user1@host1:port1 ',],
' Realserver ': [' user2@host2:port2 ',]
}

#env. Password = ' Do not use this configuration here, it is not possible to require the password to be consistent, the written text is not appropriate. Get through all ssh.

@roles (' TestServer ')
Def task1 ():
Run (' ls-l | wc-l ')

@roles (' Realserver ')
Def task2 ():
Run (' ls ~/temp/| wc-l ')

Def dotask ():
Execute (TASK1)
Execute (TASK2)

Results:
Copy the Code code as follows:


[ken@~/tmp/fab$] fab-f mult.py dotask
[User1@host1:port1] Executing task ' Task1 '
[User1@host1:port1] run:ls-l | Wc-l
[User1@host1:port1] Out:9
[User1@host1:port1] Out:

[User2@host2:port2] Executing task ' task2 '
[User2@host2:port2] Run:ls ~/temp/| Wc-l
[User2@host2:port2] Out:11
[User2@host2:port2] Out:


Done.

Extended
1. Color

Can print color, more visible and convenient when viewing operation result information

From fabric.colors Import *

Def show ():
Print Green (' success ')
Print red (' fail ')
Print yellow (' yellow ')
#fab-F color.py Show
2. Errors and exceptions

About error Handling

By default, a set of commands, after which the last command fails, does not proceed down

A different process can be done after a failure, the document

At the moment, the follow-up use to see

3. Password Management

Read the document

Better password management, elder brother compared to soil, not get through, the main is the server list changes frequently, my processing method is:

1.host,user,port,password configuration list, all written in one file

or directly into the script, of course, this is more ...
Copy the Code code as follows:


Env.hosts = [

' Host1 ',

' Host2 '


]
Env.passwords = {
' Host1 ': "Pwdofhost1",
' Host2 ': "Pwdofhost2",

}

Or
Copy the Code code as follows:

Env.roledefs = {
' TestServer ': [' host1 ', ' host2 '],
' Realserver ': [' host3 ',]
}
Env.passwords = {
' Host1 ': "Pwdofhost1",
' Host2 ': "Pwdofhost2",
' Host3 ': "Pwdofhost3",
}

2. Parse into map nesting according to key and put in deploy

In addition, the command can actually solidify into a cmds list ...

At the beginning of the use of these, follow-up more demand for the time to remove documents, saying that the document is really a lot of good things, is too much, looked dizzy ...

  • Contact Us

    The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

    If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.