Thứ sáu, 31/01/2014 | 00:00 GMT+7

Cách sử dụng Fabric để tự động hóa các nhiệm vụ và triển khai quản trị

Hãy tự động hóa mọi thứ. Mọi điều.


Hãy cũng tìm ra cách để thực hiện việc này bằng một công cụ duy nhất. Một cái dễ lập trình, dễ sử dụng. Và tại sao không thực hiện tất cả những điều này mà không cần cài đặt SSH trên máy từ xa - tất cả các lệnh được tập lệnh tại một vị trí duy nhất để thực thi local hoặc trên bất kỳ số lượng server nào khác nhau.

Nó có âm thanh không rực rỡ khó nghe? Ta đồng ý.

Trong bài viết DigitalOcean này, Fabric - thư viện hợp lý hóa việc triển khai ứng dụng và quản trị [hệ thống] - là chủ đề của ta . Ta sẽ tìm hiểu cách cài đặt công cụ tuyệt vời này và xem mọi thứ có thể trở nên dễ dàng như thế nào bằng cách tự động hóa các việc quản lý thông thường mà nếu không sẽ yêu cầu nhảy qua các vòng với bash hacks và các tập lệnh phức tạp, khó bảo trì.

Bảng chú giải


1. Vải là gì?


  1. Ngôn ngữ lập trình Fabric và Python
  2. Quản trị Hệ thống / Server
  3. Triển khai ứng dụng

2. Cách cài đặt Fabric trên Server chạy Ubuntu / Debian


3. Tính năng và tích hợp của vải với SSH


  1. run (vải.operations.run)
  2. sudo (vải.operations.sudo)
  3. local (vải.operations.local)
  4. get (vải.operations.get)
  5. put (vải.operations.put)
  6. prompt (vải.operations.prompt)
  7. reboot (vải.operations.reboot)

4. Người trợ giúp của Fabric: Người quản lý bối cảnh


  1. cd (vải.context_managers.cd)
  2. lcd (vải.context_managers.lcd)
  3. path (vải.context_managers.path)
  4. settings (vải.context_managers.settings)
  5. prefix (vải.context_managers.prefix)

5. Ví dụ về fabfile cho các việc quản lý tự động hóa


Vải là gì?


Vải là một thư viện Python (tức là một công cụ để xây dựng trên) được sử dụng để tương tác với SSH và hệ thống máy tính [dễ dàng] để tự động hóa một loạt các nhiệm vụ, thay đổi từ việc triển khai ứng dụng để quản trị hệ thống nói chung.

Mặc dù dựa trên Python, không nghĩa là nó được sử dụng nghiêm ngặt để làm việc với các ứng dụng hoặc công cụ Python khác. Trên thực tế, Fabric ở đó để bạn đạt được bất cứ điều gì dù ngôn ngữ cụ thể hay hệ thống. Miễn là các yêu cầu rất cơ bản được đáp ứng, bạn có thể tận dụng thư viện tuyệt vời này.

Tập lệnh vải là các file Python cơ bản. Chúng được chạy bằng công cụ fab đi kèm với Fabric. Tất cả điều này là bao gồm (tức là import .. ) tập lệnh của bạn (tức là hướng dẫn để thực hiện) và thực hiện thủ tục được cung cấp.

Nói "Xin chào Fab!" sử dụng Vải ( fabfile.py ):

# def hello(who="world"): #    print "Hello {who}!".format(who=who)  $ fab hello:who=Fab Hello Fab! 

Ngôn ngữ lập trình Fabric và Python


Như ta đã đề cập ngắn gọn ở trên, mặc dù Fabric được dùng trong một quy mô rất lớn các kịch bản, nó là một thư viện dựa trên Python và các fabfile cần được lập trình bằng Ngôn ngữ lập trình Python.

Dù kinh nghiệm của bạn với bất kỳ ngôn ngữ lập trình nào khác (bao gồm cả Python), khi bạn thực hiện theo cách của bạn qua các bài viết về Fabric của ta , bạn sẽ học cách làm việc với công cụ này và bạn sẽ không mất nhiều thời gian để thấy nó đơn giản và tuyệt vời như thế nào.

Python là một ngôn ngữ lập trình có mục đích chung (tức là không được tạo ra để giải quyết một vấn đề cụ thể) cực kỳ phổ biến và được chấp nhận rộng rãi. Nó có thể dễ dàng được phân biệt bởi tầm quan trọng của nó đối với khả năng đọc mã và tính đơn giản. Để hiểu Python, hãy xem Đề xuất nâng cao Python (PEP) rất ngắn 20 The Zen of Python , tiếp theo là Hướng dẫn kiểu dài bit dành cho Mã Python .

