tfc-workspace-runs について
tfc-workspace-runsは、Forum Virium HelsinkiのTerraform Cloudワークスペースを手早く調べるスキルです。略称での検索や複数ワークスペースの実行一覧により、実行IDや進行中の処理を確認できます。
主な機能
- 01既知のワークスペース略称で実行を一覧
- 02複数ワークスペースの最新実行を確認
- 03進行中の実行を確認
- 04TFE_TOKENでTerraform Cloud APIを呼び出し
- 05ワークスペースの対応表を追加
活用シーン
- 01GCPワークスペースの最近の実行を確認
- 02既知の全ワークスペースの最新実行を調査
- 03進行中の処理があるワークスペースを特定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill tfc-workspace-runsインストール後、Claude Code で/tfc-workspace-runsを入力して読み込まれたか確認します。
詳細
Terraform Cloud ワークスペースの実行
Forum Virium Helsinki の Terraform Cloud ワークスペースで実行をすばやく確認するための便利なラッパーです。
このスキルを使う場面
| このスキルを使う場面... | 代わりに関連スキルを使う場面... |
|---|---|
| 略称(github、sentry、gcp、onelogin、twingate)で FVH ワークスペースの実行を一覧表示する | FVH 以外のワークスペースまたは任意の ID の実行を一覧表示する(tfc-list-runs) |
| すべての FVH ワークスペースで最新の実行を一度に確認する | ステータス、操作、ソースをすべてのオプションで絞り込む(tfc-list-runs) |
| 進行中の実行がある FVH ワークスペースを確認する | 既知の単一の実行について詳細なステータスを確認する(tfc-run-status) |
| ログ/プラン JSON を確認する前に、該当する実行 ID を特定する | 特定の実行のプラン/適用ログの内容を確認する(tfc-run-logs) |
前提条件
export TFE_TOKEN="your-api-token" # User or team token
export TFE_ADDRESS="app.terraform.io" # Optional
既知のワークスペース
| 略称 | ワークスペースの正式名称 |
|---|---|
github | infrastructure-github |
sentry | infrastructure-sentry |
gcp | infrastructure-gcp |
onelogin | infrastructure-onelogin |
twingate | infrastructure-twingate |
主なコマンド
実行をすばやく一覧表示する
#!/bin/bash
set -euo pipefail
TOKEN="${TFE_TOKEN:?TFE_TOKEN not set}"
BASE_URL="https://${TFE_ADDRESS:-app.terraform.io}/api/v2"
ORG="ForumViriumHelsinki"
# Map shorthand to full workspace name
case "${1:-}" in
github) WORKSPACE="infrastructure-github" ;;
sentry) WORKSPACE="infrastructure-sentry" ;;
gcp) WORKSPACE="infrastructure-gcp" ;;
onelogin) WORKSPACE="infrastructure-onelogin" ;;
twingate) WORKSPACE="infrastructure-twingate" ;;
*)
echo "Usage: $0 <workspace> [limit]"
echo "Workspaces: github, sentry, gcp, onelogin, twingate"
exit 1
;;
esac
LIMIT="${2:-10}"
# Get workspace ID
WS_ID=$(curl -sf --header "Authorization: Bearer $TOKEN" \
"$BASE_URL/organizations/$ORG/workspaces/$WORKSPACE" | \
jq -r '.data.id')
# List runs
echo "Recent runs for $WORKSPACE:"
echo ""
curl -sf --header "Authorization: Bearer $TOKEN" \
"$BASE_URL/workspaces/$WS_ID/runs?page[size]=$LIMIT&include=plan" | \
jq -r '
["RUN_ID", "STATUS", "+", "~", "-", "CREATED", "MESSAGE"],
(.data[] |
.relationships.plan.data.id as $pid |
[
.id,
.attributes.status,
((.included[] | select(.id == $pid) | .attributes."resource-additions") // 0 | tostring),
((.included[] | select(.id == $pid) | .attributes."resource-changes") // 0 | tostring),
((.included[] | select(.id == $pid) | .attributes."resource-destructions") // 0 | tostring),
.attributes."created-at"[0:16],
(.attributes.message // "No message")[0:30]
]
) | @tsv' | column -t
ワンライナーの例
# GCP workspace - recent runs
curl -sf -H "Authorization: Bearer $TFE_TOKEN" \
"https://app.terraform.io/api/v2/organizations/ForumViriumHelsinki/workspaces/infrastructure-gcp" | \
jq -r '.data.id' | \
xargs -I{} curl -sf -H "Authorization: Bearer $TFE_TOKEN" \
"https://app.terraform.io/api/v2/workspaces/{}/runs?page[size]=5" | \
jq -r '.data[] | "\(.id) | \(.attributes.status) | \(.attributes."created-at"[0:16])"'
# GitHub workspace - failed runs only
curl -sf -H "Authorization: Bearer $TFE_TOKEN" \
"https://app.terraform.io/api/v2/organizations/ForumViriumHelsinki/workspaces/infrastructure-github" | \
jq -r '.data.id' | \
xargs -I{} curl -sf -H "Authorization: Bearer $TFE_TOKEN" \
"https://app.terraform.io/api/v2/workspaces/{}/runs?filter[status]=errored" | \
jq -r '.data[] | "\(.id) | \(.attributes.status) | \(.attributes.message)"'
各ワークスペースの最新の実行を取得する
#!/bin/bash
set -euo pipefail
TOKEN="${TFE_TOKEN:?TFE_TOKEN not set}"
BASE_URL="https://${TFE_ADDRESS:-app.terraform.io}/api/v2"
ORG="ForumViriumHelsinki"
WORKSPACES="infrastructure-github infrastructure-sentry infrastructure-gcp infrastructure-onelogin infrastructure-twingate"
echo "Latest run for each workspace:"
echo ""
for WS in $WORKSPACES; do
WS_ID=$(curl -sf --header "Authorization: Bearer $TOKEN" \
"$BASE_URL/organizations/$ORG/workspaces/$WS" | jq -r '.data.id')
LATEST=$(curl -sf --header "Authorization: Bearer $TOKEN" \
"$BASE_URL/workspaces/$WS_ID/runs?page[size]=1" | \
jq -r '.data[0] | "\(.id) | \(.attributes.status) | \(.attributes."created-at"[0:16])"')
echo "$WS: $LATEST"
done
進行中の実行を確認する
#!/bin/bash
set -euo pipefail
TOKEN="${TFE_TOKEN:?TFE_TOKEN not set}"
BASE_URL="https://${TFE_ADDRESS:-app.terraform.io}/api/v2"
ORG="ForumViriumHelsinki"
WORKSPACES="infrastructure-github infrastructure-sentry infrastructure-gcp infrastructure-onelogin infrastructure-twingate"
echo "Checking for in-progress runs..."
echo ""
for WS in $WORKSPACES; do
WS_ID=$(curl -sf --header "Authorization: Bearer $TOKEN" \
"$BASE_URL/organizations/$ORG/workspaces/$WS" | jq -r '.data.id')
IN_PROGRESS=$(curl -sf --header "Authorization: Bearer $TOKEN" \
"$BASE_URL/workspaces/$WS_ID/runs?filter[status_group]=non_final&page[size]=5" | \
jq -r '.data | length')
if [ "$IN_PROGRESS" -gt 0 ]; then
echo "$WS: $IN_PROGRESS run(s) in progress"
curl -sf --header "Authorization: Bearer $TOKEN" \
"$BASE_URL/workspaces/$WS_ID/runs?filter[status_group]=non_final" | \
jq -r '.data[] | " - \(.id): \(.attributes.status)"'
fi
done
クイックリファレンス
ワークスペース ID を取得する
# Generic pattern
curl -sf -H "Authorization: Bearer $TFE_TOKEN" \
"https://app.terraform.io/api/v2/organizations/ForumViriumHelsinki/workspaces/infrastructure-gcp" | \
jq -r '.data.id'
ワークスペースの URL(参照用)
- GitHub: https://app.terraform.io/app/ForumViriumHelsinki/workspaces/infrastructure-github
- Sentry: https://app.terraform.io/app/ForumViriumHelsinki/workspaces/infrastructure-sentry
- GCP: https://app.terraform.io/app/ForumViriumHelsinki/workspaces/infrastructure-gcp
- OneLogin: https://app.terraform.io/app/ForumViriumHelsinki/workspaces/infrastructure-onelogin
- Twingate: https://app.terraform.io/app/ForumViriumHelsinki/workspaces/infrastructure-twingate
他のスキルとの連携
GCP の最新の実行のログを取得する
# Get latest run ID
RUN_ID=$(curl -sf -H "Authorization: Bearer $TFE_TOKEN" \
"https://app.terraform.io/api/v2/organizations/ForumViriumHelsinki/workspaces/infrastructure-gcp" | \
jq -r '.data.id' | \
xargs -I{} curl -sf -H "Authorization: Bearer $TFE_TOKEN" \
"https://app.terraform.io/api/v2/workspaces/{}/runs?page[size]=1" | \
jq -r '.data[0].id')
# Then use tfc-run-logs skill to get logs
echo "Use tfc-run-logs with run ID: $RUN_ID"
すべてのワークスペースのステータスをすばやく確認する
# Combine with tfc-run-status for detailed info on specific runs
カスタマイズ
ワークスペースを追加するには、スクリプト内の case 文を更新します。
case "${1:-}" in
github) WORKSPACE="infrastructure-github" ;;
sentry) WORKSPACE="infrastructure-sentry" ;;
gcp) WORKSPACE="infrastructure-gcp" ;;
onelogin) WORKSPACE="infrastructure-onelogin" ;;
twingate) WORKSPACE="infrastructure-twingate" ;;
# Add more here:
newworkspace) WORKSPACE="infrastructure-newworkspace" ;;
*)
echo "Usage: $0 <workspace>"
exit 1
;;
esac
関連項目
tfc-list-runs:すべてのフィルターを使える多機能な実行一覧tfc-run-logs:特定の実行のプラン/適用ログを取得tfc-run-status:実行のステータスをすばやく確認tfc-plan-json:構造化されたプラン JSON 出力を取得terraform-workspace-manager:ワークスペースのオーケストレーションと実行管理
コメント
Markdown 対応