解决 Ansible community.aws.cloudfront_distribution 模块中的”origins”参数类型错误

87次阅读
没有评论

问题描述

在使用 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 键来定义列表元素。此外,可以关注官方的修复进展,或者根据仓库的贡献指南来参与问题的修复。

正文完