Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

jsonpath를 활용해 json에서 특정 데이터만 추출하기 본문

☁️ 클라우드/Kubernetes

jsonpath를 활용해 json에서 특정 데이터만 추출하기

Chamming2 2022. 5. 11. 11:10

쿠버네티스에서 파드 내 컨테이너의 이미지 이름만 알아내고 싶었던 경우가 있었습니다.

 

이를 위해 --ouput 플래그를 활용해 결과값을 json 또는 yaml로 포맷팅해 상세 정보를 확인할 수도 있지만, 대부분의 템플릿은 너무나도 방대한 양의 정보를 담고 있어 원하는 정보를 찾기 쉽지 않습니다.

  • 디플로이먼트를 yaml 포맷으로 출력할 경우
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec
  ...
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: first-app
    spec:
      # 약 50줄 가까이의 yaml 템플릿 안에서 찾는 내용을 발견해야 합니다.
      containers:
      - image: spacesangsoo/k8s-first-app:v3
        imagePullPolicy: Always

여기서 원하는 속성만을 출력하는 좋은 방법이 있는데요, 바로 json 객체를 탐색하기 위한 표준 방법인 jsonPath를 활용하는 것입니다.

JsonPath

jsonPath 문법은 대부분의 언어에서 객체 / 구조체에 접근하는 방식과 유사합니다.

예를 들어 $.metadata.name 을 사용하면 'metadata' 속성의 자식 'name' 속성을 참조하게 되는데요, 더 다양한 조건 적용 방법은 공식 문서 를 참고해 보시면 좋을 것 같습니다.

Tip. 쿠버네티스에서는 $(루트 노드를 의미하는 지시자) 를 생략해도 됩니다.

$.metadata.name (✅)
.metadata.name (✅)
metadata.name (❌)

이제 이를 응용하면 원하는 속성만을 추출해 출력할 수 있게 됩니다.

  • 전체 yaml 포맷의 템플릿 대신 이미지 이름만을 출력하는 모습

컨테이너에서 사용중인 이미지 이름만 선택해 출력한 모습

매번 찾고자 하는 요소를 루트부터 찾아나가기 다소 까다로운 상황에서는, .. 연산자를 사용해 원하는 속성 이름만을 재귀적으로 찾아 출력할 수도 있습니다.

  • creationTimestamp 라는 속성만을 출력하는 모습

하지만 이렇게 데이터가 여럿이라 출력이 고르지 않은 상황에서는, range... end 함수와 '\n' 문자를 사용해 개행을 줄 수도 있습니다.

  • 여러 creationTimestamp 속성에 개행을 준 모습

만약 끝에 {end} 를 추가하지 않으면 개행이 되지 않은 채로 모든 요소가 한번 더 출력됩니다.

 

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