mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-12-12 20:21:02 +01:00
feat(opentofu): add plugin for OpenTofu (#12285)
- Adds aliases - Sets up autocompletion - Adds promp functions to show workspace and `tofu` version Co-authored-by: Marc Cornellà <marc@mcornella.com>
This commit is contained in:
parent
0b27b15d0b
commit
fd8f72b276
2 changed files with 101 additions and 0 deletions
58
plugins/opentofu/README.md
Normal file
58
plugins/opentofu/README.md
Normal file
|
@ -0,0 +1,58 @@
|
|||
# OpenTofu plugin
|
||||
|
||||
Plugin for OpenTofu, a fork of Terraform that is open-source, community-driven, and managed by the Linux Foundation. It adds
|
||||
completion for `tofu` command, as well as aliases and a prompt function.
|
||||
|
||||
To use it, add `opentofu` to the plugins array of your `~/.zshrc` file:
|
||||
|
||||
```shell
|
||||
plugins=(... opentofu)
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
- [OpenTofu](https://opentofu.org/)
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command |
|
||||
| ----- | --------------- |
|
||||
| `tt` | `tofu` |
|
||||
| `tta` | `tofu apply` |
|
||||
| `ttc` | `tofu console` |
|
||||
| `ttd` | `tofu destroy` |
|
||||
| `ttf` | `tofu fmt` |
|
||||
| `tti` | `tofu init` |
|
||||
| `tto` | `tofu output` |
|
||||
| `ttp` | `tofu plan` |
|
||||
| `ttv` | `tofu validate` |
|
||||
| `tts` | `tofu state` |
|
||||
| `ttsh`| `tofu show` |
|
||||
| `ttr` | `tofu refresh` |
|
||||
| `ttt` | `tofu test` |
|
||||
| `ttws`| `tofu workspace`|
|
||||
|
||||
|
||||
## Prompt functions
|
||||
|
||||
- `tofu_prompt_info`: shows the current workspace when in an OpenTofu project directory.
|
||||
|
||||
- `tofu_version_prompt_info`: shows the current version of the `tofu` commmand.
|
||||
|
||||
To use them, add them to a `PROMPT` variable in your theme or `.zshrc` file:
|
||||
|
||||
```sh
|
||||
PROMPT='$(tofu_prompt_info)'
|
||||
RPROMPT='$(tofu_version_prompt_info)'
|
||||
```
|
||||
|
||||
You can also specify the PREFIX and SUFFIX strings for both functions, with the following variables:
|
||||
|
||||
```sh
|
||||
# for tofu_prompt_info
|
||||
ZSH_THEME_TOFU_PROMPT_PREFIX="%{$fg[white]%}"
|
||||
ZSH_THEME_TOFU_PROMPT_SUFFIX="%{$reset_color%}"
|
||||
# for tofu_version_prompt_info
|
||||
ZSH_THEME_TOFU_VERSION_PROMPT_PREFIX="%{$fg[white]%}"
|
||||
ZSH_THEME_TOFU_VERSION_PROMPT_SUFFIX="%{$reset_color%}"
|
||||
```
|
43
plugins/opentofu/opentofu.plugin.zsh
Normal file
43
plugins/opentofu/opentofu.plugin.zsh
Normal file
|
@ -0,0 +1,43 @@
|
|||
# set up the tofu completion (compatible for zsh)
|
||||
autoload -Uz bashcompinit && bashcompinit
|
||||
complete -C tofu tofu
|
||||
|
||||
# tofu workspace prompt function
|
||||
function tofu_prompt_info() {
|
||||
# only show the workspace name if we're in an opentofu project
|
||||
# i.e. if a .terraform directory exists within the hierarchy
|
||||
local dir="$PWD"
|
||||
while [[ ! -d "${dir}/.terraform" ]]; do
|
||||
[[ "$dir" != / ]] || return 0 # stop at the root directory
|
||||
dir="${dir:h}" # get the parent directory
|
||||
done
|
||||
|
||||
# workspace might be different than the .terraform/environment file
|
||||
# for example, if set with the TF_WORKSPACE environment variable
|
||||
local workspace="$(tofu workspace show)"
|
||||
# make sure to escape % signs in the workspace name to prevent command injection
|
||||
echo "${ZSH_THEME_TOFU_PROMPT_PREFIX-[}${workspace:gs/%/%%}${ZSH_THEME_TOFU_PROMPT_SUFFIX-]}"
|
||||
}
|
||||
|
||||
# tofu version prompt function
|
||||
function tofu_version_prompt_info() {
|
||||
# get the output of `tofu --version` in a single line, and get the second word after splitting by a space
|
||||
local tofu_version=${${(s: :)$(tofu --version)}[2]}
|
||||
# make sure to escape % signs in the version string to prevent command injection
|
||||
echo "${ZSH_THEME_TOFU_VERSION_PROMPT_PREFIX-[}${tofu_version:gs/%/%%}${ZSH_THEME_TOFU_VERSION_PROMPT_SUFFIX-]}"
|
||||
}
|
||||
|
||||
alias tt='tofu'
|
||||
alias tta='tofu apply'
|
||||
alias ttc='tofu console'
|
||||
alias ttd='tofu destroy'
|
||||
alias ttf='tofu fmt'
|
||||
alias tti='tofu init'
|
||||
alias tto='tofu output'
|
||||
alias ttp='tofu plan'
|
||||
alias ttv='tofu validate'
|
||||
alias tts='tofu state'
|
||||
alias ttsh='tofu show'
|
||||
alias ttr='tofu refresh'
|
||||
alias ttt='tofu test'
|
||||
alias ttws='tofu workspace'
|
Loading…
Reference in a new issue