Рейтинг:0

Синтаксис Hostvar не может принимать дополнительную переменную в качестве имени хоста

флаг ph
azk

Я пытаюсь использовать дополнительные vars, чтобы установить имя хоста в переменной «hostvars», чтобы получить uuid с другого хоста. Но кажется, что не улавливает значение переменной.
Это строка запуска:

$ ansible-playbook -i ../Inventory/my_inventory --vault-id vaultfile getuuid.yml -e vmname=testhost

это сборник игр

---
- хосты: локальный
  собрать_факты: правда

  вары:
    vcenter_hostname: 'vcenter.bio.local'
    vcenter_username: 'bio.local\ansible'
    vcenter_password: !хранилище |
          $ANSIBLE_VAULT;1.1;AES256
          33376437643462306363663235353732613838623561616532383236633563663938656236643861
          3562366533306633386632356265623664396562636665360a323039396464336561383865386661
          37383766643536313639313337363263653537613238396136393581373932633166343834383162
          3735643035403631620a613666363336656634646436336336393238393866303133633265383461
          6434
    target_host: "{{ vmname }}" 
    vm_uuid: "{{ hostvars[target_host]['ansible_product_uuid'] }}"

  задачи:
    - имя: Хост печати
      отлаживать:
        сообщение: "{{ vm_uuid }}"

Это результат ошибки

ИГРАТЬ [localhost] **************************************************** ******************************************************* *************************

ЗАДАНИЕ [Сбор фактов] *************************************************** ******************************************************* *******************
хорошо: [локальный хост]

ЗАДАЧА [Хост печати] *************************************************** ******************************************************* *************************
фатальный: [localhost]: FAILED! => {"msg": "Задача включает параметр с неопределенной переменной. Ошибка: {{ hostvars[target_host]['ansible_product_uuid'] }}: 'ansible.vars.hostvars.HostVarsVars object' has no attribute ' ansible_product_uuid'\n\nПохоже, ошибка находится в '/user/getuuid.yml': строка 23, столбец 7, но может быть\nв другом месте файла в зависимости от точной синтаксической проблемы.\n\nОшибочная строка выглядит так: :\n\n задачи:\n - имя: Хост печати\n ^ здесь\n"}

ОБЗОР ИГРЫ ******************************************************* ******************************************************* *******************************
localhost: ok=1 изменено=0 недостижимо=0 не удалось=1 пропущено=0 спасено=0 проигнорировано=0
флаг in
Действительно ли ansible собирал факты для target_host? Вы не можете использовать факт для целевого хоста, если вы либо не соберете этот факт, либо у вас не включено кэширование фактов, а кеш все еще действителен. Что произойдет, если вы просто выполните `отладку` на var `hostvars[target_host]`?
azk avatar
флаг ph
azk
target_host получает дополнительную переменную «vmname», которая получает имя хоста с опцией -e, когда я запускаю playbook
azk avatar
флаг ph
azk
Сожалею. Я пытался получить значение, которое не было собрано. Спасибо за помощь!!
флаг br
Если единственным хостом является ``localhost``, то другие ``hostvars``, кроме ``hostvars.localhost``, недоступны для воспроизведения. Проверь это. Распечатать существующий факт. Отредактируйте вопрос и сделайте его [Минимальный воспроизводимый пример] (https://stackoverflow.com/help/minimal-reproducible-example). Удалите лишние переменные и код, например. 1) Удалить ``переменные vcenter_*`` 2) Удалить опции ``-i`` и ``--vault-id``. Опции не влияют на проблему. Вы все равно не предоставляете файлы.
Рейтинг:0
флаг ph
azk

ansible_product_uuid не был собран. Переменная hostvars работает нормально.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.