问题描述
在使用 Ansible 的 community.aws.cloudfront_distribution
模块时,遇到了一个意外的类型错误,错误信息为:”Error validating distribution origins: ‘list’ object has no attribute ‘get'”。这个错误似乎与传递给该模块的参数 “origins” 有关。
解决方案
请注意以下操作可能因版本差异而有所不同,建议在进行操作前做好备份。
根据错误信息和讨论中提供的线索,你遇到的问题可能是一个模块内部的错误。根据回复 1 中的内容,这似乎是一个已知的 Bug,origin_ssl_protocols
参数在代码中被定义为一个列表,但在某个地方试图将其当作字典来处理,导致了错误的发生。
作为一个解决方案,你可以尝试以下方法来解决这个问题:
方案
根据讨论中的线索,可以尝试在 origin_ssl_protocols
参数下使用 items
键来定义列表元素,以避免模块内部的错误。以下是如何修改你的 origins
参数的示例:
- name: Create Cloudfront distribution for the interface and api reverse proxy
community.aws.cloudfront_distribution:
# 其他参数...
origins:
# reverse proxy for api
- id: "{{ base_domain }}"
domain_name: "{{ base_domain }}"
custom_origin_config:
http_port: 80
https_port: 443
origin_keepalive_timeout: 5
origin_protocol_policy: "https-only"
origin_read_timeout: 10
origin_ssl_protocols:
items:
- "TLSv1.2"
# s3 bucket for interface
- id: "{{ s3_bucket_www_domain_name }}"
domain_name: "{{ s3_bucket_domain_name }}"
custom_origin_config:
http_port: 80
https_port: 443
origin_keepalive_timeout: 5
origin_protocol_policy: "http-only"
origin_read_timeout: 10
origin_ssl_protocols:
items:
- "TLSv1.2"
# 其他参数...
通过将 origin_ssl_protocols
下的列表元素用 items
键包裹起来,你可以避免原来的错误。
备注
根据回复 1 中的讨论,这个问题已被确认为 Bug,并在 GitHub 上的 ansible-collections/community.aws 仓库中进行了讨论和修复。如果你想要对修复问题做出贡献,可以参考仓库中的贡献指南。
总结
遇到 community.aws.cloudfront_distribution
模块中的 “origins” 参数类型错误时,可能是模块内部的 Bug 导致的。为了解决这个问题,你可以在 origin_ssl_protocols
参数下使用 items
键来定义列表元素。此外,可以关注官方的修复进展,或者根据仓库的贡献指南来参与问题的修复。