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