Thứ tư, 05/06/2019 | 00:00 GMT+7

Cách sử dụng Ansible: Hướng dẫn Tham khảo

Ansible là một công cụ quản lý cấu hình hiện đại tạo điều kiện thuận lợi cho công việc cài đặt và bảo trì server từ xa.

Ansible Cheat Sheet

Hướng dẫn kiểu ghi chú này cung cấp tham khảo nhanh về các lệnh và thực hành thường được sử dụng khi làm việc với Ansible. Để biết tổng quan về Ansible cũng như cách cài đặt và cấu hình nó, vui lòng xem hướng dẫn của ta về cách cài đặt và cấu hình Ansible trên Ubuntu 18.04 .

Cách sử dụng Hướng dẫn này:

  • Hướng dẫn này ở định dạng ghi chú với các đoạn dòng lệnh độc lập.
  • Chuyển đến bất kỳ phần nào có liên quan đến nhiệm vụ bạn đang cố gắng hoàn thành.
  • Khi bạn thấy highlighted text trong các lệnh của hướng dẫn này, hãy nhớ rằng văn bản này phải tham chiếu đến server , tên user và địa chỉ IP từ khoảng không quảng cáo của bạn .

Bảng chú giải thuật ngữ Ansible

Các thuật ngữ cụ thể của Ansible sau đây chủ yếu được sử dụng trong toàn bộ hướng dẫn này:

  • Control Machine / Node : một hệ thống mà Ansible được cài đặt và cấu hình để kết nối và thực hiện các lệnh trên các node .
  • Node : một server do Ansible kiểm soát.
  • Tệp Kiểm kê : một file chứa thông tin về các server Điều khiển Ansible, thường được đặt tại /etc/ansible/hosts .
  • Playbook : một file chứa một loạt các việc được thực thi trên một server từ xa.
  • Role : một bộ sưu tập sách vở và các file khác có liên quan đến mục tiêu như cài đặt web server .
  • Chơi : một cuộc chạy Ansible đầy đủ. Một vở kịch có thể có một số vở kịch và role , bao gồm từ một vở kịch duy nhất đóng role như điểm vào.

Nếu bạn muốn thực hành các lệnh được sử dụng trong hướng dẫn này với một playbook Ansible đang hoạt động, bạn có thể sử dụng playbook này từ hướng dẫn của ta về Tự động hóa Cài đặt Server Ban đầu với Ansible trên Ubuntu 18.04 . Bạn cần ít nhất một server từ xa để sử dụng làm nút.

Kiểm tra khả năng kết nối với các node

Để kiểm tra xem Ansible có thể kết nối và chạy các lệnh cũng như sách chơi trên các node của bạn hay không, bạn có thể sử dụng lệnh sau:

  • ansible all -m ping

Mô-đun ping sẽ kiểm tra xem bạn có thông tin xác thực hợp lệ để kết nối với các node được xác định trong file hàng tồn kho của bạn hay không, ngoài việc kiểm tra xem Ansible có thể chạy các tập lệnh Python trên server từ xa hay không. Một phản hồi pong trở lại nghĩa là Ansible đã sẵn sàng chạy các lệnh và playbook trên nút đó.

Kết nối với quyền user khác

Theo mặc định, Ansible cố gắng kết nối với các node với quyền là user hệ thống hiện tại của bạn, sử dụng cặp SSH key tương ứng của nó. Để kết nối với quyền user khác, hãy thêm lệnh bằng cờ -u và tên của user dự định:

  • ansible all -m ping -u sammy

Điều này cũng hợp lệ cho ansible-playbook :

  • ansible-playbook myplaybook.yml -u sammy

Sử dụng SSH key tùy chỉnh

Nếu bạn đang sử dụng SSH key tùy chỉnh để kết nối với các server từ xa, bạn có thể cung cấp khóa này tại thời điểm thực thi bằng tùy chọn --private-key :

  • ansible all -m ping --private-key=~/.ssh/custom_id

Tùy chọn này cũng hợp lệ cho ansible-playbook :

  • ansible-playbook myplaybook.yml --private-key=~/.ssh/custom_id

Sử dụng xác thực dựa trên password

