如何在jq输出中添加引号以创建kubectl秘密的秘密

时间:2019-11-07 17:29:25

标签: amazon-web-services jq kubectl

kubectl -n aqua123 create secret generic aquadocker1234 --from-env-file=<(
    aws secretsmanager get-secret-value --secret-id aqua_secret |
    jq -r '.SecretString' | jq -r 'to_entries | .[] | '.key' + "=" + '.value'')

jq脚本的输出为xyz123@gmail.com= password1234的形式。 Kubernates Secret不喜欢@登录输出。我想要类似'xyz123@gmail.com'= 'password1234'(带引号)的输出。

如何修改我的jq代码以获得所需的输出?

2 个答案:

答案 0 :(得分:2)

您正在使用单引号作为过滤器,但是不做任何操作来转义内部的单引号。您需要进行适当的转义以使用那些单引号。在单引号中,您必须关闭单引号,切换到双引号以添加单引号,然后再改回来。即'"'"'

... jq -r '.SecretString | to_entries[] | "'"'"'\(.key)'"'"'='"'"'\(.value)'"'"'"'

如果发现自己经常需要单引号,那么在.jq文件中定义某些功能可能会有所帮助。

def squot: "'";
def squot($val): "\(squot)\($val|gsub(squot; "\\\(squot)"))\(squot)";

有了这个,您的过滤器现在变成:

... jq -r '.SecretString | to_entries[] | "\(squot(.key))=\(squot(.value))"'

答案 1 :(得分:0)

这是jq的@sh的工作。考虑:

jq -rn '{"key": "xyz123@gmail.com", "value": "password1234"}
  | "\(.key|@sh)=\(.value|@sh)" '

输出

'xyz123@gmail.com'='password1234'