使用字典的 Ansible 模板无法找到密钥
Ansible templating with dictionaries unable to find the key
我正在使用以下代码:
- name: Find cert file
ansible.builtin.find:
file_type: file
paths: /etc/ilmaotus
patterns: '*_X509.pem'
register: cert_files
- name: Set cert based facts
ansible.builtin.set_fact:
device_id: "{{ cert_files['files'] | first | attr('path') }}"
我正在从目标主机获取文件名(应该始终只有一个文件),早期部分工作正常,包括获取列表中的第一项,但我似乎无法获取值对于字典中的 'path' 属性。我可以在我的 j2 文件中访问 'device_id',但无法获取 set_fact-play.
部分的值
当我打印 devide_id 时,第一个看起来像
{'path': '/etc/myservice/mypem_X509.pem', 'mode': '0544', 'isdir': False, 'is....
所以字典里应该有key。我做错了什么但不确定是什么。
与 Jinja 中访问属性的大多数方法不同,attr()
仅检索对象属性,而不检索集合项。 .
和 []
都可以, different precedence in each case:
device_id: "{{ (cert_files['files'] | first).path }}"
device_id: "{{ (cert_files['files'] | first)['path'] }}"
您也可以在使用 first()
之前使用 map()
检索项目:
device_id: "{{ cert_files['files'] | map(attribute='path') | first }}"
我正在使用以下代码:
- name: Find cert file
ansible.builtin.find:
file_type: file
paths: /etc/ilmaotus
patterns: '*_X509.pem'
register: cert_files
- name: Set cert based facts
ansible.builtin.set_fact:
device_id: "{{ cert_files['files'] | first | attr('path') }}"
我正在从目标主机获取文件名(应该始终只有一个文件),早期部分工作正常,包括获取列表中的第一项,但我似乎无法获取值对于字典中的 'path' 属性。我可以在我的 j2 文件中访问 'device_id',但无法获取 set_fact-play.
部分的值当我打印 devide_id 时,第一个看起来像
{'path': '/etc/myservice/mypem_X509.pem', 'mode': '0544', 'isdir': False, 'is....
所以字典里应该有key。我做错了什么但不确定是什么。
与 Jinja 中访问属性的大多数方法不同,attr()
仅检索对象属性,而不检索集合项。 .
和 []
都可以, different precedence in each case:
device_id: "{{ (cert_files['files'] | first).path }}"
device_id: "{{ (cert_files['files'] | first)['path'] }}"
您也可以在使用 first()
之前使用 map()
检索项目:
device_id: "{{ cert_files['files'] | map(attribute='path') | first }}"