昨天大概說明完 Terraform 如何呼叫 Ansible,幫助我們建立環境
我們今天就來看具體來說在 Proxmox VE 上這件事該怎麽達成
首先,我們會遇到第一個問題, Ansible 使用的 inventory
無法自動產生
的確現在有些工具可以幫助你將 Terraform 的 terraform.tfstate
轉換成 Ansible 的 inventory
格式,但到目前為止沒有工具能把 Proxmox VE 的內容轉換成 Ansible 的 inventory
這下我們就需要自己告訴 Ansible 該連到什麼 IP 了,不過 Terraform 也不會回傳容器/VM 裡的 IP,這下該怎麽辦呢?
先用個 dirty hack 解這塊,我們手動設定容器/VM 的 IP
我們來看 Terraform 的設定檔
variable "lxc_ip" {
type = string
description = "IP for lxc"
default = "<IP>"
}
resource "proxmox_lxc" "lxc-test" {
hostname = "lxc-test-host"
cores = 1
memory = "512"
swap = "512"
network {
name = "eth0"
bridge = "vmbr0"
ip = "${var.lxc_ip}/<MASK>"
gw = "<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
ssh_public_keys = "<PUBLIC_KEY>"
provisioner "local-exec" {
command = "sleep 30; ansible-playbook -u root -i '${var.lxc_ip},' webserver.yml;"
}
}
我們這裡使用的 Ansible Playbook 是我們先前示範 Ansible Playbook 時所建立的 Playbook,不過我們在 webserver.yml
裡把 hosts: webservers
更改為 hosts: all
這樣 Ansible Playbook 在執行時會對所有機器去設定,而因為我們只告訴 Ansible 一臺機器,所以他也只會設定一臺機器
實際執行效果大概如下
Terraform 和 Ansible 的範例大概到這裡
我們明天會介紹一些資源監控工具