下面是Kubernets CronJob的定义:
apiVersion: batch/v1
kind: CronJob
metadata:
name: myCronJob
spec:
schedule: "*/1 * * * *"
failedJobsHistoryLimit: 1
successfulJobsHistoryLimit: 1
jobTemplate:
spec:
backoffLimit: 2
parallelism: 1
template:
metadata:
annotations:
linkerd.io/inject: disabled
spec:
containers:
- name: myCronJob
image: curlimages/curl:7.72.0
env:
- name: CURRENT_TIME
value: $(date +"%Y-%m-%dT%H:%M:%S.%sZ")
args:
- /bin/sh
- -ec
- "curl --request POST --header 'Content-type: application/json' -d '{\"Label\":\"myServiceBusLabel\",\"Data\":\"{\'TimeStamp\':\'$(echo $CURRENT_TIME)\'}\",\"QueueName\":\"myServiceBusQueue\"}' https://mycronjobproxy.net/api/HttpTrigger?code=mySecretCode"
restartPolicy: OnFailure
请注意,我通过环境变量向curl
传递了一个动态日期,如here所述。
但是,这会在运行时产生一个错误(从K9 s复制):
curl: (3) unmatched close brace/bracket in URL position 26:
+"%Y-%m-%dT%H:%M:%S.%sZ")}","QueueName":"myServiceBusQueue"}
^
我怀疑这可能是组合双引号和单引号以及转义字符的问题。curl
命令在macOS上本地运行良好,但在使用curlimages/curl:7.72.0
部署时就不行了。他们的行为似乎有些不同。
在macOS上,在我的本地开发机器上,我可以这样运行命令:
curl --request POST --header "Content-type: application/json" -d "{'Label':'myServiceBusLabel','Data':{'TimeStamp':'$(echo $CURRENT_TIME)'},'QueueName':'myServiceBusQueue'}" https://mycronjobproxy.net/api/HttpTrigger?code=mySecretCode
输出:
Message was successfully sent using the following params: Label = myServiceBusLabel | Data = {"TimeStamp": "2023-05-15T15:44:45.1684158285Z"} | QueueName = myServiceBusQueue%
但是当我在我的K8s CronJob YAML文件中使用该版本时,我的IDE(JetBrains Rider)说:“需要标量值。”看起来整个命令必须用双引号括起来。
如何正确引用/转义curl
命令?
2条答案
按热度按时间yizd12fk1#
JSON数据周围的内部双引号应使用反斜杠(\”)进行转义
w6lpcovy2#
我已经做了必要的改变,你的 curl 下面可以尝试一次,让我知道:
在YAML Lint中检查时,它工作正常,附上截图。你能检查一次并试着复制它吗?