我在一个任务中有这样的代码:
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") }}"'