跳到內容

部署示範環境

  • Terraform 版本須達到 terraform/versions.tf 中的下限 —— >= 1.8,以支援 provider 定義的函式,以及守護 VIP 的 check 區塊。
  • xcsh provider。 沒有任何地方鎖定版本:.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 清單中。

其他每一個變數都有可運作的預設值,而每一個物件名稱都衍生自 var.component。其中兩個刻意不提供預設值:

Terminal window
cd terraform
cp 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 失敗。

在不執行任何會改變狀態的操作下讀取這兩者:

Terminal window
terraform output -raw xc_tenant # what the deployment targets
terraform output -raw xc_env_tenant # what your shell claims — diagnostic only
f5-sales-demo
f5-sales-demo
  1. 初始化。 backend 設定未納入版控;請提供你自己的。

    Terminal window
    terraform init -backend-config=backend.hcl
  2. 第一次 apply。 這會建置 Azure、CE 站點與註冊 token,並啟動 CE。

    Terminal window
    terraform apply
  3. 待 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 在檔案開頭記錄了這個順序,那才是 權威版本 —— 部署順序與實作它的程式碼放在一起。

此部署會將維運人員金鑰寫入設備的 admin 帳號,該帳號的登入 shell 是 Site CLI。它由 cloud-init 的 write_files 寫入,而後者只在首次開機時執行一次。

Terminal window
terraform destroy

應用命名空間會保留下來:它是被讀取的,從不被管理,因此 destroy 無法連帶 帶走一個存放無關示範內容的命名空間。資源群組中的其他所有東西都會消失。