#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-файл в качестве инвентаризации, вам необходимо написать сценарий динамической инвентаризации.