Получение непредвиденной ошибки шаблонного типа при назначении значения set_fact с Ansible - PullRequest
0 голосов
/ 30 января 2020

Получение непредвиденной ошибки шаблонного типа при назначении значения для set_fact с Ansible

Ниже представлена ​​моя книга воспроизведения:

   - name: Load entire repository inventory
     include_vars:
       file="{{ playbook_dir }}/repository/inform/gac.yaml"
       name=user1

   - debug:
       msg: "ALERT !! File {{ user1[inventory_hostname][item.stat.path] }} has changed {{ inventory_hostname }}"
     when: item.stat.checksum != user1[inventory_hostname][item.stat.path].hash
     with_items: "{{ files_det.results }}"


   - name: Gather all files
     tags: always
     set_fact:
       msg_body: "{{ msg_body | default('') + user1[inventory_hostname][item.stat.path] + 'has changed' + inventory_hostname +'. Rollback' + '\n' }}"
     when: item.stat.checksum != user1[inventory_hostname][item.stat.path].hash
     with_items: "{{ files_det.results }}"

Я получаю ошибку с set_fact, как показано ниже:

"msg": "ALERT !! File {u'hash': u'1746f03d5741b27158b0d3a48fca8b5fa85c0c2'} has changed 10.9.9.66"


TASK [Gather all files] ***************************************************************************************************************
task path: /app/fg_test.yml:2
META: noop
fatal: [10.9.9.66]: FAILED! => {
    "msg": "Unexpected templating type error occurred on ({{ msg_body | default('') + user1[inventory_hostname][item.stat.path] + 'has changed' + [inventory_hostname] +'. Rollback' + '\n' }}): cannot concatenate 'str' and 'dict' objects"
}
META: noop

Я даже пытался

   msg_body: "{{ msg_body | default('') + user1[inventory_hostname][item.stat.path] + 'has changed' + [inventory_hostname] +'. Rollback' + '\n' }}"

, но это тоже не помогло.

Подскажите, пожалуйста, в чем проблема с моим кодом?

1 Ответ

1 голос
/ 30 января 2020

Q: "В чем проблема с моим кодом?"

A: Проблема "Cannot concatenate 'str' and 'dict' objects".

Из приведенного ниже кода видно, что user1[inventory_hostname][item.stat.path] это словарь {u'hash': u'1746f03d5741b27158b0d3a48fca8b5fa85c0c2'}

   - debug:
       msg: "ALERT !! File {{ user1[inventory_hostname][item.stat.path] }} has changed {{ inventory_hostname }}"
"msg": "ALERT !! File {u'hash': u'1746f03d5741b27158b0d3a48fca8b5fa85c0c2'} has changed 10.9.9.66"

На следующем шаге вы объедините строки с этим словарем .

msg_body: "{{ msg_body | default('') + user1[inventory_hostname][item.stat.path] + 'has changed'

Исправьте это. Замените словарь строкой. Например, используйте

user1[inventory_hostname][item.stat.path.hash]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...