部署示範環境
- Terraform 版本須達到
terraform/versions.tf中的下限 ——>= 1.8,以支援 provider 定義的函式,以及守護 VIP 的check區塊。 xcshprovider。 沒有任何地方鎖定版本:.terraform.lock.hcl已被 gitignore, 且約束條件只是一個開放式的下限,因此每次init都會解析出最新發布的 版本。對一個預發布專案而言這是刻意的設計 —— 此示範環境應該在 provider 出現退步時直接失敗,而不是停留在一個掩蓋問題的過時版本上。- 一組 F5 XC API 憑證,對應
var.expected_xc_tenant中的租戶,並匯出為XCSH_API_TOKEN(或 P12/PEM 配對)。只匯出憑證,絕不匯出 URL —— 詳見 下文。 - Azure 憑證,具備建立資源群組、VNet、Route Server 與 VM 的權限。
- 一個既有的 F5 XC 命名空間,供應用層使用。此部署會讀取它,絕不會 建立或摧毀它,因此一個存放無關示範內容的命名空間永遠不會落入此 堆疊的 destroy 清單中。
提供兩個沒有預設值的值
Section titled “提供兩個沒有預設值的值”其他每一個變數都有可運作的預設值,而每一個物件名稱都衍生自
var.component。其中兩個刻意不提供預設值:
cd terraformcp terraform.tfvars.example terraform.tfvars| 變數 | 為何沒有預設值 |
|---|---|
origin_ip | 任何預設值都會指向某一台特定機器。過時的值會把新部署的流量送到別人的主機上,而不是直接失敗。 |
lb_domain | 負載平衡器以 Host 進行比對,因此這就是每個請求都必須送出的值。它屬於執行此部署的人。 |
兩者都有格式驗證,因此打錯字會讓 plan 失敗,而不是讓示範失敗。
terraform.tfvars 已被 gitignore,且必須維持如此:它帶有訂閱 ID 與
各工程師自己的值。
租戶由設定決定,而非由你的 shell 匯出的內容決定
Section titled “租戶由設定決定,而非由你的 shell 匯出的內容決定”var.expected_xc_tenant 指定租戶,也是唯一指定它的地方。
providers.tf 由它衍生出 xcsh provider 的 api_url,這會刻意
覆寫環境中任何的 XCSH_API_URL;而 terraform/main.tf 中的一個
postcondition 會在環境指向不同租戶時,讓 plan 失敗。
在不執行任何會改變狀態的操作下讀取這兩者:
terraform output -raw xc_tenant # what the deployment targetsterraform output -raw xc_env_tenant # what your shell claims — diagnostic onlyf5-sales-demof5-sales-demo-
初始化。 backend 設定未納入版控;請提供你自己的。
Terminal window terraform init -backend-config=backend.hcl -
第一次 apply。 這會建置 Azure、CE 站點與註冊 token,並啟動 CE。
Terminal window terraform apply -
待 CE 完成註冊後再次 apply。 這不是選擇性步驟,原因說明在 下方,而不是留給你自己去發現。
Terminal window terraform apply
接著在展示給任何人之前,先前往驗證健康狀態。
註冊核准已自動化,但 apply 仍是兩階段
Section titled “註冊核准已自動化,但 apply 仍是兩階段”註冊核准不再需要有人進到 console 操作:
xcsh_registration_approval 資源會執行它,而站點模組會解析出該核准
哪一個註冊。
但這仍然不會讓此部署變成單次、無需人工介入的 apply,而其原因值得
在你看著第一次執行並斷定它失敗之前先理解:
- CE 的註冊物件命名為
r-<uuid>。它從不以站點命名,因此 在 plan 階段沒有任何方式能預測該名稱。 - 註冊只有在 VM 啟動且
vpm完成註冊之後才存在。 - 因此第一次 apply 完全不會規劃任何核准。待 CE 註冊完成後重新 apply, 核准便會被建立。
terraform/main.tf 在檔案開頭記錄了這個順序,那才是
權威版本 —— 部署順序與實作它的程式碼放在一起。
維運人員 SSH 是建置階段的決定
Section titled “維運人員 SSH 是建置階段的決定”此部署會將維運人員金鑰寫入設備的 admin 帳號,該帳號的登入 shell
是 Site CLI。它由 cloud-init 的 write_files 寫入,而後者只在首次開機時執行一次。
terraform destroy應用命名空間會保留下來:它是被讀取的,從不被管理,因此 destroy 無法連帶
帶走一個存放無關示範內容的命名空間。資源群組中的其他所有東西都會消失。