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_useransible_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!

Comments