Timur
Опишите тогда картину полнее, что ли
Timur
А то так гадать можно долго
Nikolay
Nikolay
такое возможно, или нет?
Timur
такое возможно, или нет?
Можно. Но это задача уже не столько техническая, сколько организационная. И определяется не возможностями ансибла, а принятыми у вас процессами
Timur
Получить список всех созданных в VPC машин и их теги ансиблом можно
Timur
Посчитать их общее количество тоже можно
Timur
Дальше схема понятна?
Nikolay
Ага
cent
А с проксмоксом что?
Через работает. Проксмокс api не делает никаких проверок, поэтому если kvm что-то не смог, то об этом приходилось узнавать только дергая сам kvm. На сколько я понял, terraform должен долбить api пока не будет нужная инфраструктура, могу ошибаться. Я тогда на тех ресурсах, где крутился proxmox не мог попробовать terraform. Но это уже другая история
Nikolay
Есть что-то в этом неправильное... у меня получится json запросов будет куча. Как вообще тогда масштабируют на практике инстансы? Сразу создают _предполагаемое_ количество инстансов?
Nikolay
А как точно плагин называется? Я только скрипт ec2.py находил
Timur
https://docs.ansible.com/ansible/latest/plugins/inventory/aws_ec2.html
George
George
если не появился за адекватное время - шлем сообщение и начинаем очистку
Nikolay
Продолжаю мастерить франкенштейна, как убрать пустые значения из json запроса? select("defined") все равно возвращает их
George
Nikolay
"{{ instances|map(attribute='public_dns_name')| select("defined") | join('\n') }}"
George
т.е. это jinja specific фигня?
Nikolay
ага
Nikolay
Разобрался фильтрацией в модуле ec2
Div
Коллеги. Я возьму на себя смелость перезапусть вопросы по генерации конфигов.
Есть у меня два списка вида :
проекты:
- проект1
- проект2
конфиг:
- имя_проекта
- версия_проекта
как правильно взять из списка имен пректов значение чтобы затем использовать его во втором списке?
что лучше использовать : нагородить условий в шаблонах или модули lineinfile / blockinfile в циклах?
Timur
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
Div
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
хмм...