【问题标题】:How to add quotes to jq output to create a secret to kubectl secret如何在 jq 输出中添加引号以创建 kubectl secret 的秘密
【发布时间】:2019-11-07 17:29:25
【问题描述】:
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 代码以获得所需的输出?

【问题讨论】:

    标签: amazon-web-services jq kubectl


    【解决方案1】:

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

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

    输出

    'xyz123@gmail.com'='password1234'
    

    【讨论】:

    • 老兄。你摇滚。铁杆
    【解决方案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))"'
    

    【讨论】:

    • 我必须稍作修改才能获得正确的输出.... jq -r '.SecretString' | jq -r 'to_entries | .[] | "'"'"'(.key)'"'"'='"'"'(.value)'"'"'"'
    猜你喜欢
    • 2019-09-06
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多