Sergey
понял) в питон не умею
Вот там точно не сложнее, чем на Ansible кодить.
Anton
Всем привет! Из-за малого опыта попал в тупик: есть словарь из facts.d и в нем есть ansible_local.mdstat.arrays.{{ device_name }}.type , где переменная device_name в которой имя диска (например md1, я его получаю ранее по условию). Вот только когда делаю until: "ansible_local.mdstat.arrays.{{ device_name }}.type" == "raid0" получаю ошибку ERROR! Syntax Error while loading YAML. did not find expected key The offending line appears to be: delay: 300 until: "ansible_local.mdstat.arrays.{{ device_name }}.type" == "raid0" ^ here это ^ here как раз под ==
Sergey
Там некуда шаблонизатор засовывать.
Sergey
Ты не хочешь заниматься метапрограммированием под Ansible.
Anton
то есть вот так вот нельзя собрать составной путь в словаре? а как тогда можно дождаться нужного состояния в фактах?
Sergey
Anton
куда копать чтобы реализовать такое условие? мне надо дождаться значения в переменной и продолжить дальше плейбук, а ждать надо от 10 до 20 минут
Anatoliy
куда копать чтобы реализовать такое условие? мне надо дождаться значения в переменной и продолжить дальше плейбук, а ждать надо от 10 до 20 минут
а в чем необходимость делать это обязательно через ansible_facts, а например не отдельным таском, например, через shell? а факты можно собрать потом модулем setup
Андрей
А зачем собственно shell? можете тогда все на bash писать, нафиг ansible
Anton
я запускаю команду через shell shell: "/sbin/mdadm {{ drive_path }} --grow --raid-devices=2 --add /dev/{{ disk_add }}" она без ответа и начинается sync дисков. после мне надо запустить resize2fs, но надо дождаться окончания sync'a, окончание я могу узнать только тогда. когда type станет нужным
Anton
сделал не много по другому. теперь работает как хочется. Спасибо за идеи и помощь
Anton
сделал скрипт #!/usr/bin/python from pymdstat import MdStat import sys mds = MdStat() if len(sys.argv) > 1: print(mds.type(sys.argv[1])) который получает аргументом имя диска и проверяет статус рейда, закинул его на сервер и потом в плейбуке его запускаю и жду нужного ответа - name: Update raid type shell: "python /etc/ansible/facts.d/check {{ device_name }}" register: check_raid_type retries: 20 delay: 10 until: check_raid_type.stdout == 'raid0'
Alexander
Ну, собственно, это именно оно.
Anton
думал может получится обновлять факты и дождаться нужного значения.
Alexander
Я грешным делом думал, ты все делаешь в питоне, а ансибль продолжается, когда питон вернет тру.
huglester
через етот наворот
Alex
- name: Check in rabbitmq.conf ignore_errors: yes check_mode: yes lineinfile: name: rabbitmq/rabbitmq.conf line: "{{ item }}" state: present register: rabbitmq_conf loop: - cluster_keepalive_interval = 8046 - vm_memory_high_watermark.absolute = 2020MB - vm_memory_high_watermark.relative = 0.5 я что то упускаю или в режиме check_mode таск запускается от рута?
Alex
плейбук работает из под обычного пользователя
Sergey
Читай "в плейбуке нет ничего про become". Как ты понимаешь, есть вагон и мелкая тележка мест, где про become может быть.
Alex
для упрощения - там нет нигде become
Антон
для упрощения - там нет нигде become
ну так если нет ничего про become - значит и выполняться будет под пользователем, под которым ансибл логинится. и вопрос не совсем по делу - а чего не через джинжу и темплейт?
Александр
Запутался в организации плейбуков, ролей и дерева каталогов. Например есть роль nginx, которая содержит таски установки, обновления и удаления. Естественно только таски одной группы (например обновления) должны быть запущены за раз. В ролях входная точка только одна main.yml. Как правильно это дело организовать?
checkdiff
Но инсталляция и обновление по своей сути ничем отличаться не должны. А вот удаление - да, отдельный процесс.
Александр
Но инсталляция и обновление по своей сути ничем отличаться не должны. А вот удаление - да, отдельный процесс.
Установка и обновление отличаются (не путать с обновлением софта). Обновление гасит процессы. Обновляет файлы, делает резервные копии и миграции данных при необходимости. После запускает процессы
checkdiff
Установка и обновление отличаются (не путать с обновлением софта). Обновление гасит процессы. Обновляет файлы, делает резервные копии и миграции данных при необходимости. После запускает процессы
Интересное обновление :) но суть одна разделение процессов через испортив различных файлов с помощью include_tasks в роле или с помощью тегов.
Антон
ладно, не буду лезть в процесс...
Alex
а вопрос возник из-за того, что при правах 644 и владельце root, таск умудрялся таки модифицировать файл
Антон
в чекмоде или в боевом режиме?
Антон
в чекмоде
он его не меняет. он пишет что будет изменено
Антон
тогда не понимаю в чем вопрос
Sergey
в чем странность?
Ну файлы через lineinfile - обсуждали же не раз, видос мой посмотри с конфы.
Alex
вопрос был - почему в чекмоде оно меняло, хотя не должно
Sergey
а у меня что? :)
А у тебя lineinfile. Это антипаттерн Ансибла, если что, именно об этом я всегда и говорю.
Sergey
template 😊
Антон
вопрос был - почему в чекмоде оно меняло, хотя не должно
хосподя.... файл прочитался, обработка прошла - выдалось изменение. в продуктиве у тебя был бы фейл потому что прав на запись нет
Антон
когда система попыталась бы записать
Антон
а так да, юзай темплейт
Alex
я извиняюсь, а как темплйет поможет мне сравнить существующий файл на системе?
Антон
я извиняюсь, а как темплйет поможет мне сравнить существующий файл на системе?
ничем. просто ответь себе на вопрос - зачем тебе это? у тебя задача чтобы был тот конфиг, который тебе нужен - если будет расхождение с темплейтом - будет замена. нет - ничего не произойдет
Антон
приложение - это ансибл?
Alex
нет, наше приложение
Антон
.... ну я не знаю чем тебе помочь =) про чекмод рассказали вроде
Grek 🇺🇦
а тесты чего либо на ансибл это вообще норм? питон+пайтест с ассертами разве не лучше?
A
нет, задача проверить что приложение сгенерировало ожидаемый конфиг
Необязательно всегда придерживаться общепринятых паттернов, если тебе ехать, а не шашечки...
Sergey
Необязательно всегда придерживаться общепринятых паттернов, если тебе ехать, а не шашечки...
Ну тогда странно идти в чат по инструменту, где его используют в соответствии со скучными, ожидаемыми best practices & common sense patterns.
Alex
а тесты чего либо на ансибл это вообще норм? питон+пайтест с ассертами разве не лучше?
вполне удобно, я видел как эти же тесты пытались сделать на Fabric. Спасибо не надо ))
Антон
мне кажется что вам проще сделать ваш тест на баше или питоне и так же через ансибл запулить. но в целом согласен - кейс... странный
Andrey
Приветствую, господа!
Андрей
И вам не хворать
Andrey
Подскажите пожалуйста, почему ansible не может проиграть плейбук с обновлением yum в centos 8 и 7? Использую и модуль package и yum
Andrey
FAILED! => {"changed": false, "msg": "Unsupported parameters for (yum) module: upgrade Supported parameters include: allow_downgrade, autoremove, bugfix, conf_file, disable_excludes, disable_gpg_check, disable_plugin, disablerepo, download_dir, download_only, enable_plugin, enablerepo, exclude, install_repoquery, install_weak_deps, installroot, list, lock_timeout, name, releasever, security, skip_broken, state, update_cache, update_only, use_backend, validate_certs"}
Sergey
У тебя как с английским?
Andrey
Ручками dnf upgrade / yum upgrade работает
Andrey
Или это самим модулем не поддерживается?
Андрей
"msg": "Unsupported parameters for (yum) module
Андрей
вот там же написано
Andrey
Мда
Sergey
Или это самим модулем не поддерживается?
Найди здесь параметр "upgrade": https://docs.ansible.com/ansible/latest/modules/yum_module.html
Andrey
Это очень странно. Вроде это базовая штука
Andrey
Оки, спасибо за помощь
Igor
update а не upgrade