Các thuật ngữ trong Ansible [Part 1]
Thực ra, với một vài nhu cầu cơ bản nhưng thực hiện song song trên nhiều node thì việc sử dụng Ansible Ad-Hoc với module shell như ở bài trước là cũng đủ để giảm tải kha khá cho anh em sysadm rồi ^^.
Tuy nhiên, Ansible nó thực sự tuyệt vời hơn thế nhiều!
Thật vậy, sau đây là một số thuật ngữ chính nhất để phục vụ các bạn trong hầu hết các trường hợp. Các bạn xem qua mấy định nghĩa này trước khi tiếp tục thử nghiệm các chiêu thức mới của Ansible ở các bài tiếp sau nhé!
Các định nghĩa ở đây được mình rút gọn để đơn giản nhất, ở các bài sau mình sẽ bổ sung để các bạn tự mở rộng sau.
Ad Hoc
- Nói đến việc thực thi nhanh các câu lệnh tới các server thông qua lệnh ansible thay vì viết playbook và chạy với ansible-playbook.
Inventory
- Là file text
- Định dạng mặt định là INI (https://en.wikipedia.org/wiki/INI_file) - là định dạng phổ biển của các file config hiện nay
- Chứa thông tin kết nối và các thông tin khác của remote server như IP, user, password,...
Host
- Là đối tượng remote server với các thông tin của nó
Group
- Là nhóm các server có điểm chung (ví dụ như: có tập lệnh tác động giống nhau)
Định dạng INI thường gặp
[section1]
name=value
[section2]
name2=value2
Với định dạng INI, file inventory của Ansible sẽ trông như sau
[webserver_group]
10.11.12.1 ansible_user=test ansible_password=secret
10.11.12.2 ansible_user=test ansible_password=secret
[database_group]
10.11.12.3 ansible_user=test ansible_password=secret
10.11.12.4 ansible_user=test ansible_password=secret
Variable
- Là tên đại diện cho các giá trị (integers, booleans, strings, dictionaries/hashes, lists) - tương tự trong các ngôn ngữ lập trình
- Sử dụng được trong playbook và template
- ansible_user, ansible_password là các biến
Template
- Là file mẫu
- Là các file chưa hoàn thiện, còn thiếu phần giá trị của các biến trong đó, khi thực thi ansible sẽ được hoàn thiện
- Là Jinja2 template
Task
- Một câu lệnh, 1 tập lệnh,... với các biến đầu vào và đầu ra mong muốn
Play
- Có task rồi, các task chạy ở đâu, chạy các task theo thứ tự như thế nào --> đó là các thông tin của 1 Play
Playbook
- Đây là orchestration language của Ansible
- Định dang: YAML
- Là tập hợp của nhiều play, có thể viết trên một hoặc nhiều file rồi import lẫn nhau
Ví dụ về ansible playbook
// Play 01
- hosts: group1, group2 <----- List hosts and groups
gather_facts: false
tasks:
- shell: ls -la <--------- Task 01
register: output
- debug: <--- Task 02
msg: "{{ output.stdout_lines }}"
// Play 02
- hosts: group2, group3
gather_facts: false
tasks:
- shell: lscpu <--------- Task 03
Module
- Là khối xử lý hành động của task với các tham số
- Là các hành động đã được viết sẵn để người dùng tái sử dụng (viết bởi Ansible hoặc người dùng tự phát triển)
- Hỗ trợ các hành động giữa local server và remote server như: copy, rsync,...
- Tối ưu các thực thi, giảm thiểu exception khi người dùng tự viết command thực thi (shell cũng là một module)
Thay vì viết play riêng cho Ubuntu
- hosts: group1
gather_facts: false
become: yes
tasks:
- shell: apt install apache2
Thay vì viết play riêng cho CentOS
- hosts: group1
gather_facts: false
become: yes
tasks:
- shell: yum install apache2
Hãy viết một play cho tất cả, việc phát hiện OS đã có Ansible lo
- hosts: group1
gather_facts: false
tasks:
- name: install apache2
package:
name: apache2
state: present
Ok, trên đây là các khái niệm cơ bản nhất để chúng ta bắt tay vào thi triển các chiêu thức mới hơn của Ansible. Go Ahead!