Để có hiểu biết tổng thể về việc lập trình bằng Python có thể như thế nào, bạn có thể đọc một số bài viết tuyệt vời được liệt kê tại Hướng dẫn dành cho người mới bắt đầu Python .

Quản trị Hệ thống / Server


Một trong những lĩnh vực chính để sử dụng Fabric là tự động hóa các việc hàng ngày của quản trị hệ thống (và server ). Những công việc này bao gồm khá nhiều thứ liên quan đến:

  • Xây dựng server ;

  • Bảo trì của nó, và;

  • Giám sát.

Khi bạn bắt đầu làm việc với server nước của chính mình (là một server ảo hóa hoàn chỉnh với toàn quyền kiểm soát / truy cập), những thứ xuất hiện như một bí ẩn sẽ nhanh chóng trở nên quen thuộc với bạn. Khi bạn triển khai các ứng dụng của bạn và bắt đầu xử lý việc bảo trì chúng, điều tự nhiên là bạn sẽ gặp phải một số vấn đề. Tuy nhiên, khi ứng dụng của bạn trở nên phổ biến và mọi thứ bắt đầu phát triển, nhu cầu quản lý nhiều server và lặp đi lặp lại mọi thứ không còn trở nên thú vị.

Đó chính xác là lúc bạn ước mình đã gặp Vải nhiều năm trước.

Triển khai ứng dụng


Triển khai một ứng dụng ( dù đó là trang web, API hay server ) thường nghĩa là cài đặt hệ thống từ đầu (hoặc từ một ảnh chụp nhanh được chụp kịp thời), chuẩn bị bằng cách cập nhật mọi thứ, download các phụ thuộc, cài đặt file cấu trúc và quyền, sau đó cuối cùng là tải lên cơ sở mã của bạn - hoặc download bằng SCM chẳng hạn như Git.

Trong quá trình phát triển, bạn cũng có thể có các lệnh cần được thực thi thường xuyên (ví dụ: ngay trước khi bước vào chu kỳ triển khai).

Việc có thể viết các việc này (cả local và từ xa) theo cách tổ chức hợp lý và - quan trọng nhất - có thể lập trình được chứng tỏ là vô giá ngay sau khi bạn nhận ra rằng đã lãng phí bao nhiêu thời gian để lặp lại các bước tương tự liên tục, khiến mọi thứ dễ xảy ra lỗi trong quá trình.

Đây chính là khi Vải nói đến viện trợ của bạn dưới dạng một file Python sẽ biết phải làm ở đâu để làm điều đó.

Cách cài đặt Fabric trên một server chạy Ubuntu / Debian


Một cách dễ dàng và mount để cài đặt Fabric là sử dụng aptitude quản lý gói hệ điều hành mặc định.

Để cài đặt Fabric bằng aptitude , hãy chạy như sau:

sudo aptitude install fabric  # Alternatively, you can also use *pip*: # pip install fabric 

Các tính năng và sự tích hợp của vải với SSH


Ngoài ra, bất kỳ lệnh (hoặc thủ tục) và module nào của Python đều được dùng thông qua Fabric - vì Fabric thực sự là một thư viện Python.

Điều mà Fabric thực sự mang lại là sự tích hợp rộng rãi và tuyệt vời với SSH cho phép hợp lý hóa mọi thứ bằng cách sử dụng các tập lệnh đơn giản (tức là fabfile.py ).

Trong phần này, bạn có thể tìm thấy lựa chọn các công cụ (ví dụ: các chức năng) đi kèm với Fabric được dùng để tương tác với các môi trường nơi các lệnh bạn chỉ định được thực thi.

Lưu ý: Bạn có thể xem và tìm hiểu thêm về hoạt động của Vải bằng cách truy cập tài liệu của nó về chủ đề này .

run (vải.operations.run)


Quy trình run của Fabric được sử dụng để thực hiện lệnh shell trên một hoặc nhiều server từ xa.

  • Kết quả kết quả của quá trình chạy có thể được ghi lại bằng cách sử dụng một biến.

  • Nếu lệnh thành công hay không thành công có thể được kiểm tra bằng cách sử dụng .failed.succeeded .

Các ví dụ sử dụng:

# Create a directory (i.e. folder) run("mkdir /tmp/trunk/")  # Uptime run("uptime")  # Hostname run("hostname")  # Capture the output of "ls" command result = run("ls -l /var/www")  # Check if command failed result.failed 

sudo (vải.operations.sudo)


Cùng với run , lệnh Fabric được sử dụng rộng rãi nhất có lẽ là sudo . Nó cho phép thực hiện một tập hợp các lệnh và đối số nhất định với các quyền sudo (tức là superuser ) trên server từ xa.

Nếu lệnh sudo được sử dụng với một user được chỉ định rõ ràng, việc thực thi sẽ không xảy ra với quyền root mà là lệnh khác (tức là UID 1010).

Các ví dụ sử dụng:

# Create a directory sudo("mkdir /var/www")  # Create a directory as another user sudo("mkdir /var/www/web-app-one", user="web-admin")  # Return the output result = sudo("ls -l /var/www") 

cục bộ (vải.operations.local)


Như ta đã đề cập trong phần giới thiệu của bạn , một tập lệnh Fabric (fabfile) duy nhất được dùng để thực hiện các hành động trên cả máy local và (các) hệ thống từ xa. Với mục đích này, Vải cung cấp local phẫu để chạy các lệnh tại local .

Tuy nhiên, không giống như run hoặc sudo, không thể tương tác với kết quả của local theo cùng một cách. Đầu ra có thể được chụp hoặc in - lựa chọn có thể được đặt bằng đối số capture .

Những người giúp đỡ local như lcd quản lý bối cảnh (được sử dụng để cài đặt folder làm việc local ) được vinh danh với local , cùng chiều run (hoặc sudo ) tôn vinh các cd quản lý ngữ cảnh.

Các ví dụ sử dụng:

# Create a source distribution tar archive (for a Python App.) local("python setup.py sdist --formats=gztar", capture=False)  # Extract the contents of a tar archive local("tar xzvf /tmp/trunk/app.tar.gz")  # Remove a file local("rm /tmp/trunk/app.tar.gz") 

lấy (vải.operations.get)


Lệnh get tồn tại để tải (các) file (tức là kéo) (các) file từ hệ thống từ xa đến máy tính nơi Vải đang được sử dụng. Nó tương tự như cách scp hoạt động và rất hữu ích khi bạn cần download các bản backup , ghi dữ liệu hoặc một số mục liên quan đến server khác.

  • Bạn có thể chỉ định đường dẫn từ xa bằng đối số remote_path .

  • Bạn có thể chỉ định đường dẫn local - download - với đối số local_path .

Các ví dụ sử dụng:

# Download some logs get(remote_path="/tmp/log_extracts.tar.gz", local_path="/logs/new_log.tar.gz")  # Download a database back-up get("/backup/db.gz", "./db.gz") 

đặt (vải.operations.put)


Khi bạn cần tải file lên, lệnh put được dùng tương tự để get . Bạn có thể truy cập lại kết quả thực thi lệnh bằng .failed hoặc .succeeded .

  • local_path - đặt đường dẫn local .

  • remote_path - đặt đường dẫn từ xa.

  • use_sudo - tải file lên bất kỳ đâu trên máy tính từ xa bằng thủ thuật tiện lợi: tải lên một vị trí tạm thời rồi di chuyển.

  • mode - đặt chế độ file (cờ).

  • mirror_local - tự động đặt cờ file (tức là làm cho file thực thi được) bằng cách đọc chế độ của file local .

Các ví dụ sử dụng:

# Upload a tar archive of an application put("/local/path/to/app.tar.gz", "/tmp/trunk/app.tar.gz")  # Use the context manager `cd` instead of "remote_path" arg. # This will upload app.tar.gz to /tmp/trunk/ with cd("/tmp"):     put("local/path/to/app.tar.gz", "trunk")  # Upload a file and set the exact mode desired upload = put("requirements.txt", "requirements.txt", mode=664)  # Verify the upload upload.succeeded 

nhắc (vải.operations.prompt)


Khi bạn thấy mình cần một chút linh hoạt hơn khi làm việc với Fabric, prompt sẽ đến giải cứu bạn. Lệnh này thực hiện chính xác những gì tên của nó gợi ý và yêu cầu user (tức là người đang chạy tập lệnh) nhập một dữ liệu nhất định để sử dụng trong quá trình thực thi liên tiếp.

Ví dụ: nếu bạn đang sử dụng một file để quản lý với nhiều ứng dụng, bạn có thể sử dụng prompt để đặt một file để thực hiện các việc .