Nếu bạn cần sử dụng xác thực dựa trên password để kết nối với các node , bạn cần thêm tùy chọn --ask-pass vào lệnh Ansible của bạn .

Điều này sẽ làm cho Ansible nhắc bạn nhập password của user trên server từ xa mà bạn đang cố gắng kết nối như:

  • ansible all -m ping --ask-pass

Tùy chọn này cũng hợp lệ cho ansible-playbook :

  • ansible-playbook myplaybook.yml --ask-pass

Cung cấp password sudo

Nếu user từ xa cần cung cấp password để chạy các lệnh sudo , bạn có thể bao gồm tùy chọn --ask-become-pass be --ask-become-pass vào lệnh Ansible của bạn . Thao tác này sẽ nhắc bạn cung cấp password sudo của user từ xa:

  • ansible all -m ping --ask-become-pass

Tùy chọn này cũng hợp lệ cho ansible-playbook :

  • ansible-playbook myplaybook.yml --ask-become-pass

Sử dụng file khoảng không quảng cáo tùy chỉnh

Tệp kiểm kê mặc định thường được đặt tại /etc/ansible/hosts , nhưng bạn cũng có thể sử dụng tùy chọn -i để trỏ đến file kiểm kê tùy chỉnh khi chạy lệnh Ansible và sách phát. Điều này rất hữu ích cho việc cài đặt khoảng không quảng cáo cho mỗi dự án có thể được đưa vào hệ thống kiểm soát version như Git:

  • ansible all -m ping -i my_custom_inventory

Tùy chọn tương tự cũng hợp lệ cho ansible-playbook :

  • ansible-playbook myplaybook.yml -i my_custom_inventory

Sử dụng file khoảng không quảng cáo động

Ansible hỗ trợ các tập lệnh kiểm kê để xây dựng các file khoảng không quảng cáo động. Điều này rất hữu ích nếu khoảng không quảng cáo của bạn biến động, với các server được tạo và phá hủy thường xuyên.

Bạn có thể tìm thấy một số tập lệnh kiểm kê open-souce trên repository chính thức của Ansible GitHub. Sau khi tải tập lệnh mong muốn xuống máy điều khiển Ansible của bạn và cài đặt bất kỳ thông tin cần thiết nào - chẳng hạn như thông tin đăng nhập API - bạn có thể sử dụng file thực thi làm khoảng không quảng cáo tùy chỉnh với bất kỳ lệnh Ansible nào hỗ trợ tùy chọn này.

Lệnh sau sử dụng tập lệnh kiểm kê DigitalOcean của Ansible với lệnh ping để kiểm tra kết nối với tất cả các server đang hoạt động hiện tại:

  • ansible all -m ping -i digital_ocean.py

Để biết thêm chi tiết về cách sử dụng file khoảng không quảng cáo động, vui lòng tham khảo tài liệu chính thức của Ansible .

Chạy lệnh đặc biệt

Để thực hiện một lệnh trên một nút, hãy sử dụng tùy chọn -a theo sau lệnh bạn muốn chạy, trong dấu ngoặc kép.

Điều này sẽ thực thi uname -a trên tất cả các node trong repository ảng không quảng cáo của bạn:

  • ansible all -a "uname -a"

Cũng có thể chạy module Ansible với tùy chọn -m . Lệnh sau sẽ cài đặt gói vim trên server1 từ kho của bạn:

  • ansible server1 -m apt -a "name=vim"

Trước khi áp dụng các thay đổi đối với các node của bạn , bạn có thể tiến hành chạy thử để dự đoán cách các server sẽ bị ảnh hưởng bởi lệnh của bạn. Điều này có thể được thực hiện bằng cách bao gồm tùy chọn --check :

  • ansible server1 -m apt -a "name=vim" --check

Chạy Playbooks

Để chạy một playbook và thực hiện tất cả các việc được xác định trong đó, hãy sử dụng lệnh ansible-playbook :

  • ansible-playbook myplaybook.yml

Để overrides tùy chọn hosts mặc định trong playbook và giới hạn việc thực thi đối với một group hoặc server nhất định, hãy thêm tùy chọn -l vào lệnh của bạn:

  • ansible-playbook -l server1 myplaybook.yml

