iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
1
DevOps

DevOps with Proxmox系列 第 23

Day 23 - 範例動手做 - Terraform 初始化

  • 分享至 

  • xImage
  •  

我們回到專案的根目錄,另外開一個資料夾 terraform
我們會在這個資料夾內放置 Terraform 需要用到的程式碼

我們在 terraform 資料夾裡建立三個檔案 main.tf, lxc.tfterraform.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 這項功能


上一篇
Day 22 - 範例動手做 - Node.JS App
下一篇
Day 24 - 範例動手做 - GitLab 與 Terraform Backend
系列文
DevOps with Proxmox30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言