Trước khi bắt đầu với bất cứ điều gì, prompt cũng được dùng để truy vấn số cổng sẽ sử dụng.

Các ví dụ sử dụng:

# Prompt the user port_number = prompt("Which port would you like to use?")  # Prompt the user with defaults and validation port_number = prompt("Which port?", default=42, validate=int) 

khởi động lại (vải.operations.reboot)


Lệnh reboot cũng tự giải thích: nó được sử dụng để khởi động lại hệ thống từ xa. Theo mặc định, nó đợi hai phút (tức là 120 giây -> wait=120 ) trước khi thực hiện công việc của bạn .

Các ví dụ sử dụng:

# Reboot the remote system reboot()  # Reboot after 30 seconds reboot(wait=30) 

Người trợ giúp của Fabric: Người quản lý ngữ cảnh


Trình quản lý ngữ cảnh của Fabric được sử dụng with câu lệnh Python's with . Lý do cho điều này là cách các phiên giữa việc thực thi các lệnh không được giữ giữa các kết nối không có shell .

Lưu ý: Bạn có thể xem và tìm hiểu thêm về trình quản lý ngữ cảnh của Fabric bằng cách truy cập tài liệu của nó về chủ đề này .

cd (vải.context_managers.cd)


cd quản lý ngữ cảnh cd cho phép giữ trạng thái folder (tức là nơi thực thi khối chú thích sau). Nó tương tự như chạy lệnh cd trong một phiên SSH và chạy nhiều lệnh khác nhau.

Các ví dụ sử dụng:

# The *cd* context manager makes enwrapped command's # execution relative to the stated path (i.e. "/tmp/trunk") with cd("/tmp/trunk"):     items = sudo("ls -l")  # It is possible to "chain" context managers # The run commands gets executed, therefore at "/tmp/trunk" with cd("/tmp"):     with cd("/trunk"):         run("ls") 

lcd (vải.context_managers.lcd)


Trình quản lý ngữ cảnh lcd (cd local ) hoạt động rất giống với trình quản lý ở trên (cd); tuy nhiên, nó chỉ ảnh hưởng đến trạng thái của hệ thống local .

Các ví dụ sử dụng:

# Change the local working directory to project's # and upload a tar archive with lcd("~/projects/my_project"):     print "Uploading the project archive"     put("app.tar.gz", "/tmp/trunk/app.tar.gz") 

đường dẫn (vải.context_managers.path)


path quản lý ngữ cảnh path thay đổi biến PATH.

cài đặt (vải.context_managers.settings)


Khi bạn cần tạm thời (tức là đối với một chuỗi lệnh nhất định), bạn có thể sử dụng câu lệnh settings (tức là overrides các giá trị env ).

Các ví dụ sử dụng:

# Perform actions using a different *user* with settings(user="user1"):     sudo("cmd") 

tiền tố (vải.context_managers.prefix)


câu lệnh prefix thực hiện những gì tên của nó gợi ý và kết thúc lệnh runsudo với lệnh được chỉ định.

Các ví dụ sử dụng:

with prefix("cmd arg."):     run("./start") # cmd arg. && ./start 

Ví dụ fabfile cho các việc quản lý tự động


Để bắt đầu học cách lập trình một fabfile s để tự động hóa một tác vụ quản lý đơn giản, hãy tạo một fabfile.py rỗng.

Chạy lệnh sau để tạo fabfile.py bằng editor nano:

nano fabfile.py 

Nối khối mã sau khi cập nhật hệ thống và cài đặt memcached:

# Fabfile to: #    - update the remote system(s)  #    - download and install an application  # Import Fabric's API module from fabric.api import *   env.hosts = [     'server.domain.tld',   # 'ip.add.rr.ess   # 'server2.domain.tld', ] # Set the username env.user   = "root"  # Set the password [NOT RECOMMENDED] # env.password = "passwd"  def update_upgrade():     """         Update the default OS installation's         basic default tools.                                             """     run("aptitude    update")     run("aptitude -y upgrade")  def install_memcached():     """ Download and install memcached. """     run("aptitude install -y memcached")  def update_install():      # Update     update_upgrade()      # Install     install_memcached() 

Lưu và thoát bằng CTRL + X và xác nhận bằng Y.

Đến đây bạn có thể bắt đầu tự động hóa các việc quản lý server thông thường của bạn bằng cách sử dụng Fabric và các tính năng của nó được giải thích tại đây.

# Automate everything! fab update_install 

<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> Hệ điều hành Tezer </a> </div>


Tags:

Các tin liên quan