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 texttrong 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-vaultsẽ 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 dev và prod 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 .
Các tin liên quan

