Tìm hiểu Ansible (Phần 3)
Tôi sẽ viết tiếp phần 3 hướng dẫn các bạn sử dụng Role và Ansible galaxy Các tác vụ liên quan đến nhau có thể được tập hợp lại thành role, sau đó áp dụng cho một nhóm các máy khi cần thiết. - Role Directory Structure Không nhất thiết phải sử dụng tất cả các thư mục ở trên khi tạo một role. ...
Tôi sẽ viết tiếp phần 3 hướng dẫn các bạn sử dụng Role và Ansible galaxy
Các tác vụ liên quan đến nhau có thể được tập hợp lại thành role, sau đó áp dụng cho một nhóm các máy khi cần thiết.
- Role Directory Structure
Không nhất thiết phải sử dụng tất cả các thư mục ở trên khi tạo một role.
- Task: Chứa các file yaml định nghĩa các nhiệm vụ chính khi triển khai.
- Handles: Chứa các handler được sử dụng trong role
- Files: chứa các file dc sử dụng bởi role, ví dụ như các file ảnh.
- Templates: chứa các template file được sử dụng trong role, ví dụ như các file configuration... Các file này có đuôi *.j2, sử dụng jinja2 syntax
- Vars: định nghĩa các variable được sử dụng ở trong roles
- Defaults: Định nghĩa các giá trị default của các variable được sử dụng trong roles. Nếu variable không được định nghiã trong thư mục vars, các giá trị default này sẽ được gọi.
- Meta: thư mục này chứa meta data của roles
Bạn có thể làm quen với cấu trúc thư mục role bằng cách sử dụng command sau:
ansible-galaxy init __template__
Chú ý bên trong thư mục phải tuân thủ việc khai báo tên file , tên folder cho role
- roles/x/tasks/main.yml
- roles/x/handlers/main.yml
- roles/x/vars/main.yml
- roles/x/defaults/main.yml
- roles/x/meta/main.yml
- Role search path
Bạn phải khai báo việc set role chính xác trong ansible.cfg để ansible có thể hiểu được bạn viết role và thực thi nó.
-Using Roles
Bạn có thể sử dụng role theo cách sau .
--- - hosts: dev roles: - nginx
Ngoài ra có thể tham khảo thêm tại đây
- Demo
Sau đây tôi sẽ hướng dẫn các bạn viết role đơn giản cài đặt nginx cho ubuntu16.0.4
(bạn nào chưa tìm hiểu về ansible có thể quay lại phần 1 , phần 2 )
Cấu trúc thư mục :
Trong /roles/nginx/tasks/main.yml
- name: NGINX --> Install the nginx packages for Ubuntu target become: yes apt: name: "nginx" update-cache: yes - name: Check nginx status shell: bash -lc "systemctl status nginx" register: nginx_status - debug: var: nginx_status.stdout_lines - name: NGINX --> Copy extra/sites configuration files become: yes template: src: nginx.conf.j2 dest: "{{ nginx_conf_dir }}/nginx.conf"
Trong /roles/nginx/templates/nginx.conf.j2
user www-data; worker_processes auto ; error_log {{ nginx_log_dir }}/error.log {{ nginx_error_log_level }}; pid {{ nginx_pid_file }}; worker_rlimit_nofile {{ nginx_worker_rlimit_nofile }}; events { worker_connections {{ nginx_worker_connections }}; } http { default_type application/octet-stream; access_log {{ nginx_log_dir }}/access.log; keepalive_timeout {{ keepalive_timeout }}; send_timeout {{ send_timeout }}; client_body_timeout {{ client_body_timeout }}; client_header_timeout {{ client_header_timeout }}; proxy_send_timeout {{ proxy_send_timeout }}; proxy_read_timeout {{ proxy_read_timeout }}; gzip {{ nginx_gzip }}; gzip_types text/css text/javascript application/javascript; include /etc/nginx/mime.types; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Trong vars/front.yml
nginx_conf_dir: "/etc/nginx" nginx_server_name: "localhost" nginx_service_name: "nginx" nginx_user: "nginx" nginx_group: "nginx" nginx_pid_file: "/var/run/nginx.pid" nginx_worker_connections: 1024 nginx_worker_rlimit_nofile: 1024 nginx_log_dir: "/var/log/nginx" nginx_error_log_level: "error" nginx_gzip: "on" nginx_start_service: true nginx_start_at_boot: true keepalive_timeout: 600 send_timeout: 600 client_body_timeout: 600 client_header_timeout: 600 proxy_send_timeout: 600 proxy_read_timeout: 600
Trong main-playbook.yml
- hosts: dev user: "{{ ansible_ssh_user }}" become_method: sudo gather_facts: True vars_files: - vars/front.yml roles: - nginx
Trong ansible.cf
[defaults] roles_path = ../roles
Command Thực thi : ansible-playbook -i inventory/hosts main-playbook.yml --extra-vars " ansible_ssh_user=ubuntu"
Kết quả :
Trên console terminal:
web:
Như vậy chúng ta sẽ bóc các tác vụ có điểm chung trong playbook.yml để chuyển chúng về thành 1 role là cài đặt và cấu hình nginx để chúng ta thuận tiện trong quá trình viết nhiều task.
Ansible Galaxy là một trang web miễn phí để tìm kiếm, tải xuống, xếp hạng và xem xét tất cả các tính chất được cộng đồng Ansible phát triển Tôi sẽ giới thiệu một số command để bạn có thể tải xuống , tạo mới hay quản lý roles/
- Install Role
Bạn dùng command ansible-galaxy để download role từ Galaxy :
ansible-galaxy install geerlingguy.nginx
kết quả :
- downloading role 'nginx', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-nginx/archive/2.7.0.tar.gz
- extracting geerlingguy.nginx to /home/mai.thanh.long/Desktop/roles/geerlingguy.nginx
- geerlingguy.nginx (2.7.0) was installed successfully
Để xem danh sách các role được install thì bạn dùng :
ansible-galaxy list
- Create Role
Như hướng dẫn ở trên phần Role thì bạn có thể dùng command này :
ansible-galaxy init __template__
- Search for Roles
Để tìm kiếm 1 role thì bạn có thể sử dụng command sau :
ansible-galaxy search apache --author geerlingguy
Kết quả:
Found 14 roles matching your search:
Name Description
geerlingguy.adminer---- Installs Adminer for Database management.
geerlingguy.apache---- Apache 2.x for Linux.
geerlingguy.apache-php-fpm---- Apache 2.4+ PHP-FPM support for Linux.
geerlingguy.certbot---- Installs and configures Certbot (for Let's Encrypt).
geerlingguy.drupal---- Deploy or install Drupal on your servers.
geerlingguy.htpasswd---- htpasswd installation and helper role for Linux servers.
geerlingguy.munin---- Munin monitoring server for RedHat/CentOS or Debian/Ubuntu.
geerlingguy.php---- PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
geerlingguy.pimpmylog---- Pimp my Log installation for Linux
geerlingguy.solr---- Apache Solr for Linux.
geerlingguy.supervisor---- Supervisor (process state manager) for Linux.
geerlingguy.svn---- SVN web server for Linux
geerlingguy.tomcat6---- Tomcat 6 for RHEL/CentOS and Debian/Ubuntu.
geerlingguy.varnish ---- Varnish for Linux.
- Remove an installed role
Để remove đã được install trước đó thì ta dùng: ansible-galaxy remove username.role_name
Như vậy, tôi đã giới thiệu cơ bản về Ansible-Role và Ansible-Galaxy để các bạn có thể nghiên cứu thêm về nó.
Tài liệu tham khảo :
https://docs.ansible.com/ansible/latest/index.html
[Book]
- Ansible Up And Running Book
- Ansible Playbook Essentials
- Learning Ansible - Use Ansible to Configure Systems Deploy Software and Orchestrate Advanced IT Tasks