LoginSignup
8
1

Terraform ControllerのBranch Plannerを試す

Last updated at Posted at 2023-12-07

本記事では、TerraformリソースをGitOpsで管理できるTerraform Controllerで、Branch Plannerという機能を試してみます。

Terraform Controllerとは

Terraform Controller (以降tf-controller) とはGitOpsでTerraformリソースを管理するためのFluxのコントローラーです。

tf-controllerの機能の詳細は下記をご覧ください。

現時点でサポートしているMatrixは下記となります。

Version Terraform Source Controller Flux v2
v0.15 v1.3.9 v1.0.x v2.0.x
v0.14 v1.3.9 v0.31.0 v0.41.x
v0.13 v1.3.1 v0.31.0 v0.36.x
v0.12 v1.1.9 v0.26.1 v0.32.x

本題

tf-controllerのBranch Plannerとは、PR作成時にTerraformのPlan結果をコメントで通知してくれる機能です。
現時点ではこの機能はrcバージョンになります。

今回は下記のクイックスタートを参考にさくっと試します。

環境情報

kubernetes: v1.27.1
flux: v2.1.1
helm-controller: v0.36.1
kustomize-controller: v1.1.0
notification-controller: v1.1.0
source-controller: v1.1.1
tf-controller: v0.16.0-rc.3 

手順

kindでクラスタを作成します。

kind create cluster --name tf-controller

fluxをインストールします。

brew install fluxcd/tap/flux

sync用のリポジトリを作成します。

export GITHUB_USER=<your github username>
export GITHUB_TOKEN=<your github personal access token>

gh repo create $GITHUB_USER/gitops-tf-controller
git clone git@github.com:$GITHUB_USER/gitops-tf-controller.git

fluxを導入します。

cd gitops-tf-controller

flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=gitops-tf-controller \
  --branch=main \
   --path=./cluster/my-cluster \
   --personal \
   --token-auth

tf-controllerのマニフェストをcurlで取得します。

git pull
mkdir -p ./cluster/my-cluster/infra/
curl -s https://raw.githubusercontent.com/weaveworks/tf-controller/main/docs/release.yaml > ./cluster/my-cluster/infra/tf-controller.yaml

ここでBranch Plannerを有効にするためにtf-controller.yamlに下記を追加します。(HelmReleaseのspec.values配下)

    branchPlanner:
      enabled: true

kustomization.yamlを作成してリポジトリにpushします。

kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - tf-controller.yaml

これで変更を検知してtf-controllerがdeployされます。

次にBranch Planner用のSecretを作成します。

kubectl create secret generic branch-planner-token \
    --namespace=flux-system \
    --from-literal="token=${GITHUB_TOKEN}"

デモ用のSync設定とTerraformオブジェクトを追加します。

export GITHUB_USER=<your user>
export GITHUB_REPO=<your repo>

cat <<EOF | kubectl apply -f -
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: branch-planner-demo
  namespace: flux-system
spec:
  interval: 30s
  secretRef:
    name: flux-system
  url: https://github.com/${GITHUB_USER}/${GITHUB_REPO}
  ref:
    branch: main
---
apiVersion: infra.contrib.fluxcd.io/v1alpha2
kind: Terraform
metadata:
  name: branch-planner-demo
  namespace: flux-system
spec:
  approvePlan: auto
  path: ./
  interval: 1m
  sourceRef:
    kind: GitRepository
    name: branch-planner-demo
    namespace: flux-system
EOF

ブランチを作成して、リポジトリ直下にデモ用のTerraformリソースを準備します。

main.tf
terraform {
  required_version = ">= 1.3.9"
}

variable "subject" {
   type = string
   default = "World"
   description = "Subject to hello"
}

output "hello_world" {
  value = "Hello TF Controller v0.16.0-rc.2, ${var.subject}!"
}

リポジトリにpushしてPRを作成します。
しばらくすると、下記のようにplan内容がコメントされました!

image.png

!replanとコメントすると再度Plan結果を通知してくれます。

image.png

まとめ

TerraformリソースをGitOpsで管理できる、 Terraform ControllerでBranch Plannerという機能を試してみました。
Plan内容をPR上で自動通知してくれる便利な機能なので早く正式リリースされることを期待しています。

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1