Ansible - Thực thi nâng cao

Trong chương này, chúng ta sẽ tìm hiểu thực thi nâng cao với Ansible là gì.

Làm thế nào để hạn chế việc thực thi theo nhiệm vụ

Đây là một chiến lược thực thi rất quan trọng trong đó người ta chỉ cần thực hiện một lần thực hiện chứ không phải toàn bộ vở kịch. For example, giả sử bạn chỉ muốn dừng một máy chủ (trong trường hợp xảy ra sự cố sản xuất) và sau đó đăng áp dụng một bản vá mà bạn muốn chỉ khởi động máy chủ.

Ở đây trong playbook gốc, dừng và bắt đầu là một phần của các vai trò khác nhau trong cùng một playbook nhưng điều này có thể được xử lý bằng cách sử dụng các thẻ. Chúng tôi có thể cung cấp các thẻ khác nhau cho các vai trò khác nhau (lần lượt sẽ có các nhiệm vụ) và do đó, dựa trên các thẻ được cung cấp bởi người thực thi, chỉ vai trò / tác vụ được chỉ định mới được thực thi. Vì vậy, đối với ví dụ được cung cấp ở trên, chúng ta có thể thêm các thẻ như sau:

- {role: start-tomcat, tags: ['install']}}

Lệnh sau giúp sử dụng các thẻ:

ansible-playbook -i hosts <your yaml> --tags "install" -vvv

Với lệnh trên, chỉ role start-tomcat mới được gọi. Thẻ được cung cấp có phân biệt chữ hoa chữ thường. Đảm bảo khớp chính xác đang được chuyển đến lệnh.

Cách hạn chế việc thực thi bởi máy chủ

Có hai cách để thực hiện các bước cụ thể trên các máy chủ cụ thể. Đối với một vai trò cụ thể, người ta xác định các máy chủ - máy chủ cụ thể nào mà vai trò cụ thể đó sẽ được chạy.

Thí dụ

- hosts: <A> 
   environment: "{{your env}}" 
   pre_tasks: 
      - debug: msg = "Started deployment. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} " 
     
   roles: 
      - {role: <your role>, tags: ['<respective tag>']} 
   post_tasks: 
      - debug: msg = "Completed deployment. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}" 
 
- hosts: <B> 
   pre_tasks: 
      - debug: msg = "started.... 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} " 
        
   roles: 
      - {role: <your role>, tags: ['<respective tag>']} 
   post_tasks: 
      - debug: msg = "Completed the task.. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"

Theo ví dụ trên, tùy thuộc vào máy chủ được cung cấp, các vai trò tương ứng sẽ chỉ được gọi. Bây giờ các máy chủ A và B của tôi được xác định trong các máy chủ lưu trữ (tệp kiểm kê).

Giải pháp thay thế

Một giải pháp khác có thể là xác định máy chủ của playbook bằng cách sử dụng một biến, sau đó chuyển một địa chỉ máy chủ cụ thể qua --extra-vars -

# file: user.yml  (playbook) 
--- 
- hosts: '{{ target }}' 
   user: ... 
playbook contd….

Chạy Playbook

ansible-playbook user.yml --extra-vars "target = "<your host variable>"

Nếu {{target}} không được xác định, playbook không có tác dụng gì. Một nhóm từ tệp máy chủ cũng có thể được chuyển qua nếu cần. Điều này không có hại nếu các vars bổ sung không được cung cấp.

Playbook nhắm mục tiêu một máy chủ duy nhất

$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts