[10 phút ][Ansible] [Cơ bản] [Phần 3] Hướng dẫn sử dụng ad-hoc command trong ansible

30/12/2020
Chưa phân loại

Trong phần 1phần 2 ở bài trước, Onet đã hướng dẫn bạn cách cài đặt và thử nghiệm với ansible. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn dùng ansible với cơ chế của ad-hoc command để bước đầu phát huy khả năng của ansible trong việc quản lý cấu hình, quản lý ha tầng của bạn.

Như đã đề cập ở mục cuối trong phần 02, sau khi cài đặt ansible xong ta có thể thực hiện một số câu lệnh mà ansible đã hỗ trợ. Việc thực hiện từng câu lệnh đơn như vậy chính là chế độ ad-hoc của ansible.

Với chế độ ad-hoc command mà ansible cung cấp, chúng ta sẽ thực hiện các task đơn (các yêu cầu thực hiện độc lập) để ra lệnh cho hạ tầng (các client được quản lý bởi ansible) thực hiện các yêu cầu rời rạc khi quản lý các client. Tại sao lại dùng ad-hoc command và dùng nó khi nào? Trong phần tiếp theo sẽ lấy các ví dụ cho trường hợp này.

1. Tại sao lại dùng ad-hoc command trong ansible?

Khi vận hành hệ thống, bạn thường xuyên phải lặp đi các thao tác rất cơ bản ví dụ như:

  • Cần phải khởi động lại OS
  • Cần phải khởi động lại mysql hoặc đơn giản là cần phải update các gói phần mềm phổ thông (VIM, WGET ….) trên hàng loạt các máy chủ khác nhau (CentOS, Ubuntu …).
  • Hoặc phải kiểm tra trạng thái của các services chẳng hạn.
  • Hoặc phải thực hiện thao tác copy một file nào đó.
  • Hoặc xem nội dung của file log nào đó.

Nếu ta có 1 vài máy chủ thì các thao tác này rất đơn giản, nhưng giả sử ta cần thực hiện trên hàng chục máy chủ một lúc thì chế độ ad-hoc command của ansible bắt đầu phát huy tác dụng ở đây. Nó sẽ giúp tiết kiệm được thời gian và công sức khi thực hiện các task này trên hàng loạt các máy trong hạ tầng của chúng ta.

2. Thực hành ad-hoc command trong ansible

Trong bài lab này, ta sẽ sử dụng lại mô hình của phần 02 của chuỗi bài viết về ansible này. Do vậy để thực hiện bài lab này thì ta cần thực hiện bài lab số 2 trước.

Mô hình

IP Planning

Tiếp theo nội dung của bài 02, ta sẽ có thông tin của các host client sau khi cấu hình key-pair ở file /root/.ssh/known_hosts giống như bên dưới.

192.168.80.122 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIO4a8+i/NJBSxF/YKfZ+0zxDThfr6H3aZeXmT7oOq8Dd5sR8KDJhWWl2U6c7jwdP1dOwYtuXYn338j0JV/uo5Y= 192.168.80.123 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqhSkFMYnbIOMz1q3hCOlR26ZCN6h3qqhae2Bk408RK/vyJAC8vPWTqr+Aq0js5JPhtXmYqjp7CTc4euogMR4npNegGgBe87qp0vfnbyRBt4cjVtZo+BVEZUjpjGZrfKNpSQV4MNN58x3WGnaeA3hR+RIsNWV7fdkYKeymf3LG3RopMZzzrTAc1m5LRTI5UBHFX+pxlzV1rNDfrj+kNrpn+BwP22PTc1uT7UDxZq/oGUylxlxBpf+EEhFt4fZ8O5PKE12gC8/5pelNZSB/BiVzMKWP1Wh8qWa9Xs8XMNR7YlE9q3snI1J6H7neTqj0BQ/MuobvQTRPP+PI2krMs/OKw== 192.168.80.124 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPoInuCZJNW4cD2BWkwbbp1gN8XACVFjPGe7IC8kXMjebAW8aHXp2ov+XAU1JveDjknLu0LrEDga3azAqiJDROM= 192.168.80.125 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHoT4uUU+zMq5SjYVpFBOUrMXshdhrePdjWYozrJ2GWmdqww78HsjK18djyMGVMz+E6/HI6IijPyUA7D4iqruj0=

Nội dung của file /etc/ansible/hosts sẽ có dạng

192.168.80.122  [centos6] 192.168.80.123  [ubuntu] 192.168.80.124 192.168.80.125

Thực hiện kiểm tra lại các cấu hình của ansible để xem ansibleserver đã kết nối với client hay chưa.

ansible all --list-hosts

Kết quả như sau là ok

[root@ansibleserver ~]# ansible all --list-hosts   hosts (4):     192.168.80.122     192.168.80.123     192.168.80.124     192.168.80.125

3. Thực hiện các câu lệnh ad-hoc

Trong hướng dẫn này chỉ giới thiệu một số cách thực thi ansible theo dạng ad-hoc command cho một số trường hợp cơ bản, trong thực tế thì bạn có thể vận dụng thêm các lệnh khác. Các lệnh này sẽ được tra cứu trên trang của của ansible.

