Vladislav 👻
в шаблоне стараюсь не закладывать default логику
Павел П.
Еще вопрос: в плейбуках есть поддержка регулярок или нужно с jinja знакомиться? Из строки "Version: 1:0.22.2-b9-30" хочется только "0.22.2" оставить.
Павел П.
cyber
я это решаю на уровне дефолт vars в роли и переопределение в group/host vars
Вот я тоже об этом думаю, но этими вещами занимаются разные люди , ролью я , а темплейтами разрабы
Vladislav 👻
ну так им надо же видеть, что и как можно сделать
Firestalk
version_compare в 2.5 стал просто version
Sergey
Господа изволят писать на башсибле :-D
Nklya
Tama
Добрый вечер всем! Если есть кто использует Molecule( и в частности Testinfra) для тестирования ansible ролей - прошу помочь 🙂 Мне надо выбрать и протестировать с помощью Molecule созданный не с помощью Molecule докер контейнер. (С помощью Molecule поднимается один(№1) контейнер(который изображает хост) - а затем из этого контейнера с помощью ansible через docker.sock на локалхосте поднимается второй контейнер(№2). Надо протестировать открыт ли порт в контейнере №2 с помощью Molecule)
Tama
https://gist.github.com/kobrikx/bc02a3de06093ef3719a6c8980457851
Tama
Ilya
def test_name(host):
Ilya
И далее сам тест
Tama
testinfra_hosts = [“docker://<имя нужного контейнера>”]
А где эту переменную можно прописать? в molecule/inventory ?
Ilya
Это в самом питонячем тесте пишется
Tama
или сразу в test.py
Tama
хм…Спасибо большое. Сейчас потестируем 🙂
Tama
testinfra_hosts = [“docker://<имя нужного контейнера>”]
Хм…все равно ломится в контейнер который создала Molecule
Tama
*пытается тестировать его
Nklya
дефолтное значение убрано? которое testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
Tama
в тесте?
Tama
testinfra_hosts = ['docker://openvpn'] def test_socket_listening(host): host.socket("tcp://0.0.0.0:943").is_listening assert host.socket.is_listening
Tama
Вот всё его содержимое
Tama
он тестирует все равно не тот контейнер(
Tama
А где хранится дефолтное знаечение?
Nklya
в test_default.py, который генерируется
Tama
Заработало!
Tama
ураа )
Tama
Спасибо 🙂
Womchik
а ansible тут причём?
manefesto
вот зачем грохнули то ?
manefesto
ну как зачем, вариант пройтись по всем машинка так себе вариант
manefesto
а тут прогнать плейбуком, вроде нормальный вариант
Anton
Коллеги, поделить опытом https://toster.ru/q/577748
Vladislav 👻
А в чем вопрос? Точнее в чем альтернативный ответ?
Vladislav 👻
Руками каждый хост указывать?
Anton
дописал 2 уточняющих предложения. стало понятнее?
Vladislav 👻
Все равно не вижу альтернатив
Vladislav 👻
Могу предположить только деление на прод/стейдж максимум
Anton
Все равно не вижу альтернатив
а сколько у вас серверов?
Vladislav 👻
Не считал
Artëm
ребят, можно ли каким-либо образом хранить набор переменных с одинаковыми названиями, но разными значениями в одном файле? и выбирать нужный набор в зависимости от значения другой переменной?
Artëm
вроде того, или case как вариант
Victor
вроде того, или case как вариант
Ну можно жинжу в переменной использовать, например, но тогда она одна будет.
Victor
не совсем понял
a: "{% if b %}c{% else %}d{% endif %}"
Artëm
a: "{% if b %}c{% else %}d{% endif %}"
тогда проще эти наборы по файлам распихать, слишком нечитаемая конструкция
Victor
Действительно, можно в зависимости от чего-то разные файлы с переменными инклудить
Павел П.
Добрый вечер) Перечитал документацию - Docs » Variables и Docs » Filters. Однако так и не понял общей логики. Плейбук, завожу три vars - пустые строки var1: '' var2: '' var3: '' В task1 хочу записать значение в var1, в task2 - var2 ... В task4 хочу эти var1 var2 var3 сравнить. Ход мыслей программерский: в плейбуке определяю глобальные переменные, таски - как подпрограммы, в них операции с переменными провожу. Однако внутри таска ни set_fact не могу сделать, ни значение var поменять, ни новые var завести. Где-то я думаю не так) как логику понять-поменять?
Vladislav 👻
лучше всего забыть про изменение переменных, оно либо есть в структуре зависимостей vars, либо получаете значение через register
Павел П.
получаю через register, но с лишними деталями, которые отсекать приходится
Vladislav 👻
и в чем проблема тогда, не совсем уловил
Павел П.
register = "Version: 1:3.12.3-b4-189-release" я его "укорачиваю" до "3.12.3" через regex_findall. И не смог этот результат сохранить в каку-либо темповую переменную чтоб в другом таске вызвать.
Vadim
если она нужна только для одного таска, то - debug: msg: "{{ updated_version }}" vars: updated_version: "{{ register | regex_findall(...) }}"
Павел П.
спасибо. Попробую еще раз)
Павел П.
set_fact: updated_version="{{ register | regex_findall(...) }}"
Оказывается делал так. Syntax Error while loading YAML. Этот факт внутри таска же устанавливается? - name - set_fact: ...
Sergey
ребят, можно ли каким-либо образом хранить набор переменных с одинаковыми названиями, но разными значениями в одном файле? и выбирать нужный набор в зависимости от значения другой переменной?
Jinja умеет инклюдить, а ещё умеет выполняться внутри YAMLов. Но если кто-то спросит, кто надоумил ЭТО сделать, чур, меня не упоминать. Сама постановка вопроса нехороша, поэтому и ответ..... Ну такой себе.
Artëm
Спасибо всем за советы, решил всё же разными файлами обойтись
Mik
Ребят кто подскажет как в таске для крона сгенерить рандомные минуты? тоесть рандом ограничен числами от 0 до 59
Womchik
"{{ 60 | random }} * * * * root /script/from/cron" # => '21 * * * * root /script/from/cron'
Mik
огромное спасибо
Павел П.
- name: foo set_fact: ...
Спасибо большое!!! Если разнести с shell по разным таскам то всё работает. Значение register: myvar сохраняется и между тасками)
Victor
"{{ 60 | random }} * * * * root /script/from/cron" # => '21 * * * * root /script/from/cron'
Я правильно понимаю что он будет генерить новое значение при каждом деплое? Или чем там рандом сидируется?
Mik
у меня 250 машин, мне нужно генерить серты через апи, когда в раз 250 тачек в одно время туда идут половина получает 404.
Victor
404 какой-то идеологически неверный статус
Tama
Добрый вечер!
𝔹𝕠𝕣𝕚𝕤
Ребят кто подскажет как в таске для крона сгенерить рандомные минуты? тоесть рандом ограничен числами от 0 до 59
Лучше не рандомные, а какой-то числовой хеш от хостнейма, тогда меняться не будет при каждой прокатке плейбука, но будет разным (в общем случае) для разных хостов. Я у себя использовал самописный фильтр crc32 и потом полученное значение приводил к базе в 60 минут
𝔹𝕠𝕣𝕚𝕤
Что-то вроде этого https://gist.github.com/nerzhul/ad2dc4c05d4b23132c64eb848a6be6d5