- vừa được xem lúc

[Ansible] Một số Ansible module mà bạn nên biết

0 0 78

Người đăng: Thu Nguyen Thi Thanh

Theo Viblo Asia

Ansible là một công cụ "Configuration Management", tức là một công cụ hỗ trợ, cấu hình, cài đặt hệ thống một cách tự động. Các công cụ này giúp thực hiện triển khai hệ thống thuận lợi, hạn chế những công việc lặp đi lặp lại tiết kiệm thời gian, và có thể triển khai cho những hệ thống tương tự.

Một trong những khái niệm quan trọng trong ansible là modules. Modules là một thành phần cốt lõi của Ansible, nó là là một khối/đơn vị xử lý của một task (task thì sẽ thêm các biến, tham số vào nữa để việc xử lý trên remote server được mềm dẻo hơn). Trong Ansible, thay vì nói: "Ansible, hãy thực hiện lệnh này!". thì bạn sẽ nói: "Ansible, hãy thực thi module này và cho phép nó chạy bất kỳ lệnh nào nó cần để hoàn thành công việc!". Thông qua quá trình tìm hiểu và sử dụng Ansible, mình sẽ cùng các bạn tổng hợp lại một số Ansible modules cơ bản, thường xuyên được sử dụng mà bạn nên biết nhé!

Module 1: Package management

Đây là module được thiết kế cho hầu hết các trình quản lý gói (package management) phổ biến, chẳng hạn như apt, dnf,... cho phép bạn cài đặt các package trên hệ thống. Ngoài các chức năng cụ thể của từng trình quản lý gói thì hầu hết các trình quản lý gọi đều có thể install, update, upgrade, downgrade, remove, và list các packages.

Ví dụ, ở đây, mình có một task là install gói httpd trên CentOS/RHEL 8 sử dụng trình quản lý gói dnf.

- hosts: all user: ansible become: True tasks: - name: Install httpd package dnf: name: httpd state: present update_cache: True

Module 2: Flie

Trong Ansible, có nhiều các module làm việc với tệp tin, thư mục, links trên các node đích (node client) như copy, template, file,... thường được sử dụng. Trước tiên, chúng ta sẽ cùng tìm hiểu về file module. File module giúp quản lý tập tin và các thuộc tính của nó. Ngoài việc taọ, xóa, xác định vị trí của tệp tin file module cũng đặt các quyền và quyền sở hữu hay thiết lập symlinks cho tệp tin.

Ví dụ,

- hosts: all user: ansible become: True tasks: - name: Change file ownership, group and permissions file: path: /etc/thuntt.config owner: thuntt group: thuntt mode: '0644' - name: Create an insecure file file: path: /viblo owner: root group: root mode: '1777' - name: Create a symbolic link file: src: /file/to/link/to dest: /path/to/symlink owner: thuntt group: thuntt state: link

Module 3: Template

Có nhiều cách khác nhau với Ansible giúp bạn có thể thao tác với nội dung của tệp, ngoài template module thì mình còn thấy lineinfile module cũng rất phổ biến và được sử dụng nhiều. Tuy nhiên, đối với mình, sau khi sử dụng thì mình cảm thấy template module rõ ràng và dễ hiểu hơn khá nhiều so với lineinfile module ?))

Template trong Ansible là một tệp chứa tất cả các tham số cấu hình của bạn, nhưng các giá trị động được cung cấp dưới dạng biến. Trong quá trình thực thi playbook, các biến có thể được thay thế bằng các giá trị bạn cần. Ngoài ra, bạn có thể làm được nhiều việc hơn là thay thế các biến, với sự trợ giúp của công cụ tạo template Jinj2. Bạn có thể có các câu lệnh có điều kiện, vòng lặp, viết macro, bộ lọc để chuyển đổi dữ liệu, thực hiện các phép tính số học, v.v. Các tệp template thường sẽ có phần mở rộng là .j2. Các biến trong tệp template sẽ được ký hiệu bằng dấu ngoặc nhọn kép, '{{biến}}'.

Ví dụ:

- hosts: all vars: variable_to_be_replaced: 'Hello world' inline_variable: 'hello again' tasks: - name: Ansible Template Example template: src: hello_world.j2 dest: /Users/mdtutorials2/Documents/Ansible/hello_world.txt hello_world.j2
--------------
{{ variable_to_be_replaced }}
This line won't be changed
Variable given as inline - {{ inline_variable }} - :) output - hello_world.txt
------
Hello world
This line won't be changed
Variable given as inline - hello again - :) mdtutorials2$ ls -lrt hello_world.txt
-rw-r--r-- 1 root wheel 81 Oct 16 07:23 hello_world.txt

Module 4: Copy

Copy module là module thường được sử dụng khi chúng ta muốn sao chép một tệp tin từ Ansible server (Management node) đến các node đích (client node).

Ví dụ:

- name: copy file from local to remote with owner, group and file permissions (octal) copy: src: test_file dest: $HOME/test_file owner: thuntt group: thuntt mode: 0644 - name: copy file from local to remote with owner, group and file permissions (octal) copy: src: test_file dest: $HOME/test_file owner: thuntt group: thuntt mode: 0644 - name: copy file from local to remote with root as the owner (become required) copy: src: test_file dest: "/home/{{ ansible_user }}/test_file" owner: root group: root mode: 0644 become: true

Modlue 5: Service

Đối với các node client là Unix/Linux, service module là một module rất hữu ích giúp kiểm soát các service chạy trên các server này. Giống với các module khác, service module cũng đi kèm với một số tham số và các tham số này có các tùy chọn riêng hoặc giá trị phù hợp. Sử dụng các tham số này và các giá trị bắt buộc, các banj có thể quản lý các service với các chức năng như stop, start, reload, ... trên các node client.

Ví dụ:

- name: Start service httpd, if not running service: name: httpd state: started - name: Stop service httpd, if running service: name: httpd state: stopped - name: Restart service httpd, in all cases service: name: httpd state: restarted - name: Reload service httpd, in all cases service: name: httpd state: reloaded - name: Enable service httpd, and not touch the running state service: name: httpd enabled: yes

Module 6: shell

Trong Ansible, chúng ta có shell module được sử dụng để chạy các lệnh thông qua shell (/bin/sh) trên các máy đích từ xa. Module này nhận các lệnh làm đầu vào cùng với một tập hợp các đối số.

Ví dụ:

- name: Execute the command in remote shell; stdout goes to the specified file on the remote. shell: somescript.sh >> somelog.txt - name: Change the working directory to somedir/ before executing the command. shell: somescript.sh >> somelog.txt args: chdir: somedir/

Tạm kết

Tới đây, hi vọng các bạn đã có thể ghi nhớ và sử dụng được một số modules Ansible cơ bản được nêu ở trên. Ansible được xây dựng kèm theo với hàng ngàn module có sẵn khác nhau và vẫn đang tiếp tục được mở rộng, bạn có thể xem thêm tại đây. Bên cạnh đó, với Ansible, bạn cũng có thể tự viết các module Ansible riêng để phù hợp với nhu cầu sử dụng mình.

Nguồn tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 65

- vừa được xem lúc

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 51

- vừa được xem lúc

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 30

- vừa được xem lúc

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 22

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 65

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 96