terraformのworkspaceをプロンプト上に表示させる

前提

terraformで作業をしていると、workspaceを切り替えることを忘れ、production環境にapplyをしてしまうようなミスが考えられます。
プロンプトにworkspaceを表示することにより、ヒヤリハットを防ぐことが重要です。

一般的にterraformのworkspaceを表示するコマンドは次の通りです。

$ terraform workspace show

プロンプト設定

上記のコマンドをスクリプトに落とし込むスクリプトを掲載しているリポジトリを見つけました。
github.com

このリポジトリでは次のようなプロンプト設定をしていました。

#!/usr/bin/env bash

function terraform_prompt()
{
    if [ -d .terraform ]; then
        workspace="$(command terraform workspace show 2>/dev/null)"
        echo " (${workspace})"
    fi
}

export PS1='\u@\h \[\033[38;5;135m\]\w\[\e[38;5;99m\]\[\e[1m\]$(terraform_prompt)\e[0m\$ '

commandというコマンドは、仮にterraformコマンドがaliasで置き換えられていても問題なく動作するような意図だと考えられます。
また、標準エラー出力を捨てることでterraform環境下ではない場所でもエラーを吐かずに空振り実行できるようになっているようです。

oh-my-posh設定

私が使っているプロンプト環境でもあるoh-my-poshの設定は下記の通りに設定するようです。

{
  "type": "terraform",
  "style": "powerline",
  "powerline_symbol": "",
  "foreground": "#000000",
  "background": "#ebcc34",
  "template": "{{.WorkspaceName}}"
}

ohmyposh.dev

表示用のスクリプトは下記のようになっています。
github.com
この部分でworkspaceを取得しているようです。

tf.WorkspaceName, _ = tf.env.RunCommand(cmd, "workspace", "show")