Python fabric implements remote operation and deployment sample _python

Source: Internet
Author: User
Tags error handling ssh

Recently took over more and more things, the release and operation of the work is quite mechanical, coupled with the frequency is quite high, resulting in time wasting or more advantages. Fix bugs, test, submit version library (2 minutes), SSH to test environment pull deployment (2 minutes), rsync to online machine a,b,c,d,e (1 minutes), SSH to ABCDE five machines, reboot (8-10 minutes) = 13-15 minutes One of the depressing is , each operation is the same, the same command, killing is on multiple machines, it is difficult to get a script in this machine, the main time is wasted in SSH, Knock command on, written script, can be a key to execute, take two minutes to see the implementation results

Until, the discovery of fabric can be automated deployment or multiple-machine operation of the command to solidify into a script and some of the operational tools are similar, with it mainly because, simple and easy to use, of course, the shell of the various commands can also be combined, the ancient artifacts and modern weapons, the difference between

Environment configuration

Install the corresponding package on both the local and the target machine (note that all must have)

sudo easy_install fabric

It is currently version 1.6 (or the same as Pip install)

After installation, you can see if the installation was successful

Copy Code code as follows:

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

After loading, you can browse the official documents

And 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 Code code as follows:

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

Command line execution:
Copy Code code as follows:

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

Done.
Note that this can be done without fabfile as a file name, but you need to specify the file when executing

Copy 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 be 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 Code code as follows:

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

Perform

Copy 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 the native action
Simple local operation:

Copy Code code as follows:

From FABRIC.API Import Local

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

Results:

Copy Code code 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.
Actual combat begins:

Suppose that you submit a profile settings.py to the repository every day (there is no consideration of the conflict)

If this is a manual operation:

Copy 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 tap every day, the so-called daily job, is to repeat every day, mechanized work, let us see how to achieve the use of fabric with a key: (in fact, the shell script can be directly handled, but the advantage of FAB is not here, Here the main bit behind the local + remote operation to prepare, after all, two local operations write a script for easy maintenance.

Copy Code code 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 ...

Mixed-lap Integrated remote operation
At this point, suppose that you want to go to machine A's/home/ken/project corresponding project directory to update the configuration file

Copy 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 to 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, execute it:

Copy 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"
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, you will jump out of the interaction required to enter the password when executing to the corresponding machine

Multi-server mix-and-match
To operate multiple servers, you need to configure multiple host

Copy Code code as follows:

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

From FABRIC.API Import *

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

#env. Password = ' Do not use this configuration, it is not possible to require passwords are consistent, written in clear text is not appropriate. All ssh will be all right.

@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 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 eye-catching and convenient when viewing the information of operation result

Copy Code code as follows:

From fabric.colors Import *

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

2. Errors and anomalies

About error Handling

Default, a set of commands that do not go down after the previous command failed to execute

Can be handled differently after a failure, the document

Not at the moment.

3. Password Management

Look at the document

Better password management, brother comparison soil, did not get through, is mainly the server list changes frequently, I handle the way is:

1.host,user,port,password configuration list, all of which are written in a file

or directly to the script, of course, this more ...

Copy Code code as follows:

Env.hosts = [

' Host1 ',

' Host2 '


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

}

Or

Copy Code code as follows:

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

2. Resolve into map nesting according to key, put into deploy

In addition, the command can also be solidified into a cmds list ....

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.