Trong Ansible, các biến và sự kiện, cùng với các mẫu, là những công cụ nền tảng để tạo quy trình làm việc tự động hóa linh hoạt. Các biến cho phép bạn quản lý và thay đổi cấu hình của mình một cách linh hoạt. Sự kiện là một tập hợp con đặc biệt của các biến mà Ansible thu thập từ các hệ thống từ xa, cung cấp thông tin theo ngữ cảnh cụ thể.
Các mẫu cho phép tạo các tệp cấu hình có định hướng thay đổi, giúp sách giải trí của bạn có thể thích ứng với các môi trường và tình huống khác nhau.
Những công cụ này giúp sách giải trí có thể tái sử dụng và thích ứng, cho phép bạn tránh các giá trị mã hóa cứng và cho phép tùy chỉnh cho các môi trường khác nhau.
Các biến cho phép sửa đổi các tham số mà không làm thay đổi logic cốt lõi của playbook.
Boolean: Giá trị đúng hoặc sai.
Danh sách: Một tập hợp các mặt hàng được sắp xếp theo thứ tự.
Từ điển: Cặp khóa-giá trị cho cấu trúc dữ liệu phức tạp.
Biến đã đăng ký: Ghi lại kết quả của các tác vụ để sử dụng sau này trong sổ tay của bạn.
Sự thật: Các biến được thu thập tự động cung cấp thông tin chi tiết về hệ thống từ xa mà bạn đang quản lý.
Lưu ý: Tránh xung đột tên biến bằng cách sử dụng ký hiệu ngoặc.
- name: Print the distribution of the target hosts: all vars: curr_time: "{{ now() }}" tasks: - name: Distro Check ansible.builtin.debug: msg: "The target system is {{ ansible_facts['distribution'] }}. Timestamp: {{ curr_time }}"
Các mẫu trong Ansible sử dụng ngôn ngữ tạo khuôn mẫu Jinja2 để tự động tạo các tệp bằng cách sử dụng phép nội suy, vòng lặp và điều kiện có thể thay đổi.
- name: Write distro name hosts: all tasks: - name: Write distro name ansible.builtin.template: src: distro.j2 dest: /root/distro.txt mode: '644' # src: location of jinja2 template file # dest: location it will be copied to # permissions that will be granted to the file
Chúng tôi sẽ sử dụng Dòng hệ điều hành để xác định xem có nên cài đặt NGINX của Lighttpd hay không, sau đó, chúng tôi sẽ triển khai một trang chủ tùy chỉnh cho máy chủ từ xa có chứa NGINX mà không cần mã hóa tên máy chủ.
git clone https://github.com/perplexedyawdie/ansible-learn.git
2. Thay đổi thư mục thành các sự kiện và mẫu
cd ansible-learn/facts-and-templates
3. Cải thiện môi trường bằng docker-compose
docker compose up -d --build
4. SSH vào máy chủ Ansible
ssh -o StrictHostKeyChecking=no -o NoHostAuthenticationForLocalhost=yes root@localhost -p 2200 # password: test123
5. Tạo một playbook có tên server_setup.yaml
. Tại đây, chúng tôi sẽ thiết lập NGINX & Lighttpd, sau đó xuất tên của bản phân phối cho từng máy chủ từ xa.
- name: Install NGINX on Debian & Lighttpd on RedHat hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Install NGINX for Debian-based systems ansible.builtin.apt: name: nginx state: present when: ansible_facts['os_family'] == dev1 - name: Install Lighttpd for RedHat-based systems ansible.builtin.yum: name: lighttpd state: present when: ansible_facts['os_family'] == dev2 - name: Display the distribution ansible.builtin.debug: msg: "The server is running {{ ansible_facts['distribution'] }}"
6. Chạy ansible-lint.
ansible-lint server_setup.yaml
7. Chạy sổ tay.
ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml server_setup.yaml
8. Xác nhận rằng thiết lập đã thành công.
ssh -i /root/.ssh/id_rsa_ansible root@server3 nginx -V ssh -i /root/.ssh/id_rsa_ansible root@server2 lighttpd -v ssh -i /root/.ssh/id_rsa_ansible root@server1 lighttpd -v
9. Tạo tệp mẫu Jinja2 có tên là index.html.j2
Nó sẽ được tự động điền vào Hệ điều hành & Phân phối.
<html> <head> <title>Welcome to {{ ansible_facts['os_family'] }}</title> </head> <body> <h1>Server running on {{ ansible_facts['distribution'] }}</h1> </body> </html>
10. Tạo một playbook có tên custom_homepage.yaml.
Chúng tôi đang triển khai trang chủ tùy chỉnh được tạo ở trên cho NGINX sau đó khởi động lại máy chủ.
- name: Deploy Custom Homepage and restart hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Create Homepage with Jinja2 Template for NGINX ansible.builtin.template: src: index.html.j2 dest: /var/www/html/index.html mode: '644' when: ansible_facts['os_family'] == dev1 notify: restart nginx handlers: - name: Restart NGINX listen: "restart nginx" ansible.builtin.service: name: nginx state: restarted when: ansible_facts['os_family'] == dev1
11. Chạy kẻ nói dối.
ansible-lint custom_homepage.yaml
12. Chạy sổ tay.
ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml custom_homepage.yaml
13. Xác nhận triển khai bằng cách truy cập http://localhost:2203
trong trình duyệt của bạn.
Nỗ lực tuyệt vời! 🙌 Chúng tôi đã học cách sử dụng các biến và dữ kiện trong cẩm nang cũng như cách tạo tệp động bằng mẫu. Tiếp theo, chúng ta sẽ xem xét việc mô-đun hóa và xử lý lỗi. Cho đến lúc đó, hãy bảo trọng!