본문 바로가기
기타/guitar

[oh-my-zsh/agnoster] prompt에 kubernetes context 표시하기 (theme prompt customizing하기)

by haejang 2023. 7. 30.
728x90
728x90

 

 

 

k8s 클러스터를 여러 대 운영할 때, 현재 컨텍스트가 헷갈리는 경우가 많다.

터미널 세션별로 컨텍스트 다르게 유지한다거나, iterm status bar에 컨텍스트를 표시한다거나 방법들이 있지만,

나는 그냥 터미널 명령줄 프롬프트에서 현재 컨텍스트를 보면서 명령을 날리고 싶었다.

 

agnoster prompt 커스터마이징을 어떻게 하는지 찾아봐도 잘 안나와서...그냥 코드 까보고 직접 구성해봤다.

결과적으론 아래와 같다.

클러스터 이름 : prod일땐 빨간색, 그 외엔 노란색

네임스페이스 이름 : cyan 색

클러스터와 네임스페이스 사이 콜론은 흰색

 

~/.oh-my-zsh/themes/agnoster.zsh-theme에서 진행

먼저 kubectx용 prompt segment를 정의해야 한다.

prompt_kubectx () {
  if [[ $(kubectx -c) == *"prod"* ]]; then
    prompt_segment bg red $(kubectx -c)%{%F{white}%}:%{%F{cyan}%}$(kubens -c)
  else
    prompt_segment bg yellow $(kubectx -c)%{%F{white}%}:%{%F{cyan}%}$(kubens -c)
  fi
}

prompt_segment()는 같은 파일 내에서 확인해볼 수 있는데, 1번째 인자가 배경색, 2번째 인자가 글자색, 3번째 인자가 출력글자 가 된다.

배경색/글자색 인자에는 bg(투명색? 암튼 터미널 색), fg(흰색)라는 변수를 사용할 수 있다.

그러나 나는 출력될 글자들 내에서도 각각 다른 글자 색을 가져가고 싶은데, 그런 경우 %{%F{글자색}%} 을 앞에 써주면 해당 부분은 해당 색으로 출력된다.

추가로.. agnoster에서 solarized 색상 팔레트를 사용하니, 여기에 명시된 색들을 사용할 수 있다.

(그러나 256색? 표시로도 가능하다는 것 같다. 이건 안해봄)

 

아무튼 요렇게만 하면.. 프롬프트에 적용은 안되고, build_prompt()prompt_kubectx 를 추가해주어야 한다.

## Main prompt
build_prompt() {
  RETVAL=$?
  prompt_status
  prompt_virtualenv
  prompt_aws
  prompt_context
  prompt_dir
  prompt_git
  prompt_bzr
  prompt_hg
  prompt_kubectx # prompt_end 위에 추가
  prompt_end
}

이렇게 한 후, source ~/.zshrc 를 해주면..

원하는대로 표시는 잘 됐지만, 마지막에 표시되는 세모가 맘에 들지 않는다.

prompt_end() 를 아래와 같이 변경해 주었다.

prompt_end() {
  if [[ -n $CURRENT_BG ]]; then
    # echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR" # 원래 코드
    echo -n " %{%k%F{$CURRENT_BG}%🚀" # 변경한 코드
  else
    echo -n "%{%k%}"
  fi
  echo -n "%{%f%}"
  CURRENT_BG=''
}

이러고 다시 source ~/.zshrc 를 해주니,,

굳. 마음에 든다.

 

kubectx와 kubens 의 segment를 따로 정의할까 생각도 했었는데, 그냥 한번에 붙어있는게 더 나아보인다.

 

끝!

 

 

 

728x90
728x90

댓글