Skip to content

Commit

Permalink
post: Contexto do ArgoCD no prompt PS1
Browse files Browse the repository at this point in the history
  • Loading branch information
mhagnumdw committed Sep 23, 2024
1 parent 58b5582 commit 6514688
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 0 deletions.
104 changes: 104 additions & 0 deletions _posts/2024-09-23-argocd-context-ps1-powerlevel10k.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
layout: post
title: 'Contexto do ArgoCD no prompt PS1'
date: 2024-09-23 17:30:00 -03:00
categories:
- argocd
- powerlevel10k
tags:
- argocd
- powerlevel10k
author-id: mhagnumdw
image: "assets/img/posts/argocd-context-ps1-powerlevel10k/banner.png"
feature-img: "assets/img/posts/argocd-context-ps1-powerlevel10k/banner.png"
thumbnail: "assets/img/posts/argocd-context-ps1-powerlevel10k/banner.png"
---

Configurar para que o contexto corrente do ArgoCD apareça no prompt (PS1), conforme a imagem de capa desse post. Usando o powerlevel10k.

<!--more-->

> Isso é bastante útil quando estamos trabalhando em vários clusters.
## Premissas

- ter o [powerlevel10k](https://github.com/romkatv/powerlevel10k) instalado
- ter instalado os utilitários de linha de comando `jq` (para json) e `yq` (para yaml)

## Arquivo `~/.p10k.zsh`

### Definir `POWERLEVEL9K_CUSTOM_ARGOCD_CONTEXT*`

No arquivo `~/.p10k.zsh`, navegar até o final, e antes da última chave `}`, adicionar:

```bash
# ArgoCD context
typeset -g POWERLEVEL9K_CUSTOM_ARGOCD_CONTEXT="get_argocd_context"
typeset -g POWERLEVEL9K_CUSTOM_ARGOCD_CONTEXT_FOREGROUND=208
typeset -g POWERLEVEL9K_CUSTOM_ARGOCD_CONTEXT_BACKGROUND=0
typeset -g POWERLEVEL9K_CUSTOM_ARGOCD_CONTEXT_SHOW_ON_COMMAND='argocd'
```

Conforme a imagem abaixo:

![p10k.zsh-1]({{ site.baseurl }}/assets/img/posts/argocd-context-ps1-powerlevel10k/p10k.zsh-1.png)

### Atualizar `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS`

Navegar até a linha contendo `typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(` e abaixo de `kubecontext` adicionar:

```bash
custom_argocd_context # ArgoCD
```

Conforme a imagem abaixo:

![p10k.zsh-2]({{ site.baseurl }}/assets/img/posts/argocd-context-ps1-powerlevel10k/p10k.zsh-2.png)

## Arquivo `~/.zshrc`

Adicionar a função abaixo no início do `~/.zshrc`.

> Essa função apenas vai ler o arquivo `~/.config/argocd/config`, que é onde o ArgoCD CLI guarda as informações dos contextos que ele conhece, e extrair as informações do contexto corrente.
```bash
get_argocd_context() {
if ! command -v jq &>/dev/null || ! command -v yq &>/dev/null; then
echo "argocd: sem jq ou yq 🦑"
return
fi
local config_file="$HOME/.config/argocd/config"
if [[ -f "$config_file" ]]; then
local context
context=$(grep 'current-context:' "$config_file" | awk '{print $2}')
if [[ -n "$context" ]]; then
local auth_token_jwt
auth_token_jwt=$(yq eval ".users[] | select(.name == \"$context\") | .auth-token" "$config_file")

local user
user=$(echo "$auth_token_jwt" | cut -d '.' -f2 | base64 --decode | jq -r '.sub')
user=$(echo "$user" | awk -F ':' '{print $1}')

# aqui você pode fazer uma personalização qualquer no seu `context`,
# nesse exemplo removendo o domínio apenas para ficar menor
context=${context//.meudominio.com.br/}

echo "${context}/${user} 🦑"
return
fi
fi
echo "no argocd context 🦑"
}
```

Agora recarregue o seu shell ou o terminal.

## Resultado

Ao digitar `argocd` vai aparecer o contexto no prompt, conforme image abaixo:

![prompt]({{ site.baseurl }}/assets/img/posts/argocd-context-ps1-powerlevel10k/prompt.png)

## Melhorias

Conforme o post [powerlevel10k/issues/2762](https://github.com/romkatv/powerlevel10k/issues/2762#issuecomment-2368965278), o p10k (powerlevel10k) já fornece um meio para implementar prompts customizados, para isso ver a documentação: `p10k help segment`. Com isso talvez possamos melhorar algo!
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 6514688

Please sign in to comment.