16/10/2018, 21:13

Fabric Python

Fabric là một library mạnh mẽ của Python được sử dụng như một công cụ tương tác giữa SSH và computer system một cách dễ dàng hơn. Nó sẽ giúp tự động hóa một loạt các tác vụ từ deploy app cho tới system administration. Fabric script là một file Python cơn bản: fabfile.py. Sau khi cài xong Fabric, ...

Fabric là một library mạnh mẽ của Python được sử dụng như một công cụ tương tác giữa SSH và computer system một cách dễ dàng hơn. Nó sẽ giúp tự động hóa một loạt các tác vụ từ deploy app cho tới system administration.

Fabric script là một file Python cơn bản: fabfile.py. Sau khi cài xong Fabric, bạn có thể sử dụng CLI: "fab".

Một ví dụ cơ bản:

# fabfile.py
from fabric.api import local

def hello_world():
	local("echo 'HelloWorld'")

Mình định nghĩ là task hello_world, task này print text "HelloWord". Để run nó rất đơn giản:

$ fab hello_world
[localhost] local: echo 'HelloWorld'
HelloWorld

Done.

Như các bạn cũng biết, Python là một ngôn ngữ rất linh hoạt. Bất kể câu lệnh Python nào và module Python nào đều có thể sử dụng thông qua Fabric. Các bạn có thể hiểu đơn giản là: Bạn dùng code Python và Fabric module để tương tác với system. Điều này có thể dễ dàng hơn nhiều việc sử dụng shell thuần túy.

Fabric cung cấp tập hợp nhiều commands rất cơ bản nhưng rất mạnh. Dưới đây là một số command điển hình:

run (fabric.operations.run/fabric.api.run)

Example:

from fabric.api import run
# from fabric.operations import run

# Create a directory "test"
run("mkdir ~/test")

# Get username logged in on console
run("whoiam")

# List file/directory in /var/www/html
run("ls -a /var/www/html")

# Check if command failed
reulst = run("touch /usr/test.txt")
if result.failed:
	print("Create file test.txt failed!")
if result.succeeded:
	print("Create file test.txt successfully!")

Qua ví dụ trên có thể thấy: run 2 tác dụng:

  • Thực hiện command shell.
  • Control được command đó có được thực hiện hay không?

sudo (fabric.operations.sudo/fabric.api.sudo)

Example:

from fabric.api import sudo
# from fabric.operations import sudo

# Create a directory "test"
sudo("mkdir ~/test", user="test-admin")

# Get username logged in on console
sudo("whoiam")

# List file/directory in /var/www/html
sudo("ls -a /var/www/html")

# Check if command failed
reulst = sudo("touch /usr/test.txt")
if result.failed:
	print("Create file test.txt failed!")
if result.succeeded:
	print("Create file test.txt successfully!")

Có lẽ điểm khác biệt duy nhất giữ run và sudo khác nhau ở chỗ sudo đúng như tên của nó. Nó cung cấp nhiều quyền hơn khi thực hiện command shell.

local (fabric.operations.local/fabric.api.local)

Example:

from fabric.api import local
# from fabric.operations import local

# Create a directory "test"
local("mkdir ~/test", user="test-admin")

# Get username logged in on console
local("whoiam")

# List file/directory in /var/www/html
local("ls -a /var/www/html")

# Check if command failed
reulst = local("touch /usr/test.txt")
if result.failed:
	print("Create file test.txt failed!")
if result.succeeded:
	print("Create file test.txt successfully!")

Đến đây sẽ nhiều bạn cảm thấy bối rối: run, sudo, local nó quá giống nhau. Tuy nhiên, bạn chỉ cần hiểu đơn giản nó là:

  • local: chỉ thực thi một local command.
  • run: thực thi một remote command.
  • sudo: thực thi một sudo remote command.

get (fabric.operations.get/fabric.api.get)

Example:

from fabric.api import get
# from fabric.operations import get

# Download a error logs
get(remote_path="/home/server/myapp/error.tar.gz", local_path="/logs/error.tar.gz")


# Download a backup database
get("/backup/db_02022017.gz", "./db.gz")

get command này khá giống với scp command. Mục đích chính của nó là copy/move file(s) từ remote system tới máy bạn. Khi sử dụng get thì bạn cần chú ý 2 parameter:

  • remote_path
  • local_path

put (fabric.operations.put/fabric.api.put)

Example:

from fabric.api import put
# from fabric.operations import put

# Upload database to remote server
put("~/myapp/backup/db_backup_02022017.tar.gz", "/var/www/html/db_backup_02022017.tar.gz")

# Upload and set permission file
result = put("~/myapp/requirements.txt", "requirements.txt", mode=755)

# Verify 
if result.failed:
	print("Upload file requirements.txt failed!")
if result.succeeded:
	print("Upload file requirements.txt successfully!")

Ok. Dễ dàng thấy, put và get ngược nhau. Nó khá giống như scp = put + get             </div>
            
            <div class=

0