Cú pháp chung của ad-hoc command trong ansible là

ansible [pattern] -m [module] -a "[module options]"

3.1 Thực hiện kiểm tra dung lượng RAM của client

Cú pháp

ansible all -a "free -m"

Ta sẽ có kết kết của RAM trên tất cả các client

Ta có thể thay từ all bằng từ centos6 hoặc ubuntu trong file inventory của ansible đã được khai báo ở phần trước. Kết quả như sau:

3.2. Thực hiện reboot hàng loạt các client

Giả sử trong hàng chục client cần quản lý, có một điều kiện sau khi update thì ta phải reboot các máy chủ là với hệ điều hành là Ubuntu. Việc này cũng dễ dàng thực hiện bởi ad-hoc command của ansible.

Với bài lab này, ra có thể thực hiện lệnh sau. Lưu ý ta sẽ chọn host group là ubuntu trong trường hợp này, nếu bạn chọn là all thì toàn bộ các máy trong file inventory mà ansible quản lý sẽ bị reboot.

ansible ubuntu -a "init 6"

Kết quả ta sẽ thấy.

3.3. Thực hiện cài đặt gói ứng dụng hàng loạt

Có một số task vụ cài đặt đơn lẻ (Ví dụ cài đặt apache hoặc cài đặt VIM) trên nhiều client. Với yêu cầu này cũng có thể dùng ad-hoc command của ansible để triển khai.

Ví dụ dưới sẽ thực hiện cài đặt apache trên các máy có hệ điều hành là Ubuntu trong bài lab này.

ansible ubuntu -m apt -a "name=apache2 state=latest"

Trong ad-hoc command này ta sẽ sử dụng module apt mà ansible đã hỗ trợ sẵn cho ubuntu. Trong quá trình cài đặt ta sẽ thấy thông báo như bên dưới trên phía ansibleserver. Lưu ý module apt chỉ support đối với Ubuntu.

[root@ansibleserver ~]# ansible ubuntu -m apt -a "name=apache2 state=latest" 192.168.80.124 | CHANGED => {     "ansible_facts": {         "discovered_interpreter_python": "/usr/bin/python3"     },     "cache_update_time": 1578034386,     "cache_updated": false, .... .... 192.168.80.125 | CHANGED => {     "ansible_facts": {         "discovered_interpreter_python": "/usr/bin/python3"     },     "cache_update_time": 1578034682,     "cache_updated": false,     "changed": true, 

Ta có thể kiểm tra lại xem apache đã được cài trên nhóm ubuntu hay chưa bằng lệnh ansible ubuntu -a "apache2 -v". Kết quả ta sẽ thấy như bên dưới.

[root@ansibleserver~]# ansible ubuntu -a "apache2 -v" 192.168.80.124 | CHANGED | rc=0 >> Server version: Apache/2.4.18 (Ubuntu) Server built:   2019-10-08T13:31:25  192.168.80.125 | CHANGED | rc=0 >> Server version: Apache/2.4.29 (Ubuntu) Server built:   2019-09-16T12:58:48

Sau đó có thể truy cập vào các máy ubuntu để kiểm tra xem apache đã được cài đặt hay chưa.

Ta cũng có thể thử nghiệm việc cài đặt VIM trên toàn bộ các client bằng lệnh .

 ansible all -m apt -a "name=vim state=latest"

Ta sẽ có kết quả như bên dưới.

Ta sẽ thấy có thông báo lỗi ở 02 client 192.168.80.122 và 192.168.80.123, lý do là vì ta sử dụng module apt trong ansible nên với CentOS chúng sẽ không thực hiện và báo lỗi. Việc này sẽ không bị ảnh hưởng gì tới các máy CentOS cả.

3.4. Sử dụng ad-hoc command để thu thập thông tin của client

Ta có thể sử dụng lệnh dưới ở chế độ ad-hoc command để thu thập thông tin về các client được ansible quản lý.

ansible all -m setup

Ngoài các ad-hoc comamnd cơ bản trên, ta còn có thể sử dụng để thực hiện các nhiệm vụ khá hữu ích khác, ví dụ như tạo user, tạo file cho hàng loạt client. Hãy trải nghiệm tiếp để khá phá nhiều hơn về ansible bạn nhé.

Trong bài viết tiếp theo, Onet sẽ hướng dẫn bạn sử dụng ansible để viết một playbook đơn giản. Cách mà được rất nhiều anh/em dev, sysadmin, devops … sử dụng với ansible để tự động hóa và quản lý hạ tầng.

Cám ơn các bạn đã theo dõi.

ONET IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, ONET IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

Install and Get Started with .NET Core on Ubuntu

.NET Core is a high performance, free and open source software framework. It is developed by Microsoft. .NET Core is a...
29/12/2020

Debian 10 Release Date

Debian 10 buster released July 6th, 2019! After 25 months of development the Debian project is proud to present its new...
Chưa phân loại
28/12/2020

[10 phút ][Ansible] [Cơ bản] [Phần 3] Hướng dẫn sử dụng ad-hoc command trong ansible

Trong phần 1 và phần 2 ở bài trước, Onet đã hướng dẫn bạn cách cài đặt và thử nghiệm với...
Chưa phân loại
30/12/2020