ОШИБКА! Неожиданное исключение, это, вероятно, ошибка: неустранимый тип: 'AnsibleMapping' - PullRequest
0 голосов
/ 15 февраля 2020

Я пытался заставить мою первую пробную версию с шаблонами с Ansible работать, и меня останавливает это следующее исключение. Насколько я вижу, я думаю, что хорошо сохранил отступ, а также проверил файл yml. Я не знаю, где go отсюда, помогите пожалуйста! Ниже приведен файл yml, за которым следует исключение, которое я увидел после запуска playbook.


---

- name: run these tasks on the host
  hosts:
    testhost:
    testhost1: "172.16.201.163"
  vars:
    ansible_port: 22
  tasks:

    - name: Templating
      template:
        dest: /etc/my_test.conf
        owner: root
        src: my_test.j2
      become: true

Вывод из прогона

ERROR! Unexpected Exception, this is probably a bug: unhashable type: 'AnsibleMapping'
the full traceback was:

Traceback (most recent call last):
  File "/usr/local/bin/ansible-playbook", line 118, in <module>
    exit_code = cli.run()
  File "/usr/local/Cellar/ansible/2.7.9/libexec/lib/python3.7/site-packages/ansible/cli/playbook.py", line 122, in run
    results = pbex.run()
  File "/usr/local/Cellar/ansible/2.7.9/libexec/lib/python3.7/site-packages/ansible/executor/playbook_executor.py", line 106, in run
    all_vars = self._variable_manager.get_vars(play=play)
  File "/usr/local/Cellar/ansible/2.7.9/libexec/lib/python3.7/site-packages/ansible/vars/manager.py", line 185, in get_vars
    include_delegate_to=include_delegate_to,
  File "/usr/local/Cellar/ansible/2.7.9/libexec/lib/python3.7/site-packages/ansible/vars/manager.py", line 470, in _get_magic_variables
    variables['ansible_play_hosts_all'] = [x.name for x in self._inventory.get_hosts(pattern=pattern, ignore_restrictions=True)]
  File "/usr/local/Cellar/ansible/2.7.9/libexec/lib/python3.7/site-packages/ansible/inventory/manager.py", line 358, in get_hosts
    if pattern_hash not in self._hosts_patterns_cache:
TypeError: unhashable type: 'AnsibleMapping'

1 Ответ

2 голосов
/ 15 февраля 2020

В опубликованной вами пьесе есть как минимум две неправильные вещи:

  1. hosts: - это dict, но не должно быть
  2. testhost: имеет null значение

Чтение подробного руководства показывает, что hosts: должно быть строкой или list[str], но не может быть dict. Возможно, то, что вы пытаетесь выполнить, sh лучше всего достигается с помощью файла инвентаря, или динамического c модуля / скрипта инвентаря

...