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
Там некуда шаблонизатор засовывать.
Sergey
Ты не хочешь заниматься метапрограммированием под Ansible.
Anton
то есть вот так вот нельзя собрать составной путь в словаре? а как тогда можно дождаться нужного состояния в фактах?
Sergey
Anton
куда копать чтобы реализовать такое условие? мне надо дождаться значения в переменной и продолжить дальше плейбук, а ждать надо от 10 до 20 минут
Sergey
Андрей
А зачем собственно shell? можете тогда все на bash писать, нафиг ansible
Anton
я запускаю команду через shell shell: "/sbin/mdadm {{ drive_path }} --grow --raid-devices=2 --add /dev/{{ disk_add }}"
она без ответа и начинается sync дисков. после мне надо запустить resize2fs, но надо дождаться окончания sync'a, окончание я могу узнать только тогда. когда type станет нужным
Anatoliy
Alexander
Anton
сделал не много по другому. теперь работает как хочется. Спасибо за идеи и помощь
Alexander
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
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 таск запускается от рута?
Sergey
Alex
плейбук работает из под обычного пользователя
Sergey
Читай "в плейбуке нет ничего про become". Как ты понимаешь, есть вагон и мелкая тележка мест, где про become может быть.
Alex
для упрощения - там нет нигде become
Антон
для упрощения - там нет нигде become
ну так если нет ничего про become - значит и выполняться будет под пользователем, под которым ансибл логинится. и вопрос не совсем по делу - а чего не через джинжу и темплейт?
Александр
Запутался в организации плейбуков, ролей и дерева каталогов. Например есть роль nginx, которая содержит таски установки, обновления и удаления. Естественно только таски одной группы (например обновления) должны быть запущены за раз. В ролях входная точка только одна main.yml. Как правильно это дело организовать?
checkdiff
checkdiff
Но инсталляция и обновление по своей сути ничем отличаться не должны. А вот удаление - да, отдельный процесс.
checkdiff
Gleb
Антон
Alex
Антон
ладно, не буду лезть в процесс...
Alex
а вопрос возник из-за того, что при правах 644 и владельце root, таск умудрялся таки модифицировать файл
Антон
в чекмоде или в боевом режиме?
Sergey
Alex
Alex
Антон
в чекмоде
он его не меняет. он пишет что будет изменено
Alex
Антон
тогда не понимаю в чем вопрос
Sergey
в чем странность?
Ну файлы через lineinfile - обсуждали же не раз, видос мой посмотри с конфы.
Alex
вопрос был - почему в чекмоде оно меняло, хотя не должно
Alex
Sergey
а у меня что? :)
А у тебя lineinfile. Это антипаттерн Ансибла, если что, именно об этом я всегда и говорю.
Alex
Sergey
template 😊
Антон
когда система попыталась бы записать
Антон
а так да, юзай темплейт
Alex
я извиняюсь, а как темплйет поможет мне сравнить существующий файл на системе?
Alex
Антон
приложение - это ансибл?
Alex
нет, наше приложение
Антон
.... ну я не знаю чем тебе помочь =) про чекмод рассказали вроде
Grek 🇺🇦
а тесты чего либо на ансибл это вообще норм?
питон+пайтест с ассертами разве не лучше?
Антон
мне кажется что вам проще сделать ваш тест на баше или питоне и так же через ансибл запулить. но в целом согласен - кейс... странный
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
Sergey
У тебя как с английским?
Andrey
Ручками dnf upgrade / yum upgrade работает
Andrey
Или это самим модулем не поддерживается?
Андрей
"msg": "Unsupported parameters for (yum) module
Андрей
вот там же написано
Andrey
Мда
Andrey
Это очень странно. Вроде это базовая штука
Andrey
Оки, спасибо за помощь
Igor
update а не upgrade