我正在使用Apache气流的Helm图表并使用createUserJob
部分创建用户:
airflow:
createUserJob:
command: ~
args:
- "bash"
- "-c"
- |-
exec
airflow {{ semverCompare ">=2.0.0" .Values.airflowVersion | ternary "users create" "create_user" }} "$@"
- --
- "-r"
- "{{ .Values.webserver.defaultUser.role }}"
- "-u"
- "{{ .Values.webserver.defaultUser.username }}"
- "-e"
- "{{ .Values.webserver.defaultUser.email }}"
- "-f"
- "{{ .Values.webserver.defaultUser.firstName }}"
- "-l"
- "{{ .Values.webserver.defaultUser.lastName }}"
- "-p"
- "{{ .Values.webserver.defaultUser.password }}"
但是,如果它存在,我想在创建用户之前删除它,但是以下操作不起作用:
airflow:
createUserJob:
command: ~
args:
- "bash"
- "-c"
- |-
exec
airflow users delete --username admin ;
airflow {{ semverCompare ">=2.0.0" .Values.airflowVersion | ternary "users create" "create_user" }} "$@"
- --
- "-r"
- "{{ .Values.webserver.defaultUser.role }}"
- "-u"
- "{{ .Values.webserver.defaultUser.username }}"
- "-e"
- "{{ .Values.webserver.defaultUser.email }}"
- "-f"
- "{{ .Values.webserver.defaultUser.firstName }}"
- "-l"
- "{{ .Values.webserver.defaultUser.lastName }}"
- "-p"
- "{{ .Values.webserver.defaultUser.password }}"
是否有办法在这里运行多个命令?
去掉exec
这个词
您在这里展示的语法将bash -c 'command' args
作为主容器命令运行,其中args
是在命令中扩展为$0
、$1
、$2
等的参数列表。在命令字符串中,"$@"
展开为从$1
开始的位置参数。设置正确
在命令字符串中,exec
是一个特殊的内置实用程序:exec some_command
用some_command
替换当前shell,并且实际上结束了当前脚本。在容器上下文中,这对于控制哪个进程是主容器进程很有用,但在这个短时间脚本中,这不是特别必要的。特别是如果你要exec
一个命令,它必须是最后一个命令。
我可以将其结构为:
command:
- /bin/sh
- -c
- |-
airflow users delete --username "{{ .Values.webserver.defaultUser.username }}";
airflow users create "$@"
# (no `exec` in this command string)
- --
args:
- "-r"
- "{{ .Values.webserver.defaultUser.role }}"
- "-et"
- cetera
这里的command:
/args:
分割是人为的,但它使命令字的分割稍微清晰一些。