paint-brush
Ansible 101: Làm việc với các sự kiện và mẫutừ tác giả@cloudkungfu
892 lượt đọc
892 lượt đọc

Ansible 101: Làm việc với các sự kiện và mẫu

từ tác giả cloud-kung-fu4m2024/01/30
Read on Terminal Reader

dài quá đọc không nổi

Ansible sử dụng các biến, sự kiện và mẫu để tạo quy trình làm việc tự động hóa có thể thích ứng. Các biến cho phép quản lý cấu hình động, dữ kiện cung cấp thông tin dành riêng cho hệ thống và các mẫu tạo tệp cấu hình có thể tùy chỉnh. Cách tiếp cận này đảm bảo playbook có thể tái sử dụng và linh hoạt trên các môi trường khác nhau.
featured image - Ansible 101: Làm việc với các sự kiện và mẫu
cloud-kung-fu HackerNoon profile picture
0-item

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.

Biến & Sự kiện

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.

Cách các sự kiện, biến và mẫu phối hợp với nhau

  • Các loại biến:
    • 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 }}"

Mẫu & Tệp

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

Luyện tập

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ủ.


  1. Sao chép repo.
 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

Biến & Sự kiện

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

Mẫu & Tệp

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.

Tóm tắt lại

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!