kbks
почитаю, спасибо
kbks
что именно?
Timur
Опишите исходную задачу
kbks
есть пачка item’ов из engines.components. Каждый раз при деплое - они загружаются по новой. Задача: сравнить хеш уже загруженного с тем что в artifactory. Если хеш разный - загрузить.
Отделение Bereke Bank
на самом деле мы, вместо gitlab-ci, юзаем бамбу, так как у нас весь стек атлассиана. и дергаем AWX не через вебхуки, а через бамбу. пример: curl -v \ -H "Authorization: Bearer ${bamboo.awx_secret}" \ -H "Content-Type: application/json" \ -d '{}' \ -X POST ${bamboo.awx_url}/api/v2/projects/68/update/
еще такой вопрос. инвентори берется из проекта, проект из SCM. ручками инвентори в AWX не меняется. Если в SCM происходит удаление хоста/переменной/группы - оно удалится в awx тоже?
Michael
еще такой вопрос. инвентори берется из проекта, проект из SCM. ручками инвентори в AWX не меняется. Если в SCM происходит удаление хоста/переменной/группы - оно удалится в awx тоже?
в инвентаре надо указать сорсы, от куда его тянуть. там же можно активировать чекбокс по автоматическому апдейту инвентаря после апдейта проекта. после этого достаточно будет дернуть обновление проекта.
Отделение Bereke Bank
в инвентаре надо указать сорсы, от куда его тянуть. там же можно активировать чекбокс по автоматическому апдейту инвентаря после апдейта проекта. после этого достаточно будет дернуть обновление проекта.
проверил. указал overwrite, overwrite variables, update on project update удалил хост из инвентори, запушил, sync-и вроде прошли но когда смотришь HOSTS в AWX - удаленный хост остался 🤔
kbks
Да, не хочу тратить время на скачивание. Этих компонентов сейчас чуть больше полусотни и это несколько гигабайт. В будущем это будет увеличиваться. Какой смысл выкачивать каждый раз несколько гигов, если нужно обновить всего один компонент?
Michael
Согласен. Тогда как решение, можно сделать следующим образом: выделяете три таски в отдельный файлик update.yml: - name: get sha1 checksum stat: path: "{{ home_dir }}/repos/{{ item.id }}.zip" checksum_algorithm: sha1 with_items: - "{{ engines.components }}" register: local_sha - name: Read sha1 of defined engines on artifactory uri: url: "{{engines.url}}/{{item.group_id}}/{{item.id}}/{{item.version}}/{{item.id}}-{{item.version}}.zip.sha1" return_content: yes validate_certs: no with_items: "{{ engines.components }}" register: remote_sha - name: Download if new get_url: url: "{{engines.url}}/{{item.group_id}}/{{item.id}}/{{item.version}}/{{item.id}}-{{item.version}}.zip" dest: "/etc/{{item.id}}-{{item.version}}.zip" when: local_sha.stat.checksum != remote_sha.content а потом инклюдиде этот файл в цикле в основном плейбуке: - name: update components include_tasks: update.yml loop: "{{ engines.components }}”
Michael
не знаю, насколько рабочий сценарий, но я бы копал в эту сторону
Sergey
не знаю, насколько рабочий сценарий, но я бы копал в эту сторону
А чем всё-таки плохо пакетирование нативное?
Michael
А чем всё-таки плохо пакетирование нативное?
например, разработчикам этих компонент лениво упаковывать в rpm пакеты. проще заархивировать в zip.
Vladislav 👻
Сначало качает, потом сравнивает
kbks
“пакетирование” будет следующим шагом.
Sergey
например, разработчикам этих компонент лениво упаковывать в rpm пакеты. проще заархивировать в zip.
Всегда есть палка, чтобы стучать по затылку рзаработчиков, пока глупости не вылетят. Второй вариант - сделать более-менее универсальный шаблон для опакечивания приложений от этих мифических "разработчиков", чтобы им не было лениво.
Sergey
Третий вариант - внедрить пакетирование в процесс сборки.
Sergey
Строго говоря - да. И затылки разработчиков целые, но придётся повозиться.
Michael
коллеги, мне кажется, мы начинаем холивар)
Sergey
согласен. но когда внедряешь автоматизацию в жизненный цикл ПО с нуля, приходится некоторые вещи временно покрывать костылями.
Не всегда это гуд, чаще всего лучше пожить без костылей какое-то время. И ансибл помогает делать норм сразу 😊
Sergey
Почему - сейчас поясню.
Sergey
Дело в том, что очевидный признак неправильного использования инструмента - какие-то хреновые костыли, которые запихиваешь в таски. Таинственные преобразования, when:, set_fact, вот это вот всё обычно указывают на проблемы в процессах.
Michael
Дело в том, что очевидный признак неправильного использования инструмента - какие-то хреновые костыли, которые запихиваешь в таски. Таинственные преобразования, when:, set_fact, вот это вот всё обычно указывают на проблемы в процессах.
Тут есть еще один нюанс: никто не рассказывает как правильно использовать инструменты, и как с помощью них правильно выстраивать процессы. Тут только опыт. Но в целом я с вами согласен.
Michael
переменные group_vars/all.yml не overwrite-ятся как решаете эту проблему? 😊
Разве? А как же переменные на уровне плейбука? Как же внешние переменные, которые указываются в команде запуска?
Michael
я так и пытаюсь сделать изначально, и вот как раз с последней таской и проблемы.Не получается сравнить local_sha.stat.checksum и remote_sha.content для каждого компонента
Моя идея в том, что использовать некую сущность из трех тасок, и итерировать именно ее. Но блок итерировать нельзя, а include_tasks можно.
Отделение Bereke Bank
Разве? А как же переменные на уровне плейбука? Как же внешние переменные, которые указываются в команде запуска?
ну вот у меня прошел sync инвентори со всем, что там есть, включая group_vars/all.yml удаляю чтото из group_vars/all.yml, пушу - удаленное остается в AWX-е для любого другого group_vars/group_name.yml все overwrite-ится
Отделение Bereke Bank
Я ничего не понял)
эмм. в общем. изменения в group_vars/all.yml (переменные для всех хостов в инвентори) не синхронизируются с SCM
Отделение Bereke Bank
вы не используете group_vars/all.yml ?)
Michael
вы не используете group_vars/all.yml ?)
Используем, но никогда не просматривали их через AWX.
Отделение Bereke Bank
Блин, а там ведь написано про overwrite variables If checked, all variables for child groups and hosts will be removed and replaced by those found on the external source. Логично что all.yml не является child groups 😑
Отделение Bereke Bank
эмм. в общем. изменения в group_vars/all.yml (переменные для всех хостов в инвентори) не синхронизируются с SCM
точнее не так. они работают на добавление. на изменение/удаление нет
Отделение Bereke Bank
@tnt4brain использование group_vars/all.yml является нормальной практикой?)
Sergey
@tnt4brain использование group_vars/all.yml является нормальной практикой?)
Штатная же фишка. А почему вопрос возник, что смущает?
Отделение Bereke Bank
Штатная же фишка. А почему вопрос возник, что смущает?
ну вот AWX не хочет удалять/менять group_vars/all.yml. Добавлять добавляет Поэтому подумал, может их использование вообще не является бест практисом
Отделение Bereke Bank
не уточнил. при изменениях в SCM
Artur
у себя такое не замечаю
Sergey
ну вот AWX не хочет удалять/менять group_vars/all.yml. Добавлять добавляет Поэтому подумал, может их использование вообще не является бест практисом
Скорее, использование AWX не явялется best practice 😃 А что такое SCM? Это так обозвано то, что вообще-то VCS?
Artur
всё норм синкается и удаляется/изменяется
Отделение Bereke Bank
у себя такое не замечаю
какая версия AWX?)
Rodion
не уточнил. при изменениях в SCM
А Project после изменений обновляли в самом AWX? Cache Timeout не выставлен?
Отделение Bereke Bank
Отделение Bereke Bank
Добавляю в group_vars/all.yml переменную пуш - обновляю проект - переменная появляется в AWX меняю значение - пуш - обновляю проект - остается старое значение удаляю - пуш - обновляю проект - переменная остается
Отделение Bereke Bank
хмм у меня 9.0.1.0
Artur
значит мне пора обновиться
Отделение Bereke Bank
значит мне пора обновиться
не надо. вдруг group_vars/all сломаешь 😂
Konstantin
Приветствую всех. Есть кто использует ansible для управления сетевыми железками? В частности ACL. Интересно на сколько это целесообразно и удобно?
Отделение Bereke Bank
в общем быстрее будет продублировать group_vars/all.yml , чем разбираться что же пошло не так 😑
Alex
подскажите, а есть ли возможность обновить только одно поле в словаре? Ибо конструкция вида - name: Set rabbitmq health as failed set_fact: ha_rabbitmq_get_nodes_result: json: "" обнуляет весь словарь, а не только значение json
Sergey
Через фильтр combine.
Отделение Bereke Bank
В целом AWX збс штука. Осталось прикрутить LDAP и можно давать неграм тыкать в кнопки
Sergey
И ставится в разв проще
Отделение Bereke Bank
Для этого Rundeck сподручней
я не смог адекватную синхронизацию Rundeck и ансибл-проектов
Отделение Bereke Bank
ну это ставить раннер с шел экзекутором, давать раннеру доступ в папку рандека...
Отделение Bereke Bank
Отделение Bereke Bank
А тут просто послал POST-запрос в API. И все синхронизировалось. Кроме group_vars/all.yml 😡
Sergey
См. выше
Andrey
всем привет Хочу насписать условие сравнения when: var1 is defined "" var1 == {{ ansible_hostname }}" - name: "templates copy " template: src: "{{item.src}}" dest: "{{item.dest}}" mode: "0664" backup: yes with_items: - { src: "12312.yml", dest: "{{ dest_dir }}12312.yml" } when: - var1 is defined - var1 == "{{ ansible_hostname }}" не работает финт ушами ansible_hostname, как можно обойти?
Sergey
when: var1 is defined and var1 == ansible_hostname
when: - var1 is defined - var1 == ansible_hostname
Павел П.
В целом AWX збс штука. Осталось прикрутить LDAP и можно давать неграм тыкать в кнопки
и нотификейшн в телеграм кто что делает чтоб отменить быстро)
Отделение Bereke Bank
точно. там же вебхуки можно
Andrey
when: - var1 is defined - var1 == ansible_hostname
не канает, руками прописываю имя хоста в стравнение все работает нормально, а вот с ansible_hostname не хочет