kubectl같은 cli만들기

github

https://github.com/teamsmiley/go-cobra-viper-boilerplate

사용 패키지

cobra

cli만드는데 사용 https://github.com/spf13/cobra

viper

설정을 저장하는데 사용 https://github.com/spf13/viper

use cobra

go install github.com/spf13/cobra-cli@latest
mkdir ~/Desktop/mycli
cd ~/Desktop/mycli

cobra-cli init -h

cobra-cli init --viper

cobra-cli add ping

cli 명령어 스타일

이렇게 만들면 다음처럼 생성이 된다.

그런데 kubectl edit xxx 스타일로 만들고 싶다.

폴더를 생성하자.

package name change

update root.go

import

update createCmd to CreateCmd (소문자는 private 대문자는 public)

실행

add resource issue

다음을 crud에 추가한다.

move file under get folder and update package name to get

update code

나머지 3개 파일도 복사해서 넣자.

테스트

아규먼트 받기, 아규먼트 필수 처리

create-issue에 다음을 추가

config

username/password를 프로젝트 바깥에 저장

viper를 사용한다.

이 코드가 벌써 root.go에 들어가 있다.

루트 디렉토리에서 .mycli.yaml 파일을 찾아서 읽어온다.

일단 저장을 해보자.

configure폴더를 만든후 파일을 이동해준다.

패키지 이름 configure 로 수정하고 아규컨트 추가 한다.

ConfigureCmd 로 대문자로 수정

아규먼트를 받아서 viper에 set하면 끝 그리고 SafeWriteConfig로 저장한다.

argument를 위해서 init함수를 수정하였다.

실행하고 설정을 저장해보자.

이제 읽어와서 사용해보자.

cmd/get/issue.go 에서 수정한다.

두줄을 추가하고 실행해보자.

환경 변수를 이용해서 처리

설정파일이 아니고 환경 변수를 이용해서 처리해보자.

일단 설정파일을 지운다.

테스트 하자.

환경변수를 설정한다.

실행해보자.

출력됨을 알수 있다.

주의

환경변수를 사용할때 소문자를 키값으로 사용하면 동작하지 않는다.

왜 이러는지 아시는분....

todo

  • resource file(json 또는 이미지 또는 다른 파일)을 읽어와서 처리하는 방법을 알아보자.

  • resource file을 배포할때 어떻게 해야하는지 모르겟다.

Last updated

Was this helpful?