问题描述
正在使用Ansible的community.aws.iam_server_certificate_info
模块获取AWS EC2上服务器证书的信息,并将其注册为变量server_cert_info_result
。不幸的是,该模块返回的是一个具有高级键的JSON结构,该键是服务器证书的实际值,而不是返回一个包含{name: }的字典列表的更标准的格式。用户在playbook中有一个名为server_ssl_cert_name
的变量,其中包含证书的实际名称。用户想要获取arn
的值,以便使用Jinja2过滤器创建一个带有HTTPS监听器的应用弹性负载均衡器。用户想知道如何使用Jinja2过滤器检索arn
的值。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在Jinja2中,可以使用标准的属性访问语法来获取arn
的值。不需要特殊处理。
以下是使用Jinja2的步骤:
1. 使用ansible.builtin.debug
任务来调试Jinja2过滤器。
2. 在msg
参数中使用server_cert_info_result.ansible_module_results[server_ssl_certificate_name].arn
来获取arn
的值。
下面是一个示例任务:
- name: Debug jinja2
ansible.builtin.debug:
msg: "{{ server_cert_info_result.ansible_module_results[server_ssl_certificate_name].arn }}"
tags: list_server_certificate_info
方案2
请注意以下操作注意版本差异及修改前做好备份。
如果方案1不起作用,可以尝试使用attr
过滤器来获取arn
的值。
以下是使用Jinja2的步骤:
1. 使用ansible.builtin.debug
任务来调试Jinja2过滤器。
2. 在msg
参数中使用server_cert_info_result.ansible_module_results | attr(server_ssl_certificate_name).arn
来获取arn
的值。
下面是一个示例任务:
- name: Debug jinja2 attr filter
ansible.builtin.debug:
msg: "{{ server_cert_info_result.ansible_module_results | attr(server_ssl_certificate_name).arn }}"
tags: list_server_certificate_info
请注意,方案2中使用的attr
过滤器需要确保server_ssl_certificate_name
是一个字符串,而不是一个变量。如果server_ssl_certificate_name
是一个变量,你可以在使用attr
过滤器之前使用set_fact
任务将其转换为字符串。
以上是两种使用Jinja2过滤器获取arn
值的方法。请根据你的具体情况选择适合你的方法。