Ansible - Các biến

Biến trong sách vở là very similarđể sử dụng các biến trong bất kỳ ngôn ngữ lập trình nào. Nó giúp bạn sử dụng và gán một giá trị cho một biến và sử dụng nó ở bất kỳ đâu trong playbook. Người ta có thể đặt các điều kiện xung quanh giá trị của các biến và theo đó sử dụng chúng trong playbook.

Thí dụ

- hosts : <your hosts> 
vars:
tomcat_port : 8080

Trong ví dụ trên, chúng tôi đã xác định một tên biến tomcat_port và gán giá trị 8080 cho biến đó và có thể sử dụng giá trị đó trong sổ chơi của bạn bất cứ khi nào cần.

Bây giờ lấy tham chiếu từ ví dụ được chia sẻ. Đoạn mã sau là từ một trong các vai trò (install-tomcat):

block: 
   - name: Install Tomcat artifacts 
      action: > 
      yum name = "demo-tomcat-1" state = present 
      register: Output 
          
   always: 
      - debug: 
         msg: 
            - "Install Tomcat artifacts task ended with message: {{Output}}" 
            - "Installed Tomcat artifacts - {{Output.changed}}"

Ở đây, đầu ra là biến được sử dụng.

Hãy để chúng tôi xem qua tất cả các từ khóa được sử dụng trong đoạn mã trên -

  • block - Cú pháp khả thi để thực thi một khối nhất định.

  • name - Tên liên quan của khối - tên này được sử dụng trong việc ghi nhật ký và giúp gỡ lỗi rằng tất cả các khối đã được thực thi thành công.

  • action- Đoạn mã bên cạnh thẻ hành động là tác vụ được thực thi. Hành động lại là một từ khóa Ansible được sử dụng trong yaml.

  • register - Đầu ra của hành động được đăng ký bằng cách sử dụng từ khóa thanh ghi và Đầu ra là tên biến chứa đầu ra của hành động.

  • always - Lại một từ khóa Ansible, nó nói rằng bên dưới sẽ luôn được thực thi.

  • msg - Hiển thị tin nhắn.

Cách sử dụng biến - {{Output}}

Điều này sẽ đọc giá trị của biến Output. Cũng như nó được sử dụng trong tab msg, nó sẽ in ra giá trị của biến đầu ra.

Ngoài ra, bạn cũng có thể sử dụng các thuộc tính phụ của biến. Giống như trong trường hợp kiểm tra {{Output.changed}} xem đầu ra có bị thay đổi hay không và sử dụng nó cho phù hợp.

Xử lý ngoại lệ trong Playbooks

Xử lý ngoại lệ trong Ansible tương tự như xử lý ngoại lệ trong bất kỳ ngôn ngữ lập trình nào. Dưới đây là một ví dụ về xử lý ngoại lệ trong playbook.

tasks: 
   - name: Name of the task to be executed 
      block: 
         - debug: msg = 'Just a debug message , relevant for logging' 
         - command: <the command to execute> 
      
      rescue: 
         - debug: msg = 'There was an exception.. ' 
         - command: <Rescue mechanism for the above exception occurred) 
      
      always: 
         - debug: msg = "this will execute in all scenarios. Always will get logged"

Sau đây là cú pháp để xử lý ngoại lệ.

  • rescuealways là các từ khóa cụ thể để xử lý ngoại lệ.

  • Block là nơi mã được viết (bất kỳ thứ gì được thực thi trên máy Unix).

  • Nếu lệnh được viết bên trong tính năng khối không thành công, thì việc thực thi sẽ đến khối cứu hộ và nó sẽ được thực thi. Trong trường hợp không có lỗi trong tính năng lệnh dưới khối, thì việc giải cứu sẽ không được thực hiện.

  • Always được thực thi trong mọi trường hợp.

  • Vì vậy, nếu chúng ta so sánh tương tự với java, thì nó cũng tương tự để thử, bắt và cuối cùng là chặn.

  • Đây, Block tương tự như try block nơi bạn viết mã sẽ được thực thi và rescue tương tự như catch blockalways tương tự như finally.

Vòng lặp

Dưới đây là ví dụ để chứng minh cách sử dụng Loops trong Ansible.

Nhiệm vụ là sao chép tập hợp tất cả các tệp chiến tranh từ một thư mục vào thư mục ứng dụng web tomcat.

Hầu hết các lệnh được sử dụng trong ví dụ dưới đây đã được đề cập trước đó. Ở đây, chúng ta sẽ tập trung vào việc sử dụng các vòng lặp.

Ban đầu trong lệnh 'shell' chúng ta đã thực hiện ls * .war. Vì vậy, nó sẽ liệt kê tất cả các tập tin chiến tranh trong thư mục.

Đầu ra của lệnh đó được lấy trong một đầu ra có tên biến.

Để lặp lại, cú pháp 'with_items' đang được sử dụng.

with_items: "{{output.stdout_lines}}" -> output.stdout_lines cung cấp cho chúng ta đầu ra từng dòng và sau đó chúng ta lặp lại đầu ra bằng lệnh with_items của Ansible.

Việc đính kèm đầu ra ví dụ chỉ để làm cho người ta hiểu cách chúng tôi đã sử dụng stdout_lines trong lệnh with_items.

--- 
#Tsting 
- hosts: tomcat-node 
   tasks: 
      - name: Install Apache 
      shell: "ls *.war" 
      register: output 
      args: 
         chdir: /opt/ansible/tomcat/demo/webapps 
      
      - file: 
         src: '/opt/ansible/tomcat/demo/webapps/{{ item }}' 
         dest: '/users/demo/vivek/{{ item }}' 
         state: link 
      with_items: "{{output.stdout_lines}}"

Khối

Sách chơi tổng thể được chia thành các khối. Phần nhỏ nhất của các bước cần thực hiện được viết trong khối. Viết hướng dẫn cụ thể trong các khối giúp tách riêng chức năng và xử lý nó với xử lý ngoại lệ nếu cần.

Ví dụ về các khối được đề cập trong cách sử dụng biến, xử lý ngoại lệ và các vòng lặp ở trên.

Điều kiện

Các điều kiện được sử dụng khi người ta cần chạy một bước cụ thể dựa trên một điều kiện.

--- 
#Tsting 
- hosts: all 
   vars: 
      test1: "Hello Vivek" 
   tasks: 
      - name: Testing Ansible variable 
      debug: 
         msg: "Equals" 
         when: test1 == "Hello Vivek"

Trong trường hợp này, Equals sẽ được in ra vì biến test1 là bằng như đã đề cập trong điều kiện when. when có thể được sử dụng với điều kiện logic OR và logic AND như trong tất cả các ngôn ngữ lập trình.

Chỉ cần thay đổi giá trị của biến test1 từ Hello Vivek thành Hello World và xem kết quả.