Introduction
Argo Workflow에서 Workflow Spec을 작성할 때 변수를 사용해야 할 때가 있습니다.
golang template language를 사용하면 변수를 표현할 수 있습니다.
하지만 작성한 변수가 올바르게 작성된 것인지 확인하기 위해서는 배포를 해보아야 알 수 있습니다.
번거로운 과정을 해결하기 위해, 간단히 테스트해 볼 수 있는 방법을 공유하고자 합니다.
Workflow Variable
공식 문서에서는 크게 두 가지 타입을 지원합니다.
- Simple
- Expression
Simple은 template language 표현에 맞게 작성했다면, 변수 이름과 일치하는 값으로 대체됩니다.
Expression은 template language 표현에 맞게 작성했다면, 작성한 식대로 계산한 뒤 대체됩니다.
1. Simple
사용하는 데 큰 어려움이 없기 때문에, 별도의 설명은 작성하지 않습니다.
문서를 보고 골라서 사용하면 됩니다.
2. Expression
변수로 다양하게 사용할 수 있도록 두 개의 라이브러리를 지원합니다.
- Expr
- Sprig
Expr는 기본 변수 타입에 대해 부족한 기능을 보완해주는 라이브러리입니다.
사칙연산, 비교 연산, 논리적 연산 기능들을 가지고 있습니다.
Sprig는 Expr보다 확장된 기능을 제공하는 라이브러리입니다.
Date, UUID 같은 타입을 추가로 제공하며, 타입 변환과 수학 함수도 제공합니다.
위 두 개의 라이브러리를 사용해서 작성한 template 코드가 올바르게 작성되었는지 확인이 필요합니다.
이를 위해 손쉽게 테스트하는 방법에 대해 기술합니다.
링크를 첨부하겠지만, 만약 안 된다면 go playground에 접속하여 코드를 복사한 뒤 사용하면 됩니다.
정보
💡
date 사용 시 주의사항
Go Playground는 임의의 코드를 실행해보는 도구이므로 보안에 문제가 생길 수 있습니다.
이러한 상황 때문에 몇 가지 장치가 되어있는데, 그중 하나가 Fake Time입니다.
시간 연산을 하면 임의의 값을 기준으로 연산하기 때문에, 현재 시간 기준과는 다른 결과가 도출됩니다.
상세한 내용은 https://go.dev/blog/playground 를 참고하십시오.
A. Sprig만 사용할 경우
https://go.dev/play/p/WabFCXYOBTy
rawString 변수에 테스트하고자 하는 template 코드를 복사해 넣고, 실행해보면 작성한 코드에 문제가 없는지 확인할 수 있습니다.
|
|
B. Expr와 Sprig를 사용할 경우
https://go.dev/play/p/xDUvkOHmbYM
code 변수에 테스트하고자 하는 template 코드를 복사해 넣고, 실행해보면 작성한 코드에 문제가 없는지 확인할 수 있습니다.
|
|
위 두 개의 예제를 사용해 테스트해보면 문법에 맞게 작성했는지와 의도한 대로 계산되었는지를 확인할 수 있습니다.
Argo Workflow를 사용하는 데 어려움이 없었으면 합니다.
정보
Helm도 golang template을 기준으로 작성하다 보니 문제가 생길 수 있습니다.
Argo Workflow에서 값이 변환되기를 기대했지만, Helm에서 변환되어버리는 것처럼 말입니다.
이럴 경우 {{{{ example }}
}}처럼 작성해주면 됩니다.
Helm에서는 바깥의 중괄호만 제거한 뒤, {{ example }}를 입력해줄 것입니다.
팀원의 테스트 사례 공유
dateInZone"20060102""JST"
는 형식에 맞지 않습니다.
예제에 UTC가 적용되어 있어서 JST나 KST도 된다고 생각했는데 실제로는 동작하지 않고 zone을 입력해야 제대로 동작합니다.
만일 허용하지 않은 zone을 입력할 시엔 기본인 UTC로 동작합니다.
dateInZone"20060102" now``"JST" (X)
dateInZone"20060102" now"Asia/Tokyo" (O)
dateModify
에서 지원하는 시간 단위는"ns", "us" (or "µs"), "ms", "s", "m", "h"
입니다. 년월일 등은 지원하지 않습니다.