Рейтинг:0

Ansible - не удалось напечатать значение пользовательского факта

флаг ph
azk


Это игровая часть роли, которая общается с vmware.
Я пытаюсь установить пользовательский факт (target_vm) которые получают имя виртуальной машины.
Но когда я печатаю это значение с помощью модуля отладки, оно кажется пустым.
Похоже, что set_fact установлен правильно, потому что вывод отладки показывает {"ansible_facts": {"target_vm": "TESTVM"}.
Я также сделал задачу Fail, которая показывает, установлен ли факт target_vm или нет.

Это Playbook

- delegate_to: локальный хост
  стать: нет
  делегат_факты: да
  вары:
    vc_hostname: 'vcenter.bio.local'
    vc_username: 'bio.local\ansible'
    vc_password: "{{v_pass}}"
    vm_uuid: '4217200F-46D2-C9FD-E7FD-768D21B327E8' | ниже
  блокировать:
    - имя: Собирать только зарегистрированные виртуальные машины
      vmware_vm_info:
        имя хоста: '{{ vc_hostname }}'
        имя пользователя: '{{ vc_username }}'
        пароль: '{{ vc_password }}'
        validate_certs: Ложь
        вм_тип: вм
      делегат_к: локальный
      зарегистрироваться: виртуальная_информация
      no_log: правда

  - name: Получить имя ВМ из UUID
    set_fact:
      target_vm: "{{ my_item.guest_name }}"
    цикл: "{{ virtual_info.virtual_machines}}"
    когда: my_item.uuid == vm_uuid
    loop_control:
      loop_var: мой_элемент
    делегат_к: локальный
    делегат_факты: Истина
  
  - name: Убедитесь, что установлено имя интерфейса
    потерпеть поражение:
      msg: "Не удалось определить имя target_vm!"
    когда: target_vm не определен
  
  - имя: вывод на печать
    отлаживать:
      msg: «Имя виртуальной машины: {{ target_vm }}»


это результат

ЗАДАЧА [vmwaretaks: Получить имя ВМ по UUID] ******************************************* ****************************************************
ok: [testvm] => (item={'guest_name': 'TESTVM', 'guest_fullname': 'Red Hat Enterprise Linux 6 (64-разрядная версия)', 'power_state': 'poweredOn', 'ip_address': '192.168 .54.32', 'mac_address': ['00:32:52:97:e9:c8'], 'uuid': '4217200f-46d2-c9fd-e7fd-768d21b327e8', 'vm_network': {'00:32: 52:97:e9:c8': {'ipv4': ['192.168.54.32'], 'ipv6': ['fe80::250:56ff:fe97:d4c3']}}, 'esxi_hostname': 'b3j15esx05. bio.local', 'кластер': 'JAS-Lab-DEP', 'атрибуты': {}, 'теги': []}) => {"ansible_facts": {"target_vm": "TESTVM"}, " ansible_loop_var": "my_item", "changed": false, "my_item": {"attributes": {}, "cluster": "JAS-Lab-DEP", "esxi_hostname": "b3j15esx05.bio.local", " guest_fullname": "Red Hat Enterprise Linux 6 (64-разрядная версия)", "guest_name": "TESTVM", "ip_address": "192.168.54.32", "mac_address": ["00:32:52:97:e9: c8"], "power_state": "poweredOn", "tags": [], "uuid": "4217200f-46d2-c9fd-e7fd-768d21b327e8", "vm_network": {"00:32:52:97:e9 :c8": {"ipv4": ["192.168.54.32"], "ipv6": ["fe80::250:56ff:fe97:d4c3"]}}}}

ЗАДАЧА [vmwaretaks: проверьте, установлено ли имя интерфейса] ********************************************** *******************************************
фатальный: [testvm]: FAILED! => {"changed": false, "msg": "Не удалось определить имя target_vm!"}

ОБЗОР ИГРЫ ******************************************************* ******************************************************* ********************
testvm : ok=13 изменено=0 недостижимо=0 не удалось=1 пропущено=2 спасено=0 проигнорировано=0
Рейтинг:0
флаг th

У тебя есть делегат_факты: Истина на set_fact задача, поэтому вы устанавливаете переменную для localhost. Затем вы пытаетесь получить к нему доступ в контексте хоста воспроизведения, для которого он не установлен.

Вы должны решить, где вы хотите установить его. Если localhost правильный, вам нужно получить к нему доступ через hostvars (hostvars['localhost']['testvm']); если это не так, вам нужно удалить делегат_факты.

azk avatar
флаг ph
azk
Ты Райт @flowerysong. Я неправильно обращался к факту target_vm. Способ hostvars делает точку. Спасибо вам за инструктаж!

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

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