To build an integration test by using Argo, I used bash to run scripts and Jsonnet to orchestrate Argo workflow. As expected, I met a bunch of problems with them.
- problem about
base64
[default] aws_access_key_id = apple aws_secret_access_key = banana
for this text file, we can use base64
to encode it and assign to an environment variable.
export MY=`cat my.ini |base64` echo $MY|base64 -d
But it will report error ‘invalid input’:
[default] aws_access_key_id = apple aws_secret_access_keybase64: invalid input
The correct way is using -i, --ignore-garbage
:
echo $MY|base64 -di
2. problem about exit status of Bash
If a step (or a pod) in Argo workflow failed, the whole workflow will fail. That’s the behaviour we want. But if we use diff
command many times in one step, the fail (for diff
, it means two files are not the same) of one diff
will not cause the fail of the step. So I need a way to check the status of diff
command. Fortunately, it’s very easy:
diff a b || exit -1 diff c d || exit -1
3. writes multiple lines of string in Jsonnet
local test_script = ||| diff a b || exit -1 diff c d || exit -1 |||; ... args = [test_script]