Muôn vàn kiểu cấu hình Host trong Ansible inventory

Muôn vàn kiểu cấu hình Host trong Ansible inventory

Inventory là nơi lưu trữ thông tin các đối tượng remote server với các khái niệm trong Ansible như Host, Group.

  • Default group trong ansible (các group khác do bạn tự định nghĩa tên):
    • all: tất cả các host nằm trong file inventory
    • ungrouped: các host chả thuộc group nào cả
  • Mỗi host có thể nằm ở nhiều group nhưng trong một group, không thể xuất hiện một host 2 lần
  • Cho phép cấu hình SSH thông qua root user hoặc normal user, yêu cầu quyền root thông qua sudo hoặc su
    • ansible_become_pass: Mật khẩu để lên quyền root
    • ansible_become: True/False 
    • ansible_become_method: su/sudo - cấu hình leo lên quyền root bằng cách su sang root hoặc sudo lên super user (default root)

Mỗi host một dòng và tất cả host nằm trong all group

Đơn giản nhất, nếu các server này đã được copy ssh key và có sự tác động giống nhau:

192.168.122.103
192.168.122.12

Nhiều host một dòng và tất cả host nằm trong all group

Tương tự như trên nhưng nếu các IP liên tục thì có thể sử dụng nhu bên dưới.

192.168.122.[12:103]

Còn đây là cấu hình cơ bản nhất với nhiều group để phần nhóm các loại servers

Cấu hình ra nhiều group sẽ rất tiện dụng khi play 01 tác động vào group1 và play 02 lại chỉ tác động vào group2. Trong khi đó cả 2 play đều được viết vào playbook.yml

[group1]
192.168.122.103 ansible_user=stack extend_variable='group1
192.168.122.104 ansible_user=stack extend_variable='group1' [group2] 192.168.122.12 ansible_user=stack extend_variable='group2
192.168.122.13 ansible_user=stack extend_variable='group2'

Hỗn hợp 03 loại cấu hình inventory trên

192.168.122.103 ansible_user=stack
192.168.122.12  ansible_user=stack

[group1] 192.168.122.104 ansible_user=stack
[group2] 192.168.122.13 ansible_user=stack
[other] 192.168.122.[12:15]

Cấu hình biến chung cho các host trong group

Các biến chung của các host cùng group có thể được cấu hình riêng ra một chỗ, giúp chúng ta dễ dàng hơn trong quản lý inventory.

Chỗ này dễ cực, thêm mỗi :vars vào sau thêm group và để riêng ra 1 chỗ

[group1:vars]
ansible_user=stack

[group1] 192.168.122.103
192.168.122.104
[group2:vars] ansible_user=stack [group2] 192.168.122.12
192.168.122.13

Cấu hình group của group

Có một số tác động sẽ cần thực hiện chung ở cả group1 và group2, một số lại riêng. Vậy là chúng ta có khái niệm group con để bổ trợ cho việc này, các host thuộc group cha sẽ tự động là thành viên của group con (group con to hơn group cha, con hơn cha là nhà có phúc ^^)

Chỗ này cũng đơn giản không kém, thêm :children vào sau tên group khi nó là tổ hợp từ các group khác

  • Các biến của group con (:children) sẽ có độ ưu tiên cao hơn (override) các biến trong group cha
  • Không chơi kiểu vòng tròn được, thành ra con ông cháu cha thì bỏ mịa
[group1]
192.168.122.103 ansible_user=stack
192.168.122.12  ansible_user=stack

[group2]
192.168.122.13  ansible_user=stack

[twogroup:children]
group1
group2

Dưới đây là một đoạn file inventory mà hình vẫn thường dùng để triển khai OpenStack ^^

[all:vars]
ansible_connection=ssh
ansible_ssh_port=22
ansible_ssh_user=monitor
[email protected]
[email protected]
ansible_become=true
ansible_become_method=su

[normal-compute:vars] 
nova_libvirt_cpu_mode=custom
nova_cpu_model=Broadwell

[highper-compute:vars]
nova_libvirt_cpu_mode=custom
nova_cpu_model=Skylake-Server

[controller] 
10.1.2.2
10.1.2.3
10.1.2.4 ansible_ssh_pass="[email protected]#"

[normal-compute]
10.1.2.5
10.1.2.6
10.1.2.7

[highper-compute]
10.1.2.8
10.1.2.9
10.1.2.10

[compute:children]
normal-compute
highper-compute

Note:

Ok. STOP, mình nghĩ Ansible inventory thế này là đủ cho hầu hết các trường hợp cơ bản, bạn có thể dành thời gian luyện tập sử dụng các module hay thi triển các chiêu thức mới của Ansible cho đỡ chán trước đã ^^

Appendix

Bao giờ rảnh và tò mò thêm về inventory, các bạn có thể tìm hiểu thêm ở đây: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

Đại khái là ngoài định dạng INI:

Posted on