Skip to content
OMZ logo

Back to ansible

Các thuật ngữ trong Ansible [Part 1]

Đặng Văn Đại

@daikk115

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!