Ansible là gì ?
Ansible là một platform opensource, nghĩa là bạn có thể viết thêm hay chỉnh sửa tuỳ ý. Ansible khá đơn giản để sử dụng. Nôm na bạn có thể hình dung là chỉ việc khai báo địa chỉ server và những điều muốn làm với server đó vào ansible, rồi sau đó chỉ cần chạy script bạn vừa viết trên và ngồi uống trà chờ hoàn thành.Thành Phần Trong Ansible
Cái này cũng khá nhiều nhưng về cơ bản thì có các phần sau:- Playbooks - Là nơi bạn sẽ khai báo kịch bản chạy cho server nơi chứa các Task của chúng ta, nếu bạn muốn thực hiện cùng các nhiệm vụ đó trên nhiều con server thì bạn chỉ cần liệt kê tên server hay tên group server. Khai báo tên server hay group server sẽ nằm trong phần Inventory nhé.
- Task 1: Chạy lệnh ngày
- Task 2: Chạy file Script
- Tasks - Là những công việc nhỏ trong cuốn sổ Playbooks trên
- Inventory - Khai báo địa chỉ server cần được setup
#Local Test [all:vars] ansible_user='ubuntu' #Username may thuc thi ansible_become='yes' #Chay commands nhu la root ansible_become_pass='{{ my_user_password }}' # Mat khau cho sudo user ansible_become_method='sudo' #Su dung sudo de thuc thi nhu la root [lanhosts] 192.168.194.132Ban sẻ chú ý thấy rằng [lanhosts] mà mình khai báo ở trên sẻ là group server còn phí dưới là địa chỉ IP của từng server, đối với server window, Ansible cung cấp kiểu connect là winrm. Bên cạnh đó cách khai báo password cũng khác với Linux. Ở window sẽ sử dụng param ansible_ssh_pass, còn linux là ansible_password.
- Modules - Những chức năng hỗ trợ cho việc thực thi tasks dễ và đa dạng
- System: Bao gồm các module như User, Group, Hostname, Systemd, Service, v.v...
- Commands: Thường có module con như Command, Expect, Raw, Script, Shell, v.v...
- Files: Các module làm việc với file như Copy, Find, Lineinfile, Replace, v.v...
- Database: Ansbile cũng support mạnh mẽ những module làm việc với DB như Mongodb, Mssql, Mysql, Postgresql, Proxysql, v.v...
- Cloud: Ansible cũng không quên kết hợp với các dịch vụ clound nổi tiếng như Amazon, Google, Docker, Linode, VMware, Digital Ocean, v.v...
- Windows: Mạnh mẽ với những module như win_copy, win_command, win_domain, win_file, win_shell
- Variables - Cũng như các đoạn mã lập trình khác thì đây là nơi chứa biến
- Conditions - Cho phép thực hiện chạy lệnh với điều khiện thực hiện bằng Where
- Loops - Nó giống như vòng lặp trong các đoạn code bình thường.
--- - hosts: lanhosts tasks: - name: Get date for testing purpose command: /bin/date changed_when: False register: date - debug: var={{ item }} with_items: - date.stdout
- Roles - Nó sẻ giúp bạn phân chia khu vực với các nhiệm vụ riêng biệt.
sudo apt-get update && sudo apt-get upgradeKiểm tra gói Package Ansible bằng lệnh
sudo apt-get search ansible sudo apt-get show ansible sudo apt-get install ansibleSau khi đã cài đặt ta thực hiện check version Ansible coi đã cài đặt hoàn tất chưa
ansible --version
Tiếp đến chúng ta bắt đầu thực hiện tạo file SSH Key của máy của chúng ta, tại sao phải tạo file này, đơn giản khi bạn connect SSH đến 1 máy Ubuntu thông thường việc đầu tiên nó sẻ hỏi Pass của chính bạn, tiếp đến sẻ là Pass của User đó, nhưng Ansible lại chạy trên nền SSH vì vậy phải thực hiện xuất file Pass SSH của máy mình dưới dạng mã hóa để khi truy cập đến máy thực thi ta không còn yêu cầu Password nữa, để làm điều này ta bắt đầu thực hiện các vấn đề sau
Tạo File SSH Key của chính bạn
ssh-keygen -t ed25519 -C "My SSH Key"Trong đó ssh-keygen là phương thức tạo file mã hóa Pass của chúng ta và ed25519 là chuẩn mã hóa, sau khi enter nó sẻ tạo 2 file trong máy
Để có thể truy cập đến máy thực thi ta phải sao chép file Pass Mã hóa của chúng ta đến máy thực thi bằng câu lệnh sau, file ta cần chép sẻ là file id_ed25519.pub
ssh-copy-id -i $HOME/.ssh/id_ed25519.pub [email protected]User là ubuntu và 192.168.194.132 là IP của máy thực thi, ở máy thực thi sau khi copy key của mình xong sẻ có dòng key mã hóa này
ok ta sẻ bắt đầu test thử bằng cách ssh vào máy thực thi như bình thường
ssh [email protected]Awesome ! bạn sẻ thấy rằng nó không còn yêu cầu Pass khi truy cập ssh nữa Tiếp đến ta sẻ tạo một file inventory với lệnh
sudo vi inventorytrong khung edit write điền vào địa chỉ IP của máy thực thi lệnh giống như trong hình cho file inventory
thực hiện test thử khi chạy 2 lệnh 'uptime' và 'lsb_release -a' để thấy được thời gian và hệ điều hành của máy: (-m là loại module, -k là nhập password, , -u là user, -i là đường dẫn host define)
ansible -u ubuntu -i inventory -m raw -a 'uptime' lanhosts ansible -u ubuntu -i inventory -m raw -a 'lsb_release -a' lanhostsTôi bắt đầu tạo 1 file date.yml vì đây là 1 file Playbook nên đuôi của nó là yml với nội dung như sau, các bạn nên cẩn trọng vì mọi dấu cách hoặc dấu phẩy cũng khiến cho file Playbook không thể thực thi được, ở trong file date.yml này tôi đã sử dụng phần Loops để giải quyết vấn đề, nếu như cách thông thường thì bạn sẻ viết file như thế này
cho từng service nhưng làm điều đó rất lâu, vì cài đặt nhiều gói services ở đây vì thế mình đã tích hợp luôn sẵn phần Loops mình đã giới thiệu ở đầu bài để thực hiện cho công việc dễ dàng hơn và con script nhìn đẹp mắt hơn. bởi Ansible có hỗ trợ tại sao ta không sử dụng nó chứ đúng không hehe
Ok quay lại ở trên ta đã khai báo về máy thực thi với file inventory các thông tin cơ bản cũng như IP và đã có 1 file Playbook date.yml bây giờ ta bắt đầu build thử ta sẻ được kết quả như hình bên dưới
Tôi sẻ thêm vài thông tin máy chủ vào file inventory như sau để việc thực thi file một cách bảo mật hơn cho việc quản lý các máy thực thi:
trong đó phần ansible_become_pass='{{ my_user_password }}' để chúng ta điền password của máy thực thi file còn không chúng ta có thể để ansible_become_pass='MyPassword' nhưng như vậy thì thật sự quá tệ và kém bảo mật, nên vì thế ta thực hiện lệnh mã hóa để tạo file password.yml
File passwords.yml là file chứa pass root của máy thực thi khi ta bấm lệnh tạo ở trên nó sẻ yêu cầu tạo password, pass này là password bảo vệ file passwords.yml sau khi đã nhập password bảo vệ file passwords.yml ta sẻ viết 1 dòng lệnh chứa passwords root của máy thực thi và đơn nhiên pass này sẻ được mã hóa chèn đoạn code sau vào trong file passwords.yml
my_user_password: chỗ này là password root của máy thực thita cùng xem file passwords.yml sau khi tạo sẻ như thế nào nhé như vậy dòng lệnh ở trên đã được mã hóa và ta không còn thấy pass root của máy thực thi nữa
Tuyệt vời toàn bộ đã được mã hóa coi bộ khá bảo mật, bắt đầu chạy dòng lệnh sau để thực hiện Playbook date.yml nó sẻ yêu cầu bạn nhập password bảo vệ file passwords.yml
Ok như vậy đã xong phần Test thử và làm quen với Ansible
0 Comments
Vài lời muốn nói:
* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.
* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.
* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.