Ansible cung cấp nhiều cách thức tuyệt vời để lọc dữ liệu, giúp người dùng viết ra những task hiệu quả và dễ dàng hơn. Ở bài viết trước mình đã đề cập đến tính năng block và rescue của Ansible, ngoài ra mình còn sử dụng selectattr
rất nhiều để lọc dữ liệu dạng danh sách dựa trên 1 vài thuộc tính nhất định.
Trong bài này, hãy cùng mình đi qua 1 vài ví dụ để hiểu cách sử dụng selectattr
nhé.
Xem thêm: [Ansible] Ansible Role
Ví dụ 1 – Sử dụng bộ lọc selectattr trong Ansible
Playbook:
- name: Simple selectattr filter example
hosts: localhost
gather_facts: no
vars:
fruits:
- name: apple
color: red
- name: banana
color: yellow
- name: cherry
color: red
tasks:
- name: Display red fruits
debug:
msg: "{{ item.name }} is red."
loop: "{{ fruits | selectattr('color', 'equalto', 'red') | list }}"
Kết quả:
PLAY [Simple selectattr Filter Example] *******************************
TASK [Display red fruits] *****************************************
ok: [127.0.0.1] => (item={'name': 'apple', 'color': 'red'}) => {
"msg": "apple is red."
}
ok: [127.0.0.1] => (item={'name': 'cherry', 'color': 'red'}) => {
"msg": "cherry is red."
}
PLAY RECAP ********************************************************
127.0.0.1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Giải thích:
loop: "{{ fruits | selectattr('color', 'equalto', 'red') | list }}"
– dòng này định nghĩa 1 vòng lặp mà duyệt qua các phần tử là “fruits” có màu “đỏ”selectattr('color', 'equalto', 'red')
– lọc danh sách đầu vào với tiêu chí là “color” và giá trị bằng “red”|
– “pipe symbol”, thường được sử dụng trong Linux để nối tiếp lệnhlist
– chuyển đổi đầu ra của bộ lọc trước đó của selectattr từ iterable object thành list object
Xem thêm: Tự xây dựng hệ thống CI/CD cùng Ansible, Docker và Drone
Ví dụ 2 – Tạo 1 List mới trong Ansible playbook
Playbook:
- name: Simple selectattr Filter Example
hosts: localhost
gather_facts: no
vars:
fruits:
- name: apple
color: red
- name: banana
color: yellow
- name: cherry
color: red
tasks:
- name: Create a list of red fruits
set_fact:
red_fruits: "{{ fruits | selectattr('color', 'equalto', 'red') | list }}"
- name: Display red fruits
debug:
var: red_fruits
Kết quả:
PLAY [Simple selectattr Filter Example] **********************************
TASK [Create a list of red fruits] *******************************************
ok: [127.0.0.1]
TASK [Display red fruits] **********************************************
ok: [127.0.0.1] => {
"red_fruits": [
{
"color": "red",
"name": "apple"
},
{
"color": "red",
"name": "cherry"
}
]
}
PLAY RECAP **************************************
127.0.0.1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Trong ví dụ trên, ta sử dụng bộ lọc selectattr
để tạo 1 danh sách gọi là red_fruits
chứa thông tin về các trái cây có màu đỏ.
Ví dụ 3 – Tạo 1 list mới nhưng với thuộc tính tùy chọn
Playbook:
- name: Simple selectattr and map Filter Example
hosts: localhost
gather_facts: no
vars:
fruits:
- name: apple
color: red
- name: banana
color: yellow
- name: cherry
color: red
tasks:
- name: Create a list of red fruit names
set_fact:
red_fruit_names: "{{ fruits | selectattr('color', 'equalto', 'red') | map(attribute='name') | list }}"
- name: Display red fruit names
debug:
var: red_fruit_names
Trong ví dụ này, ta sử dụng thêm bộ lọc map
để lấy thông tin về “name” bằng cú pháp map(attribute='name')
.
Kết quả:
PLAY [Simple selectattr and map Filter Example] **********************************
TASK [Create a list of red fruit names] *************************************
ok: [127.0.0.1]
TASK [Display red fruit names] ******************************************
ok: [127.0.0.1] => {
"red_fruit_names": [
"apple",
"cherry"
]
}
PLAY RECAP *********************************
127.0.0.1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Tổng kết
Hy vọng qua bài viết này, các bạn có thể phần nào hiểu được cách thức sử dụng 1 công cụ rất thông dụng trong ansible playbook là selectattr
.
Chúc các bạn luôn may mắn và thành công trong công việc!
Một số bài viết liên quan có thể bạn sẽ thích:
- Sử dụng Ansible để cài đặt và thiết lập Docker trên Ubuntu 18.04
- Sử dụng Ansible để cài đặt và thiết lập Docker trên Ubuntu 20.04
- Top 10 tips khi sử dụng Ansible
- Hướng dẫn cài đặt Kubernetes trên CentOS 7 tự động hoá với Ansible
- Tự động hóa các tác vụ Kubernetes với Ansible module
- Tự động hóa PostgreSQL với Ansible
Mọi thắc mắc xin hãy liên hệ
Email: [email protected]
(Nguồn: wiki.nhanhoa.com)