ansible_facts.packages
là một biến được tự động tạo ra bởi Ansible sau khi thực hiện module setup
trên remote host. Biến này chứa danh sách các gói đã được cài đặt trên hệ thống.
Bạn có thể sử dụng biến này trong các tác vụ Ansible để kiểm tra xem một gói nào đó đã được cài đặt trên hệ thống hay chưa.
Ví dụ 1, để kiểm tra xem gói nginx
đã được cài đặt trên hệ thống hay chưa, bạn có thể sử dụng điều kiện when
như sau:
- name: Install nginx
apt:
name: nginx
state: latest
when: "'nginx' not in ansible_facts.packages"
Trong ví dụ này, tác vụ Ansible sẽ chỉ được thực hiện khi gói nginx
chưa được cài đặt trên hệ thống. Nếu gói nginx
đã được cài đặt, tác vụ sẽ bị bỏ qua.
Ví dụ 2, bạn có thể sử dụng điều kiện when
để kiểm tra điều kiện nào đó trước khi thực hiện tác vụ apt
để cài đặt hoặc gỡ bỏ Docker. Ví dụ, nếu bạn muốn thực hiện tác vụ cài đặt Docker khi Docker chưa được cài đặt trên hệ thống và thực hiện tác vụ gỡ bỏ Docker khi Docker đã được cài đặt trên hệ thống, bạn có thể sử dụng playbook như sau:
- name: Install or remove Docker
hosts: all
become: yes
tasks:
- name: Install Docker
apt:
name: docker-ce
state: latest
when: "'docker-ce' not in ansible_facts.packages"
- name: Remove Docker
apt:
name: docker-ce
state: absent
when: "'docker-ce' in ansible_facts.packages"
Trong playbook này, tác vụ Install Docker
chỉ được thực hiện khi gói docker-ce
chưa được cài đặt trên hệ thống ('docker-ce' not in ansible_facts.packages
). Tương tự, tác vụ Remove Docker
chỉ được thực hiện khi gói docker-ce
đã được cài đặt trên hệ thống ('docker-ce' in ansible_facts.packages
). Lưu ý rằng ansible_facts.packages
là một danh sách các gói đã được cài đặt trên hệ thống.