Timur
Опишите тогда картину полнее, что ли
Timur
А то так гадать можно долго
Nikolay
такое возможно, или нет?
Timur
такое возможно, или нет?
Можно. Но это задача уже не столько техническая, сколько организационная. И определяется не возможностями ансибла, а принятыми у вас процессами
Timur
Получить список всех созданных в VPC машин и их теги ансиблом можно
Timur
Посчитать их общее количество тоже можно
Timur
Дальше схема понятна?
Nikolay
Ага
cent
А с проксмоксом что?
Через работает. Проксмокс api не делает никаких проверок, поэтому если kvm что-то не смог, то об этом приходилось узнавать только дергая сам kvm. На сколько я понял, terraform должен долбить api пока не будет нужная инфраструктура, могу ошибаться. Я тогда на тех ресурсах, где крутился proxmox не мог попробовать terraform. Но это уже другая история
Nikolay
Есть что-то в этом неправильное... у меня получится json запросов будет куча. Как вообще тогда масштабируют на практике инстансы? Сразу создают _предполагаемое_ количество инстансов?
Timur
Есть что-то в этом неправильное... у меня получится json запросов будет куча. Как вообще тогда масштабируют на практике инстансы? Сразу создают _предполагаемое_ количество инстансов?
В динамическом окружении? Да, создают сразу нужное. Если нужно внести изменение, ориентируясь уже на то, что есть - dynamic inventory в помощь. Для ec2 даже специальный inventory плагин есть
Nikolay
А как точно плагин называется? Я только скрипт ec2.py находил
Timur
https://docs.ansible.com/ansible/latest/plugins/inventory/aws_ec2.html
George
если не появился за адекватное время - шлем сообщение и начинаем очистку
cent
ну, в теории в ансибл можно засунуть wait_for пока инстанс не появился
Да, так и костылял. И еще kvm подпинывал. Просто изначально казалось, что проще всего на ansible модуле это сделать, но потом количество костылей заметно выросло
Nikolay
Продолжаю мастерить франкенштейна, как убрать пустые значения из json запроса? select("defined") все равно возвращает их
Nikolay
"{{ instances|map(attribute='public_dns_name')| select("defined") | join('\n') }}"
George
т.е. это jinja specific фигня?
Nikolay
ага
Nikolay
Разобрался фильтрацией в модуле ec2
Div
Коллеги. Я возьму на себя смелость перезапусть вопросы по генерации конфигов. Есть у меня два списка вида : проекты: - проект1 - проект2 конфиг: - имя_проекта - версия_проекта как правильно взять из списка имен пректов значение чтобы затем использовать его во втором списке? что лучше использовать : нагородить условий в шаблонах или модули lineinfile / blockinfile в циклах?
Div
сгенерировать нужное количество конфигурационных файлов отличающихся названием проекта и еще парой параметров.
Div
я уже нагородил огородов с blockinfile в цикле, но тут в группе упоминали эти модули в нелестном тоне.
George
по сути тебе нужно сделать нечто виде фор каждый_проект в проектах сгенерировать конфиг - сюдаподставитьимяпроекта - какое-то еще значение ?
Div
именно
George
а зачем тут blockinfile...
George
тупо делаешь шаблон джинжевский
Div
а вот и я себя спрашиваю...
George
config.j2
George
подключаешь его в ансибле
George
и через темплейт в цикле заполняешь
George
http://www.mydailytutorials.com/ansible-template-module-examples/
Div
именно так я и начал. вы абсолютно верно описываете.
George
- hosts: loc tasks: - name: Ansible template with_items example. template: src: "{{ item.src }}" dest: "{{ item.dest }}" mode: 0777 with_items: - {src: 'ex.j2',dest: '/home/dnpjose/ex_rew1.txt'} - {src: 'ex2.j2',dest: '/home/dnpjose/ex_rew2.txt'} - {src: 'ex3.j2',dest: '/home/dnpjose/ex_rew3.txt'}
George
вот так. Только не with_items, а loop по списку проектов
Div
это собсвенно и был ответ на вопрос "как лучше"
George
ок, тогда в чем вопрос? 😊
Div
я только не совсем понимаю как заполнить значения в темплэйте
George
так они из варсов берутся
Div
у меня в варсах есть два списка как я писал выше.
George
давай более предметный пример
George
по проектам мы проитерировались положим, далее у тебя словарь должен быть, чтобы лукап сработал
Div
минуту.
Div
https://pastebin.com/raw/RjVWcVKT
Div
вот списки
George
а итоговый файл как должен выглядеть?
Div
https://pastebin.com/raw/gf7eZpa3
George
мне кажется, что второй список нафиг не нужен
Div
тут пример тэмплейта.
Div
результат в виде key=val
George
смотри
George
у тебя фактически должен быть json массив для каждого проекта
George
который будет заполнять итоговый файл
George
теоретически ты можешь пропустить те значения, который равны дефолтным
George
т.е. должен быть dict {'language'='c++', 'url'='ololo','skipDesign'='yes'}- это дефолты
George
и для каждого проекта ['project1':{},'project2':{'url':'my_speficic_url'},'project3':{'language':'java'}]
George
и тогда вопрос должен быть - как это превратить в итоговый файл
George
тем более меня удивляет, что в итоговом файле с таким темплейтом будут повторяющиеся ключи (без разбивки по разделам)
George
ну, это вопрос к итоговому формату...
George
т.е. я скорее поверю, что итоговый файл типа такого: [project_1] sonar.projectKey={{ project | regex_replace ('/\', ':')}} sonar.projectName={{ project }} sonar.projectVersion={{ value.projectVersion }} sonar.language={{ value.language }} sonar.sources={{ value.sources }} sonar.host.url={{ sonarqube_url }} sonar.sourceEncoding={{ value.sourceEncoding }} sonar.skipPackageDesign={{ value.skipPackageDesign }} sonar.skipDesign={{ value.skipDesign }} sonar.branch.name={{ value.branch_name }} [project2] sonar.projectKey={{ project | regex_replace ('/\', ':')}} sonar.projectName={{ project }} sonar.projectVersion={{ value.projectVersion }} sonar.language={{ value.language }} sonar.sources={{ value.sources }} sonar.host.url={{ sonarqube_url }} sonar.sourceEncoding={{ value.sourceEncoding }} sonar.skipPackageDesign={{ value.skipPackageDesign }} sonar.skipDesign={{ value.skipDesign }} sonar.branch.name={{ value.branch_name }}
George
то что в фигурных скобках - выкинь, там должны быть специфичные для каждого проекта значения
George
это просто не сама удачная копипаста
Div
итоговый файл как раз таки такой https://pastebin.com/raw/w52iBW6j
George
по одному на проект?
George
или общий?
Div
по одному на проект.
George
а..
George
тогда шаблок кривой
Div
верно. но я не понимаю где косяк.
George
sonar.projectKey={{ project | regex_replace ('/\', ':')}} sonar.projectName={{ project }} {% if value.projectVersion is defined %} sonar.projectVersion={{ value.projectVersion }} {% endif %} {% if value.language is defined %} sonar.language={{ value.language }} {% endif %} {% if value.sources is defined %} sonar.sources={{ value.sources }} {% endif %} sonar.host.url={{ sonarqube_url }} {% if value.sourceEncoding is defined %} sonar.sourceEncoding={{ value.sourceEncoding }} {% endif %} {% if value.skipPackageDesign is defined %} sonar.skipPackageDesign={{ value.skipPackageDesign }} {% endif %} {% if value.skipDesign is defined %} sonar.skipDesign={{ value.skipDesign }} {% endif %} {% if value.branch_name is defined %} sonar.branch.name={{ value.branch_name }} {% endif %}
George
он должен быть такой
George
без циклов фор
George
ну, я пока лишнее вырезаю
George
цикл фор у тебя должен быть в плейбуке
Div
хмм...