Nhận thông tin về một Play

Tùy chọn --list-tasks được sử dụng để liệt kê tất cả các việc sẽ được thực hiện bởi một lần chơi mà không thực hiện bất kỳ thay đổi nào đối với các server từ xa:

  • ansible-playbook myplaybook.yml --list-tasks

Tương tự, có thể liệt kê tất cả các server sẽ bị ảnh hưởng bởi quá trình chơi mà không cần chạy bất kỳ tác vụ nào trên server từ xa:

  • ansible-playbook myplaybook.yml --list-hosts

Bạn có thể sử dụng các thẻ để giới hạn việc thực hiện một vở kịch. Để liệt kê tất cả các thẻ có sẵn trong một vở kịch, hãy sử dụng tùy chọn --list-tags :

  • ansible-playbook myplaybook.yml --list-tags

Kiểm soát việc thực thi Playbook

Bạn có thể sử dụng tùy chọn --start-at-task để xác định điểm vào mới cho sổ chơi của bạn . Ansible sau đó sẽ bỏ qua bất kỳ thứ gì xảy ra trước nhiệm vụ được chỉ định, thực hiện phần còn lại của phần chơi kể từ thời điểm đó. Tùy chọn này yêu cầu một tên tác vụ hợp lệ làm đối số:

  • ansible-playbook myplaybook.yml --start-at-task="Set Up Nginx"

Để chỉ thực thi các việc được liên kết với các thẻ cụ thể, bạn có thể sử dụng tùy chọn --tags . Ví dụ: nếu bạn chỉ muốn thực thi các việc được gắn thẻ là nginx hoặc mysql , bạn có thể sử dụng:

  • ansible-playbook myplaybook.yml --tags=mysql,nginx

Nếu bạn muốn bỏ qua tất cả các việc nằm dưới các thẻ cụ thể, hãy sử dụng --skip-tags . Lệnh sau sẽ thực thi myplaybook.yml , bỏ qua tất cả các việc được gắn thẻ là mysql :

  • ansible-playbook myplaybook.yml --skip-tags=mysql

Sử dụng Ansible Vault để lưu trữ dữ liệu nhạy cảm

Nếu sách phát Ansible của bạn xử lý dữ liệu nhạy cảm như password , khóa API và thông tin đăng nhập, thì điều quan trọng là phải giữ an toàn cho dữ liệu đó bằng cách sử dụng cơ chế mã hóa. Ansible cung cấp ansible-vault để mã hóa các file và biến.

Mặc dù có thể mã hóa các file dữ liệu Ansible nào cũng như các file binary , nhưng việc sử dụng ansible-vault để mã hóa các file biến có chứa dữ liệu nhạy cảm là phổ biến hơn. Sau khi mã hóa file bằng công cụ này, bạn sẽ chỉ có thể thực thi, chỉnh sửa hoặc xem nội dung của file bằng cách cung cấp password có liên quan được xác định khi bạn mã hóa file lần đầu tiên.

Tạo một file được mã hóa mới

Bạn có thể tạo một file Ansible được mã hóa mới bằng:

  • ansible-vault create credentials.yml

Lệnh này sẽ thực hiện các hành động sau:

  • Đầu tiên, nó sẽ nhắc bạn nhập password mới. Bạn cần cung cấp password này khi nào bạn truy cập vào nội dung file , cho dù đó là để chỉnh sửa, xem hay chỉ chạy playbook hoặc lệnh sử dụng các giá trị đó.
  • Tiếp theo, nó sẽ mở trình soạn thảo dòng lệnh mặc định của bạn để bạn có thể điền vào file với nội dung mong muốn.
  • Cuối cùng, khi bạn chỉnh sửa xong, ansible-vault sẽ lưu file dưới dạng dữ liệu được mã hóa.

Mã hóa một file tin hiện có

Để mã hóa file Ansible hiện có, bạn có thể sử dụng cú pháp sau:

  • ansible-vault encrypt credentials.yml

Thao tác này sẽ nhắc bạn nhập password mà bạn cần nhập khi nào bạn truy cập vào file tin credentials.yml .

Xem nội dung của một file được mã hóa

