Erick
--
igi
это косяк телеги видимо, я писал два минуса
Erick
косяк...
Ждун
фича
Алексей
Есть массивная перменная которую хочу разбить на подфайлы (если возможно) Подскажите как в файловую структуру оттобразить вот такую переменную: bind_zone_domains: - name: "test.ru" ip: xx.yy.zz.ww - name: "test2.ru" ip: xx.yy.yy.zz Доменов много, у каждого домена могут различаться конфиги, в идеале хочу что то типа group_vars/ DNS-SERVER/ bind_zone_domains/ test.ru test2.ru
Алексей
Ты хочешь странного
Есть другие предложения?
Timur
Есть другие предложения?
В чем состоит изначальная задача?
Алексей
Есть bind сервер настроенный руками - перенести конфиг в ansible
Timur
И?
Алексей
есть роль https://github.com/bertvv/ansible-role-bind
Алексей
хочу для каждой зоны отдельный файл писать, а не всё в одном файле хранить - это неудобно
Sergey
Есть другие предложения?
Не хотеть странного :-) Сделать списки с префиксом, склеивать их спокойно фильтрами, выдыхать.....
Timur
хочу для каждой зоны отдельный файл писать, а не всё в одном файле хранить - это неудобно
Без проблем. Просто все это будет изначально в разные переменные ложиться, которые тебе потом нужно будет объединять в одну
Timur
Фильтр combine в помощь
Алексей
Без проблем. Просто все это будет изначально в разные переменные ложиться, которые тебе потом нужно будет объединять в одну
Ну вот как я сделал, мне выдаёт ошибку ERROR! failed to combine variables, expected dicts but got a 'dict' and a 'AnsibleSequence':
Алексей
что такое AnsibleSequence?
Timur
Извините, телепатическая связь барахлит
Timur
Не могу код просканировать
Алексей
это ансибл ругается
Timur
Не понял - на что
Алексей
Смотри, я сделал как выше файловую структуру описал. только в bind_zone_domains файликам добавил расширение .yaml - без этого расширения они не видны, сэтим расширение они вот такую ошибку дают
Алексей
Sergey
Прямо на слайде написано, КАК склеивать
Timur
я ещё не всё показал
Я догадываюсь
Timur
Но на вопрос показать больше вы не отвечаете
Алексей
в файле test.ru.yaml - name: test.ru hosts: - name: pub01 ip: 192.0.2.1 ipv6: 2001:db8::1 aliases: - ns - name: '@' ip: - 192.0.2.2 - 192.0.2.3 ipv6: - 2001:db8::2 - 2001:db8::3 aliases: - www - name: priv01 ip: 10.0.0.1
Timur
Алексей
вот я хочу для каждого элемента bind_zone_domains отдельный файл. ещё вопросы? что ещё дополнить?
Timur
Я так непонятно выражаюсь?
Алексей
код роли? Вот тут вот всё https://github.com/bertvv/ansible-role-bind
Timur
Может, это я такой тупой?
Алексей
Я не понимаю какой код ты хочешь от меня увидеть
Timur
Тот, который ты выполняешь и на котором возникает ошибка
Алексей
роль не правил всё можно там поглядеть
Timur
вот
Это не код, а просто вложенный список
Timur
На каком шаге и каком таске конкретно возникает ошибка?
Timur
https://bit.do/exhale Вот так выдыхать
Не, такая портянка из jinja - это фу, на мой взгляд
Timur
Объединение списков можно проще сделать фильтрами
Timur
Сразу при запуске
Похоже, мы говорим на разных языках
Алексей
мб
Алексей
Объединение списков можно проще сделать фильтрами
это функционал ансибля, какие фильтры? при чём тут они?
Sergey
Объединение списков можно проще сделать фильтрами
Речь о том, что списки являются значениями словарей, ключи которых названы по определённому шаблону.
Sergey
это функционал ансибля, какие фильтры? при чём тут они?
Ты складываешь список и словарь, это норм вообще?
Timur
Непонятно - зачем для этого джинджу туда пихать
Алексей
https://github.com/bertvv/ansible-role-bind/blob/master/defaults/main.yml#L6 Вот это что? Словарь или список?
Timur
Это список словарей
Алексей
ок, мы этот список словарей как можем на файлы отобразить?
Sergey
https://github.com/bertvv/ansible-role-bind/blob/master/defaults/main.yml#L6 Вот это что? Словарь или список?
Ну сам подумай. Словарь, в нём список, элементы которого - словари.
Алексей
я понял
Sergey
ок, мы этот список словарей как можем на файлы отобразить?
Я написал, как. Эстетическое чувство Тимура восстало :-)
Алексей
нет, не понял.
Timur
ок, мы этот список словарей как можем на файлы отобразить?
Да, можно. Но вы сказали, что это сделали и у вас возникли проблемы. Только как вы это сделали и в каком месте возникла проблема - вы держите в секрете
Timur
Я написал, как. Эстетическое чувство Тимура восстало :-)
Ну, я действительно не люблю jinja в коде ансибла без специальных нужд 😊
Алексей
Да, можно. Но вы сказали, что это сделали и у вас возникли проблемы. Только как вы это сделали и в каком месте возникла проблема - вы держите в секрете
По моему я уже 2 раза расписал как я это сделал. Ок, повторяю. Добавил сервер в группу DNS-SERVERS в инвентаре, в group_vars создал структуру из папок group_vars/DNS-SERVERS/bind_zone_domains/
Алексей
в папку bind_zone_domains/ положил файлик test.ru.yaml
Алексей
Запустил указанную выше роль для выполнения на сервере - получил ошибку (сразу после запуска) PLAY [all] *********************************************************************************************************************************************************************************************************************************** ERROR! failed to combine variables, expected dicts but got a 'dict' and a 'AnsibleSequence': {"bind_allow_query": ["localhost", "nic_slaves", "ext_slaves", "qrator_slaves", "internals"], "bind_zone_master_server_ip": "172.16.0.7"} [{"name": "test.ru"}, {"hostmaster_email": "hostmaster"}, {"allow_update": "none"}, {"name_servers": ["ns.nic.ru.", "ns.test.ru.", "ns8-l2.nic.ru.", "ns4-cloud.nic.ru.", "ns8-cloud.nic.ru."]}, {"hosts": [{"ip": "192.0.2.1", "ipv6": "2001:db8::1", "name": "pub01", "aliases": ["ns"]}, {"ip": ["192.0.2.2", "192.0.2.3"], "ipv6": ["2001:db8::2", "2001:db8::3"], "name": "@", "aliases": ["www"]}]}]
Алексей
содержимое test.ru.yaml - name: "test.ru" hostmaster_email: "hostmaster" allow_update: none name_servers: ['ns4-l2.nic.ru.','ns.test.ru.', 'ns8-l2.nic.ru.', 'ns4-cloud.nic.ru.', 'ns8-cloud.nic.ru.'] hosts: - name: pub01 ip: 192.0.2.1 ipv6: 2001:db8::1 aliases: - ns - name: '@' ip: - 192.0.2.2 - 192.0.2.3 ipv6: - 2001:db8::2 - 2001:db8::3 aliases: - www Вероятно дело в нём. Но я не пойму в чём именно.
Timur
c чего это?
С того. В YAML дефис испольуется для обозначения элемента списка. Нельзя его использовать в качестве названия переменной или группы
Алексей
Timur
Timur
И она автоматом заменяет дефис в именах группы на подчеркивание
Timur
Но от совсем инициативных это не спасает, как видим
Timur
Уберите дефис в имени группы и проверьте выполнение
Timur
Путь к переменным тоже поправьте соответственно
Алексей
ERROR! failed to combine variables, expected dicts but got a 'dict' and a 'AnsibleSequence': дело было не в бобине
Timur
Ну, не хотите слушать, что вам говорят - как хотите
Алексей
вопрос был как отобразить список словарей на файлы. Я чёт не догоню.