ansible 将我的双引号替换为 AWS CLI 不接受的单引号



我在一个任务中有这样的代码:

shell: aws s3api put-bucket-logging --bucket {{ source_bucket_name }} --bucket-logging-status "{{ lookup("template", "bucket-log-delivery-template.json.j2") }}"

然后我有AWS抱怨参数需要用双引号括起来。在ansible运行的输出中,它表明所有内容都是单引号的。。。

我尝试过to_json过滤器,它可以转义双引号,但也不被接受。我尝试了单引号和双引号的不同组合。没有雪茄。

有什么想法吗?Regex删除斜杠也不起作用

暂时忘记Ansible,只需尝试在命令行上回显shell脚本的引用部分:

$ echo "{{ lookup("template", "bucket-log-delivery-template.json.j2") }}"
{{ lookup(template, bucket-log-delivery-template.json.j2) }}

您会注意到,输出中没有引号,因为shell使用引号将空格分隔的参数分组为单个标记。如果要在命令行中包含这些引号,则需要对这些引号进行引号引用。一种选择是将所有内容都用单引号括起来:

$ echo '"{{ lookup("template", "bucket-log-delivery-template.json.j2") }}"'
"{{ lookup("template", "bucket-log-delivery-template.json.j2") }}"

这将给我们以下可靠的任务:

- shell: aws s3api put-bucket-logging --bucket {{ source_bucket_name }} --bucket-logging-status '"{{ lookup("template", "bucket-log-delivery-template.json.j2") }}"'

你可以这样让它更容易阅读:

- shell: >-
aws s3api put-bucket-logging
--bucket {{ source_bucket_name }}
--bucket-logging-status
'"{{ lookup("template", "bucket-log-delivery-template.json.j2") }}"'

相关内容

  • 没有找到相关文章

最新更新