Nếu bạn muốn xem nội dung của một file đã được mã hóa trước đó bằng ansible-vault và bạn không cần thay đổi nội dung của nó, bạn có thể sử dụng:

  • ansible-vault view credentials.yml

Thao tác này sẽ nhắc bạn cung cấp password bạn đã chọn khi mã hóa file lần đầu bằng ansible-vault .

Chỉnh sửa file được mã hóa

Để chỉnh sửa nội dung của file đã được mã hóa trước đó bằng Ansible Vault, hãy chạy:

  • ansible-vault edit credentials.yml

Thao tác này sẽ nhắc bạn cung cấp password bạn đã chọn khi mã hóa file tin credentials.yml lần đầu tiên bằng ansible-vault . Sau khi xác thực password , trình soạn thảo dòng lệnh mặc định của bạn sẽ mở ra với nội dung chưa được mã hóa của file , cho phép bạn áp dụng các thay đổi của bạn . Khi hoàn tất, bạn có thể lưu file như bình thường, và nội dung cập nhật sẽ được lưu dưới dạng dữ liệu được mã hóa.

Giải mã các file được mã hóa

Nếu bạn muốn hoàn nguyên vĩnh viễn một file đã được mã hóa trước đó bằng ansible-vault về version không mã hóa của nó, bạn có thể làm như vậy với cú pháp sau:

  • ansible-vault decrypt credentials.yml

Thao tác này sẽ nhắc bạn cung cấp cùng một password được sử dụng khi mã hóa file tin credentials.yml lần đầu tiên bằng ansible-vault . Sau khi xác thực password , nội dung file sẽ được lưu vào đĩa dưới dạng dữ liệu không được mã hóa.

Sử dụng nhiều password Vault

Ansible hỗ trợ nhiều password vault được group theo các ID vault khác nhau. Điều này rất hữu ích nếu bạn muốn có password vault dành riêng cho các môi trường khác nhau, chẳng hạn như môi trường phát triển, thử nghiệm và production .

Để tạo file được mã hóa mới bằng ID vault tùy chỉnh, hãy bao gồm tùy chọn --vault-id cùng với nhãn và vị trí mà ansible-vault có thể tìm thấy password cho vault đó. Nhãn có thể là bất kỳ số nhận dạng nào và vị trí có thể là prompt , nghĩa là lệnh sẽ nhắc bạn nhập password hoặc một đường dẫn hợp lệ đến file password .

  • ansible-vault create --vault-id dev@prompt credentials_dev.yml

Thao tác này sẽ tạo một ID vault mới có tên dev sử dụng prompt làm nguồn password . Bằng cách kết hợp phương pháp này với các file biến group , bạn có thể có các hầm bảo vệ riêng biệt cho từng môi trường ứng dụng:

  • ansible-vault create --vault-id prod@prompt credentials_prod.yml

Ta đã sử dụng devprod làm ID vault để chứng minh cách bạn có thể tạo các vault riêng biệt cho mỗi môi trường, nhưng bạn có thể tạo bao nhiêu vault tùy thích và bạn có thể sử dụng bất kỳ số nhận dạng nào bạn chọn làm ID vault.

Bây giờ để xem, chỉnh sửa hoặc giải mã các file này, bạn cần cung cấp cùng một nguồn password và ID vault cùng với lệnh ansible-vault :

  • ansible-vault edit credentials_dev.yml --vault-id dev@prompt

Sử dụng file password

Nếu bạn cần tự động hóa quy trình cung cấp server với Ansible bằng cách sử dụng công cụ của bên thứ ba, bạn cần một cách để cung cấp password vault mà không cần được yêu cầu nhở. Bạn có thể thực hiện bằng cách sử dụng tệp password với ansible-vault .

Tệp password có thể là file văn bản thuần túy hoặc tập lệnh thực thi. Nếu file là một tập lệnh thực thi, kết quả do tập lệnh này tạo ra sẽ được sử dụng làm password vault. Nếu không, nội dung thô của file sẽ được sử dụng làm password vault.

Để sử dụng file password với ansible-vault , bạn cần cung cấp đường dẫn đến file password khi chạy bất kỳ lệnh nào trong vault:

  • ansible-vault create --vault-id dev@path/to/passfile credentials_dev.yml

