Ansible – Playbook Testing

Hello mọi người, Một bài tuts mới của mình nha các bạn ơiii.

Trong bài viết này, mình sẽ hướng dẫn các bạn cách để basic test cú pháp (Syntax) playbook bạn viết có đúng chưa, Tình huống đặt ra khi bạn viết một playbook dài hoặc phức tạp, bạn không thể nào không tránh được các sai sót về cú pháp của YAML trong đó. Để tránh trong quá trình khởi chạy playbook rồi nó mới văng lỗi thì cách sau sẽ giúp bạn chắc chắn cú pháp đúng và không bị đập vào mặt những nhưng lỗi cú pháp đó nữa.

Tạo một inventory local

Giả sử các playbook bạn đang chứa tạo `/home/username/ansible/playbooks`. Và bạn có một vài role và một vài playbook. Để test chúng, bạn hãy tạo một inventory host cho việc test này hen.

cd ~/ansible_2/
mkdir tests/
vim tests/ansible_hosts

Thêm vào nội dung sau:

[local]
127.0.0.1

Testing

Sử dụng cú pháp `–syntax-check` cộng thêm inventory local khi nãy mình vừa tạo.

Nếu không có lỗi nào về cú pháp, kết quả trả về sẽ như sau:

tritran@tritran-Latitude-E6540:~/Desktop/Ansible_2/LEMP-COMPILE-CENTOS7_v1.2$ sudo ansible-playbook -i ../test/inventory_hosts main.yml --syntax-check
[WARNING]: Could not match supplied host pattern, ignoring: appgroup

playbook: main.yml

Ngược lại, nếu có lỗi bất kỳ nào đó liên quan đến cú pháp:

tritran@tritran-Latitude-E6540:~/Desktop/Ansible_2/LEMP-COMPILE-CENTOS7_v1.2$ sudo ansible-playbook -i ../test/inventory_hosts main.yml --syntax-check
ERROR! conflicting action statements: yum, names

The error appears to be in '/home/tritran/Desktop/Ansible_2/LEMP-COMPILE-CENTOS7_v1.2/roles/Dependencies/tasks/main.yml': line 2, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

---
- names: update all package
^ here

Đó là mình cố tình ghi sao “- name” thành “- names” nên lỗi đập vào mặt liền đó các bạn :)))

Testing tất cả các Playbook

Giả sử mình có một mớ các playbook sau:

tritran@tritran-Latitude-E6540:~/Desktop/Ansible_2$ tree -L 3
.
├── Ansible_ChangeIP
│   ├── hosts
│   ├── main.retry
│   ├── main.yml
│   └── roles
│   ├── ChangeIP
│   └── Enable_Gateway
├── Cent7-LEMP-Wordpress
│   ├── group_vars
│   │   └── all
│   ├── hosts
│   ├── main.yml
│   ├── README.md
│   └── roles
│   ├── dependencies
│   ├── mariadb
│   ├── nginx
│   ├── php
│   └── wordpress
├── CENTOS7-LAMP-REDIS
│   ├── hosts
│   ├── main.yml
│   ├── README.md
│   └── roles
│   ├── apache
│   ├── dependencies
│   ├── mariadb
│   ├── php72
│   └── redis
├── Create_User_Add_Key
│   ├── group_vars
│   │   └── all
│   ├── hosts
│   ├── main.yml
│   ├── readme.md
│   └── roles
│   ├── Copy_Key
│   ├── Create_User
│   └── Delete_User
├── Example1
│   ├── app.py
│   ├── hosts
│   ├── main.yml
│   └── README.md
├── LAMP-Redis-Haproxy
│   ├── group_vars
│   │   └── all
│   ├── hosts
│   ├── main.yml
│   ├── README.md
│   └── roles
│   ├── apache
│   ├── dependencies
│   ├── haproxy
│   ├── mariadb
│   ├── php72
│   └── redis
├── LEMP-COMPILE-CENTOS7_v1.2
│   ├── group_vars
│   │   └── all
│   ├── hosts
│   ├── main.yml
│   ├── README.md
│   └── roles
│   ├── Backup
│   ├── Dependencies
│   ├── Mariadb
│   ├── Nginx
│   ├── PHP-FPM
│   ├── Remove
│   ├── Restore
│   ├── Vhost
│   └── WordPress
└── README.md

47 directories, 27 files
tritran@tritran-Latitude-E6540:~/Desktop/Ansible_2$

Giờ mình cần basic test syntax hết tất cả, thì làm sao đây??? Đơn giản là duyệt hết tất cả các playbook thôi:

tritran@tritran-Latitude-E6540:~/Desktop/Ansible_2$ find * -maxdepth 1 -name '*.yml' | xargs -n1 sudo ansible-playbook --syntax-check -i tests/ansible_hosts

Tổng kết

Hy vọng qua bài viết này, mọi người đã có thêm một kinh nghiệm hữu ích khi làm việc với ansible đúng không ạ? :3

Cám ơn mọi người đã quan tâm và theo dõi!!!