Я хочу добавить несколько строк в файл (они являются ntp-серверами в /etc/ntp.conf).К сожалению, я не могу использовать шаблон по разным причинам.поэтому у меня есть переменная, например, так:
vars:
- dns:
- "{ 'region': 'syd', 'dns_servers': ['1.2.3.4', '2.3.4.5', '3.4.5.6' ] }"
- "{ 'region': 'lon', 'dns_servers': ['2.2.2.2', '3.3.3.3', '4.4.4.4' ] }"
- "{ 'region': 'ny', 'dns_servers': ['5.5.5.5', '6.6.6.6', '7.7.7.7' ] }"
- ntp:
- { 'region': 'syd', 'ntp_servers': ['syd1.pool.ntp.org','syd2.pool.ntp.org','syd2.pool.ntp.org'] }
- { 'region': 'lon', 'ntp_servers': ['lon1.pool.ntp.org','lon2.pool.ntp.org','lon2.pool.ntp.org'] }
- { 'region': 'ny', 'ntp_servers': ['ntp1.pool.ntp.org','ntp2.pool.ntp.org','ntp2.pool.ntp.org'] }
Так что там 2 списка;днс и нтп.Каждый список содержит словарь регионов -> сопоставления серверов.
Я хочу перебрать список (в данном случае список ntp), чтобы добавить строку для каждого сервера ntp по очереди.Я обнаружил параметр loop_control для конструкции цикла, которая позволяет мне устанавливать смещение в списке ntp_servers.
Вот одна попытка, которую я делаю, чтобы перебрать элементы списка в словаре:
- name: Replace ntp servers in /etc/ntp.conf
debug:
msg: "{{ item[loop_count] }}"
loop: "{{ ntp['region']['ntp_servers'] }}"
loop_control:
index_var: loop_count
when: item.region == region
(Кроме того, как вы относитесь к использованию 'i' в качестве переменной счетчика цикла?)
Я знаю, что это будет намного проще с шаблоном, и этот lineinfileантипаттерн, но я ограничен проблемами, не зависящими от меня.
Проблема, с которой я столкнулся, заключается в том, что я хочу перебирать элементы массива ntp_servers, но мой цикл перебирает словарь ntp.Я пробовал разные комбинации, но подозреваю, что я использую неправильную структуру данных - кто-нибудь может посоветовать, пожалуйста?
Спасибо