Ansible không phân biệt giữa nội dung được mã hóa bằng cách sử dụng prompt hoặc file password làm nguồn password , miễn là password đầu vào giống nhau. Về mặt thực tế, điều này nghĩa là có thể mã hóa file bằng phương thức prompt và sau đó sử dụng file password để lưu trữ cùng một password được sử dụng với phương pháp prompt . Điều ngược lại cũng đúng: bạn có thể mã hóa nội dung bằng file password và sau đó sử dụng phương pháp prompt , cung cấp cùng một password khi được Ansible nhắc.

Để tăng tính linh hoạt và bảo mật, thay vì lưu trữ password vault trong một file văn bản thuần túy, bạn có thể sử dụng tập lệnh Python để lấy password từ các nguồn khác. Kho lưu trữ Ansible chính thức chứa một vài ví dụ về các tập lệnh vault mà bạn có thể sử dụng để tham khảo khi tạo một tập lệnh tùy chỉnh phù hợp với nhu cầu cụ thể của dự án của bạn .

Chạy Playbook với dữ liệu được mã hóa qua Ansible Vault

Khi nào bạn chạy một playbook sử dụng dữ liệu đã được mã hóa trước đó qua ansible-vault , bạn cần cung cấp password vault cho lệnh playbook của bạn .

Nếu bạn đã sử dụng các tùy chọn mặc định và nguồn password prompt khi mã hóa dữ liệu được sử dụng trong playbook này, bạn có thể sử dụng tùy chọn --ask-vault-pass để Ansible nhắc bạn nhập password :

  • ansible-playbook myplaybook.yml --ask-vault-pass

Nếu bạn đã sử dụng file password thay vì nhắc nhập password , bạn nên sử dụng tùy chọn --vault-password-file để thay thế:

  • ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py

Nếu bạn đang sử dụng dữ liệu được mã hóa theo ID vault, bạn cần cung cấp cùng ID vault và nguồn password mà bạn đã sử dụng khi mã hóa dữ liệu lần đầu tiên:

  • ansible-playbook myplaybook.yml --vault-id dev@prompt

Nếu sử dụng file password với ID vault của bạn, bạn nên cung cấp nhãn theo sau là đường dẫn đầy đủ đến file password làm nguồn password :

  • ansible-playbook myplaybook.yml --vault-id dev@vault_password.py

Nếu trò chơi của bạn sử dụng nhiều --vault-id , bạn nên cung cấp tham số --vault-id cho từng --vault-id , không theo thứ tự cụ thể:

  • ansible-playbook myplaybook.yml --vault-id dev@vault_password.py --vault-id test@prompt --vault-id ci@prompt

Gỡ lỗi

Nếu bạn gặp lỗi khi thực hiện lệnh Ansible và sách phát, bạn nên tăng độ dài kết quả để có thêm thông tin về sự cố. Bạn có thể thực hiện bằng cách thêm tùy chọn -v vào lệnh:

  • ansible-playbook myplaybook.yml -v

Nếu bạn cần thêm chi tiết, bạn có thể sử dụng -vvv và điều này sẽ làm tăng độ chi tiết của kết quả . Nếu bạn không thể kết nối với các node từ xa qua Ansible, hãy sử dụng -vvvv để nhận thông tin gỡ lỗi kết nối:

  • ansible-playbook myplaybook.yml -vvvv

Kết luận

Hướng dẫn này bao gồm một số lệnh Ansible phổ biến nhất mà bạn có thể sử dụng khi cấp phép server , chẳng hạn như cách thực thi lệnh từ xa trên các node của bạn và cách chạy sách phát bằng nhiều cài đặt tùy chỉnh.

Có các biến thể lệnh và cờ khác mà bạn có thể thấy hữu ích cho quy trình làm việc Ansible của bạn . Để biết tổng quan về tất cả các tùy chọn có sẵn, bạn có thể sử dụng lệnh trợ giúp :

  • ansible --help

Nếu bạn muốn có một cái nhìn toàn diện hơn về Ansible cũng như tất cả các lệnh và tính năng có sẵn của nó, vui lòng tham khảo tài liệu chính thức của Ansible .


Tags:

Các tin liên quan