Trong bài viết này mình xin chia sẽ về Terraform template, khái niệm và các sử dụng trong thực tế.
Terraform template là gì?
Terraform cung cấp tài nguyên cơ sở hạ tầng. Nó giúp tạo ra các máy ảo, thành phần mạng, v.v., để hỗ trợ kiến trúc ứng dụng. Các tài nguyên ảo thường cần các tệp cấu hình bổ sung ở nhiều định dạng khác nhau để có hoạt động. Terraform template dùng để quản lý file cấu hình của bạn một cách động, bằng cách tạo ra file cấu hình của bạn từ một template có sẵn.
Trường hợp sử dụng
Giả sử bạn cần tạo một EC2 instance trên AWS. Bạn muốn sử dụng user_data để cấu hình instance này, với Terraform template bạn có thể tạo cũng như quản lý file này một cách động, nó sẽ trong như thế này.
#!/bin/sh
sudo mkdir ${request_id}
cd ${request_id}
...
${ } dùng để khai báo biến của bạn.
Áp dụng
Lưu file script trên với tên script.tftpl sau đó bạn cần dùng hàm templatefile() để gọi file cũng như truyền tham số vào biến
resource "aws_instance" "vm" {
ami = var.ami
instance_type = var.type
user_data = templatefile("script.tftpl", { request_id = "REQ000129834", name = "quannhm" })
}
sau đó truyền tham số vào biến bằng cặp ngoặc nhọn
{ request_id = “REQ000129834”, name = “John” }
hoặc bạn có thể truyền tham số thông qua biến
data "template_file" "init" {
template = templatefile("script.tftp")
vars = {
ami = var.ami
instance_type = var.type
}
}
Sử dụng vòng lặp for
Ví dụ cấu hình phân giải DNS trong resolv.conf
, liệt kê các máy chủ ở định dạng bên dưới.
.
nameserver x.x.x.x
nameserver x.x.x.x
nameserver x.x.x.x
bạn sẽ sử dụng vòng lặp for thay vì lặp lại những dòng trên
%{ for addr in ip_addrs ~}
nameserver ${addr}
%{ endfor ~}
Bạn sẽ truyền tham số vào bằng cách như thế này
provisioner "file" {
source = templatefile("resolv.conf.tftpl", {ip_addrs = ["192.168.0.100", "8.8.8.8", "8.8.4.4"]})
destination = "/etc/resolv.conf"
}
kết quả nhận được sẽ trông như thế này
nameserver 192.168.0.100
nameserver 8.8.8.8
nameserver 8.8.4.4
Câu điều kiện
Cú pháp của câu điều kiện
ví dụ
%{if passwd != "" }
passwd=admin
%{ endif }