Возможно, условная проверка не удалась. Ошибка была ошибкой при оценке условного

#ansible

Вопрос:

Почему не удалась условная проверка ?

Мой CSV-файл:

 No.,OS,Information       
1,**Linux**,CentOS 8.3   
2,**Windows**,Windows 2016
 
 ---
- name: Test_CSV
  hosts: localhost
  gather_facts: True

  tasks:

    - read_csv:
        path: test.csv
        delimiter: ','
      register: servers

    - include_tasks: Linux.yml
      when: vm.OS == "Linux"

    - include_tasks: Windows.yml
      when: vm.OS == "Windows"

      loop: "{{ servers.list }}"
      loop_control:
        loop_var: vm
 

Linux.yml

 ---
- debug:
    msg: "OS = Linux"
 

Windows.yml

 ---
- debug:
    msg: "OS = Windows"
 

Ошибка, которую я получаю, заключается в следующем:

фатально: [localhost]: НЕ УДАЛОСЬ! => { «msg»: «Не удалось выполнить условную проверку «vm.OS = = «Linux»». Ошибка была: ошибка при оценке условного (vm.OS == должно быть в ‘/itoa/condition/20210920/Test_CSV.yml’: строка 13, столбец 7, но может быть в другом месте файла в зависимости от того, что это:nnn — include_tasks: Linux.ymln ^ здесьn» }

или есть другой способ, пожалуйста, помогите мне.

Спасибо,

Ответ №1:

Проблема в петле. Вы не можете зацикливаться на двух задачах. Вы должны определить блок (возможно, это не сработает include_tasks ).

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

Определите хосты в своем инвентаре. Добавьте системы Linux в группу «linux». Добавьте системы Windows в группу «windows». Используйте группы в качестве аргумента «хосты».

Теперь Ansible будет выполнять задачи для всех хостов.

Если вы хотите использовать свой CSV-файл в качестве инвентаризации, вам необходимо написать сценарий динамической инвентаризации.