我們回到專案的根目錄,另外開一個資料夾 terraform
我們會在這個資料夾內放置 Terraform 需要用到的程式碼
我們在 terraform
資料夾裡建立三個檔案 main.tf
, lxc.tf
和 terraform.tfvars
內容分別如下
# main.tf
terraform {
required_providers {
proxmox = {
version = "~> 1.0.0"
source = "github.com/telmate/proxmox"
}
}
backend "http" {
}
}
provider "proxmox" {
pm_tls_insecure = true
pm_user = "root@pam"
}
# lxc.tf
variable "lxc_ip" {
type = string
description = "IP for lxc"
}
variable "lxc_gateway" {
type = string
description = "Gateway for lxc"
}
resource "proxmox_lxc" "lxc-test" {
hostname = "lxc-test-host"
cores = 1
memory = "512"
swap = "512"
network {
name = "eth0"
bridge = "vmbr0"
ip = "${var.lxc_ip}"
gw = "${var.lxc_gateway}"
firewall = true
}
ostemplate = "local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz"
password = "insecurepassword"
rootfs = "local-lvm:8"
storage = "local-lvm"
target_node = "ithelp"
unprivileged = true
start = true
}
# terraform.tfvars
lxc_ip = "<CIDR>"
lxc_gateway = "<GATEWAY_IP>"
在上面的定義中,我們把 Proxmox VE 的登入密碼(PM_PASS
) 和 Proxmox VE 的 API URL(PM_API_URL
) 利用環境變數的方式存在系統內
這樣做的好處是,不用把較敏感的資訊放上 Git,操作的人員可以利用其他方式 pass 這些資料
不過我們現在遇到了個問題
Terraform 每次在 apply/destroy
的時候都會產生 terraform.tfstate
的檔案
這份檔案會讓 Terraform 能把要部署的環境跟現在的程式做比較,然後計算 Terraform 應該要做什麼
但,這樣的檔案可能會存有敏感內容,並不適合被直接放上 Git
這時候該怎麽辦呢?
Terraform 提供了 backend 的功能,可以讓你把 tfstate
存在某個能被其他人存取到的地方
這裡的其他人當然是指被授予權限的人,沒有權限的話還是讀取不到
不過這樣的話你就能確保環境的資訊只能被部分人讀取,而且也可以確保大家都能同時更新到最新的 state
而 GitLab 提供了讓你儲存 Terraform 狀態的功能
我們明天就來看要如何利用 GitLab